| | | KISTERS 3DViewStation: Mehr CAD Lizenzen durch 3D-Viewer ersetzen und Geld sparen, eine Pressemitteilung
|
Autor
|
Thema: Get Current Solid (2059 / mal gelesen)
|
roccat Mitglied Konstrukteur
Beiträge: 172 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 10. Mrz. 2016 11:56 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich versuche nachtraglich in mehreren "UserPattern" die eingetragenen Objekte (die Elemente die gepattert werden sollen) gegen den Eintrag "Current Solid" zu tauschen. (RMT => "Get Current Solid") Hat jemand eine Idee wie man an das "Current Solid" per VBA rankommt? Anbei mal ein kleiner TestCode. Dummy soll das Current Solid übergeben. Code: Option ExplicitSub CATMain() Dim MyDocument As PartDocument Dim MySelection As Selection Dim MyPart As Part Dim MyPattern As UserPattern Dim i As Integer Dim Dummy Set MyDocument = CATIA.ActiveDocument Set MyPart = MyDocument.Part Set MySelection = MyDocument.Selection MySelection.Search "((CATPrtSearch.UserPattern + CATGmoSearch.UserPattern) + CATSpdSearch.UserPattern),all" For i = 1 To MySelection.Count2 Set MyPattern = MySelection.Item2(i).Value Debug.Print MyPattern.Name Set MyPattern.ItemToCopy = Dummy 'Dummy soll das Current Solid übergeben Next End Sub
Vielen Dank. mfG Mario ------------------ Wenn das die Lösung sein soll, will ich mein Problem zurück !! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ptit.tom Mitglied CAD-Berater
Beiträge: 115 Registriert: 11.02.2005 win10, CATIA R19 bis R30
|
erstellt am: 10. Mrz. 2016 13:00 <-- editieren / zitieren --> Unities abgeben: Nur für roccat
Hallo, Ich habe mit den Makro-Recorder versucht: lässt man das Argument iShapeToCopy der Methode AddNewRectPattern bei der Erzeugung leer, wird das Current Solid genommen. In der Eigenschaft ItemToCopy erscheint ein mysteriöse Solid.1 Feature, ohne Eltern. Ich vermute, dass CATIA im Hintergrund seine eigene Suppe kocht, um das Feature Solid.1 zu generieren. Ich kenne keinen Weg, das Objekt "current Solid" aufzurufen. [Diese Nachricht wurde von ptit.tom am 10. Mrz. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
roccat Mitglied Konstrukteur
Beiträge: 172 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 10. Mrz. 2016 15:23 <-- editieren / zitieren --> Unities abgeben:
Hallo Tom, und Danke für deine Antwort. Auf das "Solid" kann man mit Code: Set Dummy = MyPart.FindObjectByName("Solid.1")
zugreifen wenn ich den Namen bzw. den Zähler des Solids nur immer wüsste. Habs mit den "InternalName" versucht, der ist's aber auch nicht. Ich habe versucht ein neues Pattern zu erzeugen, ohne ein Objekt zuzuweisen, in der Hoffnung CATIA setzt automatisch das "Current Solid" mir gelingt die Erzeugung leider noch nicht. Ich probier noch etwas... mfG Mario ------------------ Wenn das die Lösung sein soll, will ich mein Problem zurück !! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 743 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 11. Mrz. 2016 10:14 <-- editieren / zitieren --> Unities abgeben: Nur für roccat
Hallo, Kann man nicht mit/über "InWorkObject" irgendwie an das Parentobjekt rankommen? Der folgende Code liefert mir den Namen des Körpers (natürlich nur in meinem Testmodell) Hier müsste man noch eine Typenabfrage einbauen bis man das Solidobjekt hat. Sub CATMain Dim oPart As Part Dim oBody As Body Set oPart = CATIA.ActiveDocument.Part Set oBody = oPart.MainBody MsgBox oPart.InWorkObject.Parent.Parent.Name End Sub oder habe ich was falsch verstanden? Gruß Randle Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
roccat Mitglied Konstrukteur
Beiträge: 172 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 11. Mrz. 2016 13:20 <-- editieren / zitieren --> Unities abgeben:
Hallo Randle, vielen Dank für deine Antwort. Ohne es jetzt testen zu können glaube ich nicht das es so einfach ist. Ich versuch es mal zu erklären. Folgende Beispiel Struktur Body.10 I I--Hole.1 I--Hole.3 I--Userpattern.5 1. Wähle ich im Userpattern.5 das Hole.3 wird auch nur Hole.3 gepattert und ich bekomme beim Auslesen mittels ItemToCopy Hole.3 zurück. 2. Wählt man mittels RMT => "Get Current Solid" oder lässt die Auswahl frei wird alles gepattert was vor dem Userpattern.5 steht, allerdings bekommt man beim Auslesen mittels ItemToCopy "Solid.???" zurück. Momentan versuche ich ein DummyPattern anzulegen das enstandene Solid auszulesen auszulesen und im eigendlichen Pattern zu setzen. Das Funktioniert leider nur bei einem Pattern im Part, da ich aus irgendwelchen Gründen immer "Solid.1" erhalte. Ich hoffe das war einigermaßen Verständlich. Ich werde das morgen mal übers Workobject versuchen. mfG Mario ------------------ Wenn das die Lösung sein soll, will ich mein Problem zurück !! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 743 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 11. Mrz. 2016 14:20 <-- editieren / zitieren --> Unities abgeben: Nur für roccat
interessante Aufgabe. Hatte gerade mal ein wenig getestet (mit Reference, Selection, ModelElement, ShapeFactory), bislang alles ohne Erfolg. Aber viel Erfolg, bin gespannt auf die Lösung/den Workaround) Randle Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
roccat Mitglied Konstrukteur
Beiträge: 172 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 12. Mrz. 2016 11:00 <-- editieren / zitieren --> Unities abgeben:
Hallo, habe es leider nicht hinbekommen das Solid zu ermitteln. Momentan Erzeuge ich ein neues Pattern mit den Referenzen des alten und lösche das alte Pattern. Das Funktioniert soweit auch ganz gut bis auf ein Problem mit den Deaktivierten Positionen. Meine Frage dazu: Wie kann ich die deaktivierten Positionen im vorhandenen UserPattern auslesen und im neuen setzen?
Code: Option ExplicitSub CATMain() Dim MyDocument As PartDocument Dim MySelection As Selection Dim MyPart As Part Dim MyNewPattern As UserPattern Dim i As Integer Dim MyShape As Shape Dim MyBody As Body Dim MyTempObject As Object Dim MyShapefac As ShapeFactory Dim MyPatterns() As UserPattern Dim MyAnchor As Object Dim MySketch As Sketch Dim MyName As String 'Allgemeins Set MyDocument = CATIA.ActiveDocument Set MyPart = MyDocument.Part Set MyTempObject = MyPart.InWorkObject 'UserPattern suchen Set MySelection = MyDocument.Selection MySelection.Search "((CATPrtSearch.UserPattern + CATGmoSearch.UserPattern) + CATSpdSearch.UserPattern),all" ReDim MyPatterns(MySelection.Count2 - 1) For i = 1 To MySelection.Count2 Set MyPatterns(i - 1) = MySelection.Item2(i).Value Next MySelection.Clear 'UserPattern bearbeiten For i = 0 To UBound(MyPatterns) 'Referenzen holen Set MyBody = MyPatterns(i).Parent.Parent Set MyShape = MyPatterns(i).ItemToCopy Set MyAnchor = MyPatterns(i).AnchorPoint Set MySketch = MyPatterns(i).FeatureToLocatePositions.Factory2D MyName = MyPatterns(i).Name 'Altes Pattern löschen MySelection.Clear MySelection.Add MyPatterns(i) MySelection.Delete MyPart.InWorkObject = MyBody 'Neues Pattern erzeugen Set MyShapefac = MyPart.ShapeFactory Set MyNewPattern = MyShapefac.AddNewUserPattern(Nothing, 1) MyNewPattern.AddFeatureToLocatePositions MySketch MyNewPattern.AnchorPoint = MyAnchor MyNewPattern.Name = MyName 'Punkte deaktivieren ??? MyNewPattern.DesactivatePosition 2, 0 Next 'Update MyPart.InWorkObject = MyTempObject MyPart.Update End Sub
Vielen Dank mfG Mario ------------------ Wenn das die Lösung sein soll, will ich mein Problem zurück !! [Diese Nachricht wurde von roccat am 12. Mrz. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|