Autor
|
Thema: Trimmen von Verbinden von Flächen automatisieren (2459 mal gelesen)
|
McLoud1 Mitglied
Beiträge: 11 Registriert: 04.01.2013 SP 3, RN 19
|
erstellt am: 04. Jan. 2013 20:42 <-- editieren / zitieren --> Unities abgeben:
Hallo, Mein Problem ist in etwa wie folgt zu beschreiben : Ich besitzte eine Grundfläche auf die ich einzelne Kurven projeziere. Diese werden anschließend alle mit einem festgelegten Offset extruiert. Das Ziel soll am Ende sein alle Extrusionsflächen mit der Grundfläche verbunden zu haben. Und zwar ohne, dass beim Verbinden die Konnektivitätsprüfung deaktiviert ist... Das einzig mögliche Vorgehen hierzu ist nach meinem bisherigen Wissen, dass man die Flächen jeweils mit der Grundfläche trimmt und anschließend die getrimmte Fläche wieder mit der Grundfläche verbindet, sodass diese mit der Extrusionsfläche eine gemeinsame Fläche bildet. Problematisch wird es jedoch, wenn mehr als eine zu verbindende Extrusionsfläche existiert. Dann muss in einem Art "Schichtverfahren", bei dem zuerst einzelne Schichten von Extrusionsflächen miteinander verbunden werden, durch die Extrusionsflächenstruktur nacheinander getrimmt und anschließend mit der ständig zu erweiternden Grundfläche verbunden werden, sodass kein Verbindungsfehler entsteht. Dies ist sehr aufwendig und ich suche nun nach einer Möglichkeit dies zu automatisieren. MfG, McLoud [Diese Nachricht wurde von McLoud1 am 30. Jan. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 04. Jan. 2013 21:01 <-- editieren / zitieren --> Unities abgeben: Nur für McLoud1
Servus Willkommen im Forum. Bitte Systeminfo ausfüllen. Kannst du ggf ein kleines CATPart dazu hochladen? Ich kann es mir noch nicht so ganz vorstellen (vielleicht gibt es auch eine einfachere Methode) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
McLoud1 Mitglied
Beiträge: 11 Registriert: 04.01.2013 SP 3, RN 19
|
erstellt am: 05. Jan. 2013 13:12 <-- editieren / zitieren --> Unities abgeben:
|
Thomas Harmening Ehrenmitglied V.I.P. h.c. Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 NX 10 Win 7
|
erstellt am: 05. Jan. 2013 13:46 <-- editieren / zitieren --> Unities abgeben: Nur für McLoud1
Zitat: Original erstellt von McLoud1: Das einzig mögliche Vorgehen hierzu ist nach meinem bisherigen Wissen, dass man die Flächen jeweils mit der Grundfläche trimmt und anschließend die getrimmte Fläche wieder mit der Grundfläche verbindet, sodass diese mit der Extrusionsfläche eine gemeinsame Fläche bildet. Problematisch wird es jedoch, wenn mehr als eine zu verbindende Extrusionsfläche existiert. Dann muss in einem Art "Schichtverfahren", bei dem zuerst einzelne Schichten von Extrusionsflächen miteinander verbunden werden, durch die Extrusionsflächenstruktur nacheinander getrimmt und anschließend mit der ständig zu erweiternden Grundfläche verbunden werden, sodass kein Verbindungsfehler entsteht. Dies ist sehr aufwendig und ich suche nun nach einer Möglichkeit dies zu automatisieren.
der so erstellter Flächenverbund hat ein Dicke von NULL. Ist es nicht sinnvoller ein Solid zu erzeugen`die Rippen werden ja keine Dicke von Null haben, oder? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
McLoud1 Mitglied
Beiträge: 11 Registriert: 04.01.2013 SP 3, RN 19
|
erstellt am: 08. Jan. 2013 10:05 <-- editieren / zitieren --> Unities abgeben:
|
tsolina Mitglied
Beiträge: 15 Registriert: 10.10.2012 Compaq cx50 :D
|
erstellt am: 16. Jan. 2013 23:55 <-- editieren / zitieren --> Unities abgeben: Nur für McLoud1
Hallo, ich werde dir was anderes vorschlagen, und das ist anstatt trim, split zu nutzen. Warum? Weil beim split du kannst Element zu keep/delete definieren, und wie ich es sehen du hast die punkten auf welchem kannst du zugreiffen, oder du kannst einfach temporare extreme auf flechen erzeugen und damit Keep/Delete element zu definieren. ------------------ Catia v5 macros Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
McLoud1 Mitglied
Beiträge: 11 Registriert: 04.01.2013 SP 3, RN 19
|
erstellt am: 17. Jan. 2013 12:05 <-- editieren / zitieren --> Unities abgeben:
|
tsolina Mitglied
Beiträge: 15 Registriert: 10.10.2012 Compaq cx50 :D
|
erstellt am: 17. Jan. 2013 13:10 <-- editieren / zitieren --> Unities abgeben: Nur für McLoud1
das geht mit join hier ist vba beispiel ' - a sub to join all elements from geometrical set - Sub Assembly(gSet As HybridBody) Dim i As Integer Dim hybridShapeFactory1 As HybridShapeFactory Dim oAssy As HybridShapeAssemble Set hybridShapeFactory1 = CATIA.ActiveDocument.Part.HybridShapeFactory ' - create join with first two items from set - Set oAssy = hybridShapeFactory1.AddNewJoin(gSet.HybridShapes.Item(1), gSet.HybridShapes.Item(2)) ' - if you have more than 2 elements in set - If gSet.HybridShapes.Count > 2 Then For i = 3 To gSet.HybridShapes.Count oAssy.AddElement gSet.HybridShapes.Item(i) Next End If ' - additional options - oAssy.SetConnex 1 oAssy.SetManifold 0 oAssy.SetSimplify 0 oAssy.SetSuppressMode 0 oAssy.SetDeviation 0.001 oAssy.SetAngularToleranceMode 0 oAssy.SetAngularTolerance 0.5 oAssy.SetFederationPropagation 0 ' - populate join in tree - gSet.AppendHybridShape oAssy ' - dont forget to update object - CATIA.ActiveDocument.Part.UpdateObject oAssy End Sub
------------------ Catia v5 macros Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
McLoud1 Mitglied
Beiträge: 11 Registriert: 04.01.2013 SP 3, RN 19
|
erstellt am: 17. Jan. 2013 16:38 <-- editieren / zitieren --> Unities abgeben:
Hi, ja also wenn man die Konnektvität deaktiviert, dann geht das so schön. Aber diese soll nun leider aktiviert bleiben. Sonst wäre ich schon lang fertig gewesen Naja dann sind wir wieder bei dem zuvor beschrieben Problem mit dem Auswählen. Gruß! [Diese Nachricht wurde von McLoud1 am 30. Jan. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MarkS. Mitglied NC-Programmierer/Anwendungsentwickler
Beiträge: 30 Registriert: 23.05.2012 Windows 7 SP1 64Bit AMD Opteron 6134 ATI FirePro V8800 32 GB Catia V5 R19/R20/R21 VB.NET 2010 Delphi 7
|
erstellt am: 17. Jan. 2013 18:18 <-- editieren / zitieren --> Unities abgeben: Nur für McLoud1
Hallo McLoud1, ist nicht gerade einfach durch deine Struktur durchzusteigen. Wenn ich das richtig verstehe, soll zwischen Flächen eine Art Wabenstruktur aufgebaut werden? Würde es da nicht ausreichen... -einen Sketch mit der Wabenstruktur aufzubauen, -diesen zu extrudieren, -zu trimmen, -und im Join zur der Grundfläche hinzuzufügen Gruß Mark
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
McLoud1 Mitglied
Beiträge: 11 Registriert: 04.01.2013 SP 3, RN 19
|
erstellt am: 24. Jan. 2013 09:13 <-- editieren / zitieren --> Unities abgeben:
Also ich fass es nochmal ganz schön zusammen: Man hat eine Rippenstruktur aus vielen unverbundenen Einzelflächen. Diese soll in viele Verbindungen aufgeteilt werden, sodass am Ende jede Einzelfläche in einer Verbindung enthalten ist. Eine Verbindung verläuft von einer Einzelfläche am Rand der Außenfläche zu einer anderen Einzelfläche am Rand der Außenfläche. Vorgehen: - es müssen über eine distance-Ermittlung zum Rand zwei Einzelflächen ermittelt werden, die zur Randkurve der Außenfläche den miminumDistance=0 haben - diese zwei Einzelflächen über for-Schleifen selektieren und diese einem Join hinzufügen. Desweiteren über eine weitere for-Schleife Einzelflächen zu diesen beiden hinzufügen, sodass sich insgesamt eine Verbindung mit SetConnex=1 ergibt. - Für den Anfang reicht es von einer Außenfläche alle möglichen Verbindungen zu allen anderen Außenflächen zu ermitteln. Man kann sich ja vorstellen wie schnell hier der Rechenaufwand explodiert... Aber immer noch besser als alles zu trimmen Gruß! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
McLoud1 Mitglied
Beiträge: 11 Registriert: 04.01.2013 SP 3, RN 19
|
erstellt am: 28. Jan. 2013 18:58 <-- editieren / zitieren --> Unities abgeben:
Hallo, also ich habe die Aufgabe nach einigem Rumprobieren mit meinen bescheidenen Programmierkenntnissen dann doch geschafft. Beste Grüße Sub CATMain(gSet As HybridBody, Ablageset As HybridBody) Set activedoc = CATIA.ActiveDocument Set part1 = activedoc.Part Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")
Dim i As Integer Dim j As Integer Dim k As Integer Dim hybridShapeFactory1 As HybridShapeFactory Dim oAssy As HybridShapeAssemble Set hybridShapeFactory1 = CATIA.ActiveDocument.Part.HybridShapeFactory MsgBox "Wählen Sie bitte den Rand aus", vbOKOnly Set selection1 = activedoc.Selection Dim InputObjectType(4) InputObjectType(0) = "HybridShapeExtrude" InputObjectType(1) = "HybridShapeSplit" InputObjectType(2) = "HybridShapeAssemble" InputObjectType(3) = "HybridShapeConnect" InputObjectType(4) = "HybridShapeExtract" Status = selection1.SelectElement2(InputObjectType, "Rand auswählen", False) If (Status = "Cancel") Then MsgBox "Makro abgebrochen", 16 Exit Sub Else Set object1 = selection1.Item(1).Value End If For i = 1 To gSet.HybridShapes.Count Set object2 = gSet.HybridShapes.Item(i) Dim reference1 As Reference Set reference1 = part1.CreateReferenceFromObject(object1) Dim reference2 As Reference Set reference2 = part1.CreateReferenceFromObject(object2)
Dim distance1 Set Measurable1 = TheSPAWorkbench.GetMeasurable(reference1) distance1 = Measurable1.GetMinimumDistance(reference2) 'MsgBox distance1 If distance1 < 0.0001 Then For j = i + 1 To gSet.HybridShapes.Count Set object3 = gSet.HybridShapes.Item(j) Dim reference3 As Reference Set reference3 = part1.CreateReferenceFromObject(object3) Dim distance2 distance2 = Measurable1.GetMinimumDistance(reference3) 'MsgBox distance2 If distance2 < 0.0001 Then For k = 1 To gSet.HybridShapes.Count Set object4 = gSet.HybridShapes.Item(k) Dim reference4 As Reference Set reference4 = part1.CreateReferenceFromObject(object4) Dim distance3 Dim distance4 Set Measurable2 = TheSPAWorkbench.GetMeasurable(reference4) distance3 = Measurable2.GetMinimumDistance(reference2) distance4 = Measurable2.GetMinimumDistance(reference3)
If (distance3 < 0.0001 And distance4 < 0.0001) Then Set oAssy = hybridShapeFactory1.AddNewJoin(object2, object3) oAssy.AddElement object4 ' - additional options - oAssy.SetConnex 1 oAssy.SetManifold 0 oAssy.SetSimplify 0 oAssy.SetSuppressMode 0 oAssy.SetDeviation 0.001 oAssy.SetAngularToleranceMode 0 oAssy.SetAngularTolerance 0.5 oAssy.SetFederationPropagation 0 On Error Resume Next ' - populate join in tree - 'If oAssy.SetConnex = 1 Then Ablageset.AppendHybridShape oAssy 'End If ' - dont forget to update object - CATIA.ActiveDocument.Part.UpdateObject oAssy 'End If End If Next End If Next End If Next End Sub
[Diese Nachricht wurde von McLoud1 am 30. Jan. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |