DraftSight-API kein Cast von Object to ExternalReference / 2D CAD Editor
Kricher 18. Aug. 2016, 16:41

Hi Ihr,

ich versuche nachfolgenden Code zum laufen zu bringen und scheitere immer an dem nachfolgenden Cast:

ExternalReference dsExtRef = entityItem as ExternalReference;

Dabei gebe ich ja den Typ über dsObjectType_e.dsExternalReferenceType an und ich bekomme auch ein Array mit der erwarteten Anzahl zurück!
Andere Typen wie z.B. ReferenceImage usw. gehen?!

Es geht mir letztlich um die Anzahl "Verbauungen" jedes einzelnen XRefs. Aus diesem Grund kann ich hier nicht über doc.GetExternalReferences() gehen, da ich da immer nur ein Vorkommen für jedes XRef bekomme.

#########################################################
Model model = doc.GetModel();
SketchManager dsSketchMgr = model.GetSketchManager();
//GetSselection Manager
SelectionManager dsSelectionMgr = doc.GetSelectionManager();

//Get selection filter
SelectionFilter dsSelectionFilter = dsSelectionMgr.GetSelectionFilter();

//Clear selection filter
dsSelectionFilter.Clear();

dsSelectionFilter.AddEntityType(dsObjectType_e.dsExternalReferenceType);
dsSelectionFilter.Active = true;

object entityTypes;
object entityObjects;

string[] layerNames = Misc.GetLayers(doc);

//Get externalref entities
dsSketchMgr.GetEntities(dsSelectionFilter, layerNames, out entityTypes, out entityObjects);

object[] dsEntities = (object[])entityObjects;
if (entityObjects != null)
{
    foreach (object entityItem in dsEntities)
    {
      ExternalReference dsExtRef = entityItem as ExternalReference;
      if (dsExtRef != null)
      {
        string nFile = dsExtRef.PathName;
        //etc.
      }
    }
}
#########################################################

Hat jemand eine Idee?

CU

Kricher

Kricher 18. Aug. 2016, 17:54

Ist wohl ein Bug in der API von DraftSight 
Ich bekomme anstelle aller XRefs alle BlockInstance zurück.

Hierbei ist egal ob ich den Filter auf:

dsSelectionFilter.AddEntityType(dsObjectType_e.dsBlockInstanceType);

oder auf

dsSelectionFilter.AddEntityType(dsObjectType_e.dsExternalReferenceType);

setze. Das Ergebnis ist in beiden Fällen das gleiche, nämlich ein Array der BlockInstances :-(
Hat jemand die Möglichkeiten einen CR bei SolidWorks dafür zu öffnen?
Ich habe im Moment nur die 30 Tage Testlizenz zum Evaluieren der API für unsere Zwecke.

CU

Kricher

Kricher 18. Aug. 2016, 18:25

Habe jetzt wohl eine Nutzbare Lösung.
Da ich nicht direkt über den Filter an die XRefs komme, suche ich jetzt erst nach den Blockdefinitions und hole mir von da die externen Referenzen.
Das scheint dann zu gehen.
Auf diese Weise könnte man dann eine BOM aus der Verbauungsstruktur über DWG bauen.
Ich bin also erst mal zufrieden ;-)

CU

Kricher