Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  ilogic - alle BKS und Arbeitsebenen in einer IAM beim speichern ausblenden

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:  ilogic - alle BKS und Arbeitsebenen in einer IAM beim speichern ausblenden (3243 mal gelesen)
M. Hanke
Mitglied
Konstruktionsingenieur


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

Beiträge: 384
Registriert: 05.12.2002

erstellt am: 26. Mrz. 2014 07:59    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,
ich weiß zwar nicht, ob ich mit I-Logic-Fragen hier richtig bin, deshalb versuche ich es einfach mal:
Ich versuche mit folgendem I-Logic Code in einer Baugruppe alle Arbeitselemente und Koordinatensysteme beim speichern auszublenden. Das funktioniert auch soweit bis zum "'----", aber alles was auf der Komponentenebene ist, geht nicht so richtig.
Genauer: Die Objektdeklaration von "ocompOcc.definition" funktioniert nicht.

Kann mir wer helfen?

Dim oasmDoc as assemblydocument
Dim oasmcomdef as assemblycomponentdefinition
Dim osubasmcomdef as assemblycomponentdefinition
Dim oparcomdef As PartComponentDefinition
Dim CompOccs as componentoccurrences
Dim ocompOcc as componentoccurrence
'Dim ocompDoc As Document

Dim ucscol As usercoordinatesystems
Dim waxcol as WorkAxes
Dim wplanescol as workplanes
Dim ucs as UserCoordinateSystem
Dim waxis as workaxis
Dim wplane As WorkPlane

oasmDoc = ThisDoc.Document
oasmcomdef = oasmDoc.ComponentDefinition
ucscol=oasmcomdef.usercoordinatesystems
waxcol=oasmcomdef.WorkAxes
wplanescol=oasmcomdef.workplanes

'Für diese Datei alles ausblenden
'Alle BKS ausblenden
For Each ucs in ucscol
ucs.Visible() =False
Next

'Alle Arbeitsachsen ausblenden
For Each waxis in waxcol
waxis.Visible() =False
Next

'Alle Arbeitsebenen ausblenden
For Each wplane In wplanescol
wplane.Visible() =False
Next

'----
'Für alle verbauten Komponenten auch alle BAE ausblenden
CompOccs=oasmcomdef.occurrences

For Each ocompOcc in CompOccs
If ocompOcc.DefinitionDocumentType = kAssemblyDocumentObject Then
osubasmcomdef = ocompOcc.definition
ucscol=osubasmcomdef.usercoordinatesystems
waxcol=osubasmcomdef.WorkAxes
wplanescol=osubasmcomdef.workplanes
ElseIf ocompOcc.DefinitionDocumentType = kPartDocumentObject Then
oparcomdef = ocompOcc.definition
ucscol=oparcomdef.usercoordinatesystems
waxcol=oparcomdef.WorkAxes
wplanescol=oparcomdef.workplanes
End If

'Alle BKS ausblenden
For Each ucs in ucscol
ucs.Visible() =False
Next

'Alle Arbeitsachsen ausblenden
For Each waxis in waxcol
waxis.Visible() =False
Next

'Alle Arbeitsebenen ausblenden
For Each wplane In wplanescol
wplane.Visible() =False
Next
Next

------------------
Gruß
Michael


--->> Wissen ist Macht. Nichts wissen macht auch nichts. <<---

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

PaulSchuepbach
Moderator
Programmierer




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

Beiträge: 1005
Registriert: 01.10.2003

erstellt am: 26. Mrz. 2014 09:22    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 M. Hanke 10 Unities + Antwort hilfreich

Hallo Michael,

bitte nicht persönlich nehmen, aber Dein Code schaut mir etwas abenteuerlich aus...

Ich schätze mal, das was Du haben möchtest, geht mit 2 Zeilen Code:

oDoc.ObjectVisibility.UCSTriads = False
oDoc.ObjectVisibility.AllWorkFeatures = False

wobei 'oDoc' ein Part- oder AssemblyDocument sein kann...

HTH

------------------
Grüsse, Paul

Inventor-Programmierung, Inventor-Tools und Inventor API-Schulung
Online 3D-Ersatzteilkataloge
Kostenmanagement mittels NLPP Analyse

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

M. Hanke
Mitglied
Konstruktionsingenieur


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

Beiträge: 384
Registriert: 05.12.2002

Firma: SolidEdge 2019 Premium + P&ID Design + Piping + Isogen
Home: Solid Edge Academic Copy ST8, Win10

erstellt am: 26. Mrz. 2014 09: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

Hallo Paul,
danke für den Hinweis, aber ich möchte nicht die globale Sichtbarkeit der Arbeitselement ausstellen (könnte ich ja auch unter Menü>> Ansicht >> Objektsichtbarkeit), sondern grundsätzlich bei allen Arbeitselementen den Haken bei "Sichtbarkeit" rausnehmen.
Ziel ist, dass in gespeicherten Dateien keine Arbeitselemente auf "sichtbar" geschaltet sind. Das funktioniert ja auch alles wunderbar mit allen Elementen in der BG, aber an die Elemente in den Komponenten komme ich nicht dran, da irgendetwas mit dem

osubasmcomdef = ocompOcc.definition

nicht passt.

------------------
Gruß
Michael


--->> Wissen ist Macht. Nichts wissen macht auch nichts. <<---

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

PaulSchuepbach
Moderator
Programmierer




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

Beiträge: 1005
Registriert: 01.10.2003

erstellt am: 26. Mrz. 2014 09:56    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 M. Hanke 10 Unities + Antwort hilfreich

...versuch's mal mit

osubasmcomdef = ocompOcc.ContextDefinition

BTW: mit Deinem Code (ab -----) greifst Du nur auf die Instanzen im Root-Knoten Deiner BG zu - aber was ist mit allen weiteren Unter-BG's ? Die werden nicht verarbeitet.

Schau Dir dazu mal das Beispiel 'Traverse an Assembly API Sample' in der API-Hilfe an. Dieses Beispiel zeigt Dir, wie Du rekursiv durch die ganze BG durch gehst.

------------------
Grüsse, Paul

Inventor-Programmierung, Inventor-Tools und Inventor API-Schulung
Online 3D-Ersatzteilkataloge
Kostenmanagement mittels NLPP Analyse

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: 26. Mrz. 2014 19: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 M. Hanke 10 Unities + Antwort hilfreich

Hallo

Vielleicht noch ein Tip in Sachen Performance. Prüf die Objekte vorher, ob sie sichtbar geschaltet sind, bevor du visible=false setzt. Viele solcher "Änderungen" veranlassen Inventor zum neu Berechnen des gesamten Modells (auch wenn sich eigentlich nix geändert hat).
Muss in dem Fall nicht sein, könnte aber.

@Paul
Die Regel steckt in der obersten Baugruppe oder? Würde dann ein rekursives Umschalten der Sichtbarkeit beim Speichern der Baugruppe nicht eine Endlosschleife erzeugen? Ich meine, beim normalen Speichern ist die Reihenfolge von unten nach oben in der Struktur. Alle Unterbaugruppen und Bauteile sind bereits gespeichert wenn die Hauptbaugruppe gespeichert wird. Dort wird dann rekursiv durch alle Ebenen eine Änderung im Modell durchgeführt, die Inventor wieder dazu veranlaßt die Dateien speichern zu wollen.

------------------
MfG
Ralf

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



Solution Architect Teamcenter (m/w/d)

Getreu unserem Motto simplify the complex stehen wir unseren Kund:innen aus über 11 Branchen der Fertigungsindustrie seit 1996 zur Seite. Auf dem Markt werden wir als Expert:innen für PLM mit Teamcenter®, CAD/CAM mit NX®, digitale Transformation sowie eigenen ECS-Solutions wahrgenommen und zählen in diesem zu den führenden Unternehmen.

Als familiengeführtes Unternehmen steht ...

Anzeige ansehenProzessmanagement
M. Hanke
Mitglied
Konstruktionsingenieur


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

Beiträge: 384
Registriert: 05.12.2002

erstellt am: 02. Apr. 2014 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

Danke für den Tip, habe ich nun auch berücksichtigt.
Zum Test habe ich das ganze jetzt mal als VBA-Makro aufgebaut, damit ich das besser debuggen kann (wenns dann läuft, wird es ein Ilogic-Prog). Dabei konnte ich die oben genannten Probleme lösen, bis auf folgendes:
Wenn ich eine verbaute Komponente habe und dann mit
ucs.Visible() = False
die Sichtbarkeit des BKS ausstelle, wird mir das zwar im Lokalfenster vom VBA-Editor korrekt angezeigt (Eigenschaft visible wird von "wahr" auf "falsch" gesetzt), aber weder im Browser noch im Grafikfenster ändert sich was.
Kann das evtl. daran liegen, dass ich mich in einer Komponente befinde? Wenn ich die komplette Komponente ausblende funktioniert das nämlich auch im Browser und im Grafikfenster sofort.

Hier der aktuell VBA-Code:

Public Sub BAEausblenden()
Dim oapp As Application
Dim oasmDoc As AssemblyDocument
Dim oasmcomdef As AssemblyComponentDefinition
Dim osubasmcomdef As AssemblyComponentDefinition
Dim oparcomdef As PartComponentDefinition
Dim compoccs As ComponentOccurrences
Dim ocompOcc As ComponentOccurrence
'Dim ocompDoc As Document

Dim ucscol As UserCoordinateSystems
Dim waxcol As WorkAxes
Dim wplanescol As WorkPlanes
Dim ucs As UserCoordinateSystem
Dim waxis As WorkAxis
Dim wplane As WorkPlane

Set oasmDoc = ThisDocument
Set oasmcomdef = oasmDoc.ComponentDefinition
Set ucscol = oasmcomdef.UserCoordinateSystems
Set waxcol = oasmcomdef.WorkAxes
Set wplanescol = oasmcomdef.WorkPlanes

'Für diese Datei alles ausblenden
'Alle BKS ausblenden
For Each ucs In ucscol
    ucs.Visible() = False
Next

'Alle Arbeitsachsen ausblenden
For Each waxis In waxcol
    waxis.Visible() = False
Next

'Alle Arbeitsebenen ausblenden
For Each wplane In wplanescol
    wplane.Visible() = False
Next

'Für alle verbauten Komponenten auch alle BAE ausblenden
Set compoccs = oasmcomdef.Occurrences

For Each ocompOcc In compoccs
    MsgBox ocompOcc.Name
    ocompOcc.Visible = True
    If ocompOcc.DefinitionDocumentType = kAssemblyDocumentObject Then
        Set osubasmcomdef = ocompOcc.Definition
        Set ucscol = osubasmcomdef.UserCoordinateSystems
        Set waxcol = osubasmcomdef.WorkAxes
        Set wplanescol = osubasmcomdef.WorkPlanes
    ElseIf ocompOcc.DefinitionDocumentType = kPartDocumentObject Then
        Set oparcomdef = ocompOcc.Definition
        Set ucscol = oparcomdef.UserCoordinateSystems
        Set waxcol = oparcomdef.WorkAxes
        Set wplanescol = oparcomdef.WorkPlanes
    End If
MsgBox ocompOcc.Name 'Nur zum Test
''geht ab hier nicht:
    'Alle BKS ausblenden
    For Each ucs In ucscol
        MsgBox ucs.Name  'Nur zum Test
        If ucs.Visible() = True Then
            ucs.Visible() = False
        End If
    Next

    'Alle Arbeitsachsen ausblenden
    For Each waxis In waxcol
        If waxis.Visible() = True Then
            waxis.Visible() = False
        End If
    Next

    'Alle Arbeitsebenen ausblenden
    For Each wplane In wplanescol
        If wplane.Visible() = True Then
            wplane.Visible() = False
        End If
    Next
    Set oapp = ThisApplication  'Nur zum Test
    oapp.ScreenUpdating = True  'Nur zum Test
Next

End Sub

------------------
Gruß
Michael


--->> Wissen ist Macht. Nichts wissen macht auch nichts. <<---

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