DATAKIT API  V2025.4
testlibswwrite.cpp File Reference

Functions

void AddColortoFace (const Dtk_BodyPtr &inBody)
 
void create_assembly (const Dtk_string &inFilename, const Dtk_string &inFilenamePart)
 
void create_part (const Dtk_string &inFilename, const Dtk_string &inParasolidFile)
 
int SwWriteSample (Dtk_API *inDtkAPI, const Dtk_string &inResultDirectory)
 

Function Documentation

◆ AddColortoFace()

void AddColortoFace ( const Dtk_BodyPtr inBody)
26 {
27  Dtk_Int32 cpt = 1;
28  //add color to face
29  Dtk_Int32 i, sizei = ( Dtk_Int32 )inBody->GetNumTopologicalEntities( DTK_TYPE_UNKNOWN );
30  for( i = 0; i < sizei; i++ )
31  {
32  Dtk_TopologicalEntityPtr topo = inBody->GetPtr( ( Dtk_ID )i );
33  if( topo.IsNotNULL() )
34  {
36  if( face.IsNotNULL() )
37  {
38  Dtk_InfoPtr info = face->get_info();
39  if( info.IsNULL() )
40  {
41  face->info() = Dtk_Info::create();
42  info = face->get_info();
43  }
44  info->SetColor( Dtk_RGB( ( cpt * 42 ), 192, 192, 255 ) );
45  cpt++;
46 
47  Dtk_string face_name = inBody->get_info()->GetName() + L"Face_";
48  face_name.add_int( i );
49  info->SetName( face_name );
50  }
51  }
52  }
53 }

◆ create_assembly()

void create_assembly ( const Dtk_string inFilename,
const Dtk_string inFilenamePart 
)
145 {
146  DtkErrorStatus dtkerror = dtkNoError;
147 
148 
149  Dtk_tab<Dtk_MetaDataPtr> ArrayMetadata;
150  Dtk_MetaDataPtr metadata;
151 
152  metadata = Dtk_MetaData::CreateMetaData( Dtk_MetaData::TypeProperty, L"Title", L"Value" );
153  ArrayMetadata.push_back( metadata );
154 
155 
156 
157  sw::sww::FileDescription FileDescription( ArrayMetadata );
158  dtkerror = sw::sww::OpenAssembly( inFilename, FileDescription, DTK_UNIT_MM );
159 
160  Dtk_string disk_name = inFilenamePart;
161 
162 
163  Dtk_string instance_name = L"MyPart1";
164  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 ) );
165 
166  sw::sww::Instance instance1( disk_name, instance_name, position );
167 
168  Dtk_MetaDataPtr metadata_instance = Dtk_MetaData::CreateMetaData( Dtk_MetaData::TypeProperty, L"Title of instance1", L"Value of instance1" );
169  Dtk_tab<Dtk_MetaDataPtr> ArrayMetadataEntity;
170  ArrayMetadataEntity.push_back( metadata_instance );
171  instance1.AddMetadata( ArrayMetadataEntity );
172 
173  dtkerror = sw::sww::AddInstanceComponent( instance1 );
174 
175 
176  instance_name = L"MyPart2";
177  position.setOrigin( Dtk_pnt( 100, 150, 0 ) );
178  sw::sww::Instance instance2( disk_name, instance_name, position );
179 
180  ArrayMetadataEntity.clear();
181  metadata_instance = Dtk_MetaData::CreateMetaData( Dtk_MetaData::TypeProperty, L"Title of instance2", L"Value of instance2" );
182  ArrayMetadataEntity.push_back( metadata_instance );
183  instance2.AddMetadata( ArrayMetadataEntity );
184 
185  dtkerror = sw::sww::AddInstanceComponent( instance2 );
186 
187  //you can add the color and status hidden to the instance
188  /*//instance color
189  instance_name = L"MyColorPart2";
190  position.setOrigin(Dtk_pnt(200,250,0));
191  sw::sww::Instance instance3(disk_name,instance_name,position,Dtk_RGB(255,0,0,255));
192  dtkerror = sw::sww::AddInstanceComponent(instance3);
193 
194  //instance visibility
195  instance_name = L"MyInvisiblePart2";
196  position.setOrigin(Dtk_pnt(300,350,0));
197  sw::sww::Instance instance4(disk_name,instance_name,position,Dtk_RGB(-1,-1,-1,-1),DTK_TRUE);
198  dtkerror = sw::sww::AddInstanceComponent(instance4);
199 
200  //instance color + visibility
201  instance_name = L"MyColorInvisiblePart2";
202  position.setOrigin(Dtk_pnt(400,450,0));
203  sw::sww::Instance instance5(disk_name,instance_name,position,Dtk_RGB(0,255,0,255),DTK_TRUE);
204  dtkerror = sw::sww::AddInstanceComponent(instance5);*/
205 
206 
207  dtkerror = sw::sww::CloseAssembly();
208 
209  cout << "=> " << inFilename.c_str() << endl;
210 }

◆ create_part()

void create_part ( const Dtk_string inFilename,
const Dtk_string inParasolidFile 
)
57 {
58  DtkErrorStatus dtkerror = dtkNoError;
59 
60  Dtk_tab<Dtk_MetaDataPtr> ArrayMetadata;
61  Dtk_MetaDataPtr metadata;
62 
63  metadata = Dtk_MetaData::CreateMetaData( Dtk_MetaData::TypeProperty, L"Title", L"Value" );
64  ArrayMetadata.push_back( metadata );
65 
66 
67  sw::sww::FileDescription FileDescription( ArrayMetadata );
68  dtkerror = sw::sww::OpenPart( inFilename, FileDescription, DTK_UNIT_MM );
69 
70 
72  MyCube1->get_info()->SetName( L"Cube1" );
73  AddColortoFace( MyCube1 );
74  dtkerror = sw::sww::AddEntity( Dtk_EntityPtr::DtkDynamicCast( MyCube1 ) );
75 
76 
78  MyCube2->get_info()->SetName( L"Cube2" );
79  AddColortoFace( MyCube2 );
80 
81  Dtk_transfo transfo;
82  transfo.setOrigin( 200, 0, 0 );
83  MyCube2->Transform( transfo );
84 
85  dtkerror = sw::sww::AddEntity( Dtk_EntityPtr::DtkDynamicCast( MyCube2 ) );
86 
87  //only with pskernel
88  dtkerror = sw::sww::AddParasolidFile( inParasolidFile );
89  //without pskernel you will get an error dtkErrorTypeNotsupported
90 
91 
92  //add mesh
95 
96  //add curves
98  dtkerror = sw::sww::AddEntity( Dtk_EntityPtr::DtkDynamicCast( body_curve ) );
99 
100  //add point
101  Dtk_BodyPtr body_point = sampleWriter::CreatePoint();
102  dtkerror = sw::sww::AddEntity( Dtk_EntityPtr::DtkDynamicCast( body_point ) );
103 
104 
105  //add plan
107  dtkerror = sw::sww::AddEntity( Dtk_EntityPtr::DtkDynamicCast( body_plan ) );
108 
109  //add axis system
111  dtkerror = sw::sww::AddEntity( Dtk_EntityPtr::DtkDynamicCast( myaxissystem ) );
112 
113  //add fdt
115  dtkerror = sw::sww::AddEntity( Dtk_EntityPtr::DtkDynamicCast( myfdt_dim ) );
117  dtkerror = sw::sww::AddEntity( Dtk_EntityPtr::DtkDynamicCast( myfdt_datum ) );
118 
119  //add axis
121  dtkerror = sw::sww::AddEntity( Dtk_EntityPtr::DtkDynamicCast( myaxis ) );
122 
123  //add esquisse3d
125  dtkerror = sw::sww::AddEntity( Dtk_EntityPtr::DtkDynamicCast( esquisse3d ) );
126 
127  //add esquisse2d
129  dtkerror = sw::sww::AddEntity( Dtk_EntityPtr::DtkDynamicCast( esquisse2d ) );
130 
131  Dtk_MetaDataPtr metadata0 = Dtk_MetaData::CreateMetaDataWithUnits( Dtk_MetaData::TypeProperty, L"Title0 ", L"Value0", L"myunit0" );
132  Dtk_MetaDataPtr metadata1 = Dtk_MetaData::CreateMetaDataWithUnits( Dtk_MetaData::TypeProperty, L"Title1 ", L"Value1", L"myunit1" );
133  dtkerror = sw::sww::AddMetaData( metadata0 );
134  dtkerror = sw::sww::AddMetaData( metadata1 );
135 
136  dtkerror = sw::sww::ClosePart();
137 
138  cout << "=> " << inFilename.c_str() << endl;
139 }

◆ SwWriteSample()

int SwWriteSample ( Dtk_API inDtkAPI,
const Dtk_string inResultDirectory 
)
213 {
214  cout << endl << "----------------------------------------------" << endl;
215  cout << "Solidworks Write start" << endl;
216  // Choosing output directory and file name
217  Dtk_string outputDirectory = inResultDirectory + "Sw/";
218  outputDirectory.FixPathSeparator();
219  outputDirectory.mkdir();
220  {
221  //remove old file
222  Dtk_string temp;
223  temp = outputDirectory + L"my_test_part.sldprt";
224  temp.unlink();
225  temp = outputDirectory + L"my_test_part2.sldprt";
226  temp.unlink();
227  temp = outputDirectory + L"my_test_assembly.sldasm";
228  temp.unlink();
229  temp = outputDirectory + L"logwrite.txt";
230  temp.unlink();
231  }
232 
233  Dtk_ErrorStatus dtkerror;
234 
235  Dtk_string StrSchemaPath = inResultDirectory + L"../bin/Schema/";
236 
237 #ifdef PSKERNEL_USER
238  //First if you haven't done yet, start the parasolid session
239  StartParasolid();
240  //And informs that the session is started
242 
243  //Set the schema path
244 #ifndef Linux
245  wchar_t *schPath;
246  schPath = ( wchar_t* )malloc( sizeof( wchar_t ) * ( StrSchemaPath.len() + 10 ) );
247  swprintf( schPath, 255, L"P_SCHEMA=%s", StrSchemaPath.w_str() );
248  _wputenv( schPath );
249 #else
250  char *schPath;
251  schPath = ( char* )malloc( sizeof( char ) * ( StrSchemaPath.len() + 10 ) );
252  sprintf( schPath, "P_SCHEMA=%s", StrSchemaPath.c_str() );
253  putenv( schPath );
254 #endif
255 
256  //dont delete it because getenv doesn't work or retrun null string
257  //free(schPath);
258  //schPath=NULL;
259 #endif
260  if( inDtkAPI != NULL )
261  inDtkAPI->SetSchemaDir( StrSchemaPath );
262  else
263  {
264  return dtkErrorAPINotStarted;
265  }
266 
267  Dtk_string logwrite = inDtkAPI->GetWorkingDir() + L"logwrite.txt";
268  Dtk_string FilenamePart;
269  dtkerror = sw::sww::InitWriter( logwrite, NULL, sw::sww::english );
270 
271  Dtk_string xmtfile = inResultDirectory + L"/xmt/CS_WHEEL_CAP.X_T";
272 
273 
274  if( dtkerror == dtkNoError )
275  {
276  //how to create part file
277  FilenamePart = outputDirectory + L"my_test_part.sldprt";
278  create_part( FilenamePart, xmtfile );
279  }
280 
281 
282  if( dtkerror == dtkNoError )
283  {
284  FilenamePart = outputDirectory + L"my_test_part2.sldprt";
285  create_part( FilenamePart, xmtfile );
286  }
287 
288 
289  if( dtkerror == dtkNoError )
290  {
291  //how to create assembly file
292  Dtk_string FilenameAssm = outputDirectory + L"my_test_assembly.sldasm";
293  create_assembly( FilenameAssm, FilenamePart );
294  }
295 
297 
298 #ifdef PSKERNEL_USER
299  //Stop the parasolid session
301  StopParasolid();
302 #endif
303  cout << "Solidworks Write end" << endl;
304 
305  return dtkerror;
306 }
sampleWriter::CreateAxis
Dtk_BodyPtr CreateAxis()
Definition: testcreatecube.cpp:1555
Dtk_Entity::get_info
Dtk_InfoPtr get_info() const
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
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 .
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 ...
sw::sww::english
@ english
Definition: solidworksw.hpp:25
sw::sww::AddInstanceComponent
Dtk_ErrorStatus AddInstanceComponent(Instance &inInstance)
Add an instance into the Current Assembly (sldasm).
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
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
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 .
Dtk_Entity::info
Dtk_InfoPtr & info()