DATAKIT API  V2025.1
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  solidworksw::FileDescription FileDescription( ArrayMetadata );
158  dtkerror = solidworksw::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  solidworksw::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 = solidworksw::AddInstanceComponent( instance1 );
174 
175 
176  instance_name = L"MyPart2";
177  position.setOrigin( Dtk_pnt( 100, 150, 0 ) );
178  solidworksw::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 = solidworksw::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  solidworksw::Instance instance3(disk_name,instance_name,position,Dtk_RGB(255,0,0,255));
192  dtkerror = solidworksw::AddInstanceComponent(instance3);
193 
194  //instance visibility
195  instance_name = L"MyInvisiblePart2";
196  position.setOrigin(Dtk_pnt(300,350,0));
197  solidworksw::Instance instance4(disk_name,instance_name,position,Dtk_RGB(-1,-1,-1,-1),DTK_TRUE);
198  dtkerror = solidworksw::AddInstanceComponent(instance4);
199 
200  //instance color + visibility
201  instance_name = L"MyColorInvisiblePart2";
202  position.setOrigin(Dtk_pnt(400,450,0));
203  solidworksw::Instance instance5(disk_name,instance_name,position,Dtk_RGB(0,255,0,255),DTK_TRUE);
204  dtkerror = solidworksw::AddInstanceComponent(instance5);*/
205 
206 
207  dtkerror = solidworksw::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  solidworksw::FileDescription FileDescription( ArrayMetadata );
68  dtkerror = solidworksw::OpenPart( inFilename, FileDescription, DTK_UNIT_MM );
69 
70 
72  MyCube1->get_info()->SetName( L"Cube1" );
73  AddColortoFace( 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 
86 
87  //only with pskernel
88  dtkerror = solidworksw::AddParasolidFile( inParasolidFile );
89  //without pskernel you will get an error dtkErrorTypeNotsupported
90 
91 
92  //add mesh
95 
96  //add curves
98  dtkerror = solidworksw::AddEntity( Dtk_EntityPtr::DtkDynamicCast( body_curve ) );
99 
100  //add point
101  Dtk_BodyPtr body_point = sampleWriter::CreatePoint();
102  dtkerror = solidworksw::AddEntity( Dtk_EntityPtr::DtkDynamicCast( body_point ) );
103 
104 
105  //add plan
107  dtkerror = solidworksw::AddEntity( Dtk_EntityPtr::DtkDynamicCast( body_plan ) );
108 
109  //add axis system
111  dtkerror = solidworksw::AddEntity( Dtk_EntityPtr::DtkDynamicCast( myaxissystem ) );
112 
113  //add fdt
115  dtkerror = solidworksw::AddEntity( Dtk_EntityPtr::DtkDynamicCast( myfdt_dim ) );
117  dtkerror = solidworksw::AddEntity( Dtk_EntityPtr::DtkDynamicCast( myfdt_datum ) );
118 
119  //add axis
122 
123  //add esquisse3d
125  dtkerror = solidworksw::AddEntity( Dtk_EntityPtr::DtkDynamicCast( esquisse3d ) );
126 
127  //add esquisse2d
129  dtkerror = solidworksw::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 = solidworksw::AddMetaData( metadata0 );
134  dtkerror = solidworksw::AddMetaData( metadata1 );
135 
136  dtkerror = solidworksw::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 + "dtk/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 = solidworksw::InitWriter( logwrite, NULL, solidworksw::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:1492
Dtk_Entity::get_info
Dtk_InfoPtr get_info() const
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
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
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 ...
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
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_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()