| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SolidEdge |
Autor
|
Thema: c# SelectionSet mit Item aus Unterbaugruppe (2536 mal gelesen)
|
Kricher Mitglied Entwickler
Beiträge: 270 Registriert: 10.09.2004 Solid Edge (ST6 - SE2020) SolidWorks (2014 - 2020) DraftSight 2016 und 2018 Creo Elements Direct Modeling (SolidDesigner V17, V18, V19, V20) Inventor 2018 ACAD/Mechanical 2018
|
erstellt am: 05. Jan. 2010 16:09 <-- editieren / zitieren --> Unities abgeben:
Hallo Ihr und frohes neues Jahr! Habe mal eine Frage zu SelectionSet im Kontext von c#. Ich bekomme es einfach nicht hin ein Dokument über das SelectionSet zu bestimmen, sobald es sich in einer Unterbaugruppe (also beispielsweise B1->B2->P1) befindet. Ich habe in so einem Fall B1 in SE geöffnet und P1 ausgewählt (also in Edgebar selektiert). Über VB und VB.Net bekomme ich es hin (haben am Ende eine Occurrence-Instanz und somit den Dateinamen)! Hat das mal jemand gemacht und kann mir da Tips geben. Das Problem ist letztlich, das es sich in so einem Fall um eine Instanz vom Typ igReference (ich meine hier die Instanz im SelectionSet) handelt, die ich nur über die Methode Object bekomme. Ich habe folgendes Versucht und bekomme dann eine Zugriffsverletzung: Code:
object oSelObj = oSelSet.Item(i); SolidEdgeFramework.Reference refObj = null; refObj = (SolidEdgeFramework.Reference)oSelObj; object test = refObj.Object;
Bei der letzten Methode knallt es dann mit einer Zugriffsverletzung! Leider gibt mir die nachfolgende Methode oSelSet.Item(i); immer eine Instanz vom Typ Object zurück. Letztlich möchte ich nur Instanzen vom Typ: igPart, igSubAssembly und igReference verwenden. Kann man irgendwie (Reflection?) den Typ von diesen Objects bestimmen? Im Moment mache ich einfach einen Cast in den Typ, gekapselt durch Try-Catch. Hoffe jemand kann mir da weiterhelfen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kricher Mitglied Entwickler
Beiträge: 270 Registriert: 10.09.2004 Solid Edge (ST6 - SE2020) SolidWorks (2014 - 2020) DraftSight 2016 und 2018 Creo Elements Direct Modeling (SolidDesigner V17, V18, V19, V20) Inventor 2018 ACAD/Mechanical 2018
|
erstellt am: 05. Jan. 2010 18:01 <-- editieren / zitieren --> Unities abgeben:
|
Kricher Mitglied Entwickler
Beiträge: 270 Registriert: 10.09.2004 Solid Edge (ST6 - SE2020) SolidWorks (2014 - 2020) DraftSight 2016 und 2018 Creo Elements Direct Modeling (SolidDesigner V17, V18, V19, V20) Inventor 2018 ACAD/Mechanical 2018
|
erstellt am: 05. Jan. 2010 18:34 <-- editieren / zitieren --> Unities abgeben:
Und hier mal ein kurzes Beispiel in VB (nicht so auf die Form schauen, ist nur mal eben hingeknallt ) Code:
Private Sub cmdTest_Click() On Error Resume Next Dim oSelSet As SolidEdgeFramework.SelectSet Set oSelSet = m_SEapp.ActiveSelectSet Dim i As Integer For i = 1 To oSelSet.count Dim nType As Long nType = oSelSet.Item(i).Type If nType = igReference Then Dim refObj As Reference Set refObj = oSelSet.Item(i) Dim oOcc As SolidEdgeAssembly.Occurrence Set oOcc = refObj.object MsgBox "Filename = " + oOcc.OccurrenceFileName End If Next If Err Then Err.Clear End If End Sub
Das Beispiel funzt nur, wenn ein Dokument in einer Referenzebene > 1 selektiert wird!!! Warum geht es nicht in c#
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kricher Mitglied Entwickler
Beiträge: 270 Registriert: 10.09.2004 Solid Edge (ST6 - SE2020) SolidWorks (2014 - 2020) DraftSight 2016 und 2018 Creo Elements Direct Modeling (SolidDesigner V17, V18, V19, V20) Inventor 2018 ACAD/Mechanical 2018
|
erstellt am: 06. Jan. 2010 15:08 <-- editieren / zitieren --> Unities abgeben:
|
Arne Peters Ehrenmitglied V.I.P. h.c. CAD Dokumentation / Training / Programmierung / Datenbanken
Beiträge: 7321 Registriert: 05.2002.24 Solid Edge Seminarunterlagen Training, Beratung, Programmierung
|
erstellt am: 06. Jan. 2010 16:10 <-- editieren / zitieren --> Unities abgeben: Nur für Kricher
|
Kricher Mitglied Entwickler
Beiträge: 270 Registriert: 10.09.2004 Solid Edge (ST6 - SE2020) SolidWorks (2014 - 2020) DraftSight 2016 und 2018 Creo Elements Direct Modeling (SolidDesigner V17, V18, V19, V20) Inventor 2018 ACAD/Mechanical 2018
|
erstellt am: 06. Jan. 2010 17:05 <-- editieren / zitieren --> Unities abgeben:
Hi Arne, Zitat:
Was meinst Du mit Referenzebene > 1 ?
Alles was sich nicht direkt unterhalb der Hauptbaugruppe, sondern n-Ebenen Tiefer befindet. Soweit ich weiß handelt es sich bei allen Objekten (zumindest Dokumente) in der SelectionSet die in Referenzebenen >1 Verbaut sind, um Referenz-Instanzen und nicht um Suboccurrances. Suboccurrances sind es nur, wenn man durch die Struktur über Occurrences traversiert. Wie gesagt, in anderen Sprachen (auch in VB.Net) kann ich auch mit einem Cast nach Reference auf die Instanzen zugreifen. Nur mit c# bekomme ich es nicht hin, wenn ich innerhalb einer beliebigen Unterbaugruppe ein Dokument auswähle, welches nicht die erste Verbauung ist! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kricher Mitglied Entwickler
Beiträge: 270 Registriert: 10.09.2004 Solid Edge (ST6 - SE2020) SolidWorks (2014 - 2020) DraftSight 2016 und 2018 Creo Elements Direct Modeling (SolidDesigner V17, V18, V19, V20) Inventor 2018 ACAD/Mechanical 2018
|
erstellt am: 08. Jan. 2010 09:21 <-- editieren / zitieren --> Unities abgeben:
Hi Ihr, habe das Problem endlich gelöst Letztlich ist es kein Problem von c# und dem Code-Abschnitt gewesen, sondern von Aufrufen in einer vorherigen Routine. Da geht dann was in der SelectionSet kaputt. Also, ich kann bei c# bleiben Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lb-racer Mitglied Techniker
Beiträge: 450 Registriert: 13.12.2005 System: ST10 MP12 auf Win10 Pro x64 CPU: i7-10750H Grafik: RTX 3080 16GB Laptop RAM: 32GB
|
erstellt am: 01. Aug. 2013 18:14 <-- editieren / zitieren --> Unities abgeben: Nur für Kricher
Danke vielmals für den Code, da muß man mal dahintersteigen, wenn man nicht täglich damit zu tun hat ... bei mir ist soll der User ein Vorkommnis (prt oder asm) einer beliebigen Ebene selektieren, dann soll der Dateiname ausgegeben werden. habe den Code ergänzt, um auch Vorkommnisse der 1.Ebene zu bekommen:
Code: Set objSEApp = GetObject(, "SolidEdge.Application") Dim oSelSet As SolidEdgeFramework.SelectSet Set oSelSet = objSEApp.ActiveSelectSet Dim i As Integer For i = 1 To oSelSet.Count Dim nType As Long nType = oSelSet.Item(i).Type If nType = igReference Then Dim refObj As Reference Set refObj = oSelSet.Item(i) Dim oOcc As SolidEdgeAssembly.Occurrence Set oOcc = refObj.Object Dateiname = oOcc.OccurrenceFileName Else Dateiname = objSEApp.ActiveSelectSet(i).OccurrenceFileName End If UserForm1.tb_Status = "Dateiname: " & Dateiname DoEvents 'zum Refreshen Exit For 'nur 1 Objekt sinnvoll !!! Next i
weiß vielleicht jemand, wie ich mittels dem Dateinamen an eine benutzerdefinierte Eigenschaft rankomme ?
lg, Matthias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wolha Moderator CAD - Consultant
Beiträge: 5563 Registriert: 30.01.2002 Win 10 Pro Solid Edge 2023 CAMWorks Primus PDM FEMAP Dynamic Designer Teamcenter
|
erstellt am: 01. Aug. 2013 20:39 <-- editieren / zitieren --> Unities abgeben: Nur für Kricher
Hallo Matthias, sollte über ein SEDocument aus der ObjOccurence.OccurrenceDocument kommen.
... Set objSEDocument = objOccurrence.OccurenceDocument und dann über objSEDocument.properties(Gruppe).Item(ItemNr.).Value zBsp: strDocumentNumber = objSEDocument.properties("ProjectInformation").Item(1).Value
das ist jetzt nur so schnell aus dem Gedächtnis sollte Dich aber auf die richtige Fährte bringen. ------------------ mfg Wolfgang Hackl CAD/CAM - Consult http://www.cadcam-consult.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lb-racer Mitglied Techniker
Beiträge: 450 Registriert: 13.12.2005 System: ST10 MP12 auf Win10 Pro x64 CPU: i7-10750H Grafik: RTX 3080 16GB Laptop RAM: 32GB
|
erstellt am: 02. Aug. 2013 13:04 <-- editieren / zitieren --> Unities abgeben: Nur für Kricher
Hi Wolfgang, also so gehts bei mir in Excel VBA: Code: Dim objPropertySets As SolidEdgeFileProperties.PropertySets Dim objProperties As SolidEdgeFileProperties.Properties Dim objProperty As SolidEdgeFileProperties.Property Set objPropertySets = New SolidEdgeFileProperties.PropertySets objPropertySets.Open Dateiname, False Set objProperties = objPropertySets.Item("Custom") Set objProperty = objProperties.Item("LBTEC_ID") LBTEC_ID = objProperty.Value objPropertySets.Close Set objPropertySets = Nothing
vielen Dank und schönes Wochenende Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |