Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API: ishidden geht scheinbar für unterbaugruppen nicht

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 SOLIDWORKS
  
PLM TechnologieForum Bamberg
Autor Thema:  API: ishidden geht scheinbar für unterbaugruppen nicht (1408 mal gelesen)
LeonardStark
Mitglied



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

Beiträge: 100
Registriert: 14.08.2018

erstellt am: 16. Mai. 2019 13:21    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,
Ich versuche in einem Makro jede sichtbare Komponente einer Baugruppe auszulesen. dafür nutze ich icomp.IsHidden(true)
Im Falle, dass ich eine Baugruppe ausblendet habe, die eine unteraugruppe enthält, wird die Unterbaugruppe weiterhin als sichtbar  zurück gemeldet (ishidden(true)=false). Mach ich da mit der Funktion etwas falsch oder gibt es eine andere Funktion, mit der ich den status der Komponente prüfen kann?

Danke schonmal für eure soweit immer hilfreichen Anregungen und Hinweise.
Viele Grüße

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

SLDW-FEM
Mitglied
Simulations-Ingenieur


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

Beiträge: 640
Registriert: 21.02.2005

Solidworks 2017+2019+20+22
SpaceClaim
Windows 11 64bit
HP-ZBook 32gbRAM NVIDIA

erstellt am: 16. Mai. 2019 14:25    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 LeonardStark 10 Unities + Antwort hilfreich

Hallo

bei mir geht es ! (sld2017sp5-+hotfix)

dir ist aber schon klar, daß der Kontext der Baugruppe wichtig ist!
d.h. bei einer 3-stufigen Assy
gibt es die tiefste Komponente 2mal und sie kann überall
nen eigenen Anzeigestatus haben!

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

LeonardStark
Mitglied



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

Beiträge: 100
Registriert: 14.08.2018

erstellt am: 16. Mai. 2019 14: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 SLDW-FEM,
mit Kontext der Baugruppe meinst du, dass es in einer hauptbaugruppe liegen muss? Der ist eigentlich gegeben.
nur damit wir nicht aneinander vorbei reden, noch mal etwas anschaulicher (hoffentlich) meine Ausgangssituation beschrieben

-Assembly-
----------part1
----------part2
----------Subassembly1-
-----------------------subassembly1.2

gekürzter code:
AssemblyDoc doc = swApp.ActiveDoc;
object[] comps = doc.GetComponents(false);
foreach (object comp in comps) //durchlaufe jede Komponente
            {IComponent2 icomp = (IComponent2)comp;
            IModelDoc2 modeldoc2 = icomp.GetModelDoc2();
            Debug.Print(" ishidden: " + icomp.ishidden.ToString());
            }


blende ich subassembly1.2 einzeln aus. wird es als ishidden=true angezeigt. blende ich aber subassembly1 aus, sind darunter liegende subassemblys weiterhin für den code eingeblendet (ishidden=false)

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

ConZept
Mitglied
Maschinenbautechniker


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

Beiträge: 15
Registriert: 19.02.2019

SolidWorks 2018 / SP 4.0
Win7x64 /HP Z440

erstellt am: 16. Mai. 2019 20:54    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 LeonardStark 10 Unities + Antwort hilfreich

Hallo Leonard,

kenne jetzt deinen traverse code nicht, aber GetComponents gibt dir "irgendeine" Reihenfolge (siehe remarks) der Komponenten wieder. Ist es sicher, dass die Komponente auch tatsächlich die ausgeblendete ist und nicht eine mit dem gleichen Namen, aber wo anders verbaut?
Für mich funktioniert folgende traverse um herauszufinden, ob Komponenten unterdrückt und Toolbox-Teile sind:

Code:

        private void TraverseAssembly(Component2 swComp, int depth)
        {
            try
            {
                object[] vChildComp;
                Component2 swChildComp;
                ModelDoc2 swModel;
                long i = 0;

                vChildComp = (object[])swComp.GetChildren();
                for (i = 0; i < vChildComp.Length; i++)
                {
                    swChildComp = (Component2)vChildComp[i];

                    // check if the component is supressed
                    if (!swChildComp.IsSuppressed())
                    {
                        swModel = (ModelDoc2)swChildComp.GetModelDoc2();
                        if (swModel?.Extension.ToolboxPartType == (int)swToolBoxPartType_e.swNotAToolboxPart)// check if component is toolboxpart
                        {
                            etc...
                        }
                    }

                    TraverseAssembly(swChildComp, depth++);
                }
            }
            catch (Exception ex)
            {
                 // error handling
            }
        }



Wobei swComp hier die Root Komponente, also deine Assembly ist.
Ansonsten kennst du bestimmt das Beispiel in der API-Hilfe, aber vielleicht hilft es dir weiter.
Müsste ich jetzt mal mit ausgeblendeten Teilen testen um zu sehen ob ich das reproduzieren kann.

------------------
Gruß ConZept

[Diese Nachricht wurde von ConZept am 16. Mai. 2019 editiert.]

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

LeonardStark
Mitglied



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

Beiträge: 100
Registriert: 14.08.2018

erstellt am: 17. Mai. 2019 10:26    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 ConZept, leider hat der Code auch keine Änderung gebracht. wenn eine "Unter-Unterbaugruppe" mit ihrer darüberliegenden "Unterbaugruppe" zusammen ausgeblendet wird, scheint der Marker "hidden" nicht gesetzt zu werden.

Auch wenn ich über getcomponents nicht in definierter Reihenfolge die Komponenten durchlaufe, bin ich trotzdem sicher, dass es die gesuchte Baugruppe ist. ich hab das auch mit kleinen Baugruppen getestet und mir die "ishidden" werte ausgeben lassen.

weiß vielleicht jemand noch andere Möglichkeiten um die Sichtbarkeit zu prüfen?

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

Christian_W
Ehrenmitglied V.I.P. h.c.
Konstrukteur (Dipl-Ing)


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

Beiträge: 3189
Registriert: 04.04.2001

CSWP 12/2015<P>SWX2021sp5 Win10/11
(SWX2016, SWX2012)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19)

erstellt am: 17. Mai. 2019 11: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 LeonardStark 10 Unities + Antwort hilfreich

Hallo,

du wirst in das traverse eine Abfrage einbauen müssen, ob die Unterbaugruppe auch noch aufgelöst werden muss.

getcomponents(false) holt alle Komponenten incl. unterunterunter...baugruppenkomponenten

getcomponents(true) würde nur die oberste Ebene liefern.

wenn unsichtbar --> ignorieren, nächste
wenn sichtbar --> sammeln (oder ausgeben oder …)
wenn (sichtbar und) Assembly --> traverse (unterkomponenten)

Gruß, Christian

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

LeonardStark
Mitglied



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

Beiträge: 100
Registriert: 14.08.2018

erstellt am: 17. Mai. 2019 12:48    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 Christian, 
Super die zusätzliche Abfrage hats gebracht. Ich verstehs nur noch nicht ganz. Eben WEIL getcomponents(false) alle Komponenten holt, hätte ich gedacht, dass er auch den hidden Status richtig erkennt. aber da scheint solidworks dann die Baugruppe separat zu untersuchen, richtig?

Vielen Dank euch auf jeden Fall für eure Hilfe. Ich finds wirklich super, dass man hier zu fast allen Problemen Unterstützung bekommt.

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

ConZept
Mitglied
Maschinenbautechniker


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

Beiträge: 15
Registriert: 19.02.2019

SolidWorks 2018 / SP 4.0
Win7x64 /HP Z440

erstellt am: 17. Mai. 2019 13: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 LeonardStark 10 Unities + Antwort hilfreich

Hallo,

ist tatsächlich so, dass die ausgeblendete assembly bei der traverse nicht mehr aufgelöst wird.
Mit folgendem Code läuft auch die subassembly durch und gibt den Status der Komponente richtig wieder:

Code:

        private void TraverseAssemblyHidden(Component2 swComp, int depth, bool hidden)
        {
            try
            {
                object[] vChildComp;
                Component2 swChildComp;
                long i = 0;

                vChildComp = (object[])swComp.GetChildren();
                for (i = 0; i < vChildComp.Length; i++)
                {
                    swChildComp = (Component2)vChildComp[i];

                    // check if the component is supressed
                    if (!swChildComp.IsSuppressed())
                    {
                        if (hidden | | swChildComp.IsHidden(false))
                        {
                            string name = swChildComp.GetPathName();
                            swApp.ShowMessageBox("hidden: " + name, SolidWorksMessageBoxIcon.Information, SolidWorksMessageBoxButtons.Ok);
                            TraverseAssemblyHidden(swChildComp, depth++, true);
                        }
                    }
                    TraverseAssemblyHidden(swChildComp, depth++, false);
                }
            }
            catch (Exception ex)
            {
                // error handling
            }
        }


------------------
Gruß ConZept

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)2024 CAD.de | Impressum | Datenschutz