| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: SelectSet in ActiveDocument (5421 mal gelesen)
|
BernhardU Mitglied Techniker / Konstrukteur / Student
Beiträge: 328 Registriert: 17.08.2005 Windows XP SP3 IV Prof 2012 VS 2010
|
erstellt am: 19. Apr. 2010 08:52 <-- editieren / zitieren --> Unities abgeben:
Hi Leute ich würde gerne in einem Bauteil, das als ActiveDocument aktiv ist mehrere Flächen selektieren Hab mir das so gedacht: Code: Sub SelectAllFaces() Dim p As PartDocument If ThisApplication.ActiveDocumentType = kAssemblyDocumentObject Then Set p = ThisApplication.ActiveEditDocument Else Set p = ThisApplication.ActiveDocument End IfDim s As SurfaceBody Set s = p.ComponentDefinition.SurfaceBodies(1) Dim oc As ObjectCollection Set oc = ThisApplication.TransientObjects.CreateObjectCollection Dim f As Face For Each f In s.Faces oc.Add f Next p.SelectSet.SelectMultiple oc End Sub
Jedoch funktioniert das nicht! Es klappt nur wenn ich das Bauteil öffne? ??? Vielen Dank LG Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dechgo Mitglied Dipl. Ing. (FH)
Beiträge: 93 Registriert: 13.04.2005 Win 7 (64bit) Inventor 2011 AutoCAD 2011 Producstream Professional Pro 2011
|
erstellt am: 19. Apr. 2010 09:03 <-- editieren / zitieren --> Unities abgeben: Nur für BernhardU
Hallo Bernhard, du verwendest: ThisApplication.ActiveDocument Wenn dein Bauteil also nicht geöffnet ist, ist es auch nicht das aktive Dokument, weshalb nichts selektiert werden kann. Ich glaube man kann nur selektieren wenn das Bauteil auch offen ist, anders macht es für mich aber auch keinen Sinn... Gruss Dennis Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 19. Apr. 2010 10:06 <-- editieren / zitieren --> Unities abgeben: Nur für BernhardU
|
BernhardU Mitglied Techniker / Konstrukteur / Student
Beiträge: 328 Registriert: 17.08.2005 Windows XP SP3 IV Prof 2012 VS 2010
|
erstellt am: 19. Apr. 2010 11:06 <-- editieren / zitieren --> Unities abgeben:
Naja!? Ich würde zumindest dann gerne den "AppFacePropertiesCmd" Command ausführen? Und einfach Code: ThisApplication.CommandManager.ControlDefinitions.Item("AppFacePropertiesCmd").Execute
dran hängen klappt nicht!? LG Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 19. Apr. 2010 12:42 <-- editieren / zitieren --> Unities abgeben: Nur für BernhardU
Hallo Der von dir aufgerufene Befehl wir im Context des ActiveDocument ausgeführt. Inventor wertet also das ActiveDocument.SelectSet aus und das ist mit deiner Methode leer. Alternativer Vorschlag (Würgaround): Mit
Code: Option ExplicitSub SelectAllFaces() Dim p As PartDocument Dim bSkipClose As Boolean If ThisApplication.ActiveDocumentType = kAssemblyDocumentObject Then Set p = ThisApplication.Documents.Open(ThisApplication.ActiveEditDocument.FullDocumentName, True) Else Set p = ThisApplication.ActiveDocument bSkipClose = True End If Dim s As SurfaceBody Set s = p.ComponentDefinition.SurfaceBodies(1) Dim oc As ObjectCollection Set oc = ThisApplication.TransientObjects.CreateObjectCollection Dim f As Face For Each f In s.Faces oc.Add f Next p.SelectSet.Clear Call p.SelectSet.SelectMultiple(oc) ' Execute the copy command. Dim oCopyControlDef As ControlDefinition Set oCopyControlDef = ThisApplication.CommandManager.ControlDefinitions.Item("AppFacePropertiesCmd") Call oCopyControlDef.Execute
If Not bSkipClose = True Then p.Close (True) End If End Sub
das Part separat öffnen (geht schnell, da es ja schon in der Baugruppe geöffnet ist), Flächenrenderstyle setzen, Befehl normal mit "OK" beenden, Dokument ohne Speichern schließen. Dann bist du zurück in deiner Baugruppe und der Renderstyle ist trotzdem gesetzt. ------------------ MfG RK EDIT: Schließen überspringen vergessen. [Diese Nachricht wurde von rkauskh am 19. Apr. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 19. Apr. 2010 13:40 <-- editieren / zitieren --> Unities abgeben: Nur für BernhardU
Noch'n Vorschlag: Code: Option ExplicitSub SelectAllFaces() Dim oApp As Application Set oApp = ThisApplication Dim oc As ObjectCollection Set oc = ThisApplication.TransientObjects.CreateObjectCollection Dim s As SurfaceBody Dim f As Face Dim fp As FaceProxy Dim p As PartDocument Dim ReturnToAss As Boolean If ThisApplication.ActiveDocumentType = kAssemblyDocumentObject Then Dim oDoc As AssemblyDocument Set oDoc = oApp.ActiveDocument Dim oObject As Object Set oObject = ThisApplication.CommandManager.Pick(kPartBodyFilter, "Pick a part") Call oObject.Parent.Edit Set p = oApp.ActiveEditDocument ReturnToAss = True Dim oOcc As ComponentOccurrence Set oOcc = oObject.Parent Set s = p.ComponentDefinition.SurfaceBodies(1) 'ObjectCollection der FlächenProxies erstellen For Each f In s.Faces Call oOcc.CreateGeometryProxy(f, fp) oc.Add fp Next Else Set p = ThisApplication.ActiveDocument Set s = p.ComponentDefinition.SurfaceBodies(1) For Each f In s.Faces oc.Add f Next End If ' Flächen selektieren oApp.ActiveDocument.SelectSet.Clear Call oApp.ActiveDocument.SelectSet.SelectMultiple(oc) ' Execute command. Dim oControlDef As ControlDefinition Set oControlDef = ThisApplication.CommandManager.ControlDefinitions.Item("AppFacePropertiesCmd") Call oControlDef.Execute If ReturnToAss = True Then Call oOcc.ExitEdit(kExitToPrevious) End If End Sub
------------------ MfG RK [Diese Nachricht wurde von rkauskh am 19. Apr. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |