Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Intersect Schleife

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:  Intersect Schleife (833 mal gelesen)
MichaX
Mitglied
Bachelorand


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

Beiträge: 20
Registriert: 13.03.2017

Windows 7 Professional
Catia V5 R19

erstellt am: 30. Mrz. 2017 08:46    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 Zusammen,

ich bin im Rahmen meiner Abschlussarbeit auf ein weiteres Problem gestoßen, bei dem ich auf keine vernünftige Lösung komme.

Ausgangslage sind im größten Fall ca. 10000 Surfaceses, die ich mit einer Surface (in diesem Fall ein Kanal) verschneiden möchte. Da ich im Schritt vorher alle Surfaceses neu und durchlaufend benenne, sowie der Kanal auch immer gleich heißt, habe ich mir überlegt, dass ein aufgezeichnetes Makro eigentlich reichen sollte den Vorgang immer wiederholen zu können, auch wenns nicht schön ist.
Aber bei dem großen Umfang nimmt mir der Makro-Rekorder nichts auf.
Deshalb denke ich das eine Schleife über die beliebig vielen Surfaceses sinnvoll und nötig ist.
Habe mir jetzt mal 3 Schnitte aufgenommen aber bin ratlos wie ich daraus eine Schleife basteln kann weil der Bezug auf die 2. Referenz sich ab dem 2. Schnitt ändert. Habt ihr eine Idee wie ich das umsetzen kann ?

Code:

Sub CATMain()

Dim documents1 As Documents
Set documents1 = CATIA.Documents

Dim partDocument1 As PartDocument
Set partDocument1 = documents1.Item("Kabelkanal.CATPart")

Dim part1 As Part
Set part1 = partDocument1.Part

Dim hybridShapeFactory1 As HybridShapeFactory
Set hybridShapeFactory1 = part1.HybridShapeFactory

'Allgemein Ende -------------------------------------------------------------------------------

Dim parameters1 As Parameters
Set parameters1 = part1.Parameters

Dim hybridShapeSurfaceExplicit1 As HybridShapeSurfaceExplicit
Set hybridShapeSurfaceExplicit1 = parameters1.Item("Surface____1")

Dim reference1 As Reference
Set reference1 = part1.CreateReferenceFromObject(hybridShapeSurfaceExplicit1)

Dim parameters2 As Parameters
Set parameters2 = part1.Parameters

Dim hybridShapeSurfaceExplicit2 As HybridShapeSurfaceExplicit
Set hybridShapeSurfaceExplicit2 = parameters2.Item("Surface_1")

Dim reference2 As Reference
Set reference2 = part1.CreateReferenceFromObject(hybridShapeSurfaceExplicit2)

Dim hybridShapeIntersection1 As HybridShapeIntersection
Set hybridShapeIntersection1 = hybridShapeFactory1.AddNewIntersection(reference1, reference2)

hybridShapeIntersection1.PointType = 0

Dim hybridBodies1 As HybridBodies
Set hybridBodies1 = part1.HybridBodies

Dim hybridBody1 As HybridBody
Set hybridBody1 = hybridBodies1.Item("Schnitte_01")

hybridBody1.AppendHybridShape hybridShapeIntersection1

part1.InWorkObject = hybridShapeIntersection1

part1.Update

'Schnitt 1 Ende --------------------------------------------------------------------------------
'Schnitt 2 Anfang ------------------------------------------------------------------------------

Dim parameters3 As Parameters
Set parameters3 = part1.Parameters

Dim hybridShapeSurfaceExplicit3 As HybridShapeSurfaceExplicit
Set hybridShapeSurfaceExplicit3 = parameters3.Item("Surface____2")

Dim reference3 As Reference
Set reference3 = part1.CreateReferenceFromObject(hybridShapeSurfaceExplicit3)

Dim reference4 As Reference
Set reference4 = part1.CreateReferenceFromObject(hybridShapeSurfaceExplicit2)

Dim hybridShapeIntersection2 As HybridShapeIntersection
Set hybridShapeIntersection2 = hybridShapeFactory1.AddNewIntersection(reference3, reference4)

hybridShapeIntersection2.PointType = 0

hybridBody1.AppendHybridShape hybridShapeIntersection2

part1.InWorkObject = hybridShapeIntersection2

part1.Update

'Schnitt 2 Ende --------------------------------------------------------------------------------
'Schnitt 3 Anfang ------------------------------------------------------------------------------

Dim parameters4 As Parameters
Set parameters4 = part1.Parameters

Dim hybridShapeSurfaceExplicit4 As HybridShapeSurfaceExplicit
Set hybridShapeSurfaceExplicit4 = parameters4.Item("Surface____3")

Dim reference5 As Reference
Set reference5 = part1.CreateReferenceFromObject(hybridShapeSurfaceExplicit4)

Dim reference6 As Reference
Set reference6 = part1.CreateReferenceFromObject(hybridShapeSurfaceExplicit2)

Dim hybridShapeIntersection3 As HybridShapeIntersection
Set hybridShapeIntersection3 = hybridShapeFactory1.AddNewIntersection(reference5, reference6)

hybridShapeIntersection3.PointType = 0

hybridBody1.AppendHybridShape hybridShapeIntersection3

part1.InWorkObject = hybridShapeIntersection3

part1.Update
'Schnitt 3 Ende --------------------------------------------------------------------------------
End Sub

Viele Grüße
Micha


[Diese Nachricht wurde von MichaX am 30. Mrz. 2017 editiert.]

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: 30. Mrz. 2017 10:04    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 MichaX 10 Unities + Antwort hilfreich

Servus Micha

Du hast dabei mehrerer Möglichkeiten:

  1. Den Parameternamen der Fläche zusammensetzen. zB
    Set hybridShapeSurfaceExplicit = parameters4.Item(CStr("Surface____" & Counter))

  2. falls die entsprechenden Verschneidungsflächen in einem extra GeoSet liegen, dessen Elemente der Schleife durcharbeiten.

  3. Flächen per Suche selektieren und den Inhalt der Selektion abarbeiten (langsam!)

  4. Beim Anlegen der Schnittflächen diese gleich in einen Array/Collection packen und diese abarbeiten

  5. ....

Gruß
Bernd

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

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

MichaX
Mitglied
Bachelorand


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

Beiträge: 20
Registriert: 13.03.2017

Windows 7 Professional
Catia V5 R19

erstellt am: 30. Mrz. 2017 10: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

Hallo Bernd, danke für die schnelle Antwort.

Die vielen Surfaceses habe ich jetzt schon in eine Selektion gepackt, und würde dann mit

Code:
selection.Item(i).Value

darauf zugreifen. 

Mir bereitet eher der Aufbau der Schleife Kopfzerbrechen, da sich innerhalb der Schleife immer die Referenznummern, Intersectnummern und Parameternamen erhöhen und nicht alle bei Wert 1 starten.

Ich hoffe ich konnte es einigermaßen verständlich erklären 

Grüße
Micha

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: 30. Mrz. 2017 10:21    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 MichaX 10 Unities + Antwort hilfreich

Servus
Versuch mal den Code besser zu verstehen.
Du musst nicht die Variablennamen in der Schleife hochzählen. Das kommt nur durch die Makroaufzeichnung die nicht versteht dass zB reference2 und reference6 das gleiche ist.
Zudem kannst du bei jedem Schleifendurchlauf einer Variable ein anderes Feature zuweisen (Fläche, ....)
Du hast ja nur einen Parameter/Input der sich beim Schleifendurchlauf ändern muss.

Gruß
Bernd

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

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

MichaX
Mitglied
Bachelorand


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

Beiträge: 20
Registriert: 13.03.2017

Windows 7 Professional
Catia V5 R19

erstellt am: 30. Mrz. 2017 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

Okay,

das habe ich jetzt schonmal im Kopf.
Ich muss also die Parameter und Referenzen in der Schleife nicht neu benennen, top.

Dann fehlt es mir jetzt wohl nur noch am Zugriff auf den Parameter der Laufvariable.

Code:

'Selektieren aller Surface___* Elemente -------------------------------------------------------

Dim selection1 As Selection
Set selection1 = CATIA.ActiveDocument.Selection
selection1.Search ".Surface.name=Surface___*;all"

X = selection1.Count2
'Selektieren Ende -----------------------------------------------------------------------------
'Schleife Anfang ------------------------------------------------------------------------------

For i = X To 1 Step -1
     
      Dim parameters1 As Parameters
      Set parameters1 = part1.Parameters
     
      Dim hybridShapeSurfaceExplicit1 As HybridShapeSurfaceExplicit
      Set hybridShapeSurfaceExplicit1 = parameters1.Item("Surface___1")

     
      Dim reference1 As Reference
      Set reference1 = part1.CreateReferenceFromObject(hybridShapeSurfaceExplicit1)
     
      Dim parameters2 As Parameters
      Set parameters2 = part1.Parameters
     
      Dim hybridShapeSurfaceExplicit2 As HybridShapeSurfaceExplicit
      Set hybridShapeSurfaceExplicit2 = parameters2.Item("Surface_1")
     
      Dim reference2 As Reference
      Set reference2 = part1.CreateReferenceFromObject(hybridShapeSurfaceExplicit2)
     
      Dim hybridShapeIntersection1 As HybridShapeIntersection
      Set hybridShapeIntersection1 = hybridShapeFactory1.AddNewIntersection(reference1, reference2)
     
      hybridShapeIntersection1.PointType = 0
     
      Dim hybridBodies1 As HybridBodies
      Set hybridBodies1 = part1.HybridBodies
     
      Dim hybridBody1 As HybridBody
      Set hybridBody1 = hybridBodies1.Item("Schnitte_01")
     
      hybridBody1.AppendHybridShape hybridShapeIntersection1
     
      part1.InWorkObject = hybridShapeIntersection1
     
      part1.Update
     
Next
End Sub


Wie ist es möglich die Laufvariable dem Parameter 1 zuzuweisen?
Habe es schon wie folgt versucht:

Code:

      Dim parameters1 As Parameters
      Set parameters1 = part1.Parameters
     
      Dim parameters1 As Parameters
      Set parameters1 = selection1.Item(i).Value
     
      Dim hybridShapeSurfaceExplicit1 As HybridShapeSurfaceExplicit
      Set hybridShapeSurfaceExplicit1 = parameters1.Item

Da kommt aber der Type Missmatch Fehler in der Zeile : Set parameters1 = selection1.Item(i).Value

Grüße
Micha

[Diese Nachricht wurde von MichaX am 30. Mrz. 2017 editiert.]

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: 30. Mrz. 2017 11: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 Nur für MichaX 10 Unities + Antwort hilfreich

Servus
Warum nochmal über den Parameter darauf zugreifen? Du hast doch schon das Objekt selektiert.
Code:
Set hybridShapeSurfaceExplicit1 = selection1.item2(i).Value
Set reference1 = part1.CreateReferenceFromObject(hybridShapeSurfaceExplicit1)
oder sogar:
Code:
set reference1 = selection1.item2(i).Reference

Hier kannst du auch die Selektion von vorne nach hinten durcharbeiten.
Du solltest ggf die selbst-sprechende Variablennamen verwenden zB oRefSplitSurface.

Gruß
Bernd

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

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

MichaX
Mitglied
Bachelorand


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

Beiträge: 20
Registriert: 13.03.2017

Windows 7 Professional
Catia V5 R19

erstellt am: 30. Mrz. 2017 14:14    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

Perfekt Bernd,

klappt super genau so wie ich es haben wollte!
Dauert zwar eine ganze Weile (ca. 36 Minuten) aber wenn man ein genaues Ergebnis möchte, muss man das akzeptieren und ich denke die Selektion nimmt da im Verhältnis nicht so viel Zeit in Anspruch... 

Mal wieder vielen vielen Dank für die schnelle Hilfe! 

Code:

Dim selection1 As Selection
Set selection1 = CATIA.ActiveDocument.Selection
selection1.Search ".Surface.name=Surface___*;all"

X = selection1.Count2
'Selektieren Ende -----------------------------------------------------------------------------
'Schleife Anfang ------------------------------------------------------------------------------

For i = 1 To X Step 1
         
      Dim hybridShapeSurfaceExplicit1 As HybridShapeSurfaceExplicit
      Set hybridShapeSurfaceExplicit1 = selection1.Item(i).Value
     
      Dim reference1 As Reference
      Set reference1 = part1.CreateReferenceFromObject(hybridShapeSurfaceExplicit1)
     
      Dim parameters2 As Parameters
      Set parameters2 = part1.Parameters
     
      Dim hybridShapeSurfaceExplicit2 As HybridShapeSurfaceExplicit
      Set hybridShapeSurfaceExplicit2 = parameters2.Item("Surface_1")
     
      Dim reference2 As Reference
      Set reference2 = part1.CreateReferenceFromObject(hybridShapeSurfaceExplicit2)
     
      Dim hybridShapeIntersection1 As HybridShapeIntersection
      Set hybridShapeIntersection1 = hybridShapeFactory1.AddNewIntersection(reference1, reference2)
     
      hybridShapeIntersection1.PointType = 0
     
      hybridBody1.AppendHybridShape hybridShapeIntersection1
     
      part1.InWorkObject = hybridShapeIntersection1
     
      part1.Update
     
Next



Grüße
Micha

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