Autor
|
Thema: Ausgabe des Documents bei einer Selection (2813 mal gelesen)
|
der-quest Mitglied
Beiträge: 70 Registriert: 09.06.2005
|
erstellt am: 16. Mrz. 2007 16:40 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen! Ich sitze hier ein wenig ratlos vor einem relativ einfachen (?) Problem: Wie bekomme ich heraus, in welchem Dokument ("...CATPart") die Selection stattgefunden hat? Hintergrund: Mit dem Makro sollen durch in einem selektierten GeoSet liegende Ebenen Schnitte des Gesamtproduktes erstellt werden, die anschließend in das GeoSet wieder einkopiert werden. Zur Zeit klappt es nur "hart verdrahtet" unter Angabe des Pfades hin zu dem GeoSet. Ich schaffe es nicht, den "Ort" der Selection (außer dem Document-Namen) festzustellen und zwischenzuspeichern. Code:
Sub CATMain() Dim selektion1 As Selection Set selektion1 = CATIA.ActiveDocument.Selection MsgBox(selektion1.Item(1).Name) End Sub
Weiterhin klappt das mit dem "hart verdrahteten" Navigieren auch nur, wenn das Part dazu extra geöffnet ist (und nicht nur in der Produktstruktur). -> CATIA.Documents.Item("...CATPart") Ein Versuch à la
Code:
Dim einPart As Part einPart = selektion1.Item(1).Value
brachte auch keinen Erfolg.Hat jemand einen Tipp? Gruß der-quest Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 20. Mrz. 2007 09:57 <-- editieren / zitieren --> Unities abgeben: Nur für der-quest
Hallo, hast du vielleicht ein Bild von der Struktur???? Du willst also ein komplettes GeoSet Selektieren, die Ebenen dort drin verwenden und die Ergebnisse der Schnitt am Ende dort hineinkopieren? Habe ich das so richtig verstanden?? Gruß Timber ------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der-quest Mitglied
Beiträge: 70 Registriert: 09.06.2005
|
erstellt am: 22. Mrz. 2007 12:06 <-- editieren / zitieren --> Unities abgeben:
|
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 22. Mrz. 2007 13:32 <-- editieren / zitieren --> Unities abgeben: Nur für der-quest
Naja Tipp nicht direkt, müsste da auch erst mal nachgrübeln. Hast du denn schon nen Code geschrieben?? Wenn ja poste ihn doch einfach mal, dann können wir uns das genauer anschauen. Ein Bild mit der Struktur um zu sehen über wieviel Stufen wir hier reden wäre auch nicht schlecht. Herausfinden in welchem Dokument du etwas selektiert hast ist nicht so leicht machbar, höchstens über die Parents der selektierten Elemente. Ist aber in diesem Fall nicht notwendig denke ich, da durch die Selektion des GeoSets der anschliessende Behälter für die zu kopierenden Elemente eigentlich schon fest steht. Gruß Timber
------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der-quest Mitglied
Beiträge: 70 Registriert: 09.06.2005
|
erstellt am: 26. Mrz. 2007 12:10 <-- editieren / zitieren --> Unities abgeben:
Ja, den Code habe ich bereits in großen Teilen geschrieben bzw. aus anderen Beiträgen aus diesem Forum übernommen. Hier ist er (an ein paar Stellen eingekürzt): Code:
Sub CATMain()' Ist genau ein GeoSet selektiert? Dim selektion1 As Selection Set selektion1 = CATIA.ActiveDocument.Selection If selektion1.Count = 1 Then If selektion1.Item(1).Type <> "HybridBody" Then ' kein GeoSet gewählt MsgBox("Es ist kein GeoSet ausgewählt.") Exit Sub End If Else MsgBox("Es ist genau ein GeoSet mit den Schnittebenen auszuwählen.") Exit Sub End If ' alles okay! ' In welchem Part befinden wir uns? Dim dasPart As Part Set dasPart = selektion1.Item(1).Value.Parent.Parent.Parent MsgBox(dasPart.Name) ' Casten der Section in einen HybridBody Dim schnittOrdner As HybridBody Set schnittOrdner = selektion1.Item(1).Value ' Das Wurzel-Produkt soll die Schnitte erhalten Dim wurzel As Product Set wurzel = CATIA.ActiveDocument.Product.Products.Item(1) ' Anzahl der Elemente Dim anzahl As Integer anzahl = schnittOrdner.HybridShapes.Count ' Große Schleife Dim plane1Name,pfad As String ' Pfad definieren [...] selektion1.Clear Dim selektQuelle, selektZiel As Selection Set selektQuelle = CATIA.ActiveDocument.Selection Set selektZiel = CATIA.ActiveDocument.Selection selektQuelle.Clear ' --- Set documents1 = CATIA.Documents Set partDocument1 = documents1.Item(dasPart.Name) Set part1 = partDocument1.Part Set hybridBodies1 = part1.HybridBodies ' --- Dim hybridShapeToCopy As HybridShape set secs = CATIA.ActiveDocument.Product.GetTechnologicalObject("Sections") Dim fa(2), sa(2), op(2), mat(11) For i=1 to anzahl Set plane1 = schnittOrdner.HybridShapes.Item(i) plane1Name = plane1.Name plane1.GetFirstAxis fa plane1.GetSecondAxis sa plane1.GetOrigin op set sec = secs.Add() mat(0) = fa(0) mat(1) = fa(1) mat(2) = fa(2) mat(3) = sa(0) mat(4) = sa(1) mat(5) = sa(2) mat(6) = fa(1) * sa(2) - fa(2) * sa(1) mat(7) = fa(2) * sa(0) - fa(0) * sa(2) mat(8) = fa(0) * sa(1) - fa(1) * sa(0) mat(9) = op(0) mat(10) = op(1) mat(11) = op(2) sec.SetPosition mat ' Dateinamen generieren mit Zufallszahl [...] ' Datei schreiben [...] ' Geometrie kopieren Set hybridShapeToCopy = CATIA.Documents.Item(dateiName & ".CATPart").Part.HybridBodies.Item("Geometrical Set.1").HybridShapes.Item(1) selektQuelle.Add hybridShapeToCopy hybridShapeToCopy.Name = "Kurve" & i MsgBox(selektQuelle.Item(1).Value.Name) selektQuelle.Copy partDocument1.Activate part1.InWorkObject = schnittOrdner ' Geometrie einfuegen Set selektZiel=partDocument1.Selection selektZiel.Add schnittOrdner selektZiel.PasteSpecial "CATPrtResultWithOutLink" part1.Update ' Selections leeren selektQuelle.Clear selektZiel.Clear Next wurzel.Update End Sub
Die Struktur des Produktes ist zur Zeit sehr einfach (siehe baum.png): Es wird das Geo.Set "Schnitte" mit den Schnittebenen ausgewählt. Leider aber wird das spätere Makro den Fall abfangen können müssen, dass die Position im Baum selbständig festgestellt wird, um die Kurvenzüge an der richtigen Stelle zu positionieren. Danke schon einmal! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JanF Mitglied Student
Beiträge: 35 Registriert: 12.09.2002
|
erstellt am: 27. Mrz. 2007 09:07 <-- editieren / zitieren --> Unities abgeben: Nur für der-quest
Zitat: Original erstellt von der-quest: Hallo zusammen!Ich sitze hier ein wenig ratlos vor einem relativ einfachen (?) Problem: Wie bekomme ich heraus, in welchem Dokument ("...CATPart") die Selection stattgefunden hat? Code:
Sub CATMain() Dim selektion1 As Selection Set selektion1 = CATIA.ActiveDocument.Selection MsgBox(selektion1.Item(1).Name) End Sub
Für diese selektion1 erhält man wie folgt das zugehörige Part: Code: Dim SelectedElement1 as SelectedElement Set SelectedElement1 = selektion1.FindObject("CATIAProduct") Dim part1 As Part Set part1 = SelectedElement1.ReferenceProduct.parent.PartMsgBox(part1.name) 'Name des Parts MsgBox(part1.parend.name) ' Name der CatPart-Datei
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der-quest Mitglied
Beiträge: 70 Registriert: 09.06.2005
|
erstellt am: 02. Apr. 2007 09:41 <-- editieren / zitieren --> Unities abgeben:
Hallo JanF, danke, das mit der Ausgabe des Dokumentes hat einwandfrei geklappt. Leider aber bleibt das Problem bestehen, dass das Part, in dem die Schnitte per Paste as Result eingefügt werden, geöffnet sein muss. Andernfalls erhalte ich die Meldung: Error Copying Data: Selected element(s) not allowed for this operation. Meine Vermutung: Da ich das CATPart in meinem Code über seinen Namen anspreche, aber nur die Produktstruktur geöffnet ist, findet er es nicht und kann auch nicht die Geometrien hineinkopieren. Ich hätte dann allerdings eine andere Fehlermeldung erwartet. Hat jemand noch einen Tipp? Gruß & Dank! [Diese Nachricht wurde von der-quest am 02. Apr. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 605 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 02. Apr. 2007 10:48 <-- editieren / zitieren --> Unities abgeben: Nur für der-quest
Hallo der-quest, der Denkfehler liegt wo anders: wenn in einer Struktur Geometrie von einem Part in ein anderes kopiert wird, entsteht ein Context Link. Und der geht über die Instance eines Parts, also über das .Product und nicht über das Documnet. (Wenn das Part in einem seperaten Fenster geöffnet ist, entsteht eine andere Art von Link) Dein Fehlermeldung kannn 3 Ursachen haben (die mir bekannt sind): 1) Ein "falsches" Modell innerhalb deiner Struktur ist aktiv, z.B. das Part aus dem du Geometrie kopieren möchtest. 2) Wenn die Objekte, die du kopieren willst, so nicht kopiert werden können (auch interaktiv): also z.B. wenn nur publizierte erlaubt sind und du andere kopierst 3) Innerhalb einer Struktur das Paste nicht in die Instance (.Product) ausgeführt wird. Berücksichtigst du das, müste es klappen. Gruß ------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der-quest Mitglied
Beiträge: 70 Registriert: 09.06.2005
|
erstellt am: 02. Apr. 2007 15:31 <-- editieren / zitieren --> Unities abgeben:
Hallo tomtom1972! Zitat: Original erstellt von tomtom1972: (...) wenn in einer Struktur Geometrie von einem Part in ein anderes kopiert wird, entsteht ein Context Link. Und der geht über die Instance eines Parts, also über das .Product und nicht über das Documnet. (Wenn das Part in einem seperaten Fenster geöffnet ist, entsteht eine andere Art von Link)
Aha! Demnach wäre Folgendes... Code: Set partDocument1 = CATIA.Documents.Item(dasPart.Name)
...evtl. durch etwas Ähnliches wie... Code: CATIA.ActiveDocument.Product.Products.Item(...)
...zu ersetzen. Damit sucht er nicht nach dem eigenständigen CATPart, sondern der Instanz in einer Produktstruktur. Wie kann ich mich dann auf die Instanz -- oder eher das CATPart, das dahinter steht -- beziehen, um dann darin die Daten einzufügen? Sämtliche Versuche, die mit Code: CATIA.ActiveDocument.Product.
begonnen, führten nicht zum Erfolg.Das Einfügen über die Produktstruktur birgt aber damit ein weiteres Problem: Ich muss mir Gedanken darüber machen, in welcher Ebene das Ziel-CATPart liegt, um es ansprechen zu können. Ist hingegen das CATPart bereits geöffnet, kann ich mich gleich darauf beziehen; die Änderungen werden in der Baumstruktur des Products sofort sichtbar. Da letztere Variante offensichtlich einiges an Arbeit spart, wäre die mir lieber. Gibt es Einwände? Schon einmal vielen Dank! [Diese Nachricht wurde von der-quest am 02. Apr. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Konstrukteur (m/w/d) | Menschen und Technologien zu verbinden, den Perfect Match für unsere Kunden zu gestalten, immer die richtigen Expert:innen für die jeweilige Herausforderung zu finden - das ist unser Anspruch bei FERCHAU und dafür suchen wir dich: als ambitionierte:n Mitarbeitende:n für einen unserer Kunden. Wir realisieren spannende Projekte für namhafte Kunden in allen Technologiebereichen und für alle Branchen und arbeiten mit an anspruchsvollen Lösungen für die Industrie.... | Anzeige ansehen | Konstruktion, Visualisierung |
|
forrestq Mitglied student
Beiträge: 4 Registriert: 06.12.2007
|
erstellt am: 06. Dez. 2007 13:25 <-- editieren / zitieren --> Unities abgeben: Nur für der-quest
Hallo zusammen! Habe mal ein frage? Ich fang gerade mit Makros zu arbeiten und habe null ahnung aber die makros kann ich nicht nutzen und mit vb.net zu arbeiten. wie kann ich ein punkte generieren oder der koordinaten von vb.net aufrufen? Lg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |