Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  For-Schleife mit Aktivitätsabfrage

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:   For-Schleife mit Aktivitätsabfrage (1012 mal gelesen)
Chrisma
Mitglied
Ingenieur


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

Beiträge: 85
Registriert: 29.03.2010

erstellt am: 04. Mai. 2010 12:18    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

Servus alle zusammen,

habe eine Menge Intersects. Um diese zu überprüfen möchte ich Sie zur Sicherheit erst alle aktivieren auf einen Fehler überprüfen und falls sie einen liefern sie deaktivieren. Läuft ganz normal durch, nur übergeht die Aktivierung der intersects.

Hier der Code bis jetzt:

Sub CATMain()
Version = "1.0"
Makroname = "automatisches De-/aktivieren von Intersects"

On Error Resume Next

'----Überprüfung ob Dokument geöffnet ist
If CATIA.Documents.Count = 0 Then
        MsgBox ("Kein Dokument geöffnet!")
        Exit Sub
    End If
   
'----Auswahl der Intersects
Dim sel As Selection
Set sel = CATIA.ActiveDocument.Selection
sel.Clear
sel.Search ".Intersect.name=Intersect*;Alle"

'----Umbennen der Intersects
For iname = 1 To sel.Count
Set oItem = sel.Item(iname).Value
oItem.Name = "Intersect_" & iname
Next

'----Aktivieren der Intersects und Überprüfung auf Fehler

For iname = 1 To sel.Count
    Set countname = sel.Item(iname).value
           
    If countname.IsInactive Then
        countname.Activate
     
    End If
   
    If Err.Number <> 0 Then
    countname.Inactive
       
    End If
Next

Next

Bei der For-Schleife komm ich nicht weiter.
1.Wie kann ich die Aktivität eines Intersects steuern?
2.Wenn ich mir über eine Message box den countname zurückgeben will bekomme ich keine messagebox. Was befindet sich bei mir in Countname? Was bedeutet das .value in "countname=sel.Item(iname).value"
3. Ich gehe davon aus, dass ich irgendeinen Parameter von Countname auslesen muss (kenn nur die aktivity)
Meine Alternative mit aktivity, geht aber auch nicht:

For iname = 450 To 550
    Set countname = sel.Item(iname).Value
           
    If countname.Activity = False Then
        countname.Activity = True
        MsgBox ("Alles Klar" & iname)
    End If
   
    If Err.Number <> 0 Then
    countname.Activity = False
       
    End If
Next

------------------
Hihihi, lol, hihihi 

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

EngineeredByRobberts
Mitglied
Ingenieur


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

Beiträge: 109
Registriert: 27.04.2010

Dell Precision 690
Windows XP
V5R19SP3 V5R17SP0

erstellt am: 04. Mai. 2010 16:18    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 Chrisma 10 Unities + Antwort hilfreich

1: über der betreffende Parameter, und nicht über HybridShapeIntersection.Activate weil es diese Eigenschaft für HybridShapeIntersection nicht gibt

2: in dein countname befindet sich (hoffentlich) ein Object vom Typ HybridShapeIntersection, du solltest aber lieber sel.Search "(CATGmoSearch.GSMIntersect),all" verwenden um sicher zu sein das sich alle Intersects und nur Intersects in deine Selection befinden

3: um die betreffende Parameter zu finden könntest du so was ähnliches verwenden:

Dim body1 As Variant
Dim chck1 As String

For I = 1 To sel.Count2
  Set countname = selection1.Item(I).Value
  Set body1 = countname.Parent
  chck1 = ""

  Do Until TypeName(body1) = "Part"
     If TypeName(body1) = "HybridBody" Then chck1 = body1.Name & "\" & chck1
     Set body1 = body1.Parent
  Loop

  chck1 = chck1 & countname.Name & "\Activity"
  Set param1 = params1.Item(chck1)
  If param1.Value = False Then param1.Value = True


Next

------------------
- Robert

[Diese Nachricht wurde von EngineeredByRobberts am 04. Mai. 2010 editiert.]

[Diese Nachricht wurde von EngineeredByRobberts am 04. Mai. 2010 editiert.]

[Diese Nachricht wurde von EngineeredByRobberts am 04. Mai. 2010 editiert.]

[Diese Nachricht wurde von EngineeredByRobberts am 04. Mai. 2010 editiert.]

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

Zwenne12
Mitglied
Werkzeugkonstrukteur


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

Beiträge: 26
Registriert: 23.08.2004

erstellt am: 05. Mai. 2010 09:50    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 Chrisma 10 Unities + Antwort hilfreich

Hallo Chrisma,

um auf die Methoden Activate, InActivate und IsInactive zuzugreifen musst Du noch ein Objekt der Klasse Part deklarieren.

Code:

Set intPartObj = CATIA.ActiveDocument.Part
For i = 1 To sel.Count
  Set countname = sel.Item (i).Value
  If intPartObj.IsInactive (countname) Then
    On Error Resume Next
    intPartObj.Activate countname
    intPartObj.UpdateObject countname
    If Err.Number <> 0 Then
        intPartObj.Inactivate countname
        intPartObj.UpdateObject countname
    End If
    On Error Goto 0
  End If
Next

Wenn Du den Code an die Stelle Deiner Markierung einfügst müsste das eigentlich funktionieren .

Gruß
Sven

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

Chrisma
Mitglied
Ingenieur


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

Beiträge: 85
Registriert: 29.03.2010

Solid Works 2013 Professional
Win7 SP1
Intel Xeon 2,67GHz
12GB Ram

erstellt am: 05. Mai. 2010 10: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

Fettes Merci,

war gerade am tippen und zack komtm dei Rettung. Läuft super.

Zwei Fragen noch:

1. Wo findest du diese Befehle (Bsp. Isinaktiv)? Hatte weder über Netz noch Ziethen Glück.
2. Set countname = sel.Item (i).Value was bedeutet dieses .Value?

Hier der gesamte Code:

Sub CATMain()
Version = "1.0"
Makroname = "automatisches De-/aktivieren und Überprüfen von Intersects"

On Error Resume Next

'----Überprüfung ob Dokument geöffnet ist
If CATIA.Documents.Count = 0 Then
        MsgBox ("Kein Dokument geöffnet!")
        Exit Sub
    End If
   
'----Auswahl der Intersects
Dim sel As Selection
Set sel = CATIA.ActiveDocument.Selection
sel.Clear
sel.Search ".Intersect.name=Intersect*;Alle"
' In der Zeile hierüber kann auch sel.Search "(CATGmoSearch.GSMIntersect),all" stehen, dann wird nach allen Intersects gesucht


'----Umbennen der Intersects
For iname = 1 To sel.Count
Set oitem = sel.Item(iname).Value
oitem.Name = "Intersect_" & iname
   
Next

'----Aktivieren der Intersects und Überprüfung auf Fehler

Set intPartObj = CATIA.ActiveDocument.Part
For i = 1 To sel.Count
  Set countname = sel.Item(i).Value
  If intPartObj.IsInactive(countname) Then
    On Error Resume Next
    intPartObj.Activate countname
    intPartObj.UpdateObject countname
    If Err.Number <> 0 Then
        intPartObj.Inactivate countname
        intPartObj.UpdateObject countname
    End If
    On Error GoTo 0
  End If
Next


'----Ausgabe der Aktivität
Dim r As Integer
r = sel.Count

MsgBox ("Anzahl gefundener und umbenannter Intersekt: " & i)
End Sub

------------------
Hihihi, lol, hihihi 

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

Zwenne12
Mitglied
Werkzeugkonstrukteur


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

Beiträge: 26
Registriert: 23.08.2004

erstellt am: 05. Mai. 2010 10:36    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 Chrisma 10 Unities + Antwort hilfreich

Hallo Chrisma,

die Befehle stehen im Ziethen unter der Klasse Part auf S. 378.
Mit der Eigenschaft Value der Klasse SelectElement beschreibst Du das Objekt des selektierten Elementes. Du kannst dann wiederum auf dessen Eigenschaften und Methoden zugreifen (im Ziethen auf S. 48 und S.399)

Gruß
Sven

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: 13. Mrz. 2017 12:45    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 Chrisma 10 Unities + Antwort hilfreich


Beispiel.JPG

 
Hallo Zusammen,

erstmal muss ich loswerden das dieses Forum mir schon einige Male sehr geholfen hat.
Super hilfreich alles !

zu diesem Thema hätte ich noch eine Frage...

ist es auch möglich herauszufinden ob ein Intersect geschlossen oder offen ist ?
ich habe gerade ein Problem, das ich an einem Punkt mit unterschiedlichen Winkeln eine Menge Intersects habe, und ich mit den geschlossenen Intersects weiterarbeiten möchte bzw. die nicht geschlossenen (für mich uninteressanten) löschen möchte.

Habe mal ein Bild mit angehängt in dem 3 Intersects vollständig sind, (orange, blau und grün) die anderen alle nicht.


Ich hoffe ich konnte mein Problem halbwegs verständlich erklären 

Viele 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: 9306
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 13. Mrz. 2017 13:00    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 Chrisma 10 Unities + Antwort hilfreich

Servus
Willkommen im Forum.
Eine Möglichkeit wäre wohl über eine Messung (SPA Workbench). Dabei mit der Methode "GetPointsOnCurve" den Anfangs- und Endpunkt zu ermitteln und dann zu vergleichen (ggf schlägt die Messung bei einer geschlossenen Kurve auch fehl).

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: 13. Mrz. 2017 14:10    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 Chrisma 10 Unities + Antwort hilfreich

Hallo Bernd,

danke, das ist schonmal eine gute Idee, da klemm ich mich gleich mal dahinter !

Gruß Micha

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: 16. Mrz. 2017 14:28    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 Chrisma 10 Unities + Antwort hilfreich

Hallo Zusammen,

habe mich jetzt mal an einer Abfrage mit Löschen des nicht geschlossenen Intersects versucht.
Leider löscht es mir den Intersect nicht... habe ich den delete Befehl falsch geschrieben oder kann man einzelne Teile in einer Selection garnicht löschen ?

hier noch der Quellcode.

'Selection starten -----------------------------------------------------------------------------------
Dim usel As selection
Set usel = CATIA.ActiveDocument.selection
usel.Clear
usel.Search "Name = Schnitt_*"
'Y ist nur zur Info wieviele es insgesamt sind... ----------------------------------------------------
Y = usel.Count


'Abfrage starten -------------------------------------------------------------------------------------
Set frage = usel.Item(1).Value
Set Ref1 = part1.CreateReferenceFromObject(frage)
Set Measurable = TheSPAWorkbench.GetMeasurable(Ref1)
Dim Gcoord(8)
Measurable.GetPointsOnCurve Gcoord


If Gcoord(0) = Gcoord(6) And Gcoord(1) = Gcoord(7) And Gcoord(2) = Gcoord(8) Then

Else

usel.Item(1).Delete

End If


In den Locals sehe ich das die Koordinaten 0,1,2 und 6,7,8 voneinander abweichen. Intersect ist also definitiv nicht geschlossen...

Hat da jemand eine Idee ?

Viele Grüße
Michael

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

CATIA V5R19

erstellt am: 16. Mrz. 2017 16:18    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 Chrisma 10 Unities + Antwort hilfreich

Servus
Du kannst nicht einzelne Elemente der Selektion löschen sondern nur alle Selektierten Element auf einmal:
Code:
usel.Delete
Schau dir mal diesen Code an wie man in solchen einem Fall vorgehen kann.
Ich empfehle dir den Filter für die Selektion weiter einzuschränken sonst werden zB auch Körper gelöscht/selektiert die "Schnitt_1" heißen.

Gruß
Bernd

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

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: 993
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: 16. Mrz. 2017 16:20    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 Chrisma 10 Unities + Antwort hilfreich

Hi MichaX,

mehrere.

Zuerst etwas Lektüre(aus der CAA-Doku):

-- Count:

Zitat:

Property Count( ) As long (Read Only)

Deprecated:
V5R16 #Count2 . The Count and Item Methods have been replaced by the Count2 and Item2 methods because they did not process correctly features which are not exposed to automation (such as a ResourcesList feature of a .CATProcess document).



--Delete:
Zitat:

Sub Delete( )

Deletes all selected objects.
Role: For all the SelectedElement objects contained by the selection, the SelectedElement.Value automation object is deleted from the document.
Note: If a selected feature is not exposed to automation, it will deleted all the way.
Example:
This example deletes all the selected objects. A selected DMU Navigator URL will be removed from the document, although it is not exposed to automation.
CATIA.ActiveDocument.Selection.Delete()


Somit geht oSel.Item(1).delete nicht, da falsch.

Frage: Prüfst Du nur einen einzigen InterSect, oder mehrere in einer Schleife.
Falls mehrere in einer Schleife, musst rückwärts zählen, die guten per 'Remove' aus der Selection entfernen und was übrigbleibt am Ende löschen.

Tschau,
Joe

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

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: 20. Mrz. 2017 07:15    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 Chrisma 10 Unities + Antwort hilfreich

Hallo,

vielen Dank für die schnellen Antworten!

Ich möchte ca. 190 Intersects prüfen, wollte es aber mal an einem versuchen bevor ich die Schleife anfange.

werde mir jetzt mal so eine Abfrage zusammenbasteln und mich dann wieder melden !

Grüße Micha

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: 20. Mrz. 2017 08: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 Nur für Chrisma 10 Unities + Antwort hilfreich

Habe die Abfrage mal so in die Schleife eingepasst. Danke für den Denkanstoß !

Wenn ich die Schleife von Hand durchklicke sehe ich im Locals-Fenster das er mir die vollständigen Schnitte aus der Selection rausnimmt.
Schon mal Perfekt  
In den vorherigen Schritten benenne ich immer alle anderen Schnitte anders, deshalb müsste es da keine Komplikationen geben.

Jedoch kommt nach der Schleife beim Delete-Vorgang folgender Fehler.
Please reconsider your operation. you can't delete a private component.

Ich habe letztens beim stöbern im Forum etwas von veröffentlichen gelesen...
Das wird damit zusammenhängen oder?

Hier noch der angepasste Quellcode:

Set drawingDocument1 = CATIA.ActiveDocument

'Selection starten------------------------------------------------------------
Set sel = drawingDocument1.selection
sel.Search "Name = Schnitt_*"
E = sel.Count
'E zur Info und als Max-Wert für die Schleife---------------------------------
For i = 1 To E Step 1

  Set frage = sel.Item(i).Value
  Set Ref1 = part1.CreateReferenceFromObject(frage)
  Set Measurable = TheSPAWorkbench.GetMeasurable(Ref1)
  Dim Gcoord(8)
  Measurable.GetPointsOnCurve Gcoord
 
  If Gcoord(0) = Gcoord(6) And Gcoord(1) = Gcoord(7) And Gcoord(2) = Gcoord(8) Then
 
      sel.Remove (i)
     
  End If
Next
sel.Delete

Viele Grüße
Micha

EDIT: Habe die Schleife jetzt noch geändert das sie von hinten nach vorne durchläuft, wegen dem Index.

[Diese Nachricht wurde von MichaX am 20. 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: 9306
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 20. Mrz. 2017 09:16    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 Chrisma 10 Unities + Antwort hilfreich

Servus Micha

Bitte den Code in Zukunft in entsprechende [CODE ][ /CODE]-Tags posten.
Deine Schleife läuft noch nicht von hinten nach vorne durch (siehe mein verlinktes Beispiel)
Was wurde denn alles Selektiert? Stimmt die Auswahl?
In welcher Worbench arbeitest du?
Was willst du denn Selektieren? (ggf Screenshot des Baumes posten)
Intersects aus der GSD-Workbench? Dann solltest du auch deinen Filter entsprechend einengen zB

Code:
"sel.Search ((CATGmoSearch.GSMIntersect + CATGmoSearch.Intersect) & Name=Schnitt_*),all"
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: 20. Mrz. 2017 09: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 Nur für Chrisma 10 Unities + Antwort hilfreich


Beispielbild_01.JPG

 
Hallo Bernd,

alles klar, wird in Zukunft so gemacht!
Schleifendurchlauf von hinten habe ich geändert, die Eingrenzung mit der Selection habe ich auch gleich mal umgesetzt, Danke !
hier gleich mal gesamte Code:

Vor dem eigentlichen Problem werden noch ein paar Sachen neu benannt und gezählt...

Code:

Sub Test()

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

Dim hybridBodies1 As HybridBodies
Set hybridBodies1 = part1.HybridBodies

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

Dim hybridShapes1 As HybridShapes
Set hybridShapes1 = hybridBody1.HybridShapes

Dim selection1 As selection
Set Document = CATIA.ActiveDocument
Set selection1 = Document.selection
selection1.Search "Name = Intersect.*"
Count1 = selection1.Count

X = Count1

Dim TheSPAWorkbench As Workbench
Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")

On Error Resume Next

   
'----Auswahl der Intersects
Dim selection2 As selection
Set selection2 = CATIA.ActiveDocument.selection
selection2.Clear
selection2.Search ".Intersect.name=Intersect.*;all"
' In der Zeile hierüber kann auch sel.Search "(CATGmoSearch.GSMIntersect),all" stehen,
'dann wird nach allen Intersects gesucht

'----Umbenennen der Intersects
For iName = 1 To selection2.Count
Set oitem = sel.Item(iName).Value
oitem.Name = "Schnitt_" & iName
   
Next

Set drawingDocument1 = CATIA.ActiveDocument

'Selection starten------------------------------------------------------------------------------------

Set selection3 = drawingDocument1.selection
selection3.Search "((CATGmoSearch.GSMIntersect + CATGmoSearch.Intersect) & Name=Schnitt_*),all"
E = selection3.Count

'E zur Info und als Max-Wert für die Schleife---------------------------------------------------------

For i = E To 1 Step -1

  Set frage = sel.Item(i).Value
  Set Ref1 = part1.CreateReferenceFromObject(frage)
  Set Measurable = TheSPAWorkbench.GetMeasurable(Ref1)
 
  Dim Gcoord(8)
  Measurable.GetPointsOnCurve Gcoord
 
  If Gcoord(0) = Gcoord(6) And Gcoord(1) = Gcoord(7) And Gcoord(2) = Gcoord(8) Then
 
      sel.Remove (i)
     
  End If
 
Next

sel.Delete

End Sub


Die Selection stimmt so, alle nicht geschlossenen Intersects sind markiert(Siehe Anhang).
Ich bin hier im Generative Shape Design unterwegs.
Diesen Fehler habe ich so noch nie in Catia gesehen ...

Grüße
Micha

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

[Diese Nachricht wurde von MichaX am 20. 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: 9306
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 20. Mrz. 2017 09:45    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 Chrisma 10 Unities + Antwort hilfreich

Servus
Warum hast du denn ein "Multi Output "interscet.1"?
Kannst du da von Hand einen Verschneidung rauslöschen?
Ich würde die Verschneidungen umdefinieren dass nur einzelne Outupts rauskommen (wie weiß ich auch nicht genau)
Oder die offenen Intersetions nicht löschen sondern nur ausblenden.

Gruß
Bernd

PS: Bitte "On Error Resume Next" nur nutzen wenn du weißt was passiert.

------------------
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: 20. Mrz. 2017 09:53    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 Chrisma 10 Unities + Antwort hilfreich

Grüß Dich Bernd,

stimmt, das ist wohl das Problem, kann von Hand keine Verschneidungen aus dem MultiOutput löschen !
Dann werde ich den Weg mit ausblenden weitergehen.

Alles klar, On Error Resume Next ist Geschichte 

Werde euch auf dem laufenden halten.

Tausend Dank bisher !!!

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)2017 CAD.de