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