| |
| KISTERS 3DViewStation: Unterstützung für 3D CAD Kollaboration mit Lieferanten, eine Pressemitteilung
|
Autor
|
Thema: Selection Delete (6241 mal gelesen)
|
cChris Mitglied Konstrukteur
Beiträge: 53 Registriert: 27.09.2010 CATIA V5 R19 Microsoft Windows XP; Professionalx64 Edition; Version 2003; SP 2; Intel Core2 Duo CPU E8600 3.33Ghz; 7.98Gb RAM CATScript
|
erstellt am: 28. Jan. 2011 18:06 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe ein etwas großeres Problem. Die Situation ist die, ich befinde mich im Drawing und möchte im Product ein GeoSet unter dem Pfad Stück löschen. Ich habe ein Macro geschrieben welche mir die Dicke des Pads ausgibt. Dabei werden zwei Extremum erzeugt. Allerdings möchte ich diese auch gleich wieder Löschen. Das funktioniert leider nicht. Anbei als Bild die Fehlermeldung,des Dateipfades und den Code.
Code: Sub CATMain()Dim MyExtremum_min(0) As HybridShapeExtremum Dim MyExtremum_max(0) As HybridShapeExtremum Dim MyReferencePlane(0) As HybridShapePlaneOffsetPt Dim myAxisCoordinate (8) CATIA.ActiveDocument.part.bodies.item(1).sketches.item(1).GetAbsoluteAxisData (myAxisCoordinate) a_1 = myAxisCoordinate(3) a_2 = myAxisCoordinate(4) a_3 = myAxisCoordinate(5) b_1 = myAxisCoordinate(6) b_2 = myAxisCoordinate(7) b_3 = myAxisCoordinate(8) 'Senkrechte Richtung durch Vektorprodukt
x_N = a_2*b_3 - a_3*b_2 y_N =a_3*b_1 - a_1*b_3 z_N = a_1*b_2 - a_2*b_1 Set MyHybShapeFactory = CATIA.ActiveDocument.part.HybridShapeFactory Set MyDirection = MyHybShapeFactory.AddNewDirectionByCoord(x_N, y_N, z_N) Set MyPart = CATIA.ActiveDocument.part Set MyBody = CATIA.ActiveDocument.part.bodies.item(1) Set MyHybBody = CATIA.ActiveDocument.part.hybridbodies.add
'oberes und unteres Extremum erzeugen
Set MyRefBody = MyPart.CreateReferenceFromObject(MyBody) Set MyExtremum_min(0) = MyHybShapeFactory.AddNewExtremum(MyRefBody, MyDirection, 0) MyHybBody.AppendHybridShape MyExtremum_min(0) MyExtremum_min(0).Compute Set MyRefBody = MyPart.CreateReferenceFromObject(MyBody) Set MyExtremum_max(0) = MyHybShapeFactory.AddNewExtremum(MyRefBody, MyDirection, 1) MyHybBody.AppendHybridShape MyExtremum_max(0) MyExtremum_max(0).Compute Dicke_Pad = Messen(MyExtremum_min(0) , MyExtremum_max(0) ) MsgBox Dicke_Pad Dim selection_GS_Extr As Selection Set selection_GS_Extr = CATIA.ActiveDocument.Selection Hier muss ich irgendwas ändern selection_GS_Extr.Clear selection_GS_Extr.Add MyHybBody selection_GS_Extr.Delete End Sub
Function Messen(oFirst As Object, oSecond As Object) As Double Dim MySPAWorkbench As SPAWorkbench Dim MyMeasure As Measurable
Set MySPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench") Set MyMeasure = MySPAWorkbench.GetMeasurable(oFirst) Messen = MyMeasure.GetMinimumDistance(oSecond) End Function
Vielen Dank und ein schönes Wochenende ------------------ Mit freundlichen Grüßen, cChris [Diese Nachricht wurde von cChris am 28. Jan. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tberger Mitglied Application Manager CATIA V5 / V6
Beiträge: 1385 Registriert: 13.01.2007 WIN 7 64bit V5R21SP3HF49 3DX/V6 R2016x
|
erstellt am: 29. Jan. 2011 04:47 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
Hallo cChris, irgendetwas in deiner Schilderung kann nicht stimmen. Wenn du in deiner Baugruppe wie abgebildet bist und dein Makros startest, kann es nicht funktionieren. Dein ActiveDocument ist ein CATProduct, das keine Eigenschaft .Part hat. Wenn du dein von dir geschriebenes Makro in einem Einzelteilfenster deines Teils "...STÜCK" starten würdest, müsste es korrekt durchlaufen. ------------------ Grüße aus dem Thurgau Thomas +++++++++++++++++++++++++++++++++ CATIA - eine Laune der Natur ... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cChris Mitglied Konstrukteur
Beiträge: 53 Registriert: 27.09.2010 CATIA V5 R19 Microsoft Windows XP; Professionalx64 Edition; Version 2003; SP 2; Intel Core2 Duo CPU E8600 3.33Ghz; 7.98Gb RAM CATScript
|
erstellt am: 29. Jan. 2011 11:08 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen Thomas, danke für deine Antwort. Ich befinde mich im Drawing und will auf das Product zugreifen! Der Befehl CATIA.ActiveDocument darf hier nicht stehen. Ist nur ein Beispiel.
Code: Set selection_GS_Extr = CATIA.ActiveDocument.Selection
Ich hab schon alles probiert. Ich hab das Macro so geschrieben das es im Part und im Product läuft.
Jetzt bin ich aber in der Drawing umgebung und es funktioniert nicht mehr. Ich möchte mit diesem Macro die Dicke das Pads auslesen und dann an den Sheetnamen übergeben. Das funktioniert auch wunderbar. Nun kommt aber das Problem, ich möchte die soeben im Product erzeugten Extremum, zum messen des Pads, wieder löschen und das funktioniert leider nicht. Siehe Fehlermeldung Was evtl noch zu erwähnen wäre, ich befinde mich bereits in einer Selection, einer For-Next und einer If-Endif schleife. Vielleicht macht das auch Probleme. Ich muss aber dazu sagen das, dass Macro ohne die Selection super läuft. Also kann ich mir nicht vorstellen das es an den Schleifen liegt. Vielen Dank im vorraus. ------------------ Mit freundlichen Grüßen, cChris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 29. Jan. 2011 11:13 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
Servus Du musst die Selektion im PartDokument deklarieren. Irgenwie hast ja das PartDokument über die Drawing ermittelt. (Set oSel = PartDocument.Selection) Benutze einfach die Watch-Funktion des VBA-Editors um herauszufinden, wie du auf das Partdokument kommst. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cChris Mitglied Konstrukteur
Beiträge: 53 Registriert: 27.09.2010 CATIA V5 R19 Microsoft Windows XP; Professionalx64 Edition; Version 2003; SP 2; Intel Core2 Duo CPU E8600 3.33Ghz; 7.98Gb RAM CATScript
|
erstellt am: 30. Jan. 2011 15:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, ich programmiere leider nicht mit VBA sondern mit CATScript! Ich versuche morgen mein Glück wieder. ABer über welchen Weg weiß ich leider auch noch nicht. Ich lass mir da auf jeden Fall was einfallen. Den Weg über die Deklaration im PartDocument werde ich morgen gleich versuchen. Ich bin gerade schon ein bisschen ratlos, da sich die Selection einfach nicht löschen lässt. :-( Ich wünsch Dir noch einen schönen Sonntag. ------------------ Mit freundlichen Grüßen, cChris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Starbirth Mitglied Konstrukteur
Beiträge: 119 Registriert: 22.10.2009
|
erstellt am: 29. Jun. 2011 09:41 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
Hallo Forum, ich hänge mich mal mit in diesen Thread da mein aktuelles Problem ein gewisse Ähnlichkeit aufweist. Ich kann ebenfalls ein Geometrical Set, welches ich innerhalb eines Parts im Produkt erzeugt habe, nicht löschen. Fehlermeldung wie oben. Ich programmiere in VBA und habe mittlerweile einiges durchgetestet, dank Watch Window. Zu meinem Programm: gestartet wird das Makro im Produkt. Zum Fehler kommt es dann später in einem eigenen Sub, dass ich beim Aufruf mit meinem zu bearbeitenden Part als Objekt (ByRef) füttere, nennen wir es "CurrPart". In dem Sub brauche ich keinen Zugriff auf das Produkt. Im Sub habe ich jetzt testhalber einige Selektionen deklariert und geprüft:
Code: Set ActivePart = CurrPart Dim PartName As String PartName = ActivePart.Name PartName = PartName + ".CATPart" Dim PartSel As Selection Dim oSel As Selection Dim ProductSel As Selection Set PartSel = ActivePart.Parent.Selection Set oSel = CATIA.Documents.Item(PartName).Selection Set ProductSel = ActiveDocument.Selection ProductSel.Clear oSel.Clear 'damit gleichzeitig PartSel.Clear, da gleich (s.u.) '### DEBUG If PartSel Is oSel Then 'kurz testen ob beide Deklarationen auf das Selbe hinauslaufen, tun sie MsgBox "PartSel und oSel sind gleich (wie erwartet)" End If If Not PartSel Is ProductSel Then MsgBox "PartSelection ist nicht gleich ProductSelection (Keine Panik! Das ist gut.)" End If
Deklaration und Prüfungen laufen wie erwartet, beide Testmessages werden ausgegeben.Im späteren Verlauf des Makros, wenn ich auch das Set erzeuge das ich später wieder löschen will, nutze ich immer nur oSel (=PartSel). Unter anderem auch für Operationen in denen ich Solids in Einzelflächen zerlege (per Suche nach Topology). Was mir auffällt ist, dass das Ergebnis dieser Suche neben oSel auch immer in ProductSel landet. Ist das normal? Wenn ich das Set dann löschen will sieht das wie folgt aus:
Code: 'geoset kann wieder weg oSel.Clear 'ProductSel.Clear 'War nur ein Test, hat aber nicht geholfen oSel.Add RadiusCheckSet 'wird korrekt zugewiesen oSel.Delete '<- Hier die Fehlermeldung (s.o.)
So wie ich das sehe habe ich die Selektion des PartDocuments deklariert (siehe Bild) und gefüllt. Warum kann ich nicht löschen? Bitte zeigt mir wo ich Tomaten auf den Augen hatte. EDIT: Anhang vergessen. [Diese Nachricht wurde von Starbirth am 29. Jun. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HeinHein Mitglied Dipl Ing Maschinenbau
Beiträge: 44 Registriert: 16.02.2012 cgr und models Namen ermitteln
|
erstellt am: 29. Feb. 2016 17:56 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
|
joehz Mitglied Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 29. Feb. 2016 18:02 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
|
HeinHein Mitglied Dipl Ing Maschinenbau
Beiträge: 44 Registriert: 16.02.2012 cgr und models Namen ermitteln
|
erstellt am: 01. Mrz. 2016 10:41 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
Hallo, ich habe dann experimentell selbst herausgefunden, woran es lag. 1. Der Befehl objSelektion.Delete funktioniert nur wenn mindestens ein Item im Objektcontainer ist, sonst liefert die Funktion ein Fehler! Das laesst sich einfach loesen: if objSelektion.count>0 then objSelection.Delete 2. Es ist entscheidend WO das objSelektion definiert wird. Bei einem CATProduct sollte der Rootknoten zunaechst als aktives Dokument gesetzt werden. Dann das Selektionobjekt erzeugen: set objSelektion=objActiveDocument.Selection Wird das Selektion-Objekt nicht vom RootKnoten erzeugt sondern aus einem untergeordneten Knoten, z.b. ein CATPart dann - funktioniert die Erzeugung des Selektion-Objektes auch fehlerfrei - es funktioniert auch die Add-Methode fehlerfrei - ABER: die Delete-Methode funktioniert dann nicht mehr. Ob es nun alles fachlich exakt ist weiss ich nicht. Es sind die Erkenntnisse, die ich mit Experimentieren herausgefunden habe. Vielleicht hilft es jemanden weiter. Gruss HeinHein ------------------ HeinHein [Diese Nachricht wurde von HeinHein am 01. Mrz. 2016 editiert.] 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: 14. Aug. 2019 16:17 <-- editieren / zitieren --> Unities abgeben: Nur für cChris
Das Ganze ist ja auch irgendwie logisch. Der im Product definierten Selection können Elemente aus untergeordneten Parts hinzugefügt aber nicht gelöscht werden, da die selektierten Elemente ja gar nicht zu dem ProductDocument gehören. Aber es können ganze Parts hinzugefügt und gelöscht werden. Daher Selection im PartDocument definieren und löschen, denn das PartDocument kennt seine Elemente. Vielleicht auch mal die Methode DeleteObjectForDatum ansehen, ist die schönere Löschmethode ohne Selection. Edit: Ok habe mich verlesen, das ist dann schon etwas eigenartig. Aber trotzdem mal DeleteObjectForDatum anschauen [Diese Nachricht wurde von AndiKrue am 14. Aug. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |