Autor
|
Thema: Feststellen ob Element in Selektion (414 mal gelesen)
|
Tiberius Mitglied
Beiträge: 414 Registriert: 19.02.2002
|
erstellt am: 24. Jul. 2009 07:41 <-- editieren / zitieren --> Unities abgeben:
Hallo, man angenommen bevor ein Skript gestartet wird, wird vom user eine Selektion getroffen. Wenn dann das Skript abläuft und die Baumstruktur durchforstet soll es feststellen ob gerade diese Element in der Selektion vom User liegt. Wie bekomm ich das am einfachsten hin? (Das Systematische durchgehen des Baumes habe ich bereits, es dreht sich nur noch um die Feststellung ob selektiert). Gruß Tiberius Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 24. Jul. 2009 09:10 <-- editieren / zitieren --> Unities abgeben: Nur für Tiberius
Hallo, so ganz verstehe ich den Beitrag von dir nicht. Du spricht vom "gerade dieses"...welches? Woher bekommst du den den Input bzw. das Teil zum vergleichen? Hier mal ein Code der Selektion. Mit diesem kannst du z.B. die Namen von einem Input (von dir vorgegeben) und der User-Selektion vergleichen. Code:
Dim oSel as Selection Dim oDoc as DocumentSet oDoc = CATIA.ActiveDocument Set oSel = oDoc. Selection If oSel.Count = 1 then Set mySelName = oSel.Item(1).Value If mySelName = "xyz" then'hier wird abgefragt ob es sich um ein bestimmtes Teil handelt End If ElseIf oSel.Count = 0 then MsgBox "Keine Selektion vorgenommen" ElseIf oSel.Count > 1 then MsgBox "Es wurden mehrere Teile selektiert"
------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tiberius Mitglied
Beiträge: 414 Registriert: 19.02.2002
|
erstellt am: 24. Jul. 2009 09:48 <-- editieren / zitieren --> Unities abgeben:
Ich möchte nicht die Selektion durchgehen, sondern den kompletten Baum - und dort bei den einzelnen Unterelementen feststellen ob dieses Element in der Selektion mit drinnen ist. Hatte gehoffe es gibt ne Methode das abzufragen die dann true oder false zumindest liefert. Wenn ich z.B. meherere Aufspannungen habe und darunter wieder mehrere Programme und diese dann komplett durchgehe, will ich nur wissen ob das gerade untersuchte Element (in dem Fall das Programm in einer Aufspannung) in der vorher gewählten Selektion ist. Hoffe es ist jetzt etwas klarer. Grüße Tiberius [Diese Nachricht wurde von Tiberius am 24. Jul. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 25. Jul. 2009 09:58 <-- editieren / zitieren --> Unities abgeben: Nur für Tiberius
Hallo Tiberius, schau dir mal folgendes Beispiel an. Ich hoffe es ist das was du suchst. Der Anwender muss zuerst mindestens ein Programm im Strukturbaum selektieren. Wird dann das Makro ausgeführt, durchläuft das Makro den Baum, sucht alle Programme raus und vergleicht diese mit der Selektion. Ist ein Programm in der Selektion vorhanden gibt das Makro ein Nachricht aus und schreibt das Objekt in ein Array (das kannst du dann weiter benutzen). Ich hoffe ich habe das jetzt richtig verstanden Code:
Sub CATMain() 'Deklarationen Dim oDoc As Document Dim oProg As ManufacturingProgram Dim oProcess As PPRActivity Dim oSel As Selection Dim mySelecedArray() As ManufacturingProgram Dim Counter As Integer Dim myChilds As ChildrenActivities Dim myActiveChild As Activity Dim mySubChild As Activity Dim mySelName As String 'Hauptschleife Counter = -1 Set oDoc = CATIA.ActiveDocument Set oSel = oDoc.Selection If oSel.Count = 0 Then Box = MsgBox("Es liegt keine Selektion vor!", vbCritical, "KEINE SELEKTION") Exit Sub End If Set oProcess = oDoc.GetItem("Process") Set myChilds = oProcess.ChildrenActivities For i = 1 To myChilds.Count Set myActiveChild = myChilds.Item(i) If myActiveChild.Type = "ManufacturingSetup" Then If CStr(myActiveChild.Active) = "True" Then For hh = 1 To myActiveChild.ChildrenActivities.Count Set mySubChild = myActiveChild.ChildrenActivities.Item(hh) If mySubChild.Type = "ManufacturingProgram" Then If (mySubChild.Active) = "True" Then For ii = 1 To oSel.Count Set myAktiSel = oSel.Item(ii).Value mySelName = myAktiSel.Name If mySubChild.Name = mySelName Then 'Selektierte Programme in Array schreiben Counter = Counter + 1 ReDim Preserve mySelecedArray(Counter) Set mySelecedArray(Counter) = mySubChild Box = MsgBox("Folgendes Programm ist in der Selektion enthalten:" + Chr(10) + _ "==> " + Chr(34) + mySubChild.Name + Chr(34) + " <==", vbInformation, _ "Hinweis") End If Next End If End If Next End If End If Next End Sub
------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tiberius Mitglied
Beiträge: 414 Registriert: 19.02.2002
|
erstellt am: 26. Jul. 2009 18:19 <-- editieren / zitieren --> Unities abgeben:
Hallo Daniel, vielen Dank für Deine Mühen. Ich hatte inzwischen auch ne Idee nur kam ich nicht groß online. Ich hab Deinen Code noch nicht ganz durchgesehen, jedoch werde ich das auf alle fälle noch machen. meine Idee hat auch blendend funktioniert. Ich möchte das aber erst noch fertig bekommen und dann kann ich es hier rein stellen dass andere auch was davon haben. Aber wie gesagt ich will das erst fertig machen damits nichts halbes ist. Gruß Tiberius Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|