Add Force Example (C#)
This example shows how to add a force to a 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 <SolidWorks_install_dir>\api\redist\CLR2 folder and
// select
SolidWorks.Interop.cosworks.dll).
// 3. Run the macro.
//
// Postconditions:
// 1. Assembly document opened.
// 2. Static study created.
// 3. Force added to Static study.
// 4. To verify, examine the External Loads folder
// in
Static study in the Simulation Study tree.
//
// NOTE: Because this assembly document is used by a SolidWorks
// Simulation online tutorial, do not save any changes
when
// closing the document.
//-------------------------------------------------------------
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
using System;
using SolidWorks.Interop.cosworks;
using System.Diagnostics;
using System.Collections;
namespace AddForceCSharp.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;
ArrayList
PIDCollection = new ArrayList();
//Initialize
PIDs
PIDCollection
= PIDInitializer();
//
Open document
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;
//
Get the SolidWorks Simulation object
COSMOSObject
= (CwAddincallback)swApp.GetAddInObject("SldWorks.Simulation");
if
(COSMOSObject == null) ErrorMsg(swApp, "COSMOSObject object not found.",
true);
COSMOSWORKS
= (CosmosWorks)COSMOSObject.CosmosWorks;
if
(COSMOSWORKS == null) ErrorMsg(swApp, "COSMOSWORKS object not found.",
true);
//
Open and get active document
ActDoc
= (CWModelDoc)COSMOSWORKS.ActiveDoc;
if
(ActDoc == null) ErrorMsg(swApp, "No active document.", true);
//
Create new static study
StudyMngr
= (CWStudyManager)ActDoc.StudyManager;
if
(StudyMngr == null) ErrorMsg(swApp, "StudyMngr object not there.",
true);
Study
= (CWStudy)StudyMngr.CreateNewStudy2("Static",
(int)swsAnalysisStudyType_e.swsAnalysisStudyTypeStatic, out errCode);
if
(Study == null) ErrorMsg(swApp, "Study not created.", true);
//
Select face of solid
LBCMgr
= (CWLoadsAndRestraintsManager)Study.LoadsAndRestraintsManager;
//
Get PIDs for selection
SelectByPID("selection1",
PIDCollection, ref var1);
oSelect1
= (object)swModelDocExt.GetObjectByPersistReference3((var1),
out status);
object[]
DispArray1 = { oSelect1 };
//
Add force
CWForce
= (CWForce)LBCMgr.AddForce2((int)swsForceType_e.swsForceTypeNormal,
0, (DispArray1), null, out errCode);
if
(errCode != 0) ErrorMsg(swApp, "No force applied.", true);
}
private
void ErrorMsg(object SwApp, string Message, bool EndTest)
{
swApp.SendMsgToUser2(Message,
0, 0);
swApp.RecordLine("'***
WARNING - General");
swApp.RecordLine("'***
" + Message);
swApp.RecordLine("");
if
(EndTest)
{
}
}
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;
}
}