| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. |
| |
 | Dassault PLM Integrationen mit der 3DViewStation, eine Pressemitteilung
|
Autor
|
Thema: Makro für CurveSmooth (1618 mal gelesen)
|
F.lix Mitglied Student

 Beiträge: 15 Registriert: 10.10.2014
|
erstellt am: 29. Okt. 2014 17:27 <-- editieren / zitieren --> Unities abgeben:         
Hallo an alle, ich würde gerne selektierte Kurven automatisch mit dem Marko smoothen lassen (mit den gleichen Parametern). Ich habe schon ein mal ein bisschen rumgebastelt und mit mit dem Makrorekorder und begrenztem Makrowissen zu folgendem Ergebnis gekommen: Code: Sub CATMain() Dim mySelection as Selection Set mySelection = Catia.ActiveDocument.Selection Dim AnzahlSelekt as integer AnzahlSelekt = mySelection.count ' Gibt an wieviele Elemente selektiert wurden
Dim I as integer Dim oSelElem as Object Dim reference1 As Reference Dim hybridShapeCurveSmooth1 As HybridShapeCurveSmooth dim HybShapeFac As Factory Set Part1 = CATIA.ActiveDocument.Part ' aktives part holen Set partDocument1 = CATIA.ActiveDocument Set HybShapeFac = Part1.HybridShapeFactory 'factory zu erstellen der Punkte For I = 1 to AnzahlSelekt Set oSelElem = mySelection.Item(I) Set hybridShapeCurveSmooth1 = HybShapeFac.AddNewCurveSmooth(oSelElem) hybridShapeCurveSmooth1.SetTangencyThreshold 0.500000 hybridShapeCurveSmooth1.CurvatureThresholdActivity = False hybridShapeCurveSmooth1.MaximumDeviationActivity = True hybridShapeCurveSmooth1.SetMaximumDeviation 0.010000 hybridShapeCurveSmooth1.TopologySimplificationActivity = True hybridShapeCurveSmooth1.CorrectionMode = 3 Next part1.Update End Sub
In der Zeile "Set hybridShapeCurveSmooth1 = HybShapeFac.AddNewCurveSmooth(oSelElem)" kommt die Fehlermeldung . Kann mir jemand begabteres vielleicht weiterhelfen? Danke 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: 29. Okt. 2014 17:34 <-- editieren / zitieren --> Unities abgeben:          Nur für F.lix
Servus Probiere mal das selektierte Element zu übergeben: Code: Set oSelElem = mySelection.Item2(I).Value
oder eine Referenz des selektierten Elements zu übergeben: Code: Set oSelElem = mySelection.Item2(I).Reference
ggf musst du die Referenz zB über CreateReferenceFromObject erzeugen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
F.lix Mitglied Student

 Beiträge: 15 Registriert: 10.10.2014
|
erstellt am: 30. Okt. 2014 09:23 <-- editieren / zitieren --> Unities abgeben:         
Hallo Bernd, ich habe jetzt Code: Set oSelElem = mySelection.Item(I)
mit Code: Set oSelElem = mySelection.Item2(I).Value
ersetzt. Läuft jetzt auch ohne Fehler, leider bringt er mir überhaupt kein Ergebnis. Es passiert also nix. Mit der Referenz komme ich auch nicht weiter: Code: Sub CATMain() Dim mySelection as Selection Set mySelection = Catia.ActiveDocument.Selection Dim AnzahlSelekt as integer AnzahlSelekt = mySelection.count ' Gibt an wieviele Elemente selektiert wurden
Dim I as integer Dim oSelElem as Object Dim reference1 As Reference Dim hybridShapeCurveSmooth1 As HybridShapeCurveSmooth dim HybShapeFac As Factory Set Part1 = CATIA.ActiveDocument.Part ' aktives part holen Set partDocument1 = CATIA.ActiveDocument Set HybShapeFac = Part1.HybridShapeFactory 'factory zu erstellen der Punkte For I = 1 to AnzahlSelekt Set oSelElem = mySelection.Item(I).value Set reference1 = part1.CreateReferenceFromObject(oSelElem) Set hybridShapeCurveSmooth1 = HybShapeFac.AddNewCurveSmooth(reference1) hybridShapeCurveSmooth1.SetTangencyThreshold 0.500000 hybridShapeCurveSmooth1.CurvatureThresholdActivity = False hybridShapeCurveSmooth1.MaximumDeviationActivity = True hybridShapeCurveSmooth1.SetMaximumDeviation 0.010000 hybridShapeCurveSmooth1.TopologySimplificationActivity = True hybridShapeCurveSmooth1.CorrectionMode = 3 Next part1.Update End Sub
Vielleicht noch Ideen? Danke Grüße 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: 30. Okt. 2014 09:41 <-- editieren / zitieren --> Unities abgeben:          Nur für F.lix
Servus Du musst wohl die CurveSmooth noch einen GeoSet zuweisen zB: Code: Dim hybridBodies1 As HybridBodies Set hybridBodies1 = part1.HybridBodiesDim hybridBody1 As HybridBody Set hybridBody1 = hybridBodies1.Item(1) hybridBody1.AppendHybridShape hybridShapeCurveSmooth1 'ggf das Obejt im Klammern
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
F.lix Mitglied Student

 Beiträge: 15 Registriert: 10.10.2014
|
erstellt am: 30. Okt. 2014 10:10 <-- editieren / zitieren --> Unities abgeben:         
Also das Makro sieht jetzt folgendermaßen aus: Code: Sub CATMain() Dim mySelection as Selection Set mySelection = Catia.ActiveDocument.Selection Dim AnzahlSelekt as integer AnzahlSelekt = mySelection.count ' Gibt an wieviele Elemente selektiert wurden
Dim I as integer Dim oSelElem as Object Dim hybridShapeCurveSmooth1 As HybridShapeCurveSmooth Dim HybShapeFac As Factory Dim hybridBodies1 As HybridBodies Set Part1 = CATIA.ActiveDocument.Part ' aktives part holen Set partDocument1 = CATIA.ActiveDocument Set HybShapeFac = Part1.HybridShapeFactory 'factory zum Erstellen der Kurve Set hybridBodies1 = part1.HybridBodies For I = 1 to AnzahlSelekt
Set oSelElem = mySelection.Item(I).value msgbox oSelElem.name Set hybridBody1 = hybridBodies1.Item(I) Set hybridShapeCurveSmooth1 = HybShapeFac.AddNewCurveSmooth(oSelElem) hybridShapeCurveSmooth1.SetTangencyThreshold 0.500000 hybridShapeCurveSmooth1.CurvatureThresholdActivity = False hybridShapeCurveSmooth1.MaximumDeviationActivity = True hybridShapeCurveSmooth1.SetMaximumDeviation 0.010000 hybridShapeCurveSmooth1.TopologySimplificationActivity = True hybridShapeCurveSmooth1.CorrectionMode = 3 hybridBody1.AppendHybridShape(hybridShapeCurveSmooth1) Next part1.Update End Sub
Läuft immer noch ohne Fehlercode, liefer jedoch immer noch kein Ergebnis. Die Kurven findet er, dass sagt mir die Msgbox. Nur was danach kommt, scheint nicht zu funktionieren. 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: 30. Okt. 2014 10:19 <-- editieren / zitieren --> Unities abgeben:          Nur für F.lix
Servus Bei mir läuft der Code. Wo selektierst du die Kurven? Im Baum oder im 3D? (im Baum selektieren klappt bei mir) Vermutlich muss eine Kurve und keine BREP übergeben werden. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
F.lix Mitglied Student

 Beiträge: 15 Registriert: 10.10.2014
|
erstellt am: 30. Okt. 2014 10:52 <-- editieren / zitieren --> Unities abgeben:         
Hi, es sind keine Regelgeometrien, sondern 3D-Kurven, die als Split von zwei Surface entstanden sind. Könnnte das irgendwie das Problem sein? Ich selektiere im Baum, benutze ein .CATpart (versuchsweise) und arbeite im GSD. Vielleicht sollt eich nochmal neu Anfangen  Eigentlich habe ich ein .CATProduct und er soll mir alle gefundenen 3D-Kurven smoothen. Der Makrorekorder war dafür wahrscheinlich der falsche Ansatz. . . Grüße Felix 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: 30. Okt. 2014 10:59 <-- editieren / zitieren --> Unities abgeben:          Nur für F.lix
|
F.lix Mitglied Student

 Beiträge: 15 Registriert: 10.10.2014
|
erstellt am: 30. Okt. 2014 14:04 <-- editieren / zitieren --> Unities abgeben:         
Hi, am Liebsten wahrscheinlich in ein extra Part, da aber in jeden einzelnen Part 3D-Kurven stecken könnten, wird das schwierig oder? Alternativ ginge auch in ein Einziges beliebiges Part, wo sie gesammelt werden. Grüße Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |