Autor
|
Thema: Kante selektieren-aber wie damit weiterarbeiten (1475 mal gelesen)
|
Sr.Herms Mitglied
Beiträge: 23 Registriert: 31.08.2006
|
erstellt am: 13. Sep. 2006 23:44 <-- editieren / zitieren --> Unities abgeben:
Ich mal wieder;-) Also, ich habe ein Makro erstellt, was ich nun leider nur unter Part läuffähig bekomme,aber das ist erstmal egal! Ich versuche innerhalb des Makros ein Kante eines Volumenteils in mehrere Punkte zu unterteilen. Also Punkte auf der Kante zu erzeugen! Für das Ganze Makro ist bislang nötig vorerst ein KAnte zu Pojezieren und eine Referenzebene auf der Oberfläche zu erstellen-damit jedoch läuft das Makro wunderbar! Nun versuche ich die beiden Schritte irgendwie zu überspringen! Es soll nun also direkt die Kante wärend laufendem Makro selektiert werden und später die Oberfläche als Referenzebene! Die Selektion klappt seit ich ____________ Was(0)="Edge" bzw Was(0)="Face" anstatt Was(0) = "HybridShape" ___________ gesetzt habe! Nun bekomme ich fehlermeldungen beim erstellen der Reference: ______________ Dim Ref as Reference Set Ref = part1.CreateReferenceFromObject(UserSel.Item(1).Value) _______________ Also habe ich versucht das mit ________________ Set Ref = part1.CreateReferenceFromName(UserSel.Item(1).Value.Name) ________________ zu lösen! Konsequenz: Er läuft über dise Zeile hinweg und bricht nun an folgender Stelle ab: _________________ Dim punktmitte Set punktmitte = hybridShapeFactory1.AddNewPointOnCurveFromDistance(Ref,Abstand,false) HB.AppendHybridShape punktmitte _________________ Damit hat er normalerweise die Punkte erstellt, geht aber nicht! Weiß jemand warum ich nicht mit der selektierten KAnte direkt weiterarbeiten kann? Woran liegt das, an der Referenz? Was kann ich ändern? Wenn ich eine beliebige Linie oder Spline zeichne läufts ja! Zum Punkt mit der Fläche komm ich dann später, wäre super wenn ichhier schon mal hilfe bekommen könnte
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proofin Mitglied Dpl.Ing
Beiträge: 208 Registriert: 24.11.2004
|
erstellt am: 14. Sep. 2006 09:47 <-- editieren / zitieren --> Unities abgeben: Nur für Sr.Herms
Hallo Sr.Herms, Ich habe mal folgendes ausprobiert: sFilter(0) = "Edge" Call oSel.SelectElement2(sFilter, "Test", False) '- Ref direkt aus der Selektion Set oRef = oSel.Item(1).Value Set oPoint = oHybFact.AddNewPointOnCurveFromDistance(oRef, 15, False) oPoint.DistanceType = 1 Set oHB = oPart.Bodies.GetItem("Hauptkörper") '- Insert anstatt Append verwenden Call oHB.InsertHybridShape(oPoint) '- InWork zum anzeigen oPart.InWorkObject = oPoint oPart.Update und das funktioniert bei mir. Gruß Proofin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sr.Herms Mitglied
Beiträge: 23 Registriert: 31.08.2006
|
erstellt am: 14. Sep. 2006 11:00 <-- editieren / zitieren --> Unities abgeben:
Danke schon mal! Allerdings habe ich vor vorhher noch die Länge zu messen und da bricht er nun ab: _______________ Dim TheSPAWorkbench As SPAWorkbench Dim TheMeasurable As Measurable Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench") Set TheMeasurable = TheSPAWorkbench.GetMeasurable(Ref) Dim dLength As Double dLength = TheMeasurable.Length ______________ Hast du dafür auch eine Lösung? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proofin Mitglied Dpl.Ing
Beiträge: 208 Registriert: 24.11.2004
|
erstellt am: 14. Sep. 2006 11:10 <-- editieren / zitieren --> Unities abgeben: Nur für Sr.Herms
|
Sr.Herms Mitglied
Beiträge: 23 Registriert: 31.08.2006
|
erstellt am: 14. Sep. 2006 11:16 <-- editieren / zitieren --> Unities abgeben:
Versucht aber ohne erfolg! Versuche ja deinen Cod einzuarbeiten, vll habe ich da den fehler: ------------- ' Auswahl festlegen ----------------------------------------------- Dim Was(1) Was(0) = "HybridShape" Was(1) = "Edge" ' Selektion definieren und leeren --------------------------------- Dim UserSel Set UserSel= CATIA.ActiveDocument.Selection UserSel.Clear ' Selektion Kante vornehmen lassen -------------------------------------- Call UserSel.SelectElement2(Was, "Bitte Linie auswählen!", false) Dim Ref Set Ref = UserSel.Item(1).value ' Länge auslesen---------- -------------------------------------- Dim TheSPAWorkbench Dim TheMeasurable Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench") Set TheMeasurable = TheSPAWorkbench.GetMeasurable(Ref) Dim dLength As Double dLength = TheMeasurable.Length -------------------- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proofin Mitglied Dpl.Ing
Beiträge: 208 Registriert: 24.11.2004
|
erstellt am: 14. Sep. 2006 11:31 <-- editieren / zitieren --> Unities abgeben: Nur für Sr.Herms
Ich sehe keinen Unterschied zu meinem Code: Dim SpaWB 'As SPAWorkbench Dim Meas 'As Measurable Call oSel.Clear sFilter(0) = "Edge" Call oSel.SelectElement2(sFilter, "Test", False) Set oRef = oSel.Item(1).Value Set SpaWB = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench") Set Meas = SpaWB.GetMeasurable(oRef) dLen = Meas.Length und bei mir funktioniert soweit alles. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
el_zetto Mitglied tech. zeichner / student
Beiträge: 2 Registriert: 10.06.2004
|
erstellt am: 14. Sep. 2006 11:31 <-- editieren / zitieren --> Unities abgeben: Nur für Sr.Herms
Hi Sr.Herms! Also an dem Code zur Linienmessung scheint es nicht zu liegen. Der läuft bei mir problemlos. Wird wahrscheinlich an der Kombination mit dem Code drumherum liegen. Ich habe mal die Erfahrung machen müssen, dass eine nicht geleerte Selection bei einem weiteren Bearbeitungsversuch zum Ausstieg geführt hat (nur eine Selection pro Dokument und vor neuem Befüllen leeren). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sr.Herms Mitglied
Beiträge: 23 Registriert: 31.08.2006
|
erstellt am: 14. Sep. 2006 12:02 <-- editieren / zitieren --> Unities abgeben:
EDIT: aktueller Code siehe unten ------------------------ das ist der code mit dem ich beim wählen einer vorher projezierten Kante und eine vorab erstellten Referenzeben arbeite! Das soll nun einfach über auswählen der Kante und der Fläche funktionieren! Ich weiß das man viel dinge bestimmt einfacher lösen kann,aber das ganze ist meine erste makro erfahrung und dafür bin ich schon begeistert das es funktioniert [Diese Nachricht wurde von Sr.Herms am 14. Sep. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proofin Mitglied Dpl.Ing
Beiträge: 208 Registriert: 24.11.2004
|
erstellt am: 14. Sep. 2006 13:20 <-- editieren / zitieren --> Unities abgeben: Nur für Sr.Herms
Ich habe deinen Code mal bei mir ausprobiert und etwas verändert: was du nicht machen solltes ist 2 Selektion anlegen, immer nur eine und diese immer wieder leeren. Ich persönlich würde in einer Schleife keine Variablen deklarieren, immer vor der Schleife. Sub CATMain() Dim partDocument1 As Document Set partDocument1 = CATIA.ActiveDocument Dim part1 As Part Set part1 = partDocument1.Part Dim hybridShapeFactory1 As Factory Set hybridShapeFactory1 = part1.HybridShapeFactory Dim HB As HybridBody Set HB = part1.HybridBodies.Item(1) ' Auswahl festlegen ----------------------------------------------- Dim Was(0) Was(0) = "Edge" ' Selektion definieren und leeren --------------------------------- Dim UserSel 'As Selection Set UserSel = CATIA.ActiveDocument.Selection UserSel.Clear ' Selektion Kante vornehmen lassen -------------------------------------- Dim E 'As CATBSTR E = UserSel.SelectElement2(Was, "Bitte Linie auswählen!", True) If E = "Normal" Then 'MsgBox(UserSel.Item(1).Value.Name & " wurde ausgewählt!") '--------------------------------Anzeige der Selektion Else MsgBox ("Abbruch") Exit Sub End If
Dim Ref As Reference 'Set Ref = part1.CreateReferenceFromObject(UserSel.Item(1).Value) Set Ref = UserSel.Item(1).Value ' Länge auslesen---------- -------------------------------------- Dim TheSPAWorkbench As SPAWorkbench Dim TheMeasurable As Measurable Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench") Set TheMeasurable = TheSPAWorkbench.GetMeasurable(Ref) Dim dLength As Double dLength = TheMeasurable.Length 'msgbox ("Die Länge der gewählten Kante beträgt " & dLength & "mm") '----------------------------------------------------------------------------------------Anzeige der Länge ' Abstand und Anzahl bestimmen---------------------------------- Dim Abstand Abstand = 2 'Abstand = inputbox("Bitte Abstand der Kreise eingeben!") '--------------------------------Abfrage für manuelle Eingabe des Abstandes Dim Anzahl, Anzahl2 ' Double Zahl wird auf Int runter gebruchen Anzahl = Int(div(dLength, Abstand)) 'Anzahl2 = Round(Anzahl, 0) 'msgbox ("Es werden " & Anzahl2 & " Punkte erzeugt" &Chr (13) &Chr(10) &Chr (13) &Chr(10) &"Im nächsten Schritt bitte die Referencebene wähle" &Chr (13) &Chr(10) &"in der die Schweissnaht erstellt werden soll") ' Selektion Fläche definieren und leeren --------------------------------- ' !!! ' Auf jeden Fall vermeiden -> Nur eine Selektion pro Makro!!! ' !!! 'Dim UserSel2 As Selection 'Set UserSel2 = CATIA.ActiveDocument.Selection UserSel.Clear Was(0) = "Face" ' Selektion vornehmen lassen -------------------------------------- Dim F 'As CATBSTR F = UserSel.SelectElement2(Was, "Bitte Fläche auswählen!", True) Dim Ref2 As Reference 'Set Ref2 = part1.CreateReferenceFromObject(UserSel2.Item(1).Value) Set Ref2 = UserSel.Item(1).Value ' Selektion freigeben -------------------------------------------- ' UserSel.EndSelectElement2 UserSel.Clear ' UserSel2.EndSelectElement ' UserSel2.Clear ' Radius--------------------------------------------------------- Dim radius As Integer radius = 2 ' Punkte erzeugen -------------------------------------------- ' Dim Abstand2 As Integer ' Abstand2 = Abstand ' Abstand = 0 Dim Z As Integer Dim Kreis Dim punktmitte Dim senkrechte As HybridShapeLineAngle ' Wichtig keine Dim in einer Schleife For Z = 1 To Anzahl - 1 Step 1 ' Step kann man schreiben bei 1 ist es nicht notwendig da Standard Set punktmitte = hybridShapeFactory1.AddNewPointOnCurveFromDistance(Ref, Abstand * Z, False) ' Invertieren mittel Schalter true/false HB.AppendHybridShape punktmitte 'Ausrichtung erzeugen------------------------------------------ Set senkrechte = hybridShapeFactory1.AddNewLineAngle(Ref, Ref2, punktmitte, True, radius, -radius, 90, 1) HB.AppendHybridShape senkrechte 'startpunkt erzeugen------------------------------------------ Set startpunkt = hybridShapeFactory1.AddNewPointOnCurveFromPercent(senkrechte, 0#, False) HB.AppendHybridShape startpunkt 'endpunkt erzeugen------------------------------------------ Set endpunkt = hybridShapeFactory1.AddNewPointOnCurveFromPercent(senkrechte, 0#, True) HB.AppendHybridShape endpunkt 'Kreise erzeugen---------------------------------------------- Set Kreis = hybridShapeFactory1.AddNewCircle2PointsRad(startpunkt, endpunkt, Ref2, True, radius, 1) HB.AppendHybridShape Kreis Abstand = Abstand + Abstand2 part1.Update Next part1.Update End Sub
Function div(I, II) As Integer div = I / II End Function Läuft bei mir durch und erstellt die Kreise. Ich habe die Punkte und Linie auch anlegen lassen, kannst ja wieder auskommentieren.
Was mir aufgefallen ist, das der Endpunkt deiner Line der gleiche Punkt ist wie dein Mittelpunkt. Ist das so gewollt?? [Diese Nachricht wurde von Proofin am 14. Sep. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sr.Herms Mitglied
Beiträge: 23 Registriert: 31.08.2006
|
erstellt am: 14. Sep. 2006 13:40 <-- editieren / zitieren --> Unities abgeben:
Erstmal Dake das du dir die ganze mühe gemacht hast! Bei mir bricht der immer noch bei der Längenberechnung ab, ich weiß nicht warum!!!!!! Zum Endpunkt! Ich wollte auf der Senkrechten die beiden endpunkte habe um somit die beiden punkte für den Kreis zu bekommen! dachte ich könnte mit true oder false bestimmen, welchen endpunkt ich haben will! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proofin Mitglied Dpl.Ing
Beiträge: 208 Registriert: 24.11.2004
|
erstellt am: 14. Sep. 2006 13:45 <-- editieren / zitieren --> Unities abgeben: Nur für Sr.Herms
|
Sr.Herms Mitglied
Beiträge: 23 Registriert: 31.08.2006
|
erstellt am: 14. Sep. 2006 13:59 <-- editieren / zitieren --> Unities abgeben:
müsste V15 R14 mit SP4 sein Konnte mit deinem Code schon mal was anpassen! und zwar hat er bei einem Bauteil zwar die oberfläche gewählt, aber die halbkreise bei der Kante bei mir abgebrochen,sprich die kreise waren nur auf der oberfläche des bauteils und nicht darüber hinweg! Habe eine ReferenceEbene durch das makro erstellen lassen und diese dann genutzt, jetzt gehts so wie ich das haben will, dank deiner vorarbeit! wenn ich jetzt noch das problem mit der Längenmessung in den griff bekomme, dann bin ich fertig! hoffe Dir oder jemandem anderen fällt noch was ein:-) hier deer aktuelle Code: Sub CATMain() Dim partDocument1 As Document Set partDocument1 = CATIA.ActiveDocument Dim part1 As Part Set part1 = partDocument1.Part Dim hybridShapeFactory1 As Factory Set hybridShapeFactory1 = part1.HybridShapeFactory Dim HB As HybridBody Set HB = part1.HybridBodies.Item(1) ' Auswahl festlegen ----------------------------------------------- Dim Was(1) Was(1) = "HybridShape" Was(0) = "Edge" ' Selektion definieren und leeren --------------------------------- Dim UserSel 'As Selection Set UserSel = CATIA.ActiveDocument.Selection UserSel.Clear ' Selektion Kante vornehmen lassen -------------------------------------- Dim E 'As CATBSTR E = UserSel.SelectElement2(Was, "Bitte Linie auswählen!", True) If E = "Normal" Then 'MsgBox(UserSel.Item(1).Value.Name & " wurde ausgewählt!") '--------------------------------Anzeige der Selektion Else MsgBox ("Abbruch") Exit Sub End If
Dim Ref As Reference Set Ref = UserSel.Item(1).Value ' Länge auslesen---------- -------------------------------------- Dim TheSPAWorkbench As SPAWorkbench Dim TheMeasurable Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench") Set TheMeasurable = TheSPAWorkbench.GetMeasurable(Ref) Dim dLength As Double dLength = TheMeasurable.Length 'msgbox ("Die Länge der gewählten Kante beträgt " & dLength & "mm") '----------------------------------------------------------------------------------------Anzeige der Länge ' Abstand und Anzahl bestimmen---------------------------------- Dim Abstand Abstand = 2 'Abstand = inputbox("Bitte Abstand der Kreise eingeben!") '--------------------------------Abfrage für manuelle Eingabe des Abstandes Dim Anzahl, Anzahl2 ' Double Zahl wird auf Int runter gebruchen Anzahl = Int(div(dLength, Abstand)) 'msgbox ("Es werden " & Anzahl2 & " Punkte erzeugt" &Chr (13) &Chr(10) &Chr (13) &Chr(10) &"Im nächsten Schritt bitte die Referencebene wähle" &Chr (13) &Chr(10) &"in der die Schweissnaht erstellt werden soll") 'Dim UserSel2 As Selection UserSel.Clear Was(0) = "Face" ' Selektion vornehmen lassen -------------------------------------- Dim F 'As CATBSTR F = UserSel.SelectElement2(Was, "Bitte Fläche auswählen!", True) ' Referenzfläche erstellen -------------------------------------- Dim Ref1,Ref2 As Reference Set Ref2 = hybridShapeFactory1.AddNewPlaneOffset(UserSel.Item(1).Value, 0.000000, True) ' Selektion freigeben -------------------------------------------- UserSel.Clear ' Radius--------------------------------------------------------- Dim radius As Integer radius = 2 ' Punkte erzeugen -------------------------------------------- Dim Z As Integer Dim Kreis Dim punktmitte Dim senkrechte As HybridShapeLineAngle For Z = 1 To Anzahl - 1 Step 1 ' Step kann man schreiben bei 1 ist es nicht notwendig da Standard Set punktmitte = hybridShapeFactory1.AddNewPointOnCurveFromDistance(Ref, Abstand * Z, False) ' Invertieren mittel Schalter true/false 'HB.AppendHybridShape punktmitte 'Ausrichtung erzeugen------------------------------------------ Set senkrechte = hybridShapeFactory1.AddNewLineAngle(Ref, Ref2, punktmitte, True, radius, -radius, 90, 1) 'HB.AppendHybridShape senkrechte 'startpunkt erzeugen------------------------------------------ Set startpunkt = hybridShapeFactory1.AddNewPointOnCurveFromPercent(senkrechte, 0, False) 'HB.AppendHybridShape startpunkt 'endpunkt erzeugen------------------------------------------ Set endpunkt = hybridShapeFactory1.AddNewPointOnCurveFromPercent(senkrechte, 0, True) 'HB.AppendHybridShape endpunkt 'Kreise erzeugen---------------------------------------------- Set Kreis = hybridShapeFactory1.AddNewCircle2PointsRad(startpunkt, endpunkt, Ref2, True, radius, 1) HB.AppendHybridShape Kreis Abstand = Abstand + Abstand2 Next part1.Update part1.Update End Sub
Function div(I, II) As Integer div = I / II End Function [Diese Nachricht wurde von Sr.Herms am 14. Sep. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proofin Mitglied Dpl.Ing
Beiträge: 208 Registriert: 24.11.2004
|
erstellt am: 14. Sep. 2006 14:09 <-- editieren / zitieren --> Unities abgeben: Nur für Sr.Herms
|
Sr.Herms Mitglied
Beiträge: 23 Registriert: 31.08.2006
|
erstellt am: 14. Sep. 2006 14:11 <-- editieren / zitieren --> Unities abgeben:
|
Proofin Mitglied Dpl.Ing
Beiträge: 208 Registriert: 24.11.2004
|
erstellt am: 14. Sep. 2006 14:15 <-- editieren / zitieren --> Unities abgeben: Nur für Sr.Herms
Was für eine Kante hast selektiert? Weil in deiner Version steht noch HybridShape als Filter für die Selektion drin! Kannst du das Part mal anhängen, wenn es nicht zu groß ist? [Diese Nachricht wurde von Proofin am 14. Sep. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sr.Herms Mitglied
Beiträge: 23 Registriert: 31.08.2006
|
erstellt am: 14. Sep. 2006 14:23 <-- editieren / zitieren --> Unities abgeben:
Das mit dem Filter habe ich nur gemacht falls man das nicht auf der ganze kante anwenden will sonder evtl doch ein teil nachzeichnet oder sowas! hast du ne mailadresse oder so? dann schick ich dir das, oder ist dir lieber das hier zu machen, kann ich auch verstehen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proofin Mitglied Dpl.Ing
Beiträge: 208 Registriert: 24.11.2004
|
erstellt am: 14. Sep. 2006 14:27 <-- editieren / zitieren --> Unities abgeben: Nur für Sr.Herms
|
Sr.Herms Mitglied
Beiträge: 23 Registriert: 31.08.2006
|
erstellt am: 14. Sep. 2006 14:34 <-- editieren / zitieren --> Unities abgeben:
|
Proofin Mitglied Dpl.Ing
Beiträge: 208 Registriert: 24.11.2004
|
erstellt am: 14. Sep. 2006 14:40 <-- editieren / zitieren --> Unities abgeben: Nur für Sr.Herms
Kein Problem gibt es eine Zeitliche Beschränkung bis wann du es zum laufen bringen muß? Da ich im Moment mit R16 arbeite,kann ich es in den nächsten Tagen auch auf einem anderen Rechner mit R14 aus probieren. Was vieleicht noch wichtig wär als was soll das ganze laufen Skript, VB, VBA? [Diese Nachricht wurde von Proofin am 14. Sep. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sr.Herms Mitglied
Beiträge: 23 Registriert: 31.08.2006
|
erstellt am: 14. Sep. 2006 14:51 <-- editieren / zitieren --> Unities abgeben:
eigentlich nicht!habe so oder so vor erst in ca 1,5wochen fortschritte zu präsentieren! muß eh noch ne menge anderer ding machen und hatte extra mehr zeit eingeplant! bin ja froh wenn mir geholfen wird! Dank dir auf jedenfall für alles bislang! wenn du noch nen vorschlag bezüglich product->part hast, was ich in der mail beschrieben habe und du unglaublich viel lust darauf hast, lass dich nicht aufhalten;-) VB oder VBA???? da fragst mich was-hauptsache läuft,sagen wir so;-) [Diese Nachricht wurde von Sr.Herms am 14. Sep. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proofin Mitglied Dpl.Ing
Beiträge: 208 Registriert: 24.11.2004
|
erstellt am: 18. Sep. 2006 10:22 <-- editieren / zitieren --> Unities abgeben: Nur für Sr.Herms
|