Apply Material to Bodies Example (C#)
This example shows how to apply user-defined and SOLIDWORKS-defined
materials to different bodies.
//---------------------------------------------------------------------------
// 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. Modify the path to solidworks
materials.sldmat if needed.
// 4. Run the macro.
//
// Postconditions:
// 1. Document opened.
// 2. Nonlinear study created.
// 3. Component count returned.
// 4. Materials applied to all components.
// 5. Expand the Parts folder in the Simulation Study
tree
// to
verify step 4.
//
// 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 SolidWorks.Interop.cosworks;
using System;
using System.Diagnostics;
namespace SimulationApplyMaterialsBodiesCSharp.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);
CWSolidManager
SolidMgr = default(CWSolidManager);
CWSolidComponent
SolidComponent = default(CWSolidComponent);
CWSolidBody
SolidBody = default(CWSolidBody);
int
errorCode = 0;
int
status = 0;
int
warnings = 0;
int
errCode = 0;
int
CompCount = 0;
int
j = 0;
CWMaterial
CWMat = default(CWMaterial);
int
returnValue = 0;
string
SName = null;
int
materialProperty = 0;
//
Get SOLIDWORKS Simulation object>
COSMOSObject
= (CwAddincallback)swApp.GetAddInObject("SldWorks.Simulation");
if
(COSMOSObject == null) ErrorMsg("COSMOSObject object not found.",
true);
COSMOSWORKS
= (CosmosWorks)COSMOSObject.CosmosWorks;
if
(COSMOSWORKS == null) ErrorMsg("COSMOSWORKS object not found.",
true);
//
Open and get document
swApp.OpenDoc6("C:\\Program Files\\SOLIDWORKS
Corp\\SOLIDWORKS\\Simulation\\Examples\\basketball_hoop.sldasm",
(int)swDocumentTypes_e.swDocASSEMBLY, (int)swOpenDocOptions_e.swOpenDocOptions_Silent,
"", ref status, ref warnings);
ActDoc
= (CWModelDoc)COSMOSWORKS.ActiveDoc;
if
(ActDoc == null) ErrorMsg("No active document.", true);
//
Create new nonlinear study
StudyMngr
= (CWStudyManager)ActDoc.StudyManager;
if
(StudyMngr == null) ErrorMsg("StudyMngr object not there.",
true);
Study
= (CWStudy)StudyMngr.CreateNewStudy("Nonlinear",
(int)swsAnalysisStudyType_e.swsAnalysisStudyTypeNonlinear, (int)swsMeshType_e.swsMeshTypeSolid,
out errCode);
if
(Study == null) ErrorMsg("Study not created.", true);
//
Get number of solid components
SolidMgr
= (CWSolidManager)Study.SolidManager;
if
(SolidMgr == null) ErrorMsg("SolidManager object not created.",
true);
CompCount
= SolidMgr.ComponentCount;
SolidComponent
= (CWSolidComponent)SolidMgr.GetComponentAt(0,
out errorCode);
if
(SolidComponent == null) ErrorMsg("SolidComponent not created.",
true);
//
Get name of solid component
SName
= SolidComponent.ComponentName;
//
Apply user-defined material for the first component in the tree
SolidBody
=(CWSolidBody) SolidComponent.GetSolidBodyAt(0,
out errCode);
if
(errCode != 0) ErrorMsg("No solid body.", true);
if
(SolidBody == null) ErrorMsg("SolidBody not created.", true);
CWMat
= (CWMaterial)SolidBody.GetDefaultMaterial();
CWMat.MaterialUnits = 0;
if
(CWMat == null) ErrorMsg("No default material object.", true);
CWMat.MaterialName = "Alloy Steel";
CWMat.SetPropertyByName("EX", 210000000000.0,
0);
Debug.Print("Property
EX: " + CWMat.GetPropertyByName((int)swsUnitSystem_e.swsUnitSystemSI,
"EX", out materialProperty));
CWMat.SetPropertyByName("NUXY",
0.28, 0);
CWMat.SetPropertyByName("GXY", 79000000000.0,
0);
CWMat.SetPropertyByName("DENS",
7700, 0);
CWMat.SetPropertyByName("SIGXT",
723825600, 0);
CWMat.SetPropertyByName("SIGYLD",
620422000, 0);
CWMat.SetPropertyByName("ALPX",
1.3E-05, 0);
CWMat.SetPropertyByName("KX", 50,
0);
CWMat.SetPropertyByName("C", 460,
0);
errCode
= SolidBody.SetSolidBodyMaterial(CWMat);
if
(errCode != 0) ErrorMsg("Failed to apply material.", true);
//
Apply a different SOLIDWORKS Simulation library material to rest of components
SolidBody
= null;
SolidComponent
= null;
for
(j = 1; j <= (CompCount - 1); j++)
{
SolidComponent
= (CWSolidComponent)SolidMgr.GetComponentAt(j,
out errorCode);
SName
= SolidComponent.ComponentName;
SolidBody
= (CWSolidBody)SolidComponent.GetSolidBodyAt(0,
out errCode);
if
(errCode != 0) ErrorMsg("No solid body", true);
returnValue
= SolidBody.SetLibraryMaterial("c:\\Program
Files\\SOLIDWORKS Corp\\SOLIDWORKS\\lang\\english\\sldmaterials\\solidworks
materials.sldmat", "2024 Alloy (SN)");
if
(returnValue == 0) ErrorMsg("No material applied.", true);
SolidBody
= null;
}
}
//
Error function
private
void ErrorMsg(string Message, bool EndTest)
{
swApp.SendMsgToUser2(Message, 0, 0);
swApp.RecordLine("'*** WARNING - General");
swApp.RecordLine("'*** " + Message);
swApp.RecordLine("");
if
(EndTest)
{
}
}
///
<summary>
///
The SldWorks swApp variable is pre-assigned for you.
///
</summary>
public
SldWorks swApp;
}
}