Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Strukturbaum traversieren und mit Simplify rausschreiben

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Strukturbaum traversieren und mit Simplify rausschreiben (3043 mal gelesen)
SaftLaden
Mitglied



Sehen Sie sich das Profil von SaftLaden an!   Senden Sie eine Private Message an SaftLaden  Schreiben Sie einen Gästebucheintrag für SaftLaden

Beiträge: 32
Registriert: 16.04.2009

erstellt am: 16. Apr. 2009 09:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

ich möchte den Strukturbaum traversieren und die einzelnen Baugruppen mit der Simplification-Funktion mit voreingestellter Auflösung rausschreiben. Die Dateinamen sollen gleich den Parnumbern sein. Alles voll automatisch.
Ich habe nun auch schon ein paar interessante Themen in diesem Forum gefunden. Allerdings laufen bei mir weder die Skripte die dort angegeben sind noch die aus der Automation-hilfe. Die Skripte bringen immer bei der Definition von Variablen einen Fehler:
z.B. Dim oDoc As Document

Woran liegt das? Muss ich irgendwas spezielles installieren?

Achja, arbeite hier auf ner 64bit-Maschine. R17 SP3

Vielen Dank im Voraus!

Holger

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 16. Apr. 2009 09:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für SaftLaden 10 Unities + Antwort hilfreich

Hallo Holger,
du musst evtl. die vba6.msi ausführen/installieren. Diese ist auf einer der Installations-CD´s zu finden.

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)

Konfuzius sprach: "Wer sich das Alte noch einmal vor Augen führt, um das Neue zu verstehen, der kann anderen ein Lehrer sein."

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SaftLaden
Mitglied



Sehen Sie sich das Profil von SaftLaden an!   Senden Sie eine Private Message an SaftLaden  Schreiben Sie einen Gästebucheintrag für SaftLaden

Beiträge: 32
Registriert: 16.04.2009

erstellt am: 16. Apr. 2009 10:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Dank für die schnelle Antwort!

Kann ich das irgendwie überprüfen, ob die bereits installiert ist? Ansonsten dauert das wieder so lange mit dem Support hier!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 16. Apr. 2009 10:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für SaftLaden 10 Unities + Antwort hilfreich

Es gibt im Softwaremanager dafür keinen Eintrag, falls du das meinst. Man könnte allerhöchstens schauen, ob die DLL´s da sind die installiert wurden, aber dazu kann ich dir nicht viel sagen, da ich nicht weis welche DLL´s installiert bzw. aktuallisiert werden.
Ich habe gerade mal geschaut ... schau mal, ob du die vbskco32.dll in deinem SYSWOW64-Ordner hast, dass müsste eine von den installierten sein. (Sicher bin ich mir jedoch nicht)

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)

Konfuzius sprach: "Wer sich das Alte noch einmal vor Augen führt, um das Neue zu verstehen, der kann anderen ein Lehrer sein."

[Diese Nachricht wurde von RSchulz am 16. Apr. 2009 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SaftLaden
Mitglied



Sehen Sie sich das Profil von SaftLaden an!   Senden Sie eine Private Message an SaftLaden  Schreiben Sie einen Gästebucheintrag für SaftLaden

Beiträge: 32
Registriert: 16.04.2009

erstellt am: 16. Apr. 2009 10:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Na, leider nicht gefunden. Muss mich also mal hier an den Support wenden.
....

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SaftLaden
Mitglied



Sehen Sie sich das Profil von SaftLaden an!   Senden Sie eine Private Message an SaftLaden  Schreiben Sie einen Gästebucheintrag für SaftLaden

Beiträge: 32
Registriert: 16.04.2009

erstellt am: 16. Apr. 2009 13:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

An einem anderen 32bit Rechner laufen nun die Skripts teilweise. Allerdings komme ich doch nicht so wirklich weiter. Hat hier schonmal jemand ein Skript erstellt um den Baum zu traversieren und dann die einzelnen Baugruppen mit Simplfy als cgr rauszuschreiben?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SaftLaden
Mitglied



Sehen Sie sich das Profil von SaftLaden an!   Senden Sie eine Private Message an SaftLaden  Schreiben Sie einen Gästebucheintrag für SaftLaden

Beiträge: 32
Registriert: 16.04.2009

erstellt am: 17. Apr. 2009 10:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Wollte nur mal Zwischenstand melden. Traversieren kann ich jetzt schon. Als nächstes werde ich die einzelnen Stufen mit Simplify rauschreiben. Probleme bekomme ich dann evtl. noch mit den Transformationen und den Bennenungen... Melde mich dann evtl. noch mal mit Dicken Fragen

Ansonsten schönes Wochenende!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SaftLaden
Mitglied



Sehen Sie sich das Profil von SaftLaden an!   Senden Sie eine Private Message an SaftLaden  Schreiben Sie einen Gästebucheintrag für SaftLaden

Beiträge: 32
Registriert: 16.04.2009

erstellt am: 17. Apr. 2009 12:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Leute,

es geht voran...

Also, schaffe es jetzt zu traversieren.
Kann mir jemand weiterhelfen mit folgendem Problem: Ich möchte den Strukturbaum beim Speichern als
Ordnerstruktur in Windows nachbilden:
Dabei soll der Ordner den namen der entsprechenden Baugruppe erhalten (also neuen Ordner anlegen)
In einem Ordner befinden sich dann die entsprechenden cgrs der darunterliegenden Baugruppen
Jede Baugruppe die weitere unterknoten enthält, bekommt einen weiteren Unterordner
u.s.w.

Achja, das zweite Problem:
wie bekomme ich die globalen Koordinaten des zu speichernden Teils heraus?

Danke im Voraus!

[Diese Nachricht wurde von SaftLaden am 23. Apr. 2009 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

tberger
Mitglied
Application Manager CATIA V5 / V6


Sehen Sie sich das Profil von tberger an!   Senden Sie eine Private Message an tberger  Schreiben Sie einen Gästebucheintrag für tberger

Beiträge: 1385
Registriert: 13.01.2007

WIN 7 64bit
V5R21SP3HF49
3DX/V6 R2016x

erstellt am: 17. Apr. 2009 12:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für SaftLaden 10 Unities + Antwort hilfreich

Hallo Holger,

ich habe dein Skript nicht getestet, aber zu deiner Aussage "die cgr's auf den unteren Ebenen haben nicht mehr die richtigen Koordinaren" faellt mir nur ein, dass diese soweit fuer die Unterbaugruppen-Sicht natuerlich stimmen. Deine Unterbaugruppen werden im Vergleich zur Hauptbaugruppe verschoben sein, deshalb die Translation der "unteren" cgr's. Wenn du anstelle eines Unterproducts mit Replace eine deiner neu erszeugten Unterbaugruppen-cgr's einsetzt, stimmt die Position dann auch wieder.
Das Rueckzurechnen ist denke ich im Bezug auf Sichern in ein cgr nicht so einfach bis unmoeglich.

Vielleicht ein Workaround hierzu: fuer jede Baugruppe des jeweiligen "unteren Levels" muesste in der Hauptbaugruppe eine weitere neue Unterbaugruppe eingefuegt werden und die Teile mit Copy und Paste dort eingefuegt werden. Wenn danach dein cgr-Makro diese scannt, wird die "richtige Position" im Vergleich zur Hauptbaugruppe fuer die einzelne Unterbaugruppe wiedergegeben.

Also koennte das Struktogramm ungefaehr so aussehen:

SCAN ueber Baugruppe nach Unterbaugruppen der Kinder
  Pro gefundene Enkel/Urenkel-Baugruppe in Hauptbaugruppe alle beteiligten Products und Parts als neue Unterbaugruppe einfuegen

Nach SCAN weiterer SCAN, der nur 1 Ebene (direkte Kinder) ausliest und mit deinem bisherigen Code rausschreibt.

Danach alle eingefuegten Baugruppen rausschmeissen bzw. Dokument schliessen und urspruengliches Dokument wieder laden falls gewuenscht.

Gruesse aus dem Rheinland

Thomas

------------------
CATIA - eine Laune der Natur ...

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SaftLaden
Mitglied



Sehen Sie sich das Profil von SaftLaden an!   Senden Sie eine Private Message an SaftLaden  Schreiben Sie einen Gästebucheintrag für SaftLaden

Beiträge: 32
Registriert: 16.04.2009

erstellt am: 17. Apr. 2009 14:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Thomas,

klingt nach nem Plan. Allerdings dachte ich, es wäre möglich die lokalen Koordinaten auf globale Koordinaten umrechnen zu lassen. Koordinatentransformation und so...Vielleicht finde ich da dann doch noch was.

Versuche nebenbei gerade das Erstellen von Windowsordnern in meinem Skript zu ermöglichen, um die Dateien jeweils in nen neuen Ordner zu speichern.

Nur macht folgende Funktion gar nichts:
' Existiert der Ordner?
If Not oFSO.FolderExists("F:\temp") Then
  ' Nein! Jetzt erstellen...
  If oFSO.CreateFolder("F:\temp") Then
    ' Ordner wurde korrekt erstellt!
  End If
End If

Muss ich da irgendwo in meinem Skript angeben, dass er die passende dll includen soll?

Grüße!

Holger

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Lusilnie
Mitglied



Sehen Sie sich das Profil von Lusilnie an!   Senden Sie eine Private Message an Lusilnie  Schreiben Sie einen Gästebucheintrag für Lusilnie

Beiträge: 1486
Registriert: 13.07.2005

erstellt am: 17. Apr. 2009 21:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für SaftLaden 10 Unities + Antwort hilfreich

Hallo SaftLaden,

wenn Du "Hilfe" zur Koordinatentransformation brauchst, schau Dir mal die in der CATIA-Hilfe vorhandenen Makros "DMUPstCopyPasteKeepAbsolutePosition.CATScript" und "DMUPstCutPasteKeepAbsolutePosition.CATScript" an. Dort wird dies anschaulich vorgeführt.


mfg,
Lusilnie

------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!!

frei nach größeren Geistern

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SaftLaden
Mitglied



Sehen Sie sich das Profil von SaftLaden an!   Senden Sie eine Private Message an SaftLaden  Schreiben Sie einen Gästebucheintrag für SaftLaden

Beiträge: 32
Registriert: 16.04.2009

erstellt am: 20. Apr. 2009 08:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke Lusilnie,

super! Jedoch, wie befürchtet sind die von Dir genannte Script nicht auf meinem Rechner vorhanden. Gibts die evtl. auch auf irgendner Internetseite zum downloaden? Unser Support braucht da wieder so ewig

Viele Grüße!

Holger

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SaftLaden
Mitglied



Sehen Sie sich das Profil von SaftLaden an!   Senden Sie eine Private Message an SaftLaden  Schreiben Sie einen Gästebucheintrag für SaftLaden

Beiträge: 32
Registriert: 16.04.2009

erstellt am: 20. Apr. 2009 09:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

SaftLaden
Mitglied



Sehen Sie sich das Profil von SaftLaden an!   Senden Sie eine Private Message an SaftLaden  Schreiben Sie einen Gästebucheintrag für SaftLaden

Beiträge: 32
Registriert: 16.04.2009

erstellt am: 20. Apr. 2009 11:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Da hab ich dann glatt mal ne frage dazu. Das Skript läuft leider nicht durch. Steigt bei der letzten Zeile, des folgend angegebenen Quelltextes aus. Methode wird nicht unterstützt.

Sub CATMain()

  ' Retrieve the Groups collection
  Dim cGroups As AnyObject
  Set cGroups = CATIA.ActiveDocument.Product.GetTechnologicalObject("Groups")

  ' Create a group with selected products
  Dim oGroup As Group
  Set oGroup = cGroups.AddFromSel
  If (oGroup.CountExplicit = 0) Then
    Msgbox "No product selected"
  Else

    ' Acquire the component to paste onto
    Dim oSelection As Selection
    Set oSelection = CATIA.ActiveDocument.Selection
    oSelection.Clear
    Dim sIID(0)
    sIID(0) = "Product"
    Dim sOutputState As String
    sOutputState = oSelection.SelectElement(sIID, "Select the component to paste onto", true)
'Hier Meldung, dass Methode durch Objekt nicht unterstützt

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Lusilnie
Mitglied



Sehen Sie sich das Profil von Lusilnie an!   Senden Sie eine Private Message an Lusilnie  Schreiben Sie einen Gästebucheintrag für Lusilnie

Beiträge: 1486
Registriert: 13.07.2005

erstellt am: 20. Apr. 2009 22:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für SaftLaden 10 Unities + Antwort hilfreich

Hallo SaftLaden,

Du arbeitest doch mit R17? Die Methode "SelectElement" wird seit R16 nicht mehr unterstützt! Du musst nun "SelectElement2" verwenden:

Code:
sOutputState = oSelection.SelectElement2(sIID, "Select the component to paste onto", true)
Eventuell solltest Du auch die Selection "oSelection" ohne Typ deklarieren bzw. den Typ "auskommetieren", etwa so:
Code:
Dim oSelection 'As Selection


mfg,
Lusilnie

------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!!

frei nach größeren Geistern

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SaftLaden
Mitglied



Sehen Sie sich das Profil von SaftLaden an!   Senden Sie eine Private Message an SaftLaden  Schreiben Sie einen Gästebucheintrag für SaftLaden

Beiträge: 32
Registriert: 16.04.2009

erstellt am: 21. Apr. 2009 17:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Du bist a echter *****
Werde mich morgen nochmal dem Skript widmen und schauen, ob ichs updaten kann.

Kannst Du eigentlich ein Buch(außer der Hilfe) empfehlen um das Skripten zu lernen?

Viele Grüße!

Holger

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

denyo_1
Moderator
Manager


Sehen Sie sich das Profil von denyo_1 an!   Senden Sie eine Private Message an DanielFr.  Schreiben Sie einen Gästebucheintrag für DanielFr.

Beiträge: 2506
Registriert: 10.08.2005

HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3

erstellt am: 21. Apr. 2009 17:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für SaftLaden 10 Unities + Antwort hilfreich

Hallo,

ja schau mal hier: Kochbuch - CATIA V5 automatisieren

anonsten ist das wie beim lernen jeder Priogrammiersprache.

1. Codes besorgen
2. Codes lesen und verstehen
3. Codes lesen und verstehen
4. Codes lesen und verstehen
5. Try and Error und viel Lust an der Sache

------------------
MFG Daniel

Die KATJA ist halt doch nur ne zickige Französin

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SaftLaden
Mitglied



Sehen Sie sich das Profil von SaftLaden an!   Senden Sie eine Private Message an SaftLaden  Schreiben Sie einen Gästebucheintrag für SaftLaden

Beiträge: 32
Registriert: 16.04.2009

erstellt am: 22. Apr. 2009 08:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Daniel,

ja der Spaß an der Sache ist auf jeden Fall vorhanden. Punkte 1 bis 5 werden daher auch fleißig abgearbeitet. Manchmal geht mir nur etwas der Überblick über die Objektstruktur in CATIA verloren. Ein bischen hilft mir jedoch meine Erfahrung bei der Programmierung von Szenegraphen...

Viele Grüße!

Holger

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SaftLaden
Mitglied



Sehen Sie sich das Profil von SaftLaden an!   Senden Sie eine Private Message an SaftLaden  Schreiben Sie einen Gästebucheintrag für SaftLaden

Beiträge: 32
Registriert: 16.04.2009

erstellt am: 23. Apr. 2009 10:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

So jetzt hab ich in Bezug aufs verstehen nochmal Fragen

1:Warum wird cGroups als AnyObject deklariert? Ich dachte cGroups müsste als Groups oder Collection deklariert werden?? (Collection ist ja keine Ableitung von AnyObject)
2:Ist es so, dass GetTechnologicalObject("Groups") alle Knoten meines geöffneten Produktes ausgibt?

Sub CATMain()

  ' Retrieve the Groups collection
  Dim cGroups As AnyObject
  Set cGroups = CATIA.ActiveDocument.Product.GetTechnologicalObject("Groups")

  ' Create a group with selected products
  Dim oGroup As Group
  Set oGroup = cGroups.AddFromSel
  If (oGroup.CountExplicit = 0) Then
    Msgbox "No product selected"
  Else

    ' Acquire the component to paste onto
    Dim oSelection As Selection
    Set oSelection = CATIA.ActiveDocument.Selection
    oSelection.Clear
    Dim sIID(0)
    sIID(0) = "Product"
    Dim sOutputState As String
    sOutputState = oSelection.SelectElement(sIID, "Select the component to paste onto", true)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SaftLaden
Mitglied



Sehen Sie sich das Profil von SaftLaden an!   Senden Sie eine Private Message an SaftLaden  Schreiben Sie einen Gästebucheintrag für SaftLaden

Beiträge: 32
Registriert: 16.04.2009

erstellt am: 23. Apr. 2009 15:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Jetzt muss ich gleich nochmal was fragen. Und zwar kapier ich die GetAbs Funktion nicht

' ***********************************************************************
'
' Purpose:  Retrieve the absolute position of a product.
'
' Inputs :  oProduct Product    the product
'          oRoot    Product    the root product
'
' Outputs:  position Array      array corresponding to position of the product
'
' ***********************************************************************
Sub GetAbsPosition ( ByRef oProduct, ByRef oRoot, ByRef position )

  If (oProduct.Name = oRoot.Name) Then
    position( 0) = 1.0
    position( 1) = 0.0
    position( 2) = 0.0
    position( 3) = 0.0
    position( 4) = 1.0
    position( 5) = 0.0
    position( 6) = 0.0
    position( 7) = 0.0
    position( 8) = 1.0
    position( 9) = 0.0
    position(10) = 0.0
    position(11) = 0.0
  Else
    Dim positionToFather(11)
    Dim fatherAbsolutePosition(11)
    oProduct.Position.GetComponents positionToFather
    GetAbsPosition oProduct.Parent.Parent, oRoot, fatherAbsolutePosition
    MatrixProduct positionToFather, fatherAbsolutePosition, position
  End If

End Sub

Soweit ich das lesen kann:
Falls das übergebene Produkt gleich dem RootProdukt wird die Position auf den globalen Ursprung gesetzt.
Was passiert aber im Else Teil? Denn Sinn kapier ich nicht. Wird hier nicht immer wieder die Funktion in sich aufgerufen, so lange bis auch wieder das rootProdukt erreicht ist?
Wann wird die letzte Zeile des ElseTeils überhaupt abgearbeitet? Die wird doch nie aufgerufen oder?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

zoltan.bekesi
Mitglied



Sehen Sie sich das Profil von zoltan.bekesi an!   Senden Sie eine Private Message an zoltan.bekesi  Schreiben Sie einen Gästebucheintrag für zoltan.bekesi

Beiträge: 321
Registriert: 22.10.2006

Job:
CATIA V5R19 / XP 32bit
MS Office 2003
Microstation V8 2004 Edition
DELL Precision M6300

erstellt am: 23. Apr. 2009 17:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für SaftLaden 10 Unities + Antwort hilfreich

Hallo Holger,

das ist eine rekursive Funktion. Es ist notwendig, da jedes Product nur seine Position bezüglich den übergegebenen Product enthält.
Wenn du in der ersten Ebene bist (nur Root über den Product), dann besteht die Transformation zur akutellen Product nur aus einen Teil, du kannst die Transformation gleich speichern.
Wenn du aber schon in den Zweiten Ebene bist, musst du die Transformation von Root auf Ebene1 mit der Transformation von Ebene1 auf Ebene2 "zusammenführen". Wenn du noch eine dritte Ebene hast,
dann nochmals.

Nehmen wir folgenden Baum als Beispiel:
RootProduct
+Product1_Ebene1
  +Part1_Ebene2
+Product2_Ebene1
  +Product3_Ebene2
    +Part2_Ebene3

Die rekursive Funktion arbeitet wie folgt:
1)Es werden die Products der ersten Ebene in eine Schleife durchgelaufen
2)Du bist bei Product1_Ebene1: Eltern=Root --> Transformation Speichern
3)Hat Product1_Ebene1 Kinder? --> Ja
4)Es wird eine Schleife mit den Parts/Products der Ebene 2 unter Product1_Ebene1 durchgelaufen
5)Du bist bei Part1_Ebene2: Eltern<>Root, Else Zweig -->
  *Tranformation zu der Elternteil wird ausgelesen.
  *Funktion wird nochmals mit der Elternteil aufgerufen
  *Es wird quasi nochmals 2) ausgeführt
  *Es wird die resultierende Transformation berechnet (es ist der Produkt der beiden Transformationen)
6)Du bist bei Product2_Ebene1: Eltern=Root --> Transformation Speichern
7)Hat Product2_Ebene1 Kinder? --> Ja
8)Es wird eine Schleife mit den Parts/Products der Ebene 2 unter Product2_Ebene1 durchgelaufen
9)Du bist bei Product3_Ebene2: Eltern<>Root, Else Zweig -->
  *Tranformation zu der Elternteil wird ausgelesen.
  *Funktion wird nochmals mit der Elternteil aufgerufen
  *Es wird quasi nochmals 6) ausgeführt
  *Es wird die resultierende Transformation berechnet (es ist der Produkt der beiden Transformationen)
10)Hat Product3_Ebene2 Kinder? --> Ja
11)Du bist bei Part2_Ebene3: Eltern<>Root, Else Zweig -->
  *Tranformation zu der Elternteil wird ausgelesen.
  *Funktion wird nochmals mit der Elternteil aufgerufen
  *Es wird quasi nochmals 9) ausgeführt
  *Es wird die resultierende Transformation berechnet (es ist der Produkt der beiden Transformationen)

Ich hoffe, die Erklärung bringt dich weiter.

Gruß,
Zoltan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SaftLaden
Mitglied



Sehen Sie sich das Profil von SaftLaden an!   Senden Sie eine Private Message an SaftLaden  Schreiben Sie einen Gästebucheintrag für SaftLaden

Beiträge: 32
Registriert: 16.04.2009

erstellt am: 23. Apr. 2009 17:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Zoltan,

super vielen Dank für Deine Antwort! Ich checks aber leider noch nicht ganz..Siehe text->


Zitat:
Original erstellt von zoltan.bekesi:
Hallo Holger,

das ist eine rekursive Funktion. Es ist notwendig, da jedes Product nur seine Position bezüglich den übergegebenen Product enthält.
Wenn du in der ersten Ebene bist (nur Root über den Product), dann besteht die Transformation zur akutellen Product nur aus einen Teil, du kannst die Transformation gleich speichern.
Wenn du aber schon in den Zweiten Ebene bist, musst du die Transformation von Root auf Ebene1 mit der Transformation von Ebene1 auf Ebene2 "zusammenführen". Wenn du noch eine dritte Ebene hast,
dann nochmals.

Nehmen wir folgenden Baum als Beispiel:
RootProduct
+Product1_Ebene1
   +Part1_Ebene2
+Product2_Ebene1
   +Product3_Ebene2
     +Part2_Ebene3

Die rekursive Funktion arbeitet wie folgt:
1)Es werden die Products der ersten Ebene in eine Schleife durchgelaufen
2)Du bist bei Product1_Ebene1: Eltern=Root --> Transformation Speichern
3)Hat Product1_Ebene1 Kinder? --> Ja
Wo wird diese Abfrage gemacht? Ich hatte gedacht die Funktion geht durch ....Parent.Parent in der Hierarchie nach oben(also Richtung root)!?
Außerdem checke ich immer noch nicht wann die Zeile
MatrixProduct positionToFather, fatherAbsolutePosition, position
überhaupt gelesen wird, wenn vorher doch immer wieder die Funktion GetAbs aufgerufen wird?? Also im Programmtext wieder nach oben gesprungen wird.

4)Es wird eine Schleife mit den Parts/Products der Ebene 2 unter Product1_Ebene1 durchgelaufen
5)Du bist bei Part1_Ebene2: Eltern<>Root, Else Zweig -->
  *Tranformation zu der Elternteil wird ausgelesen.
  *Funktion wird nochmals mit der Elternteil aufgerufen
  *Es wird quasi nochmals 2) ausgeführt
  *Es wird die resultierende Transformation berechnet (es ist der Produkt der beiden Transformationen)
6)Du bist bei Product2_Ebene1: Eltern=Root --> Transformation Speichern
7)Hat Product2_Ebene1 Kinder? --> Ja
8)Es wird eine Schleife mit den Parts/Products der Ebene 2 unter Product2_Ebene1 durchgelaufen
9)Du bist bei Product3_Ebene2: Eltern<>Root, Else Zweig -->
  *Tranformation zu der Elternteil wird ausgelesen.
  *Funktion wird nochmals mit der Elternteil aufgerufen
  *Es wird quasi nochmals 6) ausgeführt
  *Es wird die resultierende Transformation berechnet (es ist der Produkt der beiden Transformationen)
10)Hat Product3_Ebene2 Kinder? --> Ja
11)Du bist bei Part2_Ebene3: Eltern<>Root, Else Zweig -->
  *Tranformation zu der Elternteil wird ausgelesen.
  *Funktion wird nochmals mit der Elternteil aufgerufen
  *Es wird quasi nochmals 9) ausgeführt
  *Es wird die resultierende Transformation berechnet (es ist der Produkt der beiden Transformationen)

Ich hoffe, die Erklärung bringt dich weiter.

Gruß,
Zoltan


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SaftLaden
Mitglied



Sehen Sie sich das Profil von SaftLaden an!   Senden Sie eine Private Message an SaftLaden  Schreiben Sie einen Gästebucheintrag für SaftLaden

Beiträge: 32
Registriert: 16.04.2009

erstellt am: 23. Apr. 2009 18:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich hab jetzt nochmal einen kleinen Test mit dem Past und Copy script gemacht.
Und zwar habe ich mit Hilfe des Skripts mehrere Bauteile aus einer tiefen Hierarchiebene in die erste Kopiert.
Anschließend habe ich die sich nun auf der ersten Ebene befindlichen Bauteile einzeln als cgr-Files rausgeschrieben.

Tja und siehe da die Bauteile waren nach erneutem reinladen dere einzelnen cgrs zueinander versetzt?? Dürfte ja eigentlich nicht sein, wenn dass Skript die Positionen vorher absolut gesetzt hat.
Versteht das jemand?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

zoltan.bekesi
Mitglied



Sehen Sie sich das Profil von zoltan.bekesi an!   Senden Sie eine Private Message an zoltan.bekesi  Schreiben Sie einen Gästebucheintrag für zoltan.bekesi

Beiträge: 321
Registriert: 22.10.2006

Job:
CATIA V5R19 / XP 32bit
MS Office 2003
Microstation V8 2004 Edition
DELL Precision M6300

erstellt am: 23. Apr. 2009 19:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für SaftLaden 10 Unities + Antwort hilfreich


RekursivDurchBaumMitTransformationen.txt

 
Hallo Holger,

du hast recht, meine Beschreibung ist eher der Idealfall, wie es gehen sollte. Ich habe in der Hilfe nach den kompletten Skript gesucht. Die Funktion ist zwar rekursiv, aber nicht so komplett, wie ich es beschrieben habe.
Zuerst die einfachere Antwort: MatrixProduct wird aufgerufen, sobald z.B. die vierte Stern in 5).

Code:
oProduct.Position.GetComponents positionToFather 'Position bezüglich Elternteil auslesen
    GetAbsPosition oProduct.Parent.Parent, oRoot, fatherAbsolutePosition 'Aufruf einer weiterer Instanz der Funktion
    MatrixProduct positionToFather, fatherAbsolutePosition, position 'wenn obere Zeile zurückkehrt (es wird, da der Baum nicht unendlich tief sein kann), wird diese Zeile ausgeführt
  End If

Der Skript in der Hilfedatei angelt sich nicht komplett durch den Baum, es werden nur die vor der Makrostart selektierte Products durchgelaufen. Von der Skript kannst du nur die Transformationen verwerten. Für rekursive Suche im Baum ist es nicht geeignet.

In diesen Beitrag Rekursion im Baum findest du zum Beispiel ein Beispiel für die Rekursion. In diesen Skript musst du anstatt "Zählen" die Transformation berechnen.

Ist aber generell die Frage, wie du die Struktur nachbauen möchtest. Die einfachste Weg wäre, die gesamte Produktstruktur bis zum letzten Part nachbauen (Transformation zu Eltern abfragen, Product einfügen, Transformation anwenden) und am Part den CGR einzufügen.

Ich habe ein Skript beigelegt, wo die Rekursion im Baum gemacht wird. (Hier findest du die bisher fehlende Schritte aus meine Beschreibung) Unter VBA wird ins Immediate Window einiges über jeden Product/Part ausgegeben. Die obere Teil ist recht einfach aufgebaut. In VBA kannst du auch Schritt für Schritt ausführen und so die Verzweigung der Programmlauf kennenlernen.
Als Kommentare habe ich angegeben, wo du wegen Struktur neuaufbauen welche Teile einfügen solltest.

Das müsste dich um einiges näher ans Ziel bringen.

Hierzu muss ich noch anmerken, dass es unter DMU eigentlich ein Befehl gibt (nur leider weiß ich die Name nicht mehr), was ein Product als eine Struktur von Products/CGRs speichert, wie es die CATIA Cache Management tut. Vielleicht weiß es ja jemand hier im Forum. Das könnte dein Leben ggf. noch einfacher machen.

Gruß,
Zoltan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SaftLaden
Mitglied



Sehen Sie sich das Profil von SaftLaden an!   Senden Sie eine Private Message an SaftLaden  Schreiben Sie einen Gästebucheintrag für SaftLaden

Beiträge: 32
Registriert: 16.04.2009

erstellt am: 24. Apr. 2009 14:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Nochmal dickes Danke! Hat mir richtig geholfen.
Jetzt hab ich das rekursive Durchlaufen eines Baumes echt kapiert.

Für mein Problem müsste ich doch jetzt nur während der Baum durchlaufen wird, für jeden Knoten die Position auf den eins darüber liegenden Knoten umrechnen (und natürlich jeweils anschließend sofort aktualisieren).

Wie rechne ich dies aus? Beispiel Berechnung Absolute Position von Child1.1.1

Parent1 (parent1rel
  Child1.1 (child1.1rel)
    Child1.1.1 (child1.1.1rel)

Um die absolute Position von Child1.1.1 zu bekommen muss ich jweils eine Matrixmultiplikation durchführen?
1: child1.1Absolut=Child1.1rel * parent1rel
2: child1.1.1Absolut = child1.1.1rel*child1.1Absolut

Stimmt das? Oder muss ich mit der Inversen multiplizieren?


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

zoltan.bekesi
Mitglied



Sehen Sie sich das Profil von zoltan.bekesi an!   Senden Sie eine Private Message an zoltan.bekesi  Schreiben Sie einen Gästebucheintrag für zoltan.bekesi

Beiträge: 321
Registriert: 22.10.2006

Job:
CATIA V5R19 / XP 32bit
MS Office 2003
Microstation V8 2004 Edition
DELL Precision M6300

erstellt am: 24. Apr. 2009 16:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für SaftLaden 10 Unities + Antwort hilfreich

Hallo Holger,

Parent 1 (hat keine Transformation ist "fix")
  Child1.1 (Transformation zu Parent1 (ausgelesen) = Transf_Child11_Parent1)
  Child1.1.1 (Transformation zu Child1.1 (ausgelesen) = Transf_Child111_Child11)

Wenn du den cgr von Child1.1.1 in den Ursprung von Child1.1.1 erstellt und es unter NewParent1 einfügen willst so, dass die originale Position erhalten bleibt, dann musst du Transf_Child111_Child11*Transf_Child11_Parent1 als Transformation anwenden (d.h. in zwei Schritten zurück zur Ursprung). Reihenfolge ist auch wichtig

Wenn du nur eine Ebene zurückgehen willst, brauchst du nichts multiplizieren.

Wolltest du ein Achsensystem erzeugen, was den Ursprung von Parent1 im Ursprung von Child1.1.1 anzeigt, dann bräuchtest du die Inverse (für die Definition der Achsensystem).

Gruß,
Zoltan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

SaftLaden
Mitglied



Sehen Sie sich das Profil von SaftLaden an!   Senden Sie eine Private Message an SaftLaden  Schreiben Sie einen Gästebucheintrag für SaftLaden

Beiträge: 32
Registriert: 16.04.2009

erstellt am: 27. Apr. 2009 09:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke!
Das heißt wenn ich ein Produkt auf absolute Koordinaten umrechnen möchte, muss ich den Baum von unten nach oben durchlaufen und jeweils
Trafo = Trafo * ElternTrafo
Berechenen. Werde das mal testen

Jetzt habe ich aber noch ein anderes Problem. Und zwar soll der Nutzer die Tesselierungsstufe eingeben. Problem ist, dass nur der Wert vor dem Komma verwendet wird. Warum checke ich nicht. Ich habe sowohl Punkt als auch Komma versucht. Wenn ich die Zahl hart codiere gehts???

Genauigkeit = InputBox("Gewünschte Tessellierungsstufe eingeben:")
Set document1 = simplifications1.ComputeSimplification(group1,Genauigkeit)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

zoltan.bekesi
Mitglied



Sehen Sie sich das Profil von zoltan.bekesi an!   Senden Sie eine Private Message an zoltan.bekesi  Schreiben Sie einen Gästebucheintrag für zoltan.bekesi

Beiträge: 321
Registriert: 22.10.2006

Job:
CATIA V5R19 / XP 32bit
MS Office 2003
Microstation V8 2004 Edition
DELL Precision M6300

erstellt am: 27. Apr. 2009 20:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für SaftLaden 10 Unities + Antwort hilfreich

Hallo Holger,

versuche es mit CDbl(Eingabestring) anstatt einfach die Rückkehrwert der Eingabe zu übergeben. Implizite Konversion führt nicht immer zur richtigen Ergebnis.
Ich habe auch mal als Lösung gesehen, am Anfang der Applikation ein bekannter String auf Double zu konvertieren (mit Komma und Punkt) und so entscheiden, welcher Trennzeichen verwendet wird. Unter .NET ist es dann etwas einfacher, aber bei mir war die genannte Methode auch sehr hilfreich.

Gruß,
Zoltan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz