Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  SW2008 API: Komponentenbaum durchgehen: Abbruch bei enthaltenen Verknüpfungen.

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
  
SOLIDWORKS Simulation Grundlagen - Online-Live, ein Seminar am 06.07.2026
Autor Thema:  SW2008 API: Komponentenbaum durchgehen: Abbruch bei enthaltenen Verknüpfungen. (1069 mal gelesen)
oeNkraD
Mitglied



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

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 10. Jan. 2011 15:20    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 zusammen:

System:

- Windows XP SP3
- SolidWorks 2008 SP2.1
- Microsoft Visual C++ 6.0 SP6

Folgendes Problem tritt auf:

Es soll der Feature Tree eines Assemblys durchlaufen werden.
Mit dem unten stehenden Coding, was sehr nah an den Beispielen der Hilfe gehalten ist, soll zunächst das erste Feature ermittelt werden, anschließend das GetNextFeature - soweit kein Problem.
Allerdings wird mit diesem Coding auch der DesignTree Eintrag "Verknüpfungen" berücksichtigt. Da dieser kein Feature ist führt der Schleifendurchlauf an dieser stelle zu einem Abbruch (GetNextFeature weißt den Pointer NULL zu).
Leider habe ich dazu keine weiterreichenden Informationen gefunden, ob es sich um ein Versionsspezifisches Problem handelt, dass der Eintrag "Verknüpfungen" als Feature erfasst wird und somit zu einem Schleifenabbruch führt.

Wie kann so etwas umgangen werden?

Hier der genutzte Code:

Code:

void TraverseFMDesignTree(IModelDoc2* swModel) {
// Use ATL smart pointers
CComPtr<IFeature> swFeature;
CComPtr<ISelectionMgr> swSelMgr;
CComPtr<IFeature> swSubFeature;

CComBSTR sFeatureName(L"");
CComBSTR sFeatureType(L"");
bool bFoundComponents = false;

// First feature in model doc
hres = swModel->IFirstFeature(&swFeature);
while( swFeature )
{

hres = swFeature->get_Name(&sFeatureName);
hres = swFeature->GetTypeName2(&sFeatureType);

swFeature->IGetFirstSubFeature(&swSubFeature);
while( swSubFeature )
{
swSubFeature->get_Name(&sFeatureName);
swSubFeature->GetTypeName2(&sFeatureType);

CComPtr<IFeature> swNextSubFeature;
swSubFeature->IGetNextSubFeature(&swNextSubFeature);

swSubFeature = swNextSubFeature;

}

// next feature
CComPtr<IFeature> nextFeature;
hres = swFeature->IGetNextFeature(&nextFeature);

swFeature = nextFeature;
}


}



Für den Fall einer Baugruppe ohne Verknüpfungen wird das ganze einfach durchlaufen, sobald jedoch Verknüpfungen in der Baugruppe gesetzt werden wird die While Schleife wie oben gesagt vorzeitig abgebrochen.
Weiß jemand, warum bei der Abfrage des NextFeature überhaupt die Verknüpfungen berücksichtigt werden, und wie sowas umgangen werden kann?

Mit freundlichen Grüßen


Alex

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

oeNkraD
Mitglied



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

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 12. Jan. 2011 08:34    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

Servas!

Keiner, der das nachvollziehen kann?


Ich hab das ganze mit VB direkt als SW Macro nachgebaut und da funktioniert es einwandfrei.
Könnte es ein Problem der verwendeten Software sein?

Gruß

Alex

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

oeNkraD
Mitglied



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

Beiträge: 29
Registriert: 30.09.2010

erstellt am: 14. Jan. 2011 07:09    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

ein ähnliches Problem tritt auf, wenn die GetChildren Funktion auf bereits gefundene Kinder einer Rootcomponent angewandt wird.

Ausgabe ist s_ok, wobei das ausgegebene Array unvollständig ist:


Code:
void GetModelAssembly2(ISldWorks* swApp,IModelDoc2* pModelDoc)
{
CComPtr<IConfiguration> pConfiguration;
CComPtr<IComponent2> pRootComponent;
CComBSTR strName;
long int ii, jj;
int numChildren1 = 0;
int numChildren2 = 0;

if ( pModelDoc->IGetActiveConfiguration(&pConfiguration) == S_OK )
{
if ( pConfiguration->IGetRootComponent2(&pRootComponent) == S_OK )
{
//
// Root
//
hres = pRootComponent->IGetChildrenCount(&numChildren1);
if ( hres == S_OK | | numChildren1 > 0 )
{
// may have children
IComponent2** ptrChildren = new IComponent2* [numChildren1];
if( (hres = pRootComponent->IGetChildren(ptrChildren)) == S_OK )
{
for( ii = 0; ii < numChildren1; ii++ )
{
//
hres = ptrChildren[ii]->get_Name2(&strName);
hres = ptrChildren[ii]->IGetChildrenCount(&numChildren2);
if( hres == S_OK | | numChildren2 > 0 )
{
IComponent2** ptrChildren2 = new IComponent2* [numChildren2];
if( (hres = ptrChildren[ii]->IGetChildren(ptrChildren2)) == S_OK )
{
// ??????????
// hres is OK, but ptrChildren2 not
for( jj = 0; jj < numChildren2; jj++ )
{
//
hres = ptrChildren2[jj]->get_Name2(&strName);
}

}
}
ptrChildren[ii]->Release();
}
}
}
pRootComponent.Release();
}
pConfiguration.Release();

}
pModelDoc->Release();

}



Gruß

Alex

[Diese Nachricht wurde von oeNkraD am 14. Jan. 2011 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)2024 CAD.de | Impressum | Datenschutz