DATAKIT SDK  V2026.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)
 
DtkErrorStatus SwWriteSample (Dtk_API *inDtkAPI, const Dtk_string &inResultDirectory)
 Entry point: writes BRep parts with face colors and a SolidWorks assembly into .sldprt / .sldasm files. More...
 

Function Documentation

◆ AddColortoFace()

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

◆ create_assembly()

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

◆ create_part()

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

◆ SwWriteSample()

DtkErrorStatus SwWriteSample ( Dtk_API *  inDtkAPI,
const Dtk_string &  inResultDirectory 
)

Entry point: writes BRep parts with face colors and a SolidWorks assembly into .sldprt / .sldasm files.

217 {
218  std::cout << std::endl << "----------------------------------------------" << std::endl;
219  std::cout << "Solidworks Write start" << std::endl;
220  // Choosing output directory and file name
221  Dtk_string outputDirectory = inResultDirectory + "Sw/";
222  outputDirectory.FixPathSeparator();
223  outputDirectory.mkdir();
224  {
225  //remove old file
226  Dtk_string temp;
227  temp = outputDirectory + L"my_test_part.sldprt";
228  temp.unlink();
229  temp = outputDirectory + L"my_test_part2.sldprt";
230  temp.unlink();
231  temp = outputDirectory + L"my_test_assembly.sldasm";
232  temp.unlink();
233  temp = outputDirectory + L"logwrite.txt";
234  temp.unlink();
235  }
236 
237  Dtk_ErrorStatus errorStatus;
238 
239  Dtk_string StrSchemaPath = inResultDirectory + L"../bin/Schema/";
240 
241 #ifdef PSKERNEL_USER
242  //First if you haven't done yet, start the parasolid session
243  StartParasolid();
244  //And informs that the session is started
246 
247  //Set the schema path
248 #ifndef Linux
249  wchar_t *schPath;
250  schPath = ( wchar_t* )malloc( sizeof( wchar_t ) * ( StrSchemaPath.len() + 10 ) );
251  swprintf( schPath, 255, L"P_SCHEMA=%s", StrSchemaPath.w_str() );
252  _wputenv( schPath );
253 #else
254  char *schPath;
255  schPath = ( char* )malloc( sizeof( char ) * ( StrSchemaPath.len() + 10 ) );
256  sprintf( schPath, "P_SCHEMA=%s", StrSchemaPath.c_str() );
257  putenv( schPath );
258 #endif
259 
260  //dont delete it because getenv doesn't work or retrun null string
261  //free(schPath);
262  //schPath=NULL;
263 #endif
264  if( inDtkAPI != NULL )
265  inDtkAPI->SetSchemaDir( StrSchemaPath );
266  else
267  {
268  return dtkErrorAPINotStarted;
269  }
270 
271  Dtk_string logwrite = inDtkAPI->GetWorkingDir() + L"logwrite.txt";
272  Dtk_string FilenamePart;
273  errorStatus = sw::sww::InitWriter( logwrite, NULL, sw::sww::english );
274 
275  Dtk_string xmtfile = inResultDirectory + L"/xmt/CS_WHEEL_CAP.X_T";
276 
277 
278  if( errorStatus == dtkNoError )
279  {
280  //how to create part file
281  FilenamePart = outputDirectory + L"my_test_part.sldprt";
282  create_part( FilenamePart, xmtfile );
283  }
284 
285 
286  if( errorStatus == dtkNoError )
287  {
288  FilenamePart = outputDirectory + L"my_test_part2.sldprt";
289  create_part( FilenamePart, xmtfile );
290  }
291 
292 
293  if( errorStatus == dtkNoError )
294  {
295  //how to create assembly file
296  Dtk_string FilenameAssm = outputDirectory + L"my_test_assembly.sldasm";
297  create_assembly( FilenameAssm, FilenamePart );
298  }
299 
301 
302 #ifdef PSKERNEL_USER
303  //Stop the parasolid session
305  StopParasolid();
306 #endif
307  std::cout << "Solidworks Write end" << std::endl;
308 
309  return errorStatus;
310 }
sampleWriter::CreateAxis
Dtk_BodyPtr CreateAxis()
Creates a reference body (infinite + reference flags) containing a single named axis line with metada...
Definition: testcreatecube.cpp:1568
Dtk_Info::Create
static Dtk_SmartPtr< Dtk_Info > Create()
Calls default constructor to allocate a new object.
Dtk_Entity::get_info
Dtk_InfoPtr get_info() const
Dtk_ID
uint32_t Dtk_ID
Definition: define.h:688
Dtk_transfo
This is the Transformation dedicated class.
Definition: dtk_transfo.hpp:19
DTK_TYPE_UNKNOWN
@ DTK_TYPE_UNKNOWN
Definition: define.h:26
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:147
sampleWriter::CreateInfinitePlane
Dtk_BodyPtr CreateInfinitePlane()
Creates a reference body flagged as an infinite plane (InfiniteGeometryFlag + RefEntityFlag),...
Definition: testcreatecube.cpp:1511
Dtk_string
This is a high level string class.
Definition: dtk_string.hpp:53
create_part
void create_part(const Dtk_string &inFilename, const Dtk_string &inParasolidFile)
Definition: testlibswwrite.cpp:59
Dtk_string::unlink
int unlink() const
File Utility : Delete a file.
DTK_UNIT_MM
@ DTK_UNIT_MM
Definition: util_draw_dtk.hpp:78
sampleWriter::CreateAxisSystem
Dtk_AxisSystemPtr CreateAxisSystem()
Creates a named axis system with a custom orientation matrix, red color, layer 123,...
Definition: testcreatecube.cpp:1541
Dtk_API::GetWorkingDir
const Dtk_string & GetWorkingDir() const
dtkErrorAPINotStarted
@ dtkErrorAPINotStarted
Definition: error_dtk.hpp:109
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()
Creates a wireframe body containing a single named red point with metadata.
Definition: testcreatecube.cpp:1483
sw::sww::AddParasolidFile
Dtk_ErrorStatus AddParasolidFile(const Dtk_string &inParasolidFile)
Add parasolid file.
sampleWriter::CreateEsquisse2D
Dtk_BodyPtr CreateEsquisse2D()
Creates a 2D wireframe sketch body (planar, lying in the XY plane) containing lines,...
Definition: testcreatecube.cpp:1699
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:14
Dtk_Int32
int32_t Dtk_Int32
Definition: define.h:686
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:29
sw::sww::EndWriter
Dtk_ErrorStatus EndWriter()
Free the Solidworks Writer
Dtk_SmartPtr< Dtk_Face >::DtkDynamicCast
static Dtk_SmartPtr< Dtk_Face > 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()
Creates a 3D wireframe sketch body containing points, lines, NURBS splines, circles,...
Definition: testcreatecube.cpp:1599
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:338
Dtk_string::mkdir
int mkdir() const
File Utility : Create a Directory.
Dtk_pnt
This is a mathematical point class.
Definition: dtk_pnt.hpp:20
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:84
sampleWriter::CreateCube
Dtk_BodyPtr CreateCube()
Creates a 100x100x100 mm closed BRep cube body. Builds the full BRep hierarchy (Vertex,...
Definition: testcreatecube.cpp:1325
Dtk_string::len
int len() const
Retrieve the length of the Dtk_string.
sampleWriter::CreateCurves
Dtk_BodyPtr CreateCurves()
Creates a wireframe body containing a circle, ellipse, line, and NURBS curve, each with a distinct co...
Definition: testcreatecube.cpp:1368
sampleWriter::CreateDimension
Dtk_FdtPtr CreateDimension()
Creates a linear dimension FDT with a leader, dual-value text, and a frame.
Definition: testcreatefdt.cpp:112
dtkNoError
@ dtkNoError
Definition: error_dtk.hpp:151
Dtk_tab::push_back
void push_back(const T &x)
Inserts an element at the end of the array.
Definition: util_stl_dtk.hpp:416
Dtk_tab::clear
void clear(int no_delete=0)
Resets the Dtk_tab content.
Definition: util_stl_dtk.hpp:352
Dtk_RGB
Definition: dtk_rgb.hpp:8
Dtk_Info::SetColor
Dtk_ErrorStatus SetColor(const int &R, const int &G, const int &B)
AddColortoFace
void AddColortoFace(const Dtk_BodyPtr &inBody)
Definition: testlibswwrite.cpp:28
Dtk_dir
This is a mathematical direction class.
Definition: dtk_dir.hpp:14
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()