| |
 | CATIA V5 Grundkurs | Einsteiger - 5 Std. 15 Min 48 |
| |
 | Erfolgreich unterwegs mit der KISTERS 3DViewStation, ein Whitepaper
|
Autor
|
Thema: Einen PartBody über Scale verändern (2420 / mal gelesen)
|
4ppU Mitglied

 Beiträge: 44 Registriert: 19.04.2016 Unterschiedliche Arbeitsplätze/ Hardware. Catia V5 Microsoft Visual Basic for Applications
|
erstellt am: 21. Apr. 2016 07:22 <-- editieren / zitieren --> Unities abgeben:         
Guten Morgen alle zusammen, ich hab da mal wieder eine Frage. Eigentlich arbeite ich mit dem Buch von Ziethen, aber das liegt heute leider zuhause auf dem Schreibtisch Ich möchte ein Makro durchlaufen lassen in dem ein PartBody über Boolesche Operationen verändert wird (das hab ich schon mal) und anschließend wird dieser Body über die "Scale" Funktion verändert (das brauche ich noch). Ich wollte es jetzt mal mit dem Makro Rekorder versuchen, aber irgendwie scheint mir das zu viel zu sein.Also es funktioniert, aber brauche ich so einen langen Code? Code: Sub CATMain()Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim part1 As Part Set part1 = partDocument1.Part Dim shapeFactory1 As ShapeFactory Set shapeFactory1 = part1.ShapeFactory Dim bodies1 As Bodies Set bodies1 = part1.Bodies Dim body1 As Body Set body1 = bodies1.Item("PartBody") Dim shapes1 As Shapes Set shapes1 = body1.Shapes Dim pad1 As Pad Set pad1 = shapes1.Item("Pad.1") Dim reference1 As Reference Set reference1 = part1.CreateReferenceFromBRepName("RSur:(Face:(Brp:(Pad.1;1);None:();Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", pad1) Dim scaling21 As Scaling2 Set scaling21 = shapeFactory1.AddNewScaling2(reference1, 1.8) part1.InWorkObject = scaling21 part1.Update End Sub
Achja, der Referenzwert (hier 1,8) soll über den Benutzer eingegeben werden (Fenster mit Eingabewert), allerdings sollen nur Werte zwischen 1,05-2,00 zugelassen werde. Hat jemand Tipps ? Dafür müsste ich doch dann eine InputBox definieren und solange eine Schleife (Loop) laufen lassen, bis eine Zahl aus dem Wertebereich eingegeben wird oder ? Wie bekomme ich den eingegebenen Wert dann in die Scale Funktion?
Für jegliche Tipps, Anregungen oder bestehende Makrobauteile bin ich dankbar [Diese Nachricht wurde von 4ppU am 21. Apr. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 21. Apr. 2016 09:08 <-- editieren / zitieren --> Unities abgeben:          Nur für 4ppU
Servus Hier ein kleines Beispiel: Code: Sub CATMain()Dim partDocument1 As PartDocument Dim part1 As Part Dim shapeFactory1 As ShapeFactory Dim oMainbody As Body Dim shapes1 As Shapes Dim reference1 As Reference dim StrInput as string dim bcheck as boolean Set partDocument1 = CATIA.ActiveDocument Set part1 = partDocument1.Part Set shapeFactory1 = part1.ShapeFactory Set oMainbody = part1.Mainbody Set shapes1 = oMainbody.shapes 'Eingabe und Prüfung bcheck = false do until bcheck StrInput = InputBox("Bitte Skalierungfaktor zwischen 1,05 und 2,0 eingeben.", "Skalierungsfaktor", "1,05") 'wenn abgebrochen wurde oder nichts eingegeben wurde if StrInput = "" then MsgBox "Das Makro wir beendet." exit sub end if 'Eingabe in eine Zahl wandeln und Bereich prüfen if IsNumeric(StrInput) then if CDbl(StrInput) >= 1.05 AND CDbl(StrInput) <= 2 then bcheck = true end if end if loop Set reference1 = part1.CreateReferenceFromBRepName("RSur:(Face:(Brp:(Pad.1;1);None:();Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", pad1) Dim scaling21 As Scaling2 Set scaling21 = shapeFactory1.AddNewScaling2(reference1, CDbl(StrInput)) part1.InWorkObject = scaling21 part1.Update End Sub
Das Bilden der Referenz würde ich mir nochmal überlegen ob das so bleiben soll kann (was ist wenn das Makro in einem andern Part ausgeführt wird) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
4ppU Mitglied

 Beiträge: 44 Registriert: 19.04.2016 Unterschiedliche Arbeitsplätze/ Hardware. Catia V5 Microsoft Visual Basic for Applications
|
erstellt am: 21. Apr. 2016 10:20 <-- editieren / zitieren --> Unities abgeben:         
Hey Bernd, danke für die Antwort. Das ist doch quasi das was ich möchte. Noch ein wenig Feinschliff dann klappt das bestimmt. Besten Dank dafür Zitat: Das Bilden der Referenz würde ich mir nochmal überlegen ob das so bleiben soll kann (was ist wenn das Makro in einem andern Part ausgeführt wird)
Den Satz versteh ich nicht so ganz. Meinst du, für den Fall das ich das Makro in einem anders benannten Body anwende bzw. in einer anderen Situation? Da könnte man ja sonst evtl. noch was vorsetzen, das man sonst den Body anklicken soll, der skaliert werden soll. Aber an sich sind die Rahmenbedingungen immer die selben in meinem Anwendungsfall: Irgendein PartBody, Skalierungsfaktor zwischen 1,05-2,00 usw... Oder was meinst du ? Ach so, ist es nur möglich etwas in der Statuszeile (StatusBar) anzeigen zu lassen, wenn ein Fenster geöffnet wird ? Oder was für Kriterien gibt es da ?
Code: Set reference1 = part1.CreateReferenceFromBRepName("RSur:(Face:(Brp:(Pad.1;1);None:();Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", pad1)
Ja so bezieht er sich nur auf diesen einen Körper, ist es sinnvoll über den Index zu gehen? Oder sollte evtl. wirklich zuvor der zu skalierende Körper angeklickt werden?! [Diese Nachricht wurde von 4ppU am 21. Apr. 2016 editiert.] [Diese Nachricht wurde von 4ppU am 21. Apr. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
  
 Beiträge: 751 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 21. Apr. 2016 11:02 <-- editieren / zitieren --> Unities abgeben:          Nur für 4ppU
Hallo, also ich würde hier eine UserSelection einbauen (SelectElement2). Aus dem Ergebnis der UserSelection würde ich dann die Referenz bilden/erzeugen. Auf diese Weise wäre dein Makro unabhängig vom Modell (Aufbau, Benennungen). Das ist das worauf der Kollege bgrittmann mit seinem Satz hinaus wollte. Gruß Randle Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
4ppU Mitglied

 Beiträge: 44 Registriert: 19.04.2016 Unterschiedliche Arbeitsplätze/ Hardware. Catia V5 Microsoft Visual Basic for Applications
|
erstellt am: 22. Apr. 2016 07:22 <-- editieren / zitieren --> Unities abgeben:         
Alles klar  Zitat: also ich würde hier eine UserSelection einbauen (SelectElement2).
Dann habe ich es wohl doch richtig verstanden. Quasi erst die Abfrage welcher Body skaliert werden soll, anschließende Abfrage welcher Referenzwert gewünscht ist (von 1,05-2,00) und dann läuft das Makro durch. Top! Dankeschön! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 22. Apr. 2016 09:09 <-- editieren / zitieren --> Unities abgeben:          Nur für 4ppU
Servus Nicht ganz so. Welcher Körper skaliert wird wir über "in Work Object" bestimmt. Die Skalierung an sich benötigt noch einen Referenzpunkt/Referenzebene/Referenzfläche (so wie auch manuell) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
4ppU Mitglied

 Beiträge: 44 Registriert: 19.04.2016 Unterschiedliche Arbeitsplätze/ Hardware. Catia V5 Microsoft Visual Basic for Applications
|
erstellt am: 22. Apr. 2016 14:21 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Die Skalierung an sich benötigt noch einen Referenzpunkt/Referenzebene/Referenzfläche
Achso, peinlich... Ja gut, da nehme ich manuell meist den Punkt vom Origin Axis System, da dann auch der ganze Body skaliert wird, den würde ich dann auch nehmen. Danke für eure Bemühungen und das ihr mir so helft
[Diese Nachricht wurde von 4ppU am 22. Apr. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
4ppU Mitglied

 Beiträge: 44 Registriert: 19.04.2016 Unterschiedliche Arbeitsplätze/ Hardware. Catia V5 Microsoft Visual Basic for Applications
|
erstellt am: 09. Mai. 2016 10:58 <-- editieren / zitieren --> Unities abgeben:         
Moin Zusammen, ich habe mich zwischenzeitlich mit anderen Makros beschäftigt und nun bin ich wieder hier am probieren. Mittlerweile funktioniert das Makro nicht schlecht, aber auhc noch nicht 100%tig ^^ 1) Wenn ich einen alleinigen PartBody geöffnet habe, wird dieser nur in eine Richtung skaliert. 2) Wenn ein Part mit mehreren Bodies geöffnet habe, wird der letzte skaliert, auch wenn ich den ersten auswähle. Und warum wird das Teil verschoben bei der Skalierung ? Habt ihr mal nen Hinweis?
Code:
Sub CATMain() Dim partDocument1 As PartDocument Dim part1 As Part Dim shapeFactory1 As ShapeFactory Dim oMainbody As Body Dim shapes1 As Shapes Dim reference1 As Reference Dim StrInput As String Dim bcheck As Boolean Dim MsgBoxReturn As VbMsgBoxResult
Dim MyCatiaDocument As Document Set MyCatiaDocument = CATIA.ActiveDocument Set UserSel = MyCatiaDocument.Selection Set partDocument1 = CATIA.ActiveDocument Set part1 = partDocument1.Part Set shapeFactory1 = part1.ShapeFactory Set oMainbody = part1.MainBody Set shapes1 = oMainbody.Shapes 'USERSELECTION MsgBoxReturn = MsgBox("Wählen Sie das zu skalierende Part aus!", vbOKCancel, "Auswahl Koerper") If MsgBoxReturn = vbCancel Then MsgBox "Auswahl wurde abgebrochen." Exit Sub Else Dim InputObjectType1(1) InputObjectType1(0) = "Body" InputObjectType1(1) = "HybridBody" UserSel.Clear Dim Status Status = UserSel.SelectElement2(InputObjectType1, "Wählen Sie den zu skalierenden Koerper aus.", False) End If Dim MyBody Set MyBody = UserSel.Item(1).Value 'USERSELECTION ENDE 'Eingabe und Prüfung
bcheck = False Do Until bcheck ' Dialogfenster StrInput = InputBox("Bitte Skalierungfaktor zwischen 1,05 und 2,0 eingeben." & Chr(13) & Chr(10) & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "Hinweis:" & Chr(13) & Chr(10) & "1,05 = 5%" & Chr(13) & Chr(10) & "2,00 = 100%", "Skalierungsfaktor", "1,05") 'wenn abgebrochen wurde oder nichts eingegeben wurde If StrInput = "" Then MsgBox "Das Makro wir beendet." Exit Sub End If 'Eingabe in eine Zahl wandeln und Bereich prüfen If IsNumeric(StrInput) Then If CDbl(StrInput) >= 1.05 And CDbl(StrInput) <= 2 Then bcheck = True End If End If Loop 'Hier müsste anschließend doch der Fehler liegen, irgendwie wegen dem Face Set reference1 = part1.CreateReferenceFromBRepName("RSur:(Face:(Brp:(Pad.1;1);None:();Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", MyBody) Dim scaling21 As Scaling2 Set scaling21 = shapeFactory1.AddNewScaling2(reference1, CDbl(StrInput)) part1.InWorkObject = scaling21 part1.Update End Sub
Dankeeeee
[Diese Nachricht wurde von 4ppU am 09. Mai. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 09. Mai. 2016 15:09 <-- editieren / zitieren --> Unities abgeben:          Nur für 4ppU
Servus Um festzulegen welcher Körper skaliert wird musst du diesen mit "InWorkObject" in Bearbeitung setzen und dann erst die Skalierung erzeugen. Das Teil wird "verschoben" wenn der Referenzpunkt der Skalierung außerhalb des Teils liegt. Genau da musst du dir noch Gedanken machen wie du eine sinnvolle Referenz bildest (Userselektion, Ursprung, Schwerpunkt, ...) Gruß Bernd PS: Warum lässt du auch ein GeoSet selektieren wenn du nur einen Solid skalieren willst? ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
4ppU Mitglied

 Beiträge: 44 Registriert: 19.04.2016 Unterschiedliche Arbeitsplätze/ Hardware. Catia V5 Microsoft Visual Basic for Applications
|
erstellt am: 10. Mai. 2016 07:30 <-- editieren / zitieren --> Unities abgeben:         
Moin moin, Zitat: Um festzulegen welcher Körper skaliert wird musst du diesen mit "InWorkObject" in Bearbeitung setzen
Also reicht es nicht, nur die Userselection einzurichten, sondern man muss zusätzlich noch "Define in Work Obejct" hinzufügen, damit auch der tatsächliche Body skaliert wird. Ok. Zitat: Genau da musst du dir noch Gedanken machen wie du eine sinnvolle Referenz bildest (Userselektion, Ursprung, Schwerpunkt, ...)
Alles klar, also da ich vorher schon zu meiner Referenz eine Distanz habe, wird diese Distanz mit skaliert und das Teil verschoben? Das heißt, wenn ich die Referenz innerhalb des Teils habe, wird es nicht verschoben. Sonst habe ich ja den Punkt des Origin Axis Systems genommen, das hat immer super geklappt. Nur das muss ich jetzt quasi noch "programmieren". Aber vielleicht ist hier tatsächlich eine UserSelection sinnvoll. In der Anwendung später wird das Achsensystem immer mittig vom Teil liegen. Zitat: PS: Warum lässt du auch ein GeoSet selektieren wenn du nur einen Solid skalieren willst?
Du meinst wegen der Zeile. Code: InputObjectType1(1) = "HybridBody"
Ich verwende manchmal Makrobausteine aus Übungen oder vorhandenen Makros und dann bleibt das aus versehen stehen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
4ppU Mitglied

 Beiträge: 44 Registriert: 19.04.2016 Unterschiedliche Arbeitsplätze/ Hardware. Catia V5 Microsoft Visual Basic for Applications
|
erstellt am: 11. Mai. 2016 07:52 <-- editieren / zitieren --> Unities abgeben:         
|
4ppU Mitglied

 Beiträge: 44 Registriert: 19.04.2016 Unterschiedliche Arbeitsplätze/ Hardware. Catia V5 Microsoft Visual Basic for Applications
|
erstellt am: 06. Jun. 2016 14:47 <-- editieren / zitieren --> Unities abgeben:         
Hey Zusammen, ich wollte noch einmal diesen Thread aufleben lassen :P Ich habe eine Frage zu der Umsetzung bzw. des Umfangs eines ähnlichen Vorgangs, der durch ein Makro ausgeführt werden soll: Ich habe ein beliebiges Part, dass Quasi einem Parameter eines Materials zugeordnet werden soll, dabei wird das Part um die materialabhängigen Faktor größer. Ich habe überlegt ob es sinnvoll ist, diesen Faktor in einer Excel Tabelle zu hinterlegen. Ebenso sollen dann weitere 5-10 Materialien mit deren Kennwerten in der Excel hinterlegt sein. Über eine Inputbox kann der Anwender dann ein Material eingeben und das part wird automatisch um den dazugehörigen Wert vergrößert. Also es wird ein Materialname über eine InputBox eingegeben, der Wert wird aus der Excel-Tabelle entnommen und als Reference bei dem Scale eingesetzt. Ist das ein guter weg? Oder hat vielleicht jemand andere Anregungen? Ich habe mich hier im Forum schon einmal ein wenig schlau gemacht, über das auslesen von Werten aus Excel Tabellen und dabei ist mir aufgefallen, dass das verwenden von Excel sehr kritisch sein soll... ?! Vielen dank schon ein mal für eure Ideen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 06. Jun. 2016 15:20 <-- editieren / zitieren --> Unities abgeben:          Nur für 4ppU
Servus ggf ist es einfacher dies über eine Konstruktionstabelle zu machen. Das Skalierung und die Tabelle dann gleich in ein Startpart einzubauen oder über eine Powercopy einfügen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
4ppU Mitglied

 Beiträge: 44 Registriert: 19.04.2016 Unterschiedliche Arbeitsplätze/ Hardware. Catia V5 Microsoft Visual Basic for Applications
|
erstellt am: 07. Jun. 2016 14:24 <-- editieren / zitieren --> Unities abgeben:         
Alles klar, dann versuch ich das mal über den Weg. Ich sehe du beziehst dich auf eine Schrumpfung, ich werde es auf eine Schwindung beziehen. EDIT: Kann man denn dann trotzdem mit einer Inputbox arbeiten ? Oder wählt der User dann die entsprechenden Parameter manuell aus der Konstruktionstabelle aus ? Vielen Dank [Diese Nachricht wurde von 4ppU am 08. Jun. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 09. Jun. 2016 14:28 <-- editieren / zitieren --> Unities abgeben:          Nur für 4ppU
Servus Entweder wählt der User eine Konfiguration der DesignTable aus, oder wie in meinem Beispiel über den Parameter "Werkstoff" (String mit mehreren Werten) die Konfiguration. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
4ppU Mitglied

 Beiträge: 44 Registriert: 19.04.2016 Unterschiedliche Arbeitsplätze/ Hardware. Catia V5 Microsoft Visual Basic for Applications
|
erstellt am: 14. Jun. 2016 10:37 <-- editieren / zitieren --> Unities abgeben:         
Also wenn ich das richtig verstanden habe, kann ein User bei deinem StartPart den Parameter "Werkstoff=PPS" auswählen und anschließend wird dieser Wert für das Scalieren verwendet oder wie? Bin gerade mit dem Buch "Konstruieren mit Catia V5 - Methodik der parametrisch-assoziativen Flächenmodellierung" unterwegs und habe dort etwas zu dem Thema Parameter (User definiert usw) gefunden. Jedoch verstehe ich noch nicht richtig, wie ich das alles miteinander verknüpfen kann. Könnte ich also, zu, Beispiel fünf Parameter mit unterschiedlichen Werkstoffen erstellen und diese würden dann über die Konstruktionstabelle den Body skalieren? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 14. Jun. 2016 10:49 <-- editieren / zitieren --> Unities abgeben:          Nur für 4ppU
Servus In meinem Bespiel hat der Parameter "Werkstoff" X-Werte. In der Tabelle sind die Schwingung und der jeweilige Werkstoff angegeben. Über den gewählten Wert (Werkstoff) wird die Konfiguration der Tabelle ausgewählt und der Faktor des Skalierens gesteuert. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |