DATAKIT API  V2025.1
Solidworks Write Samples
//start_of_mainswwrite
#include "testwriters.h"
//DATAKIT headers needed
#include "datakit.h"
//This sample show you how to add a body into solidworks part file and create an assembly.
#ifdef PSKERNEL_USER
void StartParasolid();
void StopParasolid();
#endif
void
AddColortoFace( const Dtk_BodyPtr& inBody )
{
Dtk_Int32 cpt = 1;
//add color to face
Dtk_Int32 i, sizei = ( Dtk_Int32 )inBody->GetNumTopologicalEntities( DTK_TYPE_UNKNOWN );
for( i = 0; i < sizei; i++ )
{
Dtk_TopologicalEntityPtr topo = inBody->GetPtr( ( Dtk_ID )i );
if( topo.IsNotNULL() )
{
if( face.IsNotNULL() )
{
Dtk_InfoPtr info = face->get_info();
if( info.IsNULL() )
{
face->info() = Dtk_Info::create();
info = face->get_info();
}
info->SetColor( Dtk_RGB( ( cpt * 42 ), 192, 192, 255 ) );
cpt++;
Dtk_string face_name = inBody->get_info()->GetName() + L"Face_";
face_name.add_int( i );
info->SetName( face_name );
}
}
}
}
void
create_part( const Dtk_string& inFilename, const Dtk_string& inParasolidFile )
{
Dtk_tab<Dtk_MetaDataPtr> ArrayMetadata;
Dtk_MetaDataPtr metadata;
metadata = Dtk_MetaData::CreateMetaData( Dtk_MetaData::TypeProperty, L"Title", L"Value" );
ArrayMetadata.push_back( metadata );
solidworksw::FileDescription FileDescription( ArrayMetadata );
dtkerror = solidworksw::OpenPart( inFilename, FileDescription, DTK_UNIT_MM );
MyCube1->get_info()->SetName( L"Cube1" );
AddColortoFace( MyCube1 );
MyCube2->get_info()->SetName( L"Cube2" );
AddColortoFace( MyCube2 );
Dtk_transfo transfo;
transfo.setOrigin( 200, 0, 0 );
MyCube2->Transform( transfo );
//only with pskernel
dtkerror = solidworksw::AddParasolidFile( inParasolidFile );
//without pskernel you will get an error dtkErrorTypeNotsupported
//add mesh
//add curves
//add point
//add plan
//add axis system
//add fdt
//add axis
//add esquisse3d
//add esquisse2d
Dtk_MetaDataPtr metadata0 = Dtk_MetaData::CreateMetaDataWithUnits( Dtk_MetaData::TypeProperty, L"Title0 ", L"Value0", L"myunit0" );
Dtk_MetaDataPtr metadata1 = Dtk_MetaData::CreateMetaDataWithUnits( Dtk_MetaData::TypeProperty, L"Title1 ", L"Value1", L"myunit1" );
dtkerror = solidworksw::AddMetaData( metadata0 );
dtkerror = solidworksw::AddMetaData( metadata1 );
dtkerror = solidworksw::ClosePart();
cout << "=> " << inFilename.c_str() << endl;
}
void
create_assembly( const Dtk_string& inFilename, const Dtk_string& inFilenamePart )
{
Dtk_tab<Dtk_MetaDataPtr> ArrayMetadata;
Dtk_MetaDataPtr metadata;
metadata = Dtk_MetaData::CreateMetaData( Dtk_MetaData::TypeProperty, L"Title", L"Value" );
ArrayMetadata.push_back( metadata );
solidworksw::FileDescription FileDescription( ArrayMetadata );
dtkerror = solidworksw::OpenAssembly( inFilename, FileDescription, DTK_UNIT_MM );
Dtk_string disk_name = inFilenamePart;
Dtk_string instance_name = L"MyPart1";
Dtk_transfo position = Dtk_transfo( Dtk_dir( 1, 0, 0 ), Dtk_dir( 0, 1, 0 ), Dtk_dir( 0, 0, 1 ), Dtk_pnt( 0, 0, 0 ) );
solidworksw::Instance instance1( disk_name, instance_name, position );
Dtk_MetaDataPtr metadata_instance = Dtk_MetaData::CreateMetaData( Dtk_MetaData::TypeProperty, L"Title of instance1", L"Value of instance1" );
Dtk_tab<Dtk_MetaDataPtr> ArrayMetadataEntity;
ArrayMetadataEntity.push_back( metadata_instance );
instance1.AddMetadata( ArrayMetadataEntity );
dtkerror = solidworksw::AddInstanceComponent( instance1 );
instance_name = L"MyPart2";
position.setOrigin( Dtk_pnt( 100, 150, 0 ) );
solidworksw::Instance instance2( disk_name, instance_name, position );
ArrayMetadataEntity.clear();
metadata_instance = Dtk_MetaData::CreateMetaData( Dtk_MetaData::TypeProperty, L"Title of instance2", L"Value of instance2" );
ArrayMetadataEntity.push_back( metadata_instance );
instance2.AddMetadata( ArrayMetadataEntity );
dtkerror = solidworksw::AddInstanceComponent( instance2 );
//you can add the color and status hidden to the instance
/*//instance color
instance_name = L"MyColorPart2";
position.setOrigin(Dtk_pnt(200,250,0));
solidworksw::Instance instance3(disk_name,instance_name,position,Dtk_RGB(255,0,0,255));
dtkerror = solidworksw::AddInstanceComponent(instance3);
//instance visibility
instance_name = L"MyInvisiblePart2";
position.setOrigin(Dtk_pnt(300,350,0));
solidworksw::Instance instance4(disk_name,instance_name,position,Dtk_RGB(-1,-1,-1,-1),DTK_TRUE);
dtkerror = solidworksw::AddInstanceComponent(instance4);
//instance color + visibility
instance_name = L"MyColorInvisiblePart2";
position.setOrigin(Dtk_pnt(400,450,0));
solidworksw::Instance instance5(disk_name,instance_name,position,Dtk_RGB(0,255,0,255),DTK_TRUE);
dtkerror = solidworksw::AddInstanceComponent(instance5);*/
cout << "=> " << inFilename.c_str() << endl;
}
int SwWriteSample( Dtk_API * inDtkAPI, const Dtk_string &inResultDirectory )
{
cout << endl << "----------------------------------------------" << endl;
cout << "Solidworks Write start" << endl;
// Choosing output directory and file name
Dtk_string outputDirectory = inResultDirectory + "dtk/Sw/";
outputDirectory.FixPathSeparator();
outputDirectory.mkdir();
{
//remove old file
Dtk_string temp;
temp = outputDirectory + L"my_test_part.sldprt";
temp.unlink();
temp = outputDirectory + L"my_test_part2.sldprt";
temp.unlink();
temp = outputDirectory + L"my_test_assembly.sldasm";
temp.unlink();
temp = outputDirectory + L"logwrite.txt";
temp.unlink();
}
Dtk_ErrorStatus dtkerror;
Dtk_string StrSchemaPath = inResultDirectory + L"../bin/Schema/";
#ifdef PSKERNEL_USER
//First if you haven't done yet, start the parasolid session
StartParasolid();
//And informs that the session is started
//Set the schema path
#ifndef Linux
wchar_t *schPath;
schPath = ( wchar_t* )malloc( sizeof( wchar_t ) * ( StrSchemaPath.len() + 10 ) );
swprintf( schPath, 255, L"P_SCHEMA=%s", StrSchemaPath.w_str() );
_wputenv( schPath );
#else
char *schPath;
schPath = ( char* )malloc( sizeof( char ) * ( StrSchemaPath.len() + 10 ) );
sprintf( schPath, "P_SCHEMA=%s", StrSchemaPath.c_str() );
putenv( schPath );
#endif
//dont delete it because getenv doesn't work or retrun null string
//free(schPath);
//schPath=NULL;
#endif
if( inDtkAPI != NULL )
inDtkAPI->SetSchemaDir( StrSchemaPath );
else
{
}
Dtk_string logwrite = inDtkAPI->GetWorkingDir() + L"logwrite.txt";
Dtk_string FilenamePart;
dtkerror = solidworksw::InitWriter( logwrite, NULL, solidworksw::english );
Dtk_string xmtfile = inResultDirectory + L"/xmt/CS_WHEEL_CAP.X_T";
if( dtkerror == dtkNoError )
{
//how to create part file
FilenamePart = outputDirectory + L"my_test_part.sldprt";
create_part( FilenamePart, xmtfile );
}
if( dtkerror == dtkNoError )
{
FilenamePart = outputDirectory + L"my_test_part2.sldprt";
create_part( FilenamePart, xmtfile );
}
if( dtkerror == dtkNoError )
{
//how to create assembly file
Dtk_string FilenameAssm = outputDirectory + L"my_test_assembly.sldasm";
create_assembly( FilenameAssm, FilenamePart );
}
#ifdef PSKERNEL_USER
//Stop the parasolid session
StopParasolid();
#endif
cout << "Solidworks Write end" << endl;
return dtkerror;
}
//end_of_mainswwrite
sampleWriter::CreateAxis
Dtk_BodyPtr CreateAxis()
Definition: testcreatecube.cpp:1492
testcreatefdt.hpp
Dtk_ID
uint32_t Dtk_ID
Definition: define.h:689
Dtk_transfo
This is the Transformation dedicated class.
Definition: dtk_transfo.hpp:19
solidworksw::InitWriter
Dtk_ErrorStatus InitWriter(const Dtk_string &inLogFile, Licence_dtk inLicFct, solidworksw::language inLanguage=solidworksw::english)
Initialize the Solidworks Writer
DTK_TYPE_UNKNOWN
@ DTK_TYPE_UNKNOWN
Definition: define.h:37
solidworksw::ClosePart
Dtk_ErrorStatus ClosePart()
Free data allocated by solidworksw::OpenPart
Dtk_Info::SetName
Dtk_ErrorStatus SetName(Dtk_string inName)
solidworksw::OpenPart
Dtk_ErrorStatus OpenPart(const Dtk_string &inSolidworksFile, const solidworksw::FileDescription &inFileDescription=solidworksw::FileDescription(), Dtk_Unit inUnit=DTK_UNIT_MM, const Dtk_string &inConfigurationName=Dtk_string())
Initialize the part
Dtk_SmartPtr::IsNotNULL
Dtk_bool IsNotNULL() const
Definition: util_ptr_dtk.hpp:119
Dtk_transfo::setOrigin
void setOrigin(const Dtk_pnt &O)
Set a new O center point.
solidworksw::AddEntity
Dtk_ErrorStatus AddEntity(const Dtk_EntityPtr &inEntity)
Write the entity provided in parameter.
create_assembly
void create_assembly(const Dtk_string &inFilename, const Dtk_string &inFilenamePart)
Definition: testlibswwrite.cpp:144
solidworksw.hpp
sampleWriter::CreateInfinitePlane
Dtk_BodyPtr CreateInfinitePlane()
Definition: testcreatecube.cpp:1435
Dtk_string
This is a high level string class.
Definition: dtk_string.hpp:58
solidworksw::CloseAssembly
Dtk_ErrorStatus CloseAssembly()
Write effectively the Assembly initialized by solidworksw::OpenAssembly.
create_part
void create_part(const Dtk_string &inFilename, const Dtk_string &inParasolidFile)
Definition: testlibswwrite.cpp:56
Dtk_string::unlink
int unlink() const
File Utility : Delete a file.
DTK_UNIT_MM
@ DTK_UNIT_MM
Definition: util_draw_dtk.hpp:85
sampleWriter::CreateAxisSystem
Dtk_AxisSystemPtr CreateAxisSystem()
Definition: testcreatecube.cpp:1465
Dtk_API::GetWorkingDir
const Dtk_string & GetWorkingDir() const
dtkErrorAPINotStarted
@ dtkErrorAPINotStarted
Definition: error_dtk.hpp:101
Dtk_API::SetSchemaDir
Dtk_ErrorStatus SetSchemaDir(const Dtk_string &inSchemaDir)
Set Schema Directory needed for Unigraphics, Parasolid, Solidedge, Solidworks and Jt readers.
solidworksw::SetIsAlreadyStart
void SetIsAlreadyStart(const Dtk_Int32 &inStop)
ONLY for PSKERNEL user.
solidworksw::EndWriter
Dtk_ErrorStatus EndWriter()
Free the Solidworks Writer
Dtk_MetaData::CreateMetaDataWithUnits
static Dtk_MetaDataPtr CreateMetaDataWithUnits(const MetaDataTypeEnum &inEnumType, Dtk_string inTitle, Dtk_string inValue, Dtk_string inUnits, Dtk_string inValueType=Dtk_string(L"STRING"))
Create a Dtk_MetaDataPtr .
Dtk_string::add_int
void add_int(const int integer, int force_unsigned_int=0)
concat an int to the Dtk_string (convert the int to Dtk_string)
solidworksw::FileDescription
This class provides several informations about a Solidworks File. It can be used with solidworksw::Op...
Definition: solidworksw.hpp:36
sampleWriter::CreateFdtDimAssy
Dtk_FdtPtr CreateFdtDimAssy()
PMI in Assembly : a dimension between faces of different instances.
Definition: testcreatefdt.cpp:118
sampleWriter::CreatePoint
Dtk_BodyPtr CreatePoint()
Definition: testcreatecube.cpp:1407
sampleWriter::CreateEsquisse2D
Dtk_BodyPtr CreateEsquisse2D()
Definition: testcreatecube.cpp:1625
sampleWriter::CreateFdtDatum
Dtk_FdtPtr CreateFdtDatum()
Create Simple Datum.
Definition: testcreatefdt.cpp:19
Dtk_Int32
int32_t Dtk_Int32
Definition: define.h:687
Dtk_MetaData::TypeProperty
@ TypeProperty
Definition: dtk_metadata.hpp:28
solidworksw::english
@ english
Definition: solidworksw.hpp:17
Dtk_SmartPtr::DtkDynamicCast
static Dtk_SmartPtr< T > DtkDynamicCast(const Dtk_SmartPtr< T2 > &p)
Definition: util_ptr_dtk.hpp:101
Dtk_ErrorStatus
Dtk_ErrorStatus
Definition: error_dtk.hpp:6
Dtk_SmartPtr::IsNULL
Dtk_bool IsNULL() const
Definition: util_ptr_dtk.hpp:118
sampleWriter::CreateEsquisse3D
Dtk_BodyPtr CreateEsquisse3D()
Definition: testcreatecube.cpp:1524
solidworksw::AddInstanceComponent
Dtk_ErrorStatus AddInstanceComponent(Instance &inInstance)
Add an instance into the Current Assembly (sldasm).
Dtk_SmartPtr
Definition: util_ptr_dtk.hpp:37
utilwriter.h
Dtk_string::c_str
const char * c_str() const
Retrieve the ASCII conversion string.
sampleWriter::CreateMeshCylinder
Dtk_MeshPtr CreateMeshCylinder(int nbpoints)
Mesh Cylinder sample.
Definition: testcreatemesh.cpp:337
Dtk_string::mkdir
int mkdir() const
File Utility : Create a Directory.
Dtk_pnt
This is a mathematical point class.
Definition: dtk_pnt.hpp:22
Dtk_string::FixPathSeparator
void FixPathSeparator()
File Utility : Fixes path separator consistency. It lets you replace the '\' or '/' by the OS needed ...
datakit.h
SwWriteSample
int SwWriteSample(Dtk_API *inDtkAPI, const Dtk_string &inResultDirectory)
Definition: testlibswwrite.cpp:212
testcreatemesh.hpp
testcreatecube.hpp
Dtk_tab
This is a high level array class.
Definition: util_stl_dtk.hpp:85
sampleWriter::CreateCube
Dtk_BodyPtr CreateCube()
Definition: testcreatecube.cpp:1249
solidworksw::AddMetaData
Dtk_ErrorStatus AddMetaData(const Dtk_MetaDataPtr &inEntity)
Dtk_string::len
int len() const
Retrieve the length of the Dtk_string.
sampleWriter::CreateCurves
Dtk_BodyPtr CreateCurves()
Definition: testcreatecube.cpp:1292
solidworksw::AddParasolidFile
Dtk_ErrorStatus AddParasolidFile(const Dtk_string &inParasolidFile)
Add parasolid file.
dtkNoError
@ dtkNoError
Definition: error_dtk.hpp:140
Dtk_tab::push_back
void push_back(const T &x)
Inserts an element at the end of the array.
Definition: util_stl_dtk.hpp:415
testwriters.h
Dtk_tab::clear
void clear(int no_delete=0)
Resets the Dtk_tab content.
Definition: util_stl_dtk.hpp:351
Dtk_RGB
Definition: dtk_rgb.hpp:7
solidworksw::OpenAssembly
Dtk_ErrorStatus OpenAssembly(const Dtk_string &inFileName, const solidworksw::FileDescription &inFileDescription=solidworksw::FileDescription(), Dtk_Unit inUnit=DTK_UNIT_MM, const Dtk_string &inConfigurationName=Dtk_string())
Initialize a Assembly .
Dtk_Info::SetColor
Dtk_ErrorStatus SetColor(const int &R, const int &G, const int &B)
Dtk_Info::create
static Dtk_SmartPtr< Dtk_Info > create()
solidworksw::Instance
This class provides Instance about a Solidworks File. It can be used with solidworksw::OpenAssembly f...
Definition: solidworksw.hpp:79
AddColortoFace
void AddColortoFace(const Dtk_BodyPtr &inBody)
Definition: testlibswwrite.cpp:25
Dtk_dir
This is a mathematical direction class.
Definition: dtk_dir.hpp:15
Dtk_API
Definition: dtk_api.hpp:75
Dtk_MetaData::CreateMetaData
static Dtk_MetaDataPtr CreateMetaData(const MetaDataTypeEnum &inEnumType, Dtk_string inTitle, Dtk_string inValue, Dtk_string inValueType=Dtk_string(L"STRING"))
Create a Dtk_MetaDataPtr .