Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Problem mit der Selektion

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:  Problem mit der Selektion (2005 mal gelesen)
Krischan91
Mitglied


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

Beiträge: 5
Registriert: 28.05.2015

Catia V5 R19 SP2

erstellt am: 28. Mai. 2015 22:39    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


Baumstruktur.PNG


Fehlermeldung.PNG


Selection_Testmakro.pdf

 
Hallo zusammen,

ich bin neu hier im Forum und bin auch Anfänger in der Makroprogrammierung. Ich habe in catvba (also im Visual Basic Editor) programmiert.
Ich hatte mir zunächst 2 Makros programmiert als CATScript, nun habe ich Sie in ein Catvba umgeschrieben, da ich noch eine Bedieneroberfläche programmieren muss, in der alle Parameter einzustellen sind und per Knopfdruck alles geupdatet wird und das vollständige Makro durchläuft.
In meinem CATMain werden zwei Unterprogramme (meine ursprünglichen CATScripts) aufgerufen. Jedes Unterprogramm greift auf ein anderes Part zu und soll dort jeweils ein "altes" Geoset löschen und das neu hinzugefügte Geoset in den NoShow schieben.
Nun zu meinem Problem:
Wenn ein übergeordnetes Product im Baum vorselektiert ist, funktioniert das Makro. Wenn aber ein Part selektiert ist, bekomme ich eine Fehlermeldung. Ich verstehe nicht, wie der Selektionsbefehl genau funktioniert. Ich habe schon viel probiert, komme aber einfach nicht auf einen grünen Zweig. Ich möchte nicht den Anwender aufforden, ensprechendes Product vorher auszuwählen.
Testskript ist angehängt und ein Bild von meiner Baumstruktur und die Fehlermeldung, die ich bekomme.
Da ich dringend zu einer Lösung kommen muss, würde ich mich freuen, wenn mir jemand bei meinem Code helfen kann. Oder gibt es vielleicht eine ganz andere Möglichkeit.

Vielen Dank,
Christian

P.S. Ich hoffe mein Problem ist einigermaßen verständlich

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: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 28. Mai. 2015 22: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 Krischan91 10 Unities + Antwort hilfreich

Servus
Willkommen im Froum.
Vermutlich musst du die Selektion in den Unterroutinen auf das jeweilige PartDocument beziehen.
Code:
Set selection1 = partDocument1.Selection
Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

Krischan91
Mitglied


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

Beiträge: 5
Registriert: 28.05.2015

Catia V5 R19 SP2

erstellt am: 28. Mai. 2015 23:07    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,

danke für deine schnelle Antwort.
Das hatte ich auch schon probiert, klappt aber leider auch nicht.

Gruß,
Christian

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

Krischan91
Mitglied


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

Beiträge: 5
Registriert: 28.05.2015

Catia V5 R19 SP2

erstellt am: 31. Mai. 2015 00:01    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

Weiß niemand eine Lösung zu diesem Problem?

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: 31. Mai. 2015 01: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 Krischan91 10 Unities + Antwort hilfreich

Hi Krischan,

ich hab die Deklarationen um den Typ erweitert, 'Option Explicit' vorangestellt und die 2. Selektion (unter anderem) gekillt.
Es gibt nur eine aktive Selektion.
Ausserdem hab ich die Deklarationen um ein paar vergessene ergänzt.
Ein paar der Dims sind überflüssig.

Code:

Sub Einstiegskurve()
  Dim partDocument1 As Document
  Dim part1 As Part
'  Dim productDocument1 As Document
  Dim hybridBodies1 As hybridBodies
'  Dim hybridBodies2 As hybridBodies
  Dim GS_Makro As HybridBody
'  Dim hybridBody_alt As HybridBody
  Dim selection1 As Selection
'  Dim selection2 As Selection
  Dim visPropertySet1 As VisPropertySet
  Dim bSTR1 As String
 
'  Set productDocument1 = CATIA.ActiveDocument
'  Set Documents = CATIA.Documents
'  Set partDocument1 = CATIA.Documents.Item("Part1.CATPart")
  Set part1 = CATIA.Documents.Item("Part1.CATPart").Part
 
  Set hybridBodies1 = part1.hybridBodies

'=======================================
' "Makro_alt" löschen
'=======================================
  Set selection1 = CATIA.ActiveDocument.Selection
  selection1.Clear
  selection1.Add hybridBodies1.Item("Makro")  'das vorhandene 'makro' löschen
  selection1.Delete
  selection1.Clear
  part1.Update
  DoEvents
'==========================
' Geometrische Sets deklarieren
'==========================
  ' altes GS_Makro in "Makro_alt" umbennen
'  Set hybridBody_alt = hybridBodies1.Item("Makro")
'  hybridBody_alt.Name = "Makro_alt"
 
  Set GS_Makro = hybridBodies1.Add
  GS_Makro.Name = "Makro_neu"            'um sicher zu gehen, dass es neu erzeugt wurde
                                          'es gibt hier ein Timing-Problem
  part1.Update
  DoEvents
 
'  Set hybridBodies2 = GS_Makro.hybridBodies  'welche?
'=======================================
' GS_Makro ausblenden
'=======================================
'  Set selection2 = productDocument1.Selection
'  Set visPropertySet1 = selection2.VisProperties
'  bSTR1 = hybridBodies2.Name
 
  selection1.Add GS_Makro
  Set visPropertySet1 = selection1.VisProperties '.Parent
  visPropertySet1.SetShow catVisPropertyNoShowAttr
  selection1.Clear
  part1.Update
  DoEvents
End Sub



Hope it helps,
Joe

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

Krischan91
Mitglied


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

Beiträge: 5
Registriert: 28.05.2015

Catia V5 R19 SP2

erstellt am: 31. Mai. 2015 12: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

Hi Joe,

vielen Dank für deine Antwort. Ich habe deinen Code jetz mal getestet. Das löst aber leider mein Problem nicht.
Es ist weiterhin so, dass ich eine Fehlermeldung erhalte, wenn ich das Makro starte und dabei in Part2 aktiv bin.
Die Fehlermeldung kommt in der Zeile "selection1.Delete"

Idee, wie ich es schaffe, das Makro auch erfolgreich durchlaufen zu lassen, wenn ich beim Start in einem anderen Part aktiv bin?

Vielen Dank,
Christian

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: 31. Mai. 2015 15:25    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 Krischan91 10 Unities + Antwort hilfreich

dann wechsle halt vorher ins Product.

Zwei Methoden kann ich Dir anbieten:
- Set beleibt bestehen; alle Elemente im Set werden gelöscht
- Set löschen, neu erzeugen (wie bisher)
Haken bei der ersten Methode: der nachfolgende Dialog muss noch behandelt werden.
Bei der zweiten kanns Probleme beim Timing geben

Code:

Option Explicit
Sub CATMain()
  ClearSet "Part1.CATPart", "Makro"
  ReCreateSet "Part2.CATPart", "Makro"
End Sub

Function ClearSet(strParent As String, strHB As String) As Integer
  Dim oParent As Part
  Dim oHB As HybridBody
  Dim oSel As Selection
  Dim oVPS As VisPropertySet
 
  'in assembly workbench wechseln, falls erf.
  If CATIA.GetWorkbenchId <> "Assembly" Then
      CATIA.StartWorkbench "Assembly"
  End If
 
  Set oParent = CATIA.Documents.Item(strParent).Part
  Set oHB = oParent.hybridBodies.Item(strHB)

  Set oSel = CATIA.ActiveDocument.Selection
  oSel.Clear
 
  'set-elemente löschen
  oSel.Add oHB
  oSel.Search "(Type=* - Name=" & strHB & "),sel"
  If oSel.Count2 > 0 Then
      oSel.Delete
      ClearSet = oSel.Count2
  End If
  oSel.Clear
 
  'set auf NoShow setzen
  oSel.Add oHB
  Set oVPS = oSel.VisProperties
  oVPS.SetShow catVisPropertyNoShowAttr
  oSel.Clear
 
  oParent.Update
  DoEvents
 
End Function

Sub ReCreateSet(strParent As String, strHB As String)
  Dim oPart As Part
  Dim oHB As HybridBody
  Dim oSel As Selection
  Dim oVPS As VisPropertySet
 
  'in assembly workbench wechseln, falls erf.
  If CATIA.GetWorkbenchId <> "Assembly" Then
      CATIA.StartWorkbench "Assembly"
  End If
 
  Set oPart = CATIA.Documents.Item(strParent).Part

  Set oSel = CATIA.ActiveDocument.Selection
  oSel.Clear
 
  'das vorhandene 'makro' löschen
  oSel.Add oPart.hybridBodies.Item(strHB)
  oSel.Delete
  oSel.Clear
 
  oPart.Update
  DoEvents

  'neues Set deklarieren
  Set oHB = oPart.hybridBodies.Add
  oHB.Name = strHB
'  oHB.Name = "Makro_neu"          'um sicher zu gehen, dass es neu erzeugt wurde
                                    'es gibt hier eventuell ein Timing-Problem
  oPart.Update
  DoEvents
 
  oSel.Add oHB
  Set oVPS = oSel.VisProperties
  oVPS.SetShow catVisPropertyNoShowAttr
  oSel.Clear
 
  oPart.Update
  DoEvents
End Sub



Enjoy,
Joe

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

Krischan91
Mitglied


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

Beiträge: 5
Registriert: 28.05.2015

Catia V5 R19 SP2

erstellt am: 01. Jun. 2015 00:32    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

Vielen Dank.
Sieht sehr vielversprechend aus!
Ich werde es die nächsten Tage versuchen, bei mir einzubauen.

Gruß,
Christian

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: 01. Jun. 2015 10:49    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 Krischan91 10 Unities + Antwort hilfreich

hab in der Function noch einen kleinen Bug gefunden. Statt:
Code:

  'set-elemente löschen
  oSel.Add oHB
  oSel.Search "(Type=* - Name=" & strHB & "),sel"
  If oSel.Count2 > 0 Then
      oSel.Delete
      ClearSet = oSel.Count2
  End If
  oSel.Clear


muss es
Code:

  'set-elemente löschen
  oSel.Add oHB
  oSel.Search "(Type=* - Name=" & strHB & "),sel"
  ClearSet = oSel.Count2
  If oSel.Count2 > 0 Then
      oSel.Delete
  End If
  oSel.Clear


sonst ist der Rückgabewert immer null.

Tschau,
Joe

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)2023 CAD.de | Impressum | Datenschutz