Add Force Example (C#)
This example shows how to add a normal force of nonuniform distribution to a
static study.
NOTE: To get persistent reference
identifiers (PIDs) for model selections, you can use
pidcollector.exe
or IModelDocExtension::GetPersistReference3.
//---------------------------------------------------------------------------
// Preconditions:
// 1. Add the SOLIDWORKS Simulation as an add-in (in SOLIDWORKS, click
// Tools > Add-ins > SOLIDWORKS Simulation).
// 2. Add the SOLIDWORKS Simulation primary interop assembly as
// a reference (in the IDE's Project Explorer, right-click
// the project name, select Add Reference, click the Browse tab,
// navigate to the install_dir\api\redist\CLR2 folder and
// select SolidWorks.Interop.cosworks.dll).
// 3. Verify that the assembly exists.
//
// Postconditions:
// 1. Opens the assembly.
// 2. Creates a static study.
// 3. Adds Force-1 to the study.
// 4. To verify, examine the Simulation Study tree.
//
// NOTE: Because this assembly document is used elsewhere, do not save changes.
//----------------------------------------------------------------------------
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
using System;
using SolidWorks.Interop.cosworks;
using System.Diagnostics;
using System.Collections;
namespace AddForce_CSharp.csproj
{
partial class SolidWorksMacro
{
public void Main()
{
CosmosWorks COSMOSWORKS = default(CosmosWorks);
CwAddincallback COSMOSObject = default(CwAddincallback);
CWModelDoc ActDoc = default(CWModelDoc);
CWStudyManager StudyMngr = default(CWStudyManager);
CWStudy Study = default(CWStudy);
ModelDoc2 swModel = default(ModelDoc2);
ModelDocExtension swModelDocExt = default(ModelDocExtension);
CWLoadsAndRestraintsManager LBCMgr = default(CWLoadsAndRestraintsManager);
CWForce CWForce = default(CWForce);
byte[] var1 = null;
object oSelect1 = null;
int status = 0;
int warnings = 0;
int errCode = 0;
object DistanceValues = null;
object ForceValues = null;
ArrayList PIDCollection = new ArrayList();
//Initialize PIDs
PIDCollection = PIDInitializer();
swApp.OpenDoc6("C:\\Program Files\\SOLIDWORKS Corp\\SOLIDWORKS\\Simulation\\Examples\\mixedmesh-1.sldasm", (int)swDocumentTypes_e.swDocASSEMBLY, (int)swOpenDocOptions_e.swOpenDocOptions_Silent, "", ref status, ref warnings);
swModel = (ModelDoc2)swApp.ActiveDoc;
swModelDocExt = (ModelDocExtension)swModel.Extension;
COSMOSObject = (CwAddincallback)swApp.GetAddInObject("SldWorks.Simulation");
if (COSMOSObject == null) ErrorMsg(swApp, "COSMOSObject object not found");
COSMOSWORKS = (CosmosWorks)COSMOSObject.CosmosWorks;
if (COSMOSWORKS == null) ErrorMsg(swApp, "COSMOSWORKS object not found");
ActDoc = (CWModelDoc)COSMOSWORKS.ActiveDoc;
if (ActDoc == null) ErrorMsg(swApp, "No active document");
// Create new static study
StudyMngr = (CWStudyManager)ActDoc.StudyManager;
if (StudyMngr == null) ErrorMsg(swApp, "StudyMngr object not there");
Study = (CWStudy)StudyMngr.CreateNewStudy3("Static", (int)swsAnalysisStudyType_e.swsAnalysisStudyTypeStatic, 0, out errCode);
if (Study == null) ErrorMsg(swApp, "Study not created");
LBCMgr = (CWLoadsAndRestraintsManager)Study.LoadsAndRestraintsManager;
// Get PIDs for selection
SelectByPID("selection1", PIDCollection, ref var1);
oSelect1 = (object)swModelDocExt.GetObjectByPersistReference3((var1), out status);
object[] DispArray1 = { oSelect1 };
object[] ComponentValues = {2.0, 3.0, 1.0, 1.5, 1.0, 1.0};
// Add force
CWForce = LBCMgr.AddForce3((int)swsForceType_e.swsForceTypeNormal, 0, -1, 0, 0, 0, (DistanceValues), (ForceValues), true, false, 0, 0, 0, 1.0, (ComponentValues), false, false, (DispArray1), null, false, out errCode);
if (errCode != 0) ErrorMsg(swApp, "No force applied");
}
private void ErrorMsg(SldWorks SwApp, string Message)
{
swApp.SendMsgToUser2(Message, 0, 0);
swApp.RecordLine("'*** WARNING - General");
swApp.RecordLine("'*** " + Message);
swApp.RecordLine("");
}
public ArrayList PIDInitializer()
{
// Initialize PIDs
ArrayList PIDCollection = new ArrayList();
string selection1 = null;
// Constant
selection1 = "13,17,0,0,3,0,0,0,255,254,255,27,77,0,105,0,120,0,101,0,100,0,45,0,49,0,45,0,83,0,111,0,108,0,105,0,100,0,45,0,51,0,64,0,109,0,105,0,120,0,101,0,100,0,109,0,101,0,115,0,104,0,45,0,49,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,17,0,0,0,255,255,1,0,11,0,109,111,70,97,99,101,82,101,102,95,99,1,0,0,0,0,0,0,0,6,0,0,0,0,3,0,0,0,0,0,0,125,195,148,37,173,73,178,84,125,195,148,37,173,73,178,84,0,0,255,255,1,0,23,0,109,111,70,114,111,109,83,107,116,69,110,116,83,117,114,102,73,100,82,101,112,95,99,0,0,255,255,1,0,6,0,109,111,70,82,95,99,255,255,1,0,13,0,109,111,69,120,116,79,98,106,101,99,116,95,99,255,255,1,0,17,0,109,111,67,83,116,114,105,110,103,72,97,110,100,108,101,95,99,255,254,255,79,67,0,58,0,92,0,80,0,114,0,111,0,103,0,114,0,97,0,109,0,32,0,70,0,105,0,108,0,101,0,115,0,92,0,83,0,111,0,108,0,105,0,100,0,87,0,111,0,114,0,107,0,115,0,92,0,83,0,111,0,108,0,105,0,100,0,87,0,111,0,114,0,107,0,115,0,32,0,83,0,105,0,109,0,117,0,108,0,97,0,116,0,105,0,111,0,110,0,92,0,69,0,120,0,97,0,109,";
selection1 = selection1 + "0,112,0,108,0,101,0,115,0,92,0,77,0,105,0,120,0,101,0,100,0,45,0,49,0,45,0,83,0,111,0,108,0,105,0,100,0,46,0,83,0,76,0,68,0,80,0,82,0,84,0,9,128,255,254,255,13,77,0,105,0,120,0,101,0,100,0,45,0,49,0,45,0,83,0,111,0,108,0,105,0,100,0,2,0,0,124,49,104,66,0,0,0,48,0,0,0,0,0,0,0,0,0,2,0,0,0,255,254,255,7,68,0,101,0,102,0,97,0,117,0,108,0,116,0,0,0,0,0,0,0,0,0,0,0,48,0,24,0,0,0,26,50,104,66,4,0,0,0,255,255,1,0,20,0,109,111,69,110,100,70,97,99,101,83,117,114,102,73,100,82,101,112,95,99,0,0,5,128,8,0,24,0,0,0,26,50,104,66,0,0,0,0,0,0,0,0,3,128,0,0,5,128,8,0,24,0,0,0,26,50,104,66,11,0,0,0,12,128,0,0,5,128,8,0,24,0,0,0,26,50,104,66,1,0,0,0,0,0,0,0,3,128,0,0,5,128,8,0,24,0,0,0,26,50,104,66,1,0,0,0,0,0,0,0,0,0,0,0,0,0";
// Store constant in a collection
PIDCollection.Add(selection1);
// Pass this back
return PIDCollection;
}
private void SelectByPID(string PIDName, ArrayList PIDCollection, ref byte[] varEntity)
{
// Select by PID
byte[] PID = null;
string[] PIDVariant = null;
string PIDString = null;
int i = 0;
// Get the string from the collection
PIDString = "";
PIDString = (string)PIDCollection[0];
// Parse the string into an array
PIDVariant = PIDString.Split(new char[] { ',' });
// Change the string array to a byte array
int sizeArray = PIDVariant.Length;
PID = new byte[sizeArray];
for (i = 0; i < PIDVariant.Length - 1; i++)
{
PID[i] = Convert.ToByte(PIDVariant[i]);
}
varEntity = PID;
}
/// <summary>
/// The SldWorks swApp variable is pre-assigned for you.
/// </summary>
public SldWorks swApp;
}
}