Autor
|
Thema: Linien im GeoSet löschen (881 mal gelesen)
|
Tweety79 Mitglied Entwicklung Automotive
Beiträge: 269 Registriert: 09.12.2007 WPF, VBA, CATScript, Access
|
erstellt am: 13. Jul. 2016 13:49 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe in einem GeoSet nur Linien und Punkte. Nur bestimmte Punkte und besstimmte Linien müssen gelöscht werden. Ich kann mit unterem Code die gesuchten Punkte löschen aber Linien mit demselben Namen wie der Punkt werden nicht gefunden. Anbei menine Funktion: Private Sub deleteCopy(myCatiaDoc As MECMOD.PartDocument, prefix As String, mySearchValue As String) Dim myHybBody As MECMOD.HybridBody Dim myHybShape As MECMOD.HybridShape = Nothing myHybBody = myCatiaDoc.Part.HybridBodies.Item(1).HybridBodies.Item(prefix) On Error Resume Next myHybShape = myHybBody.HybridShapes.Item(prefix & mySearchValue) On Error GoTo 0 If myHybShape IsNot Nothing Then myCatiaDoc.Selection.Clear() myCatiaDoc.Selection.Add(myHybShape) myCatiaDoc.Selection.Delete() End If End Sub Ich wollte für die Linien nach myHybShape = ... folgendes einbauen: myCurve = myHybBody.HybridShapes.Item(prefix & mySearchValue) Die Linie hätte ich deklariert als: Dim myCurve As INFITF.ModelElement = Nothing Das funkmtioniert aber nicht. Kann jemand helfen? Danke Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 13. Jul. 2016 14:07 <-- editieren / zitieren --> Unities abgeben: Nur für Tweety79
Servus Linen und Punkte gehören beide zu Hybridshapes. Somit wird das erste Element das mit dem Namen gefunden wird zurückgeliefert (also wenn du die Funktion nochmal ausführt das 2. Element (zB deine Linie). Das "ModelElement" ist IMHO zum Zugriff auf den InternalName nützlich. ggf wäre es einfach über Search der Selection die Punkte und Linien im GeoSet suchen und dann zu löschen. Oder über eine Schleife aller Hybridshapes die Elemente nach Namen und Typ selektieren. Gruß Bernd PS: darauf zu trauen dass dein GeoSet immer im ersten GeoSet liegt ist "gewagt" ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tweety79 Mitglied Entwicklung Automotive
Beiträge: 269 Registriert: 09.12.2007 WPF, VBA, CATScript, Access
|
erstellt am: 13. Jul. 2016 15:31 <-- editieren / zitieren --> Unities abgeben:
Servus, es wird aber nicht nur das erste Element mit dem Namen gefunden, sondern alle mit dem Namen. Dummerweise aber nur alles nur Punkte, wo es aber mit dem NAmen auch Linine gibt. Deshalb dachte ich, dass sie vielleicht aus einer anderen Bibliothek stammen ... Hmz ... Grüße
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 13. Jul. 2016 15:35 <-- editieren / zitieren --> Unities abgeben: Nur für Tweety79
Servus Um was für eine Linie handelt es sich? Selektiere doch die Linie und lass dir den Type ausgeben (bei VB6 war es noch TypeName). Wenn alle Punkte zurückgegeben werden, kommt dann keine Fehlermeldung (Collection statt einzelnes Object)? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tweety79 Mitglied Entwicklung Automotive
Beiträge: 269 Registriert: 09.12.2007 WPF, VBA, CATScript, Access
|
erstellt am: 14. Jul. 2016 12:32 <-- editieren / zitieren --> Unities abgeben:
Servus, ich habe es nun mit einer Schleife versucht. Irgend was ist aber falsch dran. Private Sub deleteCopy(myCatiaDoc As MECMOD.PartDocument, prefix As String, mySearchValue As String) Dim myHybBody As MECMOD.HybridBody Dim myHybShape As MECMOD.HybridShape = Nothing myHybBody = myCatiaDoc.Part.HybridBodies.Item(1).HybridBodies.Item(prefix)
myHybShape = myHybBody.HybridShapes.Item(prefix & mySearchValue) If myHybShape IsNot Nothing Then For Each myHybShape In myCatiaDoc.Part.HybridBodies.myHybBody myCatiaDoc.Selection.Clear() myCatiaDoc.Selection.Add(myHybShape) myCatiaDoc.Selection.Delete() Next End Sub So wird das nix. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 14. Jul. 2016 12:52 <-- editieren / zitieren --> Unities abgeben: Nur für Tweety79
Servus Was soll die Funktion mal bezwecken? Alle Features im GeoSet mit dem Namen löschen? Dann muss auch innerhalb der Schleife für jedes Feature der Type/Name geprüft werden. Gemäß deinem Code wird wahrscheinlich, wenn ein Punkt/Linie gefunden wird, der gesamte Inhalt des GeoSets gelöscht. ggf geht es so: Code: myCatiaDoc.Selection.Clear() For Each myHybShape In myHybBody.HybridShapes if myHybShape.Name = prefix & mySearchValue then myCatiaDoc.Selection.Add(myHybShape) end if Next myCatiaDoc.Selection.Delete()
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tweety79 Mitglied Entwicklung Automotive
Beiträge: 269 Registriert: 09.12.2007 WPF, VBA, CATScript, Access
|
erstellt am: 14. Jul. 2016 13:08 <-- editieren / zitieren --> Unities abgeben:
|