ds-blue-logo
Preview  |  SOLIDWORKS USER FORUM
Use your SOLIDWORKS ID or 3DEXPERIENCE ID to log in.
AAAlex Alex21/02/2019

Hello friends.

I have an assembly model in Solidworks.

I use API C# to Solidworks for automatic create a model.

In a part, I need to set Depth 10 or 40 mm.

Not a single example on the forum helped me.

static SldWorks swApp;

static AssemblyDoc assemblyDoc;

static ModelDoc2 assemblyModel;

static ModelDocExtension swModelDocExt;

static FeatureManager swFeatureManager;

static EquationMgr assemblyMgr;

static IDimension partDimension;

static Feature swFeature;

static IModelDoc2 partModel;

static ExtrudeFeatureData2 swExtrudeFeatData;

public static void getComponents()

{

Console.WriteLine("getComponents");

Process[] processes = Process.GetProcessesByName("SLDWORKS");

foreach (Process process in processes)

{

Console.WriteLine("kill process ");

process.CloseMainWindow();

process.Kill();

}

object processSW = System.Activator.CreateInstance(System.Type.GetTypeFromProgID("SldWorks.Application"));

swApp = (SldWorks)processSW;

swApp.Visible = true;

//open file

int fileError = 0, fileWarning = 0;

string pathToFileAssembly = "C:\\Users\\administrator\\Desktop\\SW\\AssemBelt.SLDASM";

assemblyModel = swApp.OpenDoc6(pathToFileAssembly, (int)swDocumentTypes_e.swDocASSEMBLY, (int)swOpenDocOptions_e.swOpenDocOptions_Silent, "1", ref fileError, ref fileWarning);

assemblyDoc = (AssemblyDoc)assemblyModel;

assemblyMgr = assemblyModel.GetEquationMgr();

swModelDocExt = (ModelDocExtension)assemblyModel.Extension;

swFeatureManager = (FeatureManager)assemblyModel.FeatureManager;

object[] comps = assemblyDoc.GetComponents(true);

Console.WriteLine("Solidworks comps size = " + comps.Length);

foreach (Component2 icomp in comps)

{

partModel = swApp.OpenDoc6(icomp.GetPathName(), (int)swDocumentTypes_e.swDocPART, (int)swOpenDocOptions_e.swOpenDocOptions_Silent, "1", ref fileError, ref fileWarning);

switch (icomp.Name)

{

case "Part-1":

...

break;

case "Part-2":

...

break;

case "Part-3":

if (true)

{

partDimension = (Dimension)partModel.Parameter("hiegth@Sketch4");

partDimension.Value = 120;

partDimension = (Dimension)partModel.Parameter("thickness@Sketch4");

partDimension.Value = 5;

//THIS DOES NOT WORK

PartDoc doc = (PartDoc)partModel;

swFeature = doc.FeatureByName("Base-Extrude");

swExtrudeFeatData = swFeature.GetDefinition();

swExtrudeFeatData.SetDepth(true, 0.04); //or 10 mm or 40 mm

swFeature.ModifyDefinition(swExtrudeFeatData, partModel, null);

icomp.SetSuppression(1);

icomp.ReferencedConfiguration = "type-B";

}

else icomp.SetSuppression(0);

break;

}

Console.WriteLine(icomp.Name + " => " + icomp.GetPathName() + " => " + partModel);

}//for end

}

On this line, the program breaks down:

swExtrudeFeatData = swFeature.GetDefinition();

swFeature equals NULL.

Thanks!