Autor
|
Thema: Assemblyconstraint DISTANCE mit oder ohne Orientierung? (1061 mal gelesen)
|
jotge Mitglied Dipl.-Ing. Maschinenbau
Beiträge: 21 Registriert: 03.12.2001 V5R19 + VisualStudio 2012
|
erstellt am: 05. Jan. 2007 08:51 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich frage in einem vorhandenen Produkt alle Assemblyconstraints ab und speichere sie extern ab. Dabei gibt es beim Typ DISTANCE Bedingungen mit Orientierung (z.B. Fläche-Fläche) und solche, die keine Orientierung haben (z.B. Abstand Puntk - Fläche). Wenn ich bei letzterem die Orientierung abfrage, krachts da diese Bedingung keine orientierung hat. Wie kann man das vorher abfragen? Hier mein CODE: (VS.NET 2005 über ActiveX) // Relations eines Produkts abfragen: public int queryRelation(CatiaNode myNode, CatiaRelation[] myRelation) { int anzahl = 0; string ConnectionType = "CATIAConstraints"; MECMOD.Constraint c; try { myProduct = myNode.Product; myConstraints = (MECMOD.Constraints)myProduct.Connections(ref ConnectionType); if (myConstraints.Count > 0) { for (int i = 0; i < myConstraints.Count; i++ ) { try { object o = i+1; c = myConstraints.Item(ref o); Console.Write("Bedingung " + c.get_Name() + " - "); switch (c.Type) { case MECMOD.CatConstraintType.catCstTypeReference: {.. break; } case MECMOD.CatConstraintType.catCstTypeDistance: { myRelation[anzahl] = new CatiaRelation(); myRelation[anzahl].Typ = "Abstand"; myRelation[anzahl].Wert = c.Dimension.ValueAsString(); Console.WriteLine("Abstand: " + c.GetConstraintElement(1).DisplayName); Console.WriteLine(" " + c.GetConstraintElement(2).DisplayName); /* So ab hier knallts: */ if (c.Orientation == MECMOD.CatConstraintOrientation.catCstOrientSame) myRelation[anzahl].Orientierung = "0"; else myRelation[anzahl].Orientierung = "1"; myRelation[anzahl].Wert = (string)Convert.ToString(c.Dimension.Value); anzahl++; break; } } } catch (System.Runtime.InteropServices.COMException e) { Console.WriteLine("Keine Constraint?"); } } } } catch (System.Runtime.InteropServices.COMException e) { return -1; } return anzahl; } 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: 05. Jan. 2007 09:28 <-- editieren / zitieren --> Unities abgeben: Nur für jotge
Moin jotge, ich bin mir nicht sicher ob es dir wirklich hilft aber hast du mal versucht vor der if Abfrage das Error Handling mit "On Error Resume Next " abzuschalten?? Nach der if Abfrage kannst es sofort wieder einschalten mit "On Error Goto 0" Vielleicht hilft es. Gruß Proofin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jotge Mitglied Dipl.-Ing. Maschinenbau
Beiträge: 21 Registriert: 03.12.2001 V5R19 + VisualStudio 2012
|
erstellt am: 05. Jan. 2007 11:02 <-- editieren / zitieren --> Unities abgeben:
Hallo Proofin, mercy, aber wenn ich das Ganze mit einer Exception einpacke (das ist das Pendant unter C++ zu resume) dann stürzt mir das CATIA ab, da es die Konstante .Orientation für diese Assemblyconstraint nicht gibt. Trotzdem Danke. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAMiCADse Mitglied
Beiträge: 177 Registriert: 17.02.2006 V5,R19,SP9
|
erstellt am: 05. Jan. 2007 11:21 <-- editieren / zitieren --> Unities abgeben: Nur für jotge
Hallo jotge, eine "saubere" Lösung habe ich hierfür auch nicht gefunden. Beim Versuch das mit Error-Handling zu lösen, bekam ich auch nur das allseits beliebte "click OK to terminate". Ich habe das jetzt mit einem Workaround über die BRep-Strings der referenzierten Elemente gelöst. Vor dem Zugriff auf die Orientierung frage ich mittels Stringmanipulation ab ob es sich um ein "Face-Face"-Constraint handelt oder nicht. Das klappt soweit. Gruß CAMiCADse Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jotge Mitglied Dipl.-Ing. Maschinenbau
Beiträge: 21 Registriert: 03.12.2001 V5R19 + VisualStudio 2012
|
erstellt am: 05. Jan. 2007 11:48 <-- editieren / zitieren --> Unities abgeben:
Hallo CAMiCADse, kannst DU mir das etwas genauer erklären mit der Face2Face-Abfrage? Mercy, Jochen ------------------ Jochen Geschwentner WIGE Konstruktionen _______________________________________________________________ W W III GGGG EEEEEE WIGE Konstruktionen W W I G G E Schwanenstrasse 4 W W I G EEE 88214 Ravensburg W W W I G GGG E Phone: ++49-751-36609-19 W W W W I G G E Jochen.Geschwentner@wige.com W W III GGGG EEEEEE ICQ: 4319610 http://www.wige.com/ _______________________________________________________________ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAMiCADse Mitglied
Beiträge: 177 Registriert: 17.02.2006 V5,R19,SP9
|
erstellt am: 05. Jan. 2007 12:57 <-- editieren / zitieren --> Unities abgeben: Nur für jotge
Hallo Jochen, für jemand aus meiner alten Heimat gerne nochmal ausführlich Mit GetConstraintElement kommst du an die Elemente (Reference), mit DisplayName an den String. Der String enthält den Pfad zum Part und den BRep-String der Geometrie. Im BRep-String (alles nach "/!") suche ich nach "Vertex","Edge","Face". Davon leite ich ab, ob es ein "Face-Face" oder z.b. ein "Vertex-Face"-Constraint ist. Ein Vertex-BRep enthält auch "Face", aber ein Face-BRep enthält kein "Vertex". Die Abfrage erfolgt also der Reihe nach, erst "Vertex", dann "Edge", dann "Face". Code-Schnipsel: 'Constraint-Strings checken , i=1 to 2 If strCompleteRef(i).Contains("(Vertex") Then temp(i) = "Vertex" ElseIf strCompleteRef(i).Contains("(Edge") Then temp(i) = "Edge" ElseIf strCompleteRef(i).Contains("(Face") Then temp(i) = "Face" 'Dann Abfragen ob beide Elemente vom Typ "Face" sind If temp(1)="Face" AND temp(2)="Face" Then ... -> Orientation vorhanden Das ganze muß dann für alle möglichen Fälle erweitert werden (z.B. "Plane-Plane" )
Hoffe das war verständlicher gruß CAMiCADse
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jotge Mitglied Dipl.-Ing. Maschinenbau
Beiträge: 21 Registriert: 03.12.2001 V5R19 + VisualStudio 2012
|
erstellt am: 05. Jan. 2007 19:31 <-- editieren / zitieren --> Unities abgeben:
Hallo CAMiCADse, leider hilft mir das nicht weiter, da unsere Assemblyconstraints auf Veröffentlichungen mit "teilweise" irreführenden Bezeichnungen ver- weisen. So kann beispielsweise eine Fläche als "Basis_1" bezeichnet sein, theoretisch kann das aber auch ein Punkt sein. Aber was mir in der Tat weiterhelfen würde wäre in einem Produkt ein belibiges geometrisches Element daraufhin zu prüfen, was es für einen Typ hat. Gruss, Jochen PS: Was soll das mit der Heimat? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAMiCADse Mitglied
Beiträge: 177 Registriert: 17.02.2006 V5,R19,SP9
|
erstellt am: 08. Jan. 2007 09:10 <-- editieren / zitieren --> Unities abgeben: Nur für jotge
Hallo Jochen, ob du mit Publications arbeitest oder nicht spielt dabei keine Rolle. Der String des Geometrieelements ist derselbe. (Der Pfad ist unterschiedlich, aber der wird ja nicht ausgewertet). Mach doch mal einen Test! Gruß CAMiCADse P.S. Wegen der Heimat: Hab mich nur auf deine Signatur bezogen, und RV ist eben meine alte Heimat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |