| | |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SolidEdge |
| | |
 | SPOT-ON: Teilefamilien und wiederverwendbare Komponenten in NX CAD, ein Webinar am 19.11.2025
|
|
Autor
|
Thema: wie finde ich ein part in der documents collection? (1806 mal gelesen)
|
drcmda Mitglied
 
 Beiträge: 176 Registriert: 10.07.2002
|
erstellt am: 09. Jul. 2003 17:20 <-- editieren / zitieren --> Unities abgeben:         
okay schon klar ich könnte mit einer schleife jedes dokument einzeln durchlaufen, nun habe ich aber leider eine riesige baugruppe mit über 300 parts bzw. sub assemblies. alles was ich besitze ist der pfad des dokuments und der vollständige name. gibt es sowas wie eine .FindDocument methode die ich übersehen habe oder kniffe jeglicher art? paul Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Arne Peters Ehrenmitglied V.I.P. h.c. CAD Dokumentation / Training / Programmierung / Datenbanken
     
 Beiträge: 7467 Registriert: 05.2002.24 Solid Edge Seminarunterlagen Training, Beratung, Programmierung
|
erstellt am: 09. Jul. 2003 17:41 <-- editieren / zitieren --> Unities abgeben:          Nur für drcmda
Objekte lassen sich in der Regel auch über den Namen ansprechen, wenn dieser Bekannt ist. Name als String also entweder eine Stringvariable oder "Name" set objMuell= Collection(Name) Viele Grüße APeters@BSS-Online.de [Diese Nachricht wurde von Arne Peters am 09. Juli 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
drcmda Mitglied
 
 Beiträge: 176 Registriert: 10.07.2002
|
erstellt am: 09. Jul. 2003 17:49 <-- editieren / zitieren --> Unities abgeben:         
vielen dank für die schnelle antwort ... aber ... du meinst die collection referenzierung - wäre super wenn solid edge (v 12 in meinem fall) jene unterstützen würde. oder ich habe etwas mit dem index-namen falsch gemacht. ich werds nochmal überprüfen aber meiner meinung nach hatte ich an dieser stelle schon vergebens gesucht Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pablo Mitglied Techniker
 
 Beiträge: 453 Registriert: 23.01.2002 Win10 Office 365 SE 2019
|
erstellt am: 09. Jul. 2003 19:52 <-- editieren / zitieren --> Unities abgeben:          Nur für drcmda
Hallo Paul, ich nehme an, du meinst die LinkedDocuments Collection im Revisionmanager. Hier wird immer nur die oberste Ebene untersucht, d.h. du kommst um eine Schleife nicht herum. Im Custom - Verzeichnis gibt es ein Beispiel RevManager mit einer rekursiven Funktion, die du dir zurechtbiegen kannst. HTH pablo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
drcmda Mitglied
 
 Beiträge: 176 Registriert: 10.07.2002
|
erstellt am: 09. Jul. 2003 20:20 <-- editieren / zitieren --> Unities abgeben:         
ich meine die haupt-dokumente also Application.Documents. mittlerweile habe ich eine relativ schnelle funktion dafür geschrieben bitte nicht über die größe wundern da ich ein paar sachen wie zb. unnötige knotenaufrufe versuche zu vermeiden - manchmal ist mehr code halt doch schneller als weniger  für meine 300+ assembly braucht sie 3 sekunden bis sie das *letzte* dokument gefunden hat. Code:
dim cad_obj as object Set cad_obj = GetObject(, "SolidEdge.Application")Private Function search_document(ByVal FullFileName As String, Optional root_obj As Object = Nothing) As Object On Error GoTo quit_error Dim cur_doc As Object Dim cur_occ As Object Dim tst_doc As Object If root_obj Is Nothing Then For Each cur_doc In cad_obj.Documents Set tst_doc = search_document(FullFileName, cur_doc) If Not tst_doc Is Nothing Then GoTo quit_save Next Else If root_obj.fullname = FullFileName Then Set search_document = root_obj Exit Function End If If root_obj.Type = 3 Then For Each cur_occ In root_obj.Occurrences If cur_occ.OccurrenceFileName = FullFileName Then Set search_document = cur_occ.OccurrenceDocument Exit Function End If If cur_occ.Type = -1879909116 Then Set tst_doc = search_document(FullFileName, cur_occ.OccurrenceDocument) If Not tst_doc Is Nothing Then GoTo quit_save End If Next End If End If quit_error: Set search_document = Nothing Exit Function quit_save: Set search_document = tst_doc End Function
wäre trotzdem für andere vorschläge oder optimierungen aller art sehr dankbar... paul Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
drcmda Mitglied
 
 Beiträge: 176 Registriert: 10.07.2002
|
erstellt am: 09. Jul. 2003 20:35 <-- editieren / zitieren --> Unities abgeben:         
vieleicht noch ein paar kleinigkeiten... ich bin absolut kein vb programmierer ( ich werde gezwungen in vb zu programmieren  ) könnte mir jemand sagen was schneller ist? 1. bezüglich schleifen --- for each --- oder --- for i=0 to blabla.count --- set cur_bla = blabla(i) 2. bezüglich des objekt typs --- if TypeOf Object = BlaObject --- oder --- das explizite auslesen über eine eigenschaft (insofern diese vorhanden ist) vielen dank, paul Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Marco Kreutz Mitglied
  
 Beiträge: 640 Registriert: 11.02.2003 SolidEdge 2021, SolidWorks 2021, Inventor 2020, PRO/E Creo1 und Creo2 VB 6.0 / VB.NET / C#.NET Windows 10 64bit
|
erstellt am: 10. Jul. 2003 14:31 <-- editieren / zitieren --> Unities abgeben:          Nur für drcmda
Hallo, du lässt dich auf ein Abenteuer ein. Wir haben ein ZIP Programm für SolidEdge entwickelt und in der Entwicklung festgestellt, dass die Objekte von SolidEdge eine sehr komplizierte Datenstruktur beinhaltet. Unser ZIP Programm beherrscht alle Dokumenttypen und Referenzen die in SolidEdge vorkommen. Zusätzlich werden die Zeichnungen (Draft) erkannt und mit in die Struktur aufgenommen. Zu erst muss man sich fragen welche Informationen benötige ich aus der Dokumentenstruktur? Will ich eine Stückliste erstellen, dann muss ich rekursiv die SolidEdge Objekte durchlaufen. Hier dürfen allerdings nur klassische Verknüpfungen vorhanden sein. Unter Klassischen Verknüpfungen verstehe ich Part -> Asm -> DFT. Die Stückliste einer Schweißbaugruppe kann so nicht erstellt werden. Es besteht auch die Möglichkeit diese Informationen mit dem Revision Manager rekursiv auslesen. Hier ist zu beachten, dass eventuell Circle-Links vorhanden sind. Diese Circle-Links sind Referenzen die auf sich selbst verweisen. Somit würde die Rekursion unendlich laufen.... Des weiteren muss beim Arbeiten mit dem Revision Manager beachtetet werden, dass die Ole Verknüpfungen (Office, TIF, BMP ...) ausgefiltert werden müssen. Will ich eine einfache Dokumentenstruktur haben – so ist folgendes zu beachten: Bei Teilefamilie (Asm) ist im Dateiname immer der FamilieName enthalten und dieser ist auszufiltern. z.B. Baugruppe.asm!FamilieName. Die exportierten Assembly Member Dokumente haben keine Referenz auf das Top-Dokument. Jedoch Part-Familie haben eine Referenz auf das Top Dokument und dies kann nur mit dem Revision Manager bearbeitet werden. Hier einige Besonderheiten der möglichen Referenzen: Baugruppe in Part – Nur mit dem Revision Manager Part in Part – Nur mit dem Revision Manager Weldment in Part/Assembly/Draft nur mit Revision Manager Office Dokumente nur mit dem Revision Manager Circle Referenzen mit dem Revision Manager beachten und ausfiltern. Es gibt noch jede Menge dazu zu sagen, aber ich denke das reicht es mal für den Anfang. Lass mich wissen was du genau benötigt – ich bin gerne bereit dich dabei zu unterstützten.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
drcmda Mitglied
 
 Beiträge: 176 Registriert: 10.07.2002
|
erstellt am: 16. Jul. 2003 12:30 <-- editieren / zitieren --> Unities abgeben:         
hallo marco... es geht im grunde genommen um die parametrik und zusätzlichen informationen eines parts. weiterhin sind draftings, asm occurenzes, familientabellen und ja genau -ganz vergessen- features relativ wichtig für mich. allerdings habe mittlerweile alles was ich brauche. was meinst du mit 'komplizierte datenstruktur', soweit ich sehen kann hat SE das einfachste interface weit und breit, schon mal mit pro/e, unigraphics oder ideas eine anwendung geschrieben (?) die hölle auf erden  aber im grunde genommen wird alles ertragbar wenn man lange genug damit auseinandersetzt. dürfte ich fragen was dieses zip format macht? werden die daten gespeichert und dann wieder komplett von anfang an neu aufgebaut. paul Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jürgen Niesner Mitglied
  
 Beiträge: 505 Registriert: 26.11.2001
|
erstellt am: 16. Jul. 2003 13:28 <-- editieren / zitieren --> Unities abgeben:          Nur für drcmda
Zitat:
Es besteht auch die Möglichkeit diese Informationen mit dem Revision Manager rekursiv auslesen. Hier ist zu beachten, dass eventuell Circle-Links vorhanden sind. Diese Circle-Links sind Referenzen die auf sich selbst verweisen. Somit würde die Rekursion unendlich laufen.... Des weiteren muss beim Arbeiten mit dem Revision Manager beachtetet werden, dass die Ole Verknüpfungen (Office, TIF, BMP ...) ausgefiltert werden müssen.
Dieses Problem kann man vermeiden wenn man in der RevManager-API mit RevManagerDokument.LinkedDocuments(seLinkTypeNormal) und RevManagerDokument.LinkedDocuments(seLinkTypeInterpart) verwendet. Verwendet man LinkedDocuments() bekommt man alle Links. Folge ist das man sich bei einem rekursiven Auslesen der Links in einem Kreis bewegt. Zitat: Bei Teilefamilie (Asm) ist im Dateiname immer der FamilieName enthalten und dieser ist auszufiltern. z.B. Baugruppe.asm!FamilieName. Die exportierten Assembly Member Dokumente haben keine Referenz auf das Top-Dokument. Jedoch Part-Familie haben eine Referenz auf das Top Dokument und dies kann nur mit dem Revision Manager bearbeitet werden.
Achtung, Begriffe nicht mischen: Teilefamilien (Endung "par") und Baugruppenfamilien (Endung "asm"). Bei einer Baugruppenfamilie stecken alle Infos in einer Datei, die Memeber werden in der RevManager-API dadurch unterschieden, dass hinter dem Dateinamen nach einem Ausrufezeichen der Name des Members kommt z.B.: Baugruppenfamilie.asm!Member1 Bei Teilefamilien Gibt es einen Master und die einzelnene Members als einzelne Dateien. Die Memebers haben normale Links zum Master, der Master hat zu allen Members einen Interpartlink (siehe Skizze). Meine Empfehlung: Links immer ausschließlich über den revManager auslesen, da der RevManager 1.alle Links einer Datei ausspuckt, ich brauch mich nicht durch Variablentabllen, Familientabellen, Features, usw. hindurch arbeiten und eine Vielzahl von Fallunterscheidungen aufbauen. 2.auch wenn neue Funktionen in zukünftigen Versionen von SE eingebaut werden, die hier entstehenden Interpartlinks, mit den bekannten API -Funktionen auflsiten wird. Zumindest gehe ich davon aus dass hier die Wahrscheinlichkeit, dass ich ohne Programmanpassung auskomme um ein Vielfaches höher ist. Jürgen ------------------ Es gibt keine dummen Anwender, die Fehler machen, es gibt nur schlechte Software, die Anwenderfehler zulässt [Diese Nachricht wurde von Jürgen Niesner am 16. Juli 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Arne Peters Ehrenmitglied V.I.P. h.c. CAD Dokumentation / Training / Programmierung / Datenbanken
     
 Beiträge: 7467 Registriert: 05.2002.24 Solid Edge Seminarunterlagen Training, Beratung, Programmierung
|
erstellt am: 16. Jul. 2003 23:19 <-- editieren / zitieren --> Unities abgeben:          Nur für drcmda
|
Jürgen Niesner Mitglied
  
 Beiträge: 505 Registriert: 26.11.2001
|
erstellt am: 17. Jul. 2003 07:08 <-- editieren / zitieren --> Unities abgeben:          Nur für drcmda
Nach fast einem Jahr als Wanderprediger über Interpartlinks hat man seine Techniken und Methoden zur Darstellung des Problems soweit perfektioniert, damit es alle verstehen, im gesamten Europa, bis auf ein kleines Dorf ganz im Nordwesten von Neckarland-Schwaben. ------------------ Es gibt keine dummen Anwender, die Fehler machen, es gibt nur schlechte Software, die Anwenderfehler zulässt Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Marco Kreutz Mitglied
  
 Beiträge: 640 Registriert: 11.02.2003 SolidEdge 2021, SolidWorks 2021, Inventor 2020, PRO/E Creo1 und Creo2 VB 6.0 / VB.NET / C#.NET Windows 10 64bit
|
erstellt am: 17. Jul. 2003 08:17 <-- editieren / zitieren --> Unities abgeben:          Nur für drcmda
Hallo drcmda, Zitat: --------------------------------------------------------------------- dürfte ich fragen was dieses zip format macht? werden die daten gespeichert und dann wieder komplett von anfang an neu aufgebaut. --------------------------------------------------------------------- HITZipper ist eine Addin Komponente, mit der Sie auf sehr einfache Weise Zip-Dateien von Solid Edge Dokumenten erstellen können. Eine Zip-Funktion für Solid Edge Dokumente ist z.B. immer dann interessant, wenn Sie Ihr Dokument archivieren oder versenden müssen. Wäre doch schön, wenn dann auch alle dazugehörigen Dokumente (Referenzen) wie Zeichnungen, Teilefamilien, Office Dokumente, Teilekopie usw. gleich aus Solid Edge heraus verpackt werden würden. Der HITZipper ist ein Addin das sich nahtlos in Ihre Solid Edge Umgebung einfügt. Feature: -Alle Verknüpfungsarten werden erkannt und gezippt. -Das aktive Dokument oder ein Dokument von der Festplatte kann aus -Solid Edge heraus gezippt werden. -Das Ursprungs Verzeichnis der einzelnen Referenzen kann übernommen werden. -Ein Passwort kann für das Zip-Dokument vergeben werden. -Die Zip-Datei kann in mehreren kleineren Dateien zerlegt werden. -Die Kompressionsrate kann eingeben werden. -Die dazugehörige Zeichnungen werden gezippt -Das Zielverzeichnis für Zip Datei kann konfiguriert werden ... und dies alles Kostenlos. http://ww3.cad.de/foren/ubb/Forum3/HTML/000740.shtml Online Hilfe : www.hitteam.de\hitteam.chm Add-in : www.hitteam.de\hitteam.zip Marco Kreutz www.hitteam.de info@hitteam.de
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |