Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  SelectSet in ActiveDocument

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
  
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


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

Beiträge: 328
Registriert: 17.08.2005

Windows XP SP3
IV Prof 2012
VS 2010

erstellt am: 19. Apr. 2010 08:52    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 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 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.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)


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

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 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 BernhardU 10 Unities + Antwort hilfreich

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




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 19. Apr. 2010 10: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 BernhardU 10 Unities + Antwort hilfreich

Hallo

Stimmt so nicht ganz. Das Selektieren funktioniert, dir fehlt nur das Highlighten. Braucht es das unbedingt?

------------------
MfG
RK

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

BernhardU
Mitglied
Techniker / Konstrukteur / Student


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

Beiträge: 328
Registriert: 17.08.2005

Windows XP SP3
IV Prof 2012
VS 2010

erstellt am: 19. Apr. 2010 11: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

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




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 19. Apr. 2010 12:42    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 BernhardU 10 Unities + Antwort hilfreich

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 Explicit

Sub 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




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 19. Apr. 2010 13:40    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 BernhardU 10 Unities + Antwort hilfreich

Noch'n Vorschlag:

Code:
Option Explicit

Sub 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

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