Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Selection Delete

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Selection Delete (4073 mal gelesen)
cChris
Mitglied
Konstrukteur


Sehen Sie sich das Profil von cChris an!   Senden Sie eine Private Message an cChris  Schreiben Sie einen Gästebucheintrag für cChris

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Dateipfad.jpg


Fehlermeldung.jpg

 
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


Sehen Sie sich das Profil von tberger an!   Senden Sie eine Private Message an tberger  Schreiben Sie einen Gästebucheintrag für tberger

Beiträge: 1384
Registriert: 13.01.2007

WIN 7 64bit
V5R21SP3HF49
3DX/V6 R2016x

erstellt am: 29. Jan. 2011 04:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cChris 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von cChris an!   Senden Sie eine Private Message an cChris  Schreiben Sie einen Gästebucheintrag für cChris

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 10676
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 29. Jan. 2011 11:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cChris 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von cChris an!   Senden Sie eine Private Message an cChris  Schreiben Sie einen Gästebucheintrag für cChris

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Starbirth an!   Senden Sie eine Private Message an Starbirth  Schreiben Sie einen Gästebucheintrag für Starbirth

Beiträge: 119
Registriert: 22.10.2009

erstellt am: 29. Jun. 2011 09:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cChris 10 Unities + Antwort hilfreich


oSel_PartDocument.jpg

 
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


Sehen Sie sich das Profil von HeinHein an!   Senden Sie eine Private Message an HeinHein  Schreiben Sie einen Gästebucheintrag für HeinHein

Beiträge: 44
Registriert: 16.02.2012

cgr und models Namen ermitteln

erstellt am: 29. Feb. 2016 17:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cChris 10 Unities + Antwort hilfreich

Hallo,

ich habe das gleiche Problem, dass die Selektion im Partdokument nicht via VBA geloescht werden kann.
Hat jemand schon eine Loesung?
Ich nutze R19.

------------------
HeinHein

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


Sehen Sie sich das Profil von joehz an!   Senden Sie eine Private Message an joehz  Schreiben Sie einen Gästebucheintrag für joehz

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cChris 10 Unities + Antwort hilfreich

Hi Hein,

wie sieht Dein Makro bisher aus?
Hast Du die Schritte schon mit dem Makro-Rekorder aufgezeichnet?

Tschau,
Joe

------------------
Inoffizielle Catia Hilfeseite

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HeinHein
Mitglied
Dipl Ing Maschinenbau


Sehen Sie sich das Profil von HeinHein an!   Senden Sie eine Private Message an HeinHein  Schreiben Sie einen Gästebucheintrag für HeinHein

Beiträge: 44
Registriert: 16.02.2012

cgr und models Namen ermitteln

erstellt am: 01. Mrz. 2016 10:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cChris 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von AndiKrue an!   Senden Sie eine Private Message an AndiKrue  Schreiben Sie einen Gästebucheintrag für AndiKrue

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cChris 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2019 CAD.de | Impressum | Datenschutz