DATAKIT API  V2025.4
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 );
sw::sww::FileDescription FileDescription( ArrayMetadata );
dtkerror = sw::sww::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 = sw::sww::AddParasolidFile( inParasolidFile );
//without pskernel you will get an error dtkErrorTypeNotsupported
//add mesh
//add curves
//add point
//add plan
//add axis system
dtkerror = sw::sww::AddEntity( Dtk_EntityPtr::DtkDynamicCast( myaxissystem ) );
//add fdt
dtkerror = sw::sww::AddEntity( Dtk_EntityPtr::DtkDynamicCast( myfdt_datum ) );
//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 = sw::sww::AddMetaData( metadata0 );
dtkerror = sw::sww::AddMetaData( metadata1 );
dtkerror = sw::sww::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 );
sw::sww::FileDescription FileDescription( ArrayMetadata );
dtkerror = sw::sww::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 ) );
sw::sww::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 = sw::sww::AddInstanceComponent( instance1 );
instance_name = L"MyPart2";
position.setOrigin( Dtk_pnt( 100, 150, 0 ) );
sw::sww::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 = sw::sww::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));
sw::sww::Instance instance3(disk_name,instance_name,position,Dtk_RGB(255,0,0,255));
dtkerror = sw::sww::AddInstanceComponent(instance3);
//instance visibility
instance_name = L"MyInvisiblePart2";
position.setOrigin(Dtk_pnt(300,350,0));
sw::sww::Instance instance4(disk_name,instance_name,position,Dtk_RGB(-1,-1,-1,-1),DTK_TRUE);
dtkerror = sw::sww::AddInstanceComponent(instance4);
//instance color + visibility
instance_name = L"MyColorInvisiblePart2";
position.setOrigin(Dtk_pnt(400,450,0));
sw::sww::Instance instance5(disk_name,instance_name,position,Dtk_RGB(0,255,0,255),DTK_TRUE);
dtkerror = sw::sww::AddInstanceComponent(instance5);*/
dtkerror = sw::sww::CloseAssembly();
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 + "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 = sw::sww::InitWriter( logwrite, NULL, sw::sww::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:1555
testcreatefdt.hpp
Dtk_ID
uint32_t Dtk_ID
Definition: define.h:691
Dtk_transfo
This is the Transformation dedicated class.
Definition: dtk_transfo.hpp:19
DTK_TYPE_UNKNOWN
@ DTK_TYPE_UNKNOWN
Definition: define.h:37
sw::sww::OpenPart
Dtk_ErrorStatus OpenPart(const Dtk_string &inSolidworksFile, const sw::sww::FileDescription &inFileDescription=sw::sww::FileDescription(), Dtk_Unit inUnit=DTK_UNIT_MM, const Dtk_string &inConfigurationName=Dtk_string())
Initialize the part
Dtk_Info::SetName
Dtk_ErrorStatus SetName(Dtk_string inName)
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.
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:1500
Dtk_string
This is a high level string class.
Definition: dtk_string.hpp:58
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:79
sampleWriter::CreateAxisSystem
Dtk_AxisSystemPtr CreateAxisSystem()
Definition: testcreatecube.cpp:1529
Dtk_API::GetWorkingDir
const Dtk_string & GetWorkingDir() const
dtkErrorAPINotStarted
@ dtkErrorAPINotStarted
Definition: error_dtk.hpp:105
Dtk_API::SetSchemaDir
Dtk_ErrorStatus SetSchemaDir(const Dtk_string &inSchemaDir)
Set Schema Directory needed for Unigraphics, Parasolid, Solidedge, Solidworks and Jt readers.
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)
sw::sww::Instance
This class provides Instance about a Solidworks File. It can be used with sw::sww::OpenAssembly funct...
Definition: solidworksw.hpp:94
sampleWriter::CreatePoint
Dtk_BodyPtr CreatePoint()
Definition: testcreatecube.cpp:1473
sw::sww::AddParasolidFile
Dtk_ErrorStatus AddParasolidFile(const Dtk_string &inParasolidFile)
Add parasolid file.
sampleWriter::CreateEsquisse2D
Dtk_BodyPtr CreateEsquisse2D()
Definition: testcreatecube.cpp:1684
sw::sww::InitWriter
Dtk_ErrorStatus InitWriter(const Dtk_string &inLogFile, Licence_dtk inLicFct, sw::sww::language inLanguage=sw::sww::english)
Initialize the Solidworks Writer
sampleWriter::CreateFdtDatum
Dtk_FdtPtr CreateFdtDatum()
Creates simple Datum.
Definition: testcreatefdt.cpp:19
Dtk_Int32
int32_t Dtk_Int32
Definition: define.h:689
sw::sww::AddMetaData
Dtk_ErrorStatus AddMetaData(const Dtk_MetaDataPtr &inEntity)
sw::sww::ClosePart
Dtk_ErrorStatus ClosePart()
Free data allocated by sw::sww::OpenPart
sw::sww::AddEntity
Dtk_ErrorStatus AddEntity(const Dtk_EntityPtr &inEntity)
Write the entity provided in parameter.
sw::sww::FileDescription
This class provides several informations about a Solidworks File. It can be used with sw::OpenPart an...
Definition: solidworksw.hpp:42
Dtk_MetaData::TypeProperty
@ TypeProperty
Definition: dtk_metadata.hpp:28
sw::sww::EndWriter
Dtk_ErrorStatus EndWriter()
Free the Solidworks Writer
Dtk_SmartPtr::DtkDynamicCast
static Dtk_SmartPtr< T > DtkDynamicCast(const Dtk_SmartPtr< T2 > &p)
Definition: util_ptr_dtk.hpp:101
sw::sww::CloseAssembly
Dtk_ErrorStatus CloseAssembly()
Write effectively the Assembly initialized by OpenAssembly.
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:1585
Dtk_SmartPtr
Definition: util_ptr_dtk.hpp:37
sw::sww::OpenAssembly
Dtk_ErrorStatus OpenAssembly(const Dtk_string &inFileName, const sw::sww::FileDescription &inFileDescription=sw::sww::FileDescription(), Dtk_Unit inUnit=DTK_UNIT_MM, const Dtk_string &inConfigurationName=Dtk_string())
Initialize a Assembly .
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:339
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
sw::sww::english
@ english
Definition: solidworksw.hpp:25
sw::sww::AddInstanceComponent
Dtk_ErrorStatus AddInstanceComponent(Instance &inInstance)
Add an instance into the Current Assembly (sldasm).
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:1320
Dtk_string::len
int len() const
Retrieve the length of the Dtk_string.
sampleWriter::CreateCurves
Dtk_BodyPtr CreateCurves()
Definition: testcreatecube.cpp:1361
sampleWriter::CreateDimension
Dtk_FdtPtr CreateDimension()
Definition: testcreatefdt.cpp:116
dtkNoError
@ dtkNoError
Definition: error_dtk.hpp:144
Dtk_tab::push_back
void push_back(const T &x)
Inserts an element at the end of the array.
Definition: util_stl_dtk.hpp:417
testwriters.h
Dtk_tab::clear
void clear(int no_delete=0)
Resets the Dtk_tab content.
Definition: util_stl_dtk.hpp:353
Dtk_RGB
Definition: dtk_rgb.hpp:7
Dtk_Info::SetColor
Dtk_ErrorStatus SetColor(const int &R, const int &G, const int &B)
Dtk_Info::create
static Dtk_SmartPtr< Dtk_Info > create()
Calls default constructor to allocate a new object.
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
sw::sww::SetIsAlreadyStart
void SetIsAlreadyStart(const Dtk_Int32 &inStop)
ONLY for PSKERNEL user.
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 .