Autor
|
Thema: Surfaces mit mehreren Domains (R10 SP03) (3516 mal gelesen)
|
gdir Mitglied
Beiträge: 157 Registriert: 25.06.2003
|
erstellt am: 25. Jun. 2003 19:30 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe bei einem Skript (R10 SP03) gerade ein kniffliges Problem, für das vielleicht (hoffentlich!) jemand eine gute Lösungsidee hat. Das Skript arbeitet überwiegend mit Drahtgitter- und Flächengeometrie. An einer Stelle des Skripts wird eine unbekannte Anzahl von Flächen gesplittet. Beim Split kommt es vor, dass ein "Multi-Result Element" entsteht, d.h. eine Fläche wird so geschnitten, dass das entstehende Split-Objekt aus mehreren, nicht zusammenhängenden Domains besteht. Das ist im allgemeinen nicht weiter kritisch, allerdings lässt sich von einem solchen Element kein Offset mehr bilden ("non-connex element ..."). An dieser Stelle komme ich nicht weiter. Ich brauche alle Teilflächen des Splits und ein Offset von allen Teilflächen. Diverse Lösungsideen sind ins Leere gelaufen: - beim Split erhalte ich keine Information, aus wie vielen Domains das Split-Objekt besteht. Den Return-Code von AddNewHybridSplit habe ich nicht abgefragt, aber erfahrungsgemäß kommt hier ohnehin immer 0 zurück, oder? Der Return-Code vom UpdateObject() ist ebenfalls 0, unabhängig von der Anzahl der Domains. - ich kenne keine Funktion, mit der ich abfragen könnte, aus wie vielen Domains die Fläche besteht. Ideen? - der Near-Operator bringt mich nicht weiter, da er sich immer anwenden lässt, egal ob meine Surface aus einer oder mehreren Domains besteht. Man erhält keine Information, um wie viele Domains es sich handelt. Selbst wenn ich das wüsste, müsste ich immer noch ermitteln, wo die Domains räumlich liegen, damit ich sie alle nacheinander mit dem Near-Operator erfassen könnte. - Leider gibt es kein Disassemble bei der Skriptprogrammierung. Ein Disassemble in die Domains wäre genau das richtige. Ein Ausblick in die R11-Doku verspricht auch keine bessere Zukunft ... - Beim Extract und Boundary müsste ich ein Startelement für jede Domain finden. Ich sehe aber keine brauchbare Möglichkeit dafür (das Skript soll an dieser Stelle ohne Usereingabe oder Selektion arbeiten). Fällt Euch etwas ein? Viele Grüße Günther Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gdir Mitglied
Beiträge: 157 Registriert: 25.06.2003
|
erstellt am: 26. Jun. 2003 11:33 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich probiere gerade etwas mit dem Extract herum. Beim Extract benötige ich ein Sub-Element aus meiner Multi-Domain Fläche. Genauer gesagt benötige ich die Referenz auf dieses Sub-Element. Bei einem mit dem Makro-Rekorder aufgezeichnetem Skript verwendete CATIA V5 die Methode CreateReferenceFromBrepName. Dabei kommt bei der Selektion einer Teilfläche ein so wundervolles Konstrukt wie ...CreateReferenceFromBRepName("RSur:(Face:(Brp:(GSMBiDim.4;%224);None());WithPermanentBody;WithoutBuildError;WithSelectingFeatureReport)", ...) heraus. Unglücklicherwiese gibt es keinen erkennbaren Zusammenhang zwischen dem Namen meiner Multi-Domain Fläche und dem hier verwendeten Namen GSMBiDim.4. Auch steht der Zähler 224 in keinem erkennbaren Zusammenhang mit den 5 Faces meiner Fläche :-( CreateReferenceFromBRepName scheidet damit für mich aus. Weiß jemand, wie man mit CreateReferenceFromName auf Sub-Elemente einer Fläche zugreifen kann? Günther Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gdir Mitglied
Beiträge: 157 Registriert: 25.06.2003
|
erstellt am: 27. Jun. 2003 14:06 <-- editieren / zitieren --> Unities abgeben:
Hallo, auch wenn's so aussieht, als ob ich selbst gern mit mir spreche: Hier ist die Lösung auf meine Frage. Hat mich nur drei Arbeitstage gekostet. Ich liebe CATScript-Programmierung ... Falls jemand mal einen Extract im Script machen möchte und dafür notwendigerweise die Referenz auf eine Teil-Face der Ursprungsfläche benötigt: - Ursprungsfläche in die Selektion packen (mySelection.Add(Ursprungsfläche)) - innerhalb dieser Selektion nach Faces suchen (mySelection.Search("Topology.Face;sel") - das führt dazu, dass man alle Teil-Faces in der Selektion hat - auf die Teil-Faces kann man dann mit der Methode Item zugreifen (Set mySelectedElement = mySelection.Item(index)) - davon holen wir uns die Referenz (Set myRef = mySelectedElement .Reference) - diese Referenz lässt sich leider nicht für den Extract gebrauchen - stattdessen lassen wir uns den Pfad der Referenz ausgeben (myRefName = myRef.DisplayName) - was dabei herauskommt, ist fast schon der BRep-Name: Selection_RSur:(Face:(Brp:(GSMBiDim.4;%217);None:();GSMSplit.1) - Nach ein wenig String-Manipulation kann man ihn für CreateReferenceFromBrepName gebrauchen Und dann klappt's auch mit dem Extract Ich liebe V5 Günther Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RonnyS Mitglied
Beiträge: 97 Registriert: 04.09.2003
|
erstellt am: 07. Jan. 2004 18:04 <-- editieren / zitieren --> Unities abgeben: Nur für gdir
Hallo ich habe das so einigermaßen hingekriegt nur gibt es nur noch ein kleines Problem .Reference funktioniert nicht da aus mir nicht bekannten gründen kein Objekt vom Typ item zurückgegeben wird sondern das Objekt zu dem das Face gehört falls das jetzt zu kompliziert war ein pad wird mittels split geschnitten und ich möchte den brep der schnittfläche habe ...stattdessen erhalte ich ein pad-objekt was mache ich verkehrt?
------------------ gr33t7 Ronny Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gdir Mitglied
Beiträge: 157 Registriert: 25.06.2003
|
erstellt am: 08. Jan. 2004 08:01 <-- editieren / zitieren --> Unities abgeben:
|
RonnyS Mitglied
Beiträge: 97 Registriert: 04.09.2003
|
erstellt am: 08. Jan. 2004 08:57 <-- editieren / zitieren --> Unities abgeben: Nur für gdir
naja das war ja auch nur ein beispiel aber normalerweise sollte ich doch wenn ich Selection.search nach nem Face frage auch ein Face zurückbekommen ...oder ist das nur ein frommer wunsch das verwirrende ist nur dass er manchmal halt das face liefert und manchmal halt das objekt zu dem selbiges gehört...egal ob das nun ein split, pad, pocket oder sonstwas ist. ich hab die vermutung das das von irgendeiner (umgebungs?)variable des selection objekts gesetzt wird, komm aber einfach nicht drauf wie oder welche? ------------------ gr33t7 Ronny Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
brolk Mitglied
Beiträge: 5 Registriert: 16.12.2004
|
erstellt am: 16. Dez. 2004 12:31 <-- editieren / zitieren --> Unities abgeben: Nur für gdir
Hallo! Ich sitze an genau dem gleichen Problem und bin schon bis hier her gekommen... Aber mir ist nicht klar was für String Manipulationen ich machen muss, damit es klappt. ... - was dabei herauskommt, ist fast schon der BRep-Name: Selection_RSur Face Brp GSMBiDim.4;%217);None );GSMSplit.1) - Nach ein wenig String-Manipulation kann man ihn für CreateReferenceFromBrepName gebrauchen Ich habe des "Selection_" weg gemacht aber es klappt immernoch nicht. Es wäre supertoll wenn Du mir sagen könntest was ich da abschneiden oder hinzufügen muss! Ich hocke schon EWIG dran Gruss Bro
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
noir333 Mitglied Ingenieur
Beiträge: 148 Registriert: 27.01.2004 Dell Precision 450 Dual Xeon, 2MB RAM, XP SP2, NX3 V5R17SP3
|
erstellt am: 07. Sep. 2006 13:19 <-- editieren / zitieren --> Unities abgeben: Nur für gdir
Hallo zusammen, Hallo gdir die Vorschläge sind super, ich habe daraus mal ein Visual Basic 2005 Porgramm gemacht, dass unter R14 läuft. Besonders zu beachten ist die Syntax im reference Befehl. Ich weiß nicht, ob die nicht unter anderen Releases angepasst werden muss, kann ja aber jeder mit Makroaufzeichnen nachvollziehen und ändern. Hier der Code: SelFilter(0) = "BiDim" Stat = "Normal" MyPartDoc.Selection.Clear() Stat = MyPartDoc.Selection.SelectElement2(SelFilter, "Flächenkörper auswählen", True) oSel = MyPartDoc.Selection.Item(1).Value MyPartDoc.Selection.Search("Topology.CGMFace,sel") ci = MyPartDoc.Selection.Count For i = 1 To ci TeilFaces(i) = MyPartDoc.Selection.Item(i).Value TeilFacesNamen(i) = TeilFaces(i).Name.Replace("Selection_", "") i2 = TeilFacesNamen(i).LastIndexOf(";") ci2 = TeilFacesNamen(i).Length - i2 TeilFacesNamen(i) = TeilFacesNamen(i).Remove(i2, ci2) reference1 = MyPart.CreateReferenceFromBRepName(TeilFacesNamen(i) & ";WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR14)", oSel) hse(i) = hybridShapeFactory1.AddNewExtract(reference1) hse(i).PropagationType = 3 hse(i).ComplementaryExtract = False hse(i).IsFederated = False hybridBody1.AppendHybridShape(hse(i)) MyPart.InWorkObject = hse(i) Next MyPart.Update() MsgBox("In " & SetName & " " & CStr(i) & " Flächen extrahiert.") Die Dim's habe ich mal weggelassen....
Vielen Dank für Eure Hilfe ------------------ Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndiKrue Mitglied Berater
Beiträge: 72 Registriert: 04.12.2008 Windows XP Prof x64 Edition Intel Xeon W3520 @ 2.67 GHz 8 GB RAM, Nvidia Quadro FX 1800 CATIA V5R19
|
erstellt am: 23. Jan. 2009 10:21 <-- editieren / zitieren --> Unities abgeben: Nur für gdir
|
noir333 Mitglied Ingenieur
Beiträge: 148 Registriert: 27.01.2004 Dell Precision 450 Dual Xeon, 2MB RAM, XP SP2, NX3 V5R17SP3
|
erstellt am: 23. Jan. 2009 15:48 <-- editieren / zitieren --> Unities abgeben: Nur für gdir
|