This example shows how to apply thermostat-controlled heat power for
a transient thermal study.
//---------------------------------------------------------------------------
// 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. Modify path to solidworks materials.sldmat if needed.
// 4. Open the Immediate window.
// 5. Run the macro.
//
// Postconditions:
// 1. Document is opened.
// 2. Thermal study is created.
// 3. Default thermal study results plot and plot options are defined.
// 4. User-defined and SolidWorks materials are applied to components.
// 5. Initial temperatures are assigned for assembly components.
// 6. Thermostat location and the temperature range are assigned.
// 7. Mesh is created.
// 8. Analysis runs.
// 9. Results (minimum and maximum temperatures) are returned.
// 10. Plots are generated.
// 11. Iso clipping is added to the Thermal1 plot.
// 12. Thermal1 results plot is saved as an eDrawings document in c:\temp.
// 13. Study is exported to the NASTRAN finite-element analysis program in
c:\temp.
// 14. Study is renamed "TransientThermal".
//
// NOTES:
// * To get persistent reference identifiers (PIDs) for model
// selections, you can use
pidcollector.exe
or IModelDocExtension::GetPersistReference3.
// * Solving this study can take some time. Examine the Immediate window
// to monitor the macro's progress. Done! indicates that the macro
// has finished.
// * 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
DefaultThermalPlot_CSharp.csproj
{
partial
class
SolidWorksMacro
{
public
void Main()
{
CosmosWorks
COSMOSWORKS = default(CosmosWorks);
CwAddincallback
CWObject = default(CwAddincallback);
CWModelDoc
ActDoc = default(CWModelDoc);
CWStudyManager
StudyMngr = default(CWStudyManager);
CWStudy
Study = default(CWStudy);
CWSolidManager
SolidMgr = default(CWSolidManager);
CWSolidComponent
SolidComp = default(CWSolidComponent);
CWSolidBody
SolidBody = default(CWSolidBody);
CWThermalStudyOptions
ThermalOptions = default(CWThermalStudyOptions);
CWConvection
CWConv = default(CWConvection);
CWHeatPower
CWHeatPower = default(CWHeatPower);
CWMesh
CwMesh = default(CWMesh);
CWResults
CWResult = default(CWResults);
CWMaterial
CWMat = default(CWMaterial);
CWTemperature
CWTemp = default(CWTemperature);
ModelDoc2
Part = default(ModelDoc2);
CWLoadsAndRestraintsManager
LBCMgr = default(CWLoadsAndRestraintsManager);
object
oselect1 = null;
object
oselect2 = null;
object
oselect3 = null;
object
oselect4 = null;
object
oselect5 = null;
object
oselect6 = null;
object
oselect7 = null;
object
oselect8 = null;
object
oselect9 = null;
object
oselect10 = null;
object
therm1 = null;
byte[]
var1 = null;
byte[]
var2 = null;
byte[]
var3 = null;
byte[]
var4 = null;
byte[]
var5 = null;
byte[]
var6 = null;
byte[]
var7 = null;
byte[]
var8 = null;
byte[]
var9 = null;
byte[]
var10 = null;
byte[]
var11 = null;
object
Temp = null;
string
selection1 = null;
string
selection2 = null;
string
selection3 = null;
string
selection4 = null;
string
selection5 = null;
string
selection6 = null;
string
selection7 = null;
string
selection8 = null;
string
selection9 = null;
string
selection10 = null;
string
selection11 = null;
int
status = 0;
int
warnings = 0;
int
errCode = 0;
double
el = 0;
double
tl = 0;
int
nStep = 0;
int
res = 0;
Boolean
bApp;
// Open document
Debug.Print("Opening
document...");
Part = (ModelDoc2)swApp.OpenDoc6("C:\\Program
Files\\SolidWorks Corp\\SolidWorks\\Simulation\\Examples\\Thermal\\CoffeeJar.SLDASM",
(int)swDocumentTypes_e.swDocASSEMBLY,
(int)swOpenDocOptions_e.swOpenDocOptions_Silent,
"",
ref status,
ref
warnings);
if
(Part == null)
ErrorMsg("Failed to open document.",
true);
// Get the SolidWorks
Simulation add-in object
CWObject = (CwAddincallback)swApp.GetAddInObject("SldWorks.Simulation");
if
(CWObject == null)
ErrorMsg("CWObject object not found. ",
true);
COSMOSWORKS = (CosmosWorks)CWObject.CosmosWorks;
if
(COSMOSWORKS == null)
ErrorMsg("COSMOSWORKS object not found.",
true);
// Get active document
ActDoc = (CWModelDoc)COSMOSWORKS.ActiveDoc;
if
(ActDoc == null)
ErrorMsg("No active document.",
true);
//
Add a default thermal study results plot
res = ActDoc.AddDefaultThermalStudyPlot((int)swsThermalResultComponentTypes_e.swsThermalResultComponentTypes_TEMP,
true);
// Set default thermal plot
options
//
Show maximum value annotation on the plot
bApp = ActDoc.SetSimulationOptionToggle((int)swsUserPreferenceToggle_e.swsPlotAnnotationShowMaxValue,
true);
Debug.Print("Show
maximum value annotation on the plot? " +
ActDoc.GetSimulationOptionToggle((int)swsUserPreferenceToggle_e.swsPlotAnnotationShowMaxValue));
// Set sub-folder option
bApp = ActDoc.SetSimulationOptionToggle((int)swsUserPreferenceToggle_e.swsResultFolderUnderSubFolder,
true);
Debug.Print("Set
sub-folder option? " + ActDoc.GetSimulationOptionToggle((int)swsUserPreferenceToggle_e.swsResultFolderUnderSubFolder));
// Put results in sub-folder,
"temp"
bApp = ActDoc.SetSimulationOptionStringValue((int)swsUserPreferenceStringValue_e.swsSolidWorksDocumentFolderSubFolderLocation,
"temp");
Debug.Print("Results
in sub-folder, " + ActDoc.GetSimulationOptionStringValue((int)swsUserPreferenceStringValue_e.swsSolidWorksDocumentFolderSubFolderLocation));
// Set boundary settings option to translucent single color
bApp = ActDoc.SetSimulationOptionIntegerValue((int)swsUserPreferenceIntegerValue_e.swsPlotSettingsBoundaryOption,
(int)swsPlotBoundarySettingsOptionValue_e.swsPlotBoundaryTranslucentSingleColor);
Debug.Print("Boundary
settings option as defined in swsPlotSettingsBoundaryOption is "
+ ActDoc.GetSimulationOptionIntegerValue((int)swsUserPreferenceIntegerValue_e.swsPlotSettingsBoundaryOption));
// Set boundary color; Red 1 is 0xFF0000 in
http://cloford.com/resources/colours/500col.htm
int hex = 0x0000FF;
// Reverse the hexadecimal
bApp = ActDoc.SetSimulationOptionIntegerValue((int)swsUserPreferenceIntegerValue_e.swsPlotBoundaryOptionTranslucentSingleColorSetting,
hex);
Debug.Print("Boundary
color is " +
ActDoc.GetSimulationOptionIntegerValue((int)swsUserPreferenceIntegerValue_e.swsPlotBoundaryOptionTranslucentSingleColorSetting));
// Set boundary transparency of
translucent part color to 50%
bApp = ActDoc.SetSimulationOptionDoubleValue((int)swsUserPreferenceDoubleValue_e.swsPlotBoundaryTransparency,
50.0);
Debug.Print("Transparency
of boundary translucent part color is " +
ActDoc.GetSimulationOptionDoubleValue((int)swsUserPreferenceDoubleValue_e.swsPlotBoundaryTransparency));
// Create new thermal study
Debug.Print("Creating
thermal study...");
StudyMngr = (CWStudyManager)ActDoc.StudyManager;
if
(StudyMngr == null)
ErrorMsg("StudyMngr object not there.",
true);
Study = (CWStudy)StudyMngr.CreateNewStudy3("Thermal_One",
(int)swsAnalysisStudyType_e.swsAnalysisStudyTypeThermal,
(int)swsMeshType_e.swsMeshTypeSolid,
out errCode);
if
(Study == null)
ErrorMsg("Study not created.",
true);
// Get first solid component
SolidMgr = (CWSolidManager)Study.SolidManager;
if
(SolidMgr == null)
ErrorMsg("SolidMgr object not there.",
true);
SolidComp = (CWSolidComponent)SolidMgr.GetComponentAt(0,
out errCode);
if
(errCode != 0) ErrorMsg("No solid
component.",
true);
SolidBody = (CWSolidBody)SolidComp.GetSolidBodyAt(0,
out errCode);
if
(errCode != 0) ErrorMsg("No solid body.",
true);
// Add material
CWMat = (CWMaterial)SolidBody.GetDefaultMaterial();
if
(CWMat == null)
ErrorMsg("No default material.",
true);
CWMat.MaterialName =
"Coffee";
CWMat.SetPropertyByName("DENS",
1000, 0);
CWMat.SetPropertyByName("KX",
40, 0);
CWMat.SetPropertyByName("C",
4200.0, 0);
errCode = SolidBody.SetSolidBodyMaterial(CWMat);
if
(errCode != 0) ErrorMsg("Solid body
material not set.",
true);
// Get second solid component
SolidComp = (CWSolidComponent)SolidMgr.GetComponentAt(1,
out errCode);
if
(errCode != 0) ErrorMsg("No solid
component.",
true);
SolidBody = (CWSolidBody)SolidComp.GetSolidBodyAt(0,
out errCode);
if
(errCode != 0) ErrorMsg("No solid body.",
true);
// Add material
errCode = SolidBody.SetLibraryMaterial("C:\\Program
Files\\SolidWorks Corp\\SolidWorks\\lang\\english\\sldmaterials\\solidworks
materials.sldmat",
"Glass");
if
(errCode == 0) ErrorMsg("No glass
material applied.",
true);
// Get third solid component
SolidComp = (CWSolidComponent)SolidMgr.GetComponentAt(2,
out errCode);
if
(errCode != 0) ErrorMsg("No solid
component.",
true);
SolidBody = (CWSolidBody)SolidComp.GetSolidBodyAt(0,
out errCode);
if
(errCode != 0) ErrorMsg("No solid body.",
true);
// Add material
errCode = SolidBody.SetLibraryMaterial("C:\\Program
Files\\SolidWorks Corp\\SolidWorks\\lang\\english\\sldmaterials\\solidworks
materials.sldmat",
"Nylon 6/10");
if
(errCode == 0) ErrorMsg("No Nylon 6/10
material applied.",
true);
//Get components
//
CoffeePot
selection1 =
"216,14,0,0,5,0,0,0,255,254,255,21,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,11,0,0,0";
StringtoArray(selection1, ref
var1);
oselect1 = Part.Extension.GetObjectByPersistReference3((var1),
out
status);
// Coffee
selection2 =
"216,14,0,0,5,0,0,0,255,254,255,18,67,0,111,0,102,0,102,0,101,0,101,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,12,0,0,0";
StringtoArray(selection2, ref
var2);
oselect2 = Part.Extension.GetObjectByPersistReference3((var2),
out
status);
// Top
selection3 =
"216,14,0,0,5,0,0,0,255,254,255,15,84,0,111,0,112,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,13,0,0,0";
StringtoArray(selection3, ref
var3);
oselect3 = Part.Extension.GetObjectByPersistReference3((var3),
out
status);
// Get the four coffee faces
that make up the surface of coffee in the coffee pot
selection4 =
"216,14,0,0,3,0,0,0,255,254,255,18,67,0,111,0,102,0,102,0,101,0,101,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,12,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,5,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,18,0,109,111,80,76,105,110,101,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,14,0,109,111,79,98,106,70,105,108,101,68,101,102,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,6,99,0,111,0,102,0,102,0,101,0,101,0,126,253,47,63,11,128,255,254,255,57,67,0,58,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,68,0,111,0,99,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,95,0,102,0,111,0,114,0,67,0,117,0,115,0,116,0,111,0,109,0,101,0,114,0,115,0,92,0,84,0,104,0,101,0,114,0,109,0,97,0,10";
selection4 = selection4 +
"8,0,92,0,99,0,111,0,102,0,102,0,101,0,101,0,46,0,115,0,108,0,100,0,112,0,114,0,116,0,90,14,28,65,0,0,0,0,2,0,1,0,0,0,0,0,0,0,4,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,0,0,92,0,0,0,241,69,48,63,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,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,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,5,0,0,0,255,255,1,0,18,0,109,111,80,76,105,110,101,80,114,111,106,73,100,82,101,112,95,99,0,0,5,128,8,0,90,0,0,0,219,69,48,63,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,19,128,0,0,5,128,8,0,92,0,0,0,241,69,48,63,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,1,0,0,0,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,11,0,0,0,0,0,0,0,0,0";
StringtoArray(selection4, ref
var4);
oselect4 = Part.Extension.GetObjectByPersistReference3((var4),
out
status);
selection5 =
"216,14,0,0,3,0,0,0,255,254,255,18,67,0,111,0,102,0,102,0,101,0,101,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,12,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,5,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,18,0,109,111,80,76,105,110,101,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,14,0,109,111,79,98,106,70,105,108,101,68,101,102,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,6,99,0,111,0,102,0,102,0,101,0,101,0,126,253,47,63,11,128,255,254,255,57,67,0,58,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,68,0,111,0,99,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,95,0,102,0,111,0,114,0,67,0,117,0,115,0,116,0,111,0,109,0,101,0,114,0,115,0,92,0,84,0,104,0,101,0,114,0,109,0,97,0,";
selection5 = selection5 +
"108,0,92,0,99,0,111,0,102,0,102,0,101,0,101,0,46,0,115,0,108,0,100,0,112,0,114,0,116,0,90,14,28,65,0,0,0,0,2,0,1,0,0,0,0,0,0,0,4,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,0,0,92,0,0,0,241,69,48,63,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,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,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,6,0,0,0,255,255,1,0,18,0,109,111,80,76,105,110,101,80,114,111,106,73,100,82,101,112,95,99,0,0,5,128,8,0,92,0,0,0,241,69,48,63,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,1,0,0,0,19,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,11,0,0,0,0,0,0,0,0,0";
StringtoArray(selection5, ref
var5);
oselect5 = Part.Extension.GetObjectByPersistReference3((var5),
out
status);
selection6 =
"216,14,0,0,3,0,0,0,255,254,255,18,67,0,111,0,102,0,102,0,101,0,101,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,12,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,5,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,18,0,109,111,80,76,105,110,101,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,14,0,109,111,79,98,106,70,105,108,101,68,101,102,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,6,99,0,111,0,102,0,102,0,101,0,101,0,126,253,47,63,11,128,255,254,255,57,67,0,58,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,68,0,111,0,99,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,95,0,102,0,111,0,114,0,67,0,117,0,115,0,116,0,111,0,109,0,101,0,114,0,115,0,92,0,84,0,104,0,101,0,114,0,109,0,97,0,";
selection6 = selection6 +
"108,0,92,0,99,0,111,0,102,0,102,0,101,0,101,0,46,0,115,0,108,0,100,0,112,0,114,0,116,0,90,14,28,65,0,0,0,0,2,0,1,0,0,0,0,0,0,0,4,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,0,0,92,0,0,0,241,69,48,63,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,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,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,2,0,0,0,2,0,0,0,255,255,1,0,18,0,109,111,80,76,105,110,101,80,114,111,106,73,100,82,101,112,95,99,0,0,5,128,8,0,92,0,0,0,241,69,48,63,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,2,0,0,0,1,0,0,0,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,11,0,0,0,19,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,0,0,0,0,0,0";
StringtoArray(selection6, ref
var6);
oselect6 = Part.Extension.GetObjectByPersistReference3((var6),
out
status);
selection7 =
"216,14,0,0,3,0,0,0,255,254,255,18,67,0,111,0,102,0,102,0,101,0,101,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,12,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,5,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,18,0,109,111,80,76,105,110,101,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,14,0,109,111,79,98,106,70,105,108,101,68,101,102,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,6,99,0,111,0,102,0,102,0,101,0,101,0,126,253,47,63,11,128,255,254,255,57,67,0,58,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,68,0,111,0,99,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,95,0,102,0,111,0,114,0,67,0,117,0,115,0,116,0,111,0,109,0,101,0,114,0,115,0,92,0,84,0,104,0,101,0,114,0,109,0,97,0,";
selection7 = selection7 +
"108,0,92,0,99,0,111,0,102,0,102,0,101,0,101,0,46,0,115,0,108,0,100,0,112,0,114,0,116,0,90,14,28,65,0,0,0,0,2,0,1,0,0,0,0,0,0,0,4,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,0,0,92,0,0,0,241,69,48,63,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,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,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,2,0,0,0,1,0,0,0,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,11,0,0,0,255,255,1,0,18,0,109,111,80,76,105,110,101,80,114,111,106,73,100,82,101,112,95,99,0,0,5,128,8,0,92,0,0,0,241,69,48,63,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,2,0,0,0,1,0,0,0,21,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,16,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,0,0,0,0,0,0";
StringtoArray(selection7, ref
var7);
oselect7 = Part.Extension.GetObjectByPersistReference3((var7),
out
status);
// Get the selections for
convection
//
Top-outer face of coffee pot
selection8 =
"216,14,0,0,3,0,0,0,255,254,255,21,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,11,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,5,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,14,0,109,111,79,98,106,70,105,108,101,68,101,102,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,9,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,174,232,47,63,11,128,255,254,255,60,67,0,58,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,68,0,111,0,99,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,95,0,102,0,111,0,114,0,67,0,117,0,115,0,116,0,111,0,109,0,101,0,";
selection8 = selection8 +
"114,0,115,0,92,0,84,0,104,0,101,0,114,0,109,0,97,0,108,0,92,0,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,46,0,83,0,76,0,68,0,80,0,82,0,84,0,153,14,28,65,0,0,0,0,2,0,1,0,0,0,0,0,0,0,5,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,0,0,39,0,0,0,234,237,47,63,3,0,0,0,3,128,0,0,5,128,8,0,39,0,0,0,234,237,47,63,2,0,0,0,0,0,3,128,0,0,5,128,8,0,39,0,0,0,234,237,47,63,4,0,0,0,0,0,0,0,0,0";
StringtoArray(selection8, ref
var8);
oselect8 = Part.Extension.GetObjectByPersistReference3((var8),
out
status);
// Lower-outer face of coffee
pot
selection9 =
"216,14,0,0,3,0,0,0,255,254,255,21,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,11,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,5,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,14,0,109,111,79,98,106,70,105,108,101,68,101,102,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,9,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,174,232,47,63,11,128,255,254,255,60,67,0,58,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,68,0,111,0,99,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,95,0,102,0,111,0,114,0,67,0,117,0,115,0,116,0,111,0,109,0,101,";
selection9 = selection9 +
"0,114,0,115,0,92,0,84,0,104,0,101,0,114,0,109,0,97,0,108,0,92,0,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,46,0,83,0,76,0,68,0,80,0,82,0,84,0,153,14,28,65,0,0,0,0,2,0,1,0,0,0,0,0,0,0,5,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,0,0,39,0,0,0,234,237,47,63,2,0,0,0,3,128,0,0,5,128,8,0,39,0,0,0,234,237,47,63,3,0,0,0,0,0,3,128,0,0,5,128,8,0,39,0,0,0,234,237,47,63,1,0,0,0,0,0,0,0,0,0";
StringtoArray(selection9, ref
var9);
oselect9 = Part.Extension.GetObjectByPersistReference3((var9),
out
status);
// Get the selections for heat
power
//
Vertex located on the top of the bottom face of the coffee pot
selection10 =
"216,14,0,0,3,0,0,0,255,254,255,18,67,0,111,0,102,0,102,0,101,0,101,0,45,0,49,0,64,0,99,0,111,0,102,0,102,0,101,0,101,0,106,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,12,0,0,0,255,255,1,0,13,0,109,111,86,101,114,116,101,120,82,101,102,95,99,255,255,255,255,255,255,255,255,8,0,0,0,0,2,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,18,0,109,111,80,76,105,110,101,80,114,111,106,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,";
selection10 = selection10 +
"1,0,14,0,109,111,79,98,106,70,105,108,101,68,101,102,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,6,99,0,111,0,102,0,102,0,101,0,101,0,126,253,47,63,11,128,255,254,255,57,67,0,58,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,68,0,111,0,99,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,95,0,102,0,111,0,114,0,67,0,117,0,115,0,116,0,111,0,109,0,101,0,114,0,115,0,92,0,84,0,104,";
selection10 = selection10 +
"0,101,0,114,0,109,0,97,0,108,0,92,0,99,0,111,0,102,0,102,0,101,0,101,0,46,0,115,0,108,0,100,0,112,0,114,0,116,0,90,14,28,65,0,0,0,0,2,0,1,0,0,0,0,0,0,0,4,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,0,0,92,0,0,0,241,69,48,63,255,255,1,0,18,0,109,111,80,76,105,110,101,83,117,114,102,73,100,82,101,112,95,99,0,0,5,128,8,0,90,0,0,0,219,69,48,63,255,255,1,0,23,0,109,111,70,114,111,109,83,107,116,69,";
selection10 = selection10 +
"110,116,83,117,114,102,73,100,82,101,112,95,99,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,1,0,0,0,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,17,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,3,128,0,0,5,128,8,0,92,0,0,0,241,69,48,63,14,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,17,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,2,0,0,0,1,0,0,0,3,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,17,128,0,0,5,128,8,0,88,0,0,0,";
selection10 = selection10 +
"135,69,48,63,5,0,0,0,1,0,0,0,14,128,0,0,5,128,8,0,92,0,0,0,241,69,48,63,14,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,17,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,5,0,0,0,14,128,0,0,5,128,8,0,92,0,0,0,241,69,48,63,14,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,17,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,2,0,0,0,1,0,0,0,14,128,0,0,5,128,8,0,92,0,0,0,241,69,48,63,14,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,17,128,0,0,";
selection10 = selection10 +
"5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,2,0,0,0,2,0,0,0,14,128,0,0,5,128,8,0,92,0,0,0,241,69,48,63,14,128,0,0,5,128,8,0,90,0,0,0,219,69,48,63,17,128,0,0,5,128,8,0,88,0,0,0,135,69,48,63,5,0,0,0,1,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0";
StringtoArray(selection10, ref
var10);
therm1 = Part.Extension.GetObjectByPersistReference3((var10),
out
status);
// Vertex where sensor
(thermostat) is located
selection11 =
"216,14,0,0,3,0,0,0,255,254,255,21,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,45,0,49,0,64,0,67,0,111,0,102,0,102,0,101,0,101,0,74,0,97,0,114,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,11,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,3,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,14,0,109,111,79,98,106,70,105,108,101,68,101,102,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,9,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,174,232,47,63,11,128,255,254,255,60,67,0,58,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,68,0,111,0,99,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,95,0,102,0,111,0,114,0,67,0,117,0,115,0,116,0,111,0,109,0,101,0,";
selection11 = selection11 +
"114,0,115,0,92,0,84,0,104,0,101,0,114,0,109,0,97,0,108,0,92,0,67,0,111,0,102,0,102,0,101,0,101,0,80,0,111,0,116,0,46,0,83,0,76,0,68,0,80,0,82,0,84,0,153,14,28,65,0,0,0,0,2,0,1,0,0,0,0,0,0,0,5,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,0,0,39,0,0,0,234,237,47,63,1,0,0,0,3,128,0,0,5,128,8,0,39,0,0,0,234,237,47,63,2,0,0,0,0,0,0,0,0,0";
StringtoArray(selection11, ref
var11);
oselect10 = Part.Extension.GetObjectByPersistReference3((var11),
out
status);
// Create arrays
object[]
varArray1 = { oselect1, oselect3 };
object[]
varArray2 = { oselect2 };
object[]
varArray3 = { oselect4, oselect5, oselect6, oselect7 };
object[]
varArray4 = { oselect8, oselect9 };
object[]
varArray5 = { therm1 };
object[]
varArray6 = { oselect10 };
// Set transient thermal study
with solver type FFEPlus
Debug.Print("Setting
transient thermal study with solver type FFEPlus...");
ThermalOptions = (CWThermalStudyOptions)Study.ThermalStudyOptions;
Study.ThermalStudyOptions.SolutionType = 0;
if
(ThermalOptions == null)
ErrorMsg("No ThermalOptions object.",
false);
ThermalOptions.SolverType = 2;
ThermalOptions.TotalTime = 3600;
ThermalOptions.TimeIncrement = 60;
// Apply initial temperature to
coffee pot and top
Debug.Print("Applying
initial temperature to coffee pot and top...");
LBCMgr = (CWLoadsAndRestraintsManager)Study.LoadsAndRestraintsManager;
if
(LBCMgr == null)
ErrorMsg("No Loads and Restraints
manager.",
false);
CWTemp = (CWTemperature)LBCMgr.AddTemperature((varArray1),
out errCode);
if
(errCode != 0) ErrorMsg("No temperature
applied.",
true);
CWTemp.TemperatureBeginEdit();
CWTemp.TemperatureType = 0;
CWTemp.Unit = 1;
CWTemp.TemperatureValue = 72;
errCode = CWTemp.TemperatureEndEdit();
if
(errCode != 0) ErrorMsg("No temperature
applied.",
true);
// Apply initial temperature to
coffee
Debug.Print("Applying
initial temperature to coffee...");
CWTemp = (CWTemperature)LBCMgr.AddTemperature((varArray2),
out errCode);
if
(errCode != 0) ErrorMsg("No temperature
applied.",
true);
CWTemp.TemperatureBeginEdit();
CWTemp.TemperatureType = 0;
CWTemp.Unit = 1;
CWTemp.TemperatureValue = 195;
errCode = CWTemp.TemperatureEndEdit();
if
(errCode != 0) ErrorMsg("No temperature
applied.",
true);
// Create convection for coffee
component
Debug.Print("Creating
convection for coffee component...");
CWConv = (CWConvection)LBCMgr.AddConvection((varArray3),
out errCode);
if
(errCode != 0) ErrorMsg("No convection
added.",
true);
CWConv.ConvectionBeginEdit();
CWConv.Unit = 1;
CWConv.ConvectionCoefficient = 8.5E-06;
CWConv.BulkAmbientTemperature = 72;
errCode = CWConv.ConvectionEndEdit();
if
(errCode != 0) ErrorMsg("Convection
end-edit failed for coffee.",
true);
// Create convection for coffee
pot component
Debug.Print("Creating
convection for coffee pot component...");
CWConv = (CWConvection)LBCMgr.AddConvection((varArray4),
out errCode);
if
(errCode != 0) ErrorMsg("No convection
added.",
true);
CWConv.ConvectionBeginEdit();
CWConv.Unit = 1;
CWConv.ConvectionCoefficient = 6.1E-05;
CWConv.BulkAmbientTemperature = 72;
errCode = CWConv.ConvectionEndEdit();
if
(errCode != 0) ErrorMsg("Convection
end-edit failed for coffee pot.",
true);
// Create heat power for face
Debug.Print("Creating
heat power for face...");
CWHeatPower = (CWHeatPower)LBCMgr.AddHeatPower((varArray6),
out errCode);
if
(errCode != 0) ErrorMsg("No heat power
created.",
true);
CWHeatPower.HeatPowerBeginEdit();
CWHeatPower.Unit = 0;
CWHeatPower.HPValue = 2000;
// Set thermostat to a vertex
Debug.Print("Setting
thermostat to a vertex...");
CWHeatPower.IncludeThermostat = 1;
CWHeatPower.SetThermostat(therm1);
CWHeatPower.ThermostatUnits = 1;
CWHeatPower.SetCutOffTemperatures(190, 200);
errCode = CWHeatPower.HeatPowerEndEdit();
if
(errCode != 0) ErrorMsg("Heat power not
updated.",
true);
// Create mesh
Debug.Print("Creating
mesh...");
CwMesh = (CWMesh)Study.Mesh;
if
(CwMesh == null)
ErrorMsg("No mesh object.",
false);
CwMesh.Quality = 1;
CwMesh.GetDefaultElementSizeAndTolerance(0,
out el,
out tl);
errCode = Study.CreateMesh(0, el, tl);
if
(errCode != 0) ErrorMsg("Mesh failed.",
true);
// Run analysis
Debug.Print("Running
analysis...");
errCode = Study.RunAnalysis();
if
(errCode != 0) ErrorMsg("Analysis
failed.",
true);
// Get results
Debug.Print("Getting
results...");
CWResult = (CWResults)Study.Results;
if
(CWResult == null)
ErrorMsg("No result object.",
false);
// Get temperature at vertex
Debug.Print("Getting
temperature at vertex...");
nStep = CWResult.GetMaximumAvailableSteps();
Temp = CWResult.GetThermalForEntities(0, nStep,
null, (varArray5),
2, out
errCode);
if
(errCode != 0) ErrorMsg("No temperature
result.",
true);
Object[]
varVals = {1264};
// View surfaces in the
Thermal1 plot at 1264 Kelvin
res = CWResult.AddIsoClippingToPlot("Thermal1",
1, varVals, false,
true);
// Save plots as eDrawings
CWResult.SavePlotsAseDrawings("c:\\temp",
"ThermalPlot",
"Thermal1");
// Export this study to the
NASTRAN finite-element analysis program
res = Study.ExportSimulationStudy("c:\\temp",
"ThermalStudyExport",
(int)swsNastranExportOption_e.swsNastranExportOption_LongFixed,
0, 0, (int)swsStudyExportOption_e.swsStudyExportOption_Nastran,
(int)swsNastranExportUnit_e.swsNastranExportUnit_IPS);
// Rename the study
res = StudyMngr.RenameStudyFromName("Thermal_One",
"TransientThermal");
Debug.Print("Done!");
}
// Error routine
private
void
ErrorMsg(string
Message, bool
EndTest)
{
swApp.SendMsgToUser2(Message, 0, 0);
swApp.RecordLine("'***
WARNING - General");
swApp.RecordLine("'***
" + Message);
swApp.RecordLine("");
}
// Parse string into array
private
void
StringtoArray(string
inputSTR, ref
byte[]
varEntity)
{
string[]
PIDArray = null;
byte[]
PID = null;
int
i;
// Parse string into an array
PIDArray = inputSTR.Split(new
char[] {
',' });
//Convert string array to byte
array
int
sizeArray = PIDArray.Length;
PID = new
byte[sizeArray];
for
(i = 0; i < PIDArray.Length; i++)
{
PID[i] = Convert.ToByte(PIDArray[i]);
}
varEntity = PID;
}
public
SldWorks
swApp;
}
}