Autor
|
Thema: nur leeres Element löschen (2027 mal gelesen)
|
Melanie1982 Mitglied
Beiträge: 6 Registriert: 11.02.2009
|
erstellt am: 11. Feb. 2009 11:05 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich bin neu und blutiger Anfänger bei Scripten usw. Leider habe ich im Moment keine Zeit, mir das auf die Schnelle beizubringen, deshalb hoffe ich auf Verständnis und Hilfe. Ich möchte aus einem CATPart ein bestimmtes geometrisches Set löschen, allerdings nur, wenn dieses leer ist. Ich habe schon etwas mit der Makroaufzeichnung rumprobiert und habe bisher nur das GeoSet über die Suchfunktion selektieren können. Nun weiß ich nicht weiter. Vielen Dank im Voraus Grüße Melanie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
denyo_1 Moderator Manager
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: 11. Feb. 2009 14:16 <-- editieren / zitieren --> Unities abgeben: Nur für Melanie1982
Hallo Melanie, dafür brauchst du eine Abfrage. Wichtig ist erst mal das du dir das Objekt des geometrischen Set´s holst (entweder über die Selektion (das hast du ja schon) oder aber direkt ansprechen. Wenn du das Objekt hast gibt es innerhalb des geometrischen Sets eine Klasse HybridBodies (für alle offenen Konturen z.B. Punkte, etc.) und eine HybridShapes (alle geschlossenen Konturen (z.B. Flächen, etc.) Code:
Dim oGeoSet as HybridBody Dim iDoc as Document Dim oPart as Part Dim oSel as SelectionSet oDoc = CATIA.ActiveDocument Set oSel = oDoc.Selection oSel.Clear Set oPart = oDoc.Part Set oGeoSet = oPart.HybridBodies.Item(1) 'Das erste geometrische Set in der Kollektion wird angesprochen 'Das kannst du aber auch über deine Selektion machen 'Hier bingt die Abfrage ob das geo-Set leer ist If oGeoSet.HybridBodies.Count = 0 and oGeoSet.HybridShapes.Count = 0 then 'Zum löschen des geo-Sets wird selbiges in eine Selektio gepackt oSel.Add oGeoSet End If 'Wenn die Selektion nicht leer ist (sprich das geo-Set hat keine Kinder) dann wird es gelöscht If oSel.Count > 0 then oSel.Delete End If oSel.Clear
ANMERKUNG: Code ist nicht getestet sollte so aber funktionieren ------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Melanie1982 Mitglied
Beiträge: 6 Registriert: 11.02.2009
|
erstellt am: 11. Feb. 2009 15:08 <-- editieren / zitieren --> Unities abgeben:
Hallo, das funktioniert erstmal super. Danke. Aber ich wollte es dann mit meiner Selektion probieren, so wie ich mir das als Ahnungslose gedacht habe (siehe unten). Aber das geht wohl nicht so einfach. Wenn du mir da noch einen Tipp geben könntest, wäre ich für heute wunschlos glücklich. Dim partDocument1 As Document Set partDocument1 = CATIA.ActiveDocument Dim selection1 As Selection Set selection1 = partDocument1.Selection selection1.Search "(Name=Lochbildflaechen & CATGmoSearch.OpenBodyFeature),all" Dim oGeoSet as HybridBody Dim iDoc as Document Dim oPart as Part Dim oSel as Selection
Set oDoc = CATIA.ActiveDocument Set oSel = oDoc.Selection oSel.Clear Set oPart = oDoc.Part Set oGeoSet = selection1 If oGeoSet.HybridBodies.Count = 0 and oGeoSet.HybridShapes.Count = 0 then oSel.Add oGeoSet End If If oSel.Count > 0 then oSel.Delete End If oSel.Clear Grüße Melanie
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
denyo_1 Moderator Manager
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: 11. Feb. 2009 15:12 <-- editieren / zitieren --> Unities abgeben: Nur für Melanie1982
Hi, das ist logisch mein Code war ohne die Selektion gedacht. Hier mal der Code ein bisschen angepasst: Code:
Dim oGeoSet as HybridBody Dim iDoc as Document Dim oPart as Part Dim oSel as Selection Set oDoc = CATIA.ActiveDocument Set oSel = oDoc.Selection Set oPart = oDoc.Part 'Selektion leeren falls schon was darin enthalten ist oSel.clear 'hier suchst du dein geo-Set oSel.Search "(Name=Lochbildflaechen & CATGmoSearch.OpenBodyFeature),all" 'Hier weißt du den Inhalt der Selektion zum Objekt hinzu If oSel.Count > 0 then Set oGeoSet = oSel.Item(1).Value Else MsgBox("Es wurde kein Element selektiert"! +chr(10) +"Bitte prüfen Sie den Namen des geo-Sets!") Exit Sub End If If oGeoSet.HybridBodies.Count = 0 and oGeoSet.HybridShapes.Count = 0 then oSel.Add oGeoSet End If If oSel.Count > 0 then oSel.Delete End If oSel.Clear
------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin [Diese Nachricht wurde von denyo_1 am 11. Feb. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Melanie1982 Mitglied
Beiträge: 6 Registriert: 11.02.2009
|
erstellt am: 11. Feb. 2009 16:00 <-- editieren / zitieren --> Unities abgeben:
Hallo, das richtige Set wird schonmal gelöscht, allerdings egal ob Geometrie drin ist oder nicht. Ich muss dazu sagen, dass ich die Zeile mit der MsgBox rausgenommen habe, da diese einen Fehler erzeugt hat. Aber das sollte ja nicht viel zu sagen haben. Grüße Mel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 12. Feb. 2009 00:33 <-- editieren / zitieren --> Unities abgeben: Nur für Melanie1982
Hallo Melanie1982, probier doch mal folgende Korrektur ( ) am Code: Code: Dim oGeoSet as HybridBody Dim iDoc as Document Dim oPart as Part Dim oSel as SelectionSet oDoc = CATIA.ActiveDocument Set oSel = oDoc.Selection Set oPart = oDoc.Part 'Selektion leeren falls schon was darin enthalten ist oSel.clear 'hier suchst du dein geo-Set oSel.Search "(Name=Lochbildflaechen & CATGmoSearch.OpenBodyFeature),all" 'Hier weißt du den Inhalt der Selektion zum Objekt hinzu If oSel.Count > 0 then Set oGeoSet = oSel.Item(1).Value Else MsgBox("Es wurde kein Element selektiert"! & chr(10) & "Bitte prüfen Sie den Namen des geo-Sets!") Exit Sub End If
oSel.Clear
If oGeoSet.HybridBodies.Count = 0 and oGeoSet.HybridShapes.Count = 0 then oSel.Add oGeoSet End If If oSel.Count > 0 then oSel.Delete End If oSel.Clear
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 |
Melanie1982 Mitglied
Beiträge: 6 Registriert: 11.02.2009
|
erstellt am: 12. Feb. 2009 08:27 <-- editieren / zitieren --> Unities abgeben:
Hallo, ganz vielen Dank. Es funktioniert. Ein kleines Problemchen gibts allerdings noch: es wird zwar nicht gelöscht, wenn ne Fläche drin ist, aber es wird gelöscht, wenn z.B. nur eine Skizze drin ist. Es muss bestimmt noch eine Bezeichnung für Skizzen in den Satz: If oGeoSet.HybridBodies.Count = 0 and oGeoSet.HybridShapes.Count = 0 then ,oder? Grüße Mel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Melanie1982 Mitglied
Beiträge: 6 Registriert: 11.02.2009
|
erstellt am: 12. Feb. 2009 10:45 <-- editieren / zitieren --> Unities abgeben:
|
Melanie1982 Mitglied
Beiträge: 6 Registriert: 11.02.2009
|
erstellt am: 12. Feb. 2009 10:52 <-- editieren / zitieren --> Unities abgeben:
|
denyo_1 Moderator Manager
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: 12. Feb. 2009 14:45 <-- editieren / zitieren --> Unities abgeben: Nur für Melanie1982
Hallo, sorry war mein Fehler das es erst nicht funktioniert hat. Du musst natürlich die Selektion löschen vor der Abfrage ob da Teile drinnen sind. Sonst wird zwar die Abfrage durchlaufen und liefert auch ein Ergbniss aber das selektierte Set wird gelöscht weil es eben selektiert ist ------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndiKrue Mitglied Berater
Beiträge: 72 Registriert: 04.12.2008 Windows XP Prof x64 Edition Intel Xeon W3520 @ 2.67 GHz 8 GB RAM, Nvidia Quadro FX 1800 CATIA V5R19
|
erstellt am: 19. Feb. 2009 16:44 <-- editieren / zitieren --> Unities abgeben: Nur für Melanie1982
Zitat: Original erstellt von Melanie1982: Hallo, ganz vielen Dank. Es funktioniert. Ein kleines Problemchen gibts allerdings noch: es wird zwar nicht gelöscht, wenn ne Fläche drin ist, aber es wird gelöscht, wenn z.B. nur eine Skizze drin ist. Es muss bestimmt noch eine Bezeichnung für Skizzen in den Satz: If oGeoSet.HybridBodies.Count = 0 and oGeoSet.HybridShapes.Count = 0 then ,oder? Grüße Mel
# Hallo, so ich habs getestet, geht einwandfrei mit "oGeoSet.HybridSketches.Count = 0" und wenn du ganz sicher sein willst fragst du noch "oGeoSet.Bodies.Count = 0" und "oGeoSet.GeometricElements.Count = 0" ab Grüße
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |