//////////////////////////////////////////////////////////////////////
// Code Example: Importing data: B-rep method
//
//////////////////////////////////////////////////////////////////////
// This function is passed the step number. This allows for an application to
// produce code with several steps as demonstrated.
// Return 1 if you have finished, 0 if otherwise and -1 to exit.
int CMyCode::RunMyCode(int step)
{
//The code below is sample code. On exiting the function the bodies that
//exist will be drawn
int n_topols = 37;
PK_CLASS_t classes[37] = {
PK_CLASS_body, PK_CLASS_region, PK_CLASS_region, PK_CLASS_shell, PK_CLASS_shell,
PK_CLASS_face, PK_CLASS_face, PK_CLASS_face, PK_CLASS_face, PK_CLASS_face,
PK_CLASS_face, PK_CLASS_loop, PK_CLASS_loop, PK_CLASS_loop, PK_CLASS_loop,
PK_CLASS_loop, PK_CLASS_loop, PK_CLASS_edge, PK_CLASS_edge, PK_CLASS_edge,
PK_CLASS_edge, PK_CLASS_edge, PK_CLASS_edge, PK_CLASS_edge, PK_CLASS_edge,
PK_CLASS_edge, PK_CLASS_edge, PK_CLASS_edge, PK_CLASS_edge, PK_CLASS_vertex,
PK_CLASS_vertex, PK_CLASS_vertex, PK_CLASS_vertex, PK_CLASS_vertex, PK_CLASS_vertex,
PK_CLASS_vertex, PK_CLASS_vertex};
int n_relations = 70;
int parents[70]= {0, 0, 1, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 6, 7, 8, 9, 10, 11, 11, 11, 11,
12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 18, 18,
19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28};
int children[70] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20,
19, 18, 18, 24, 26, 21, 19, 23, 25, 24, 23, 20, 22, 28, 25, 28, 27, 26, 22, 17, 21, 27, 33, 36, 35,
36, 34, 35, 33, 34, 31, 36, 30, 33, 29, 34, 32, 35, 29, 32, 31, 32, 30, 31, 29, 30};
PK_TOPOL_sense_t senses[70] = {
PK_TOPOL_sense_negative_c, PK_TOPOL_sense_positive_c, PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c,
PK_TOPOL_sense_positive_c, PK_TOPOL_sense_positive_c, PK_TOPOL_sense_positive_c, PK_TOPOL_sense_positive_c,
PK_TOPOL_sense_positive_c, PK_TOPOL_sense_positive_c, PK_TOPOL_sense_negative_c, PK_TOPOL_sense_negative_c,
PK_TOPOL_sense_negative_c, PK_TOPOL_sense_negative_c, PK_TOPOL_sense_negative_c, PK_TOPOL_sense_negative_c,
PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c,
PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c, PK_TOPOL_sense_negative_c, PK_TOPOL_sense_positive_c,
PK_TOPOL_sense_positive_c, PK_TOPOL_sense_positive_c, PK_TOPOL_sense_negative_c, PK_TOPOL_sense_negative_c,
PK_TOPOL_sense_negative_c, PK_TOPOL_sense_positive_c, PK_TOPOL_sense_negative_c, PK_TOPOL_sense_negative_c,
PK_TOPOL_sense_positive_c, PK_TOPOL_sense_positive_c, PK_TOPOL_sense_positive_c, PK_TOPOL_sense_negative_c,
PK_TOPOL_sense_negative_c, PK_TOPOL_sense_negative_c, PK_TOPOL_sense_negative_c, PK_TOPOL_sense_positive_c,
PK_TOPOL_sense_positive_c, PK_TOPOL_sense_positive_c, PK_TOPOL_sense_positive_c, PK_TOPOL_sense_positive_c,
PK_TOPOL_sense_negative_c, PK_TOPOL_sense_negative_c, PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c,
PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c,
PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c,
PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c,
PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c,
PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c,
PK_TOPOL_sense_none_c, PK_TOPOL_sense_none_c};
PK_BODY_create_topology_2_o_t options;
PK_BODY_create_topology_2_r_t const_creation;
PK_EDGE_attach_curves_o_t options_attach;
PK_ENTITY_track_r_t tracking;
CString text;
static PK_LOGICAL_t senses_attach[12] = {0};
int finished = 0;
int n_faces = 0;
int n_edges = 0;
int n_vertices = 0;
PK_LOGICAL_t face_senses[6] = {PK_LOGICAL_false};
PK_FACE_t faces[6] = {PK_ENTITY_null};
PK_SURF_t planes[6] = {PK_ENTITY_null};
PK_EDGE_t edges[12] = {PK_ENTITY_null};
PK_CURVE_t curves[12] = {PK_ENTITY_null};
PK_VERTEX_t vertices[8] = {PK_ENTITY_null};
PK_POINT_t points[8] = {PK_ENTITY_null};
switch( step )
{
case 1:
CExampleAppDoc::ExAppSetStatusBarString("Using the boundary representation method to import a block to Parasolid");
// Create topology
PK_BODY_create_topology_2_o_m(options);
PK_BODY_create_topology_2(n_topols, classes, n_relations, parents, children, senses, &options, &const_creation);
if (const_creation.create_faults[0].state == PK_BODY_state_ok_c)
{
// Faces
faces[0] = const_creation.topols[5]; // Topology 5
faces[1] = const_creation.topols[6]; // Topology 6
faces[2] = const_creation.topols[7]; // Topology 7
faces[3] = const_creation.topols[8]; // Topology 8
faces[4] = const_creation.topols[9]; // Topology 9
faces[5] = const_creation.topols[10]; // Topology 10
// Edges
edges[0] = const_creation.topols[17]; // Topology 17
edges[1] = const_creation.topols[18]; // Topology 18
edges[2] = const_creation.topols[19]; // Topology 19
edges[3] = const_creation.topols[20]; // Topology 20
edges[4] = const_creation.topols[21]; // Topology 21
edges[5] = const_creation.topols[22]; // Topology 22
edges[6] = const_creation.topols[23]; // Topology 23
edges[7] = const_creation.topols[24]; // Topology 24
edges[8] = const_creation.topols[25]; // Topology 25
edges[9] = const_creation.topols[26]; // Topology 26
edges[10] = const_creation.topols[27]; // Topology 27
edges[11] = const_creation.topols[28]; // Topology 28
// Vertices
vertices[0] = const_creation.topols[29]; // Topology 29
vertices[1] = const_creation.topols[30]; // Topology 30
vertices[2] = const_creation.topols[31]; // Topology 31
vertices[3] = const_creation.topols[32]; // Topology 32
vertices[4] = const_creation.topols[33]; // Topology 33
vertices[5] = const_creation.topols[34]; // Topology 34
vertices[6] = const_creation.topols[35]; // Topology 35
vertices[7] = const_creation.topols[36]; // Topology 36
CExampleAppDoc::ExAppShowMessage("Created Topology");
}
else
{
CExampleAppDoc::ExAppShowMessage("Failed to Create Topology - stopping");
return -1;
}
// Free the memory associated with the return structure
PK_BODY_create_topology_2_r_f(&const_creation);
// Create Geometry
// Plane 1
PK_PLANE_sf_t plane1_sf;
plane1_sf.basis_set.location.coord[0] = 0.0;
plane1_sf.basis_set.location.coord[1] = 0.0;
plane1_sf.basis_set.location.coord[2] = 3.0;
plane1_sf.basis_set.axis.coord[0] = 0.0;
plane1_sf.basis_set.axis.coord[1] = 0.0;
plane1_sf.basis_set.axis.coord[2] = 1.0;
plane1_sf.basis_set.ref_direction.coord[0] = 1.0;
plane1_sf.basis_set.ref_direction.coord[1] = 0.0;
plane1_sf.basis_set.ref_direction.coord[2] = 0.0;
PK_PLANE_create(&plane1_sf, &planes[0]);
// Plane 2
PK_PLANE_sf_t plane2_sf;
plane2_sf.basis_set.location.coord[0] = 0.0;
plane2_sf.basis_set.location.coord[1] = 5.0;
plane2_sf.basis_set.location.coord[2] = 0.0;
plane2_sf.basis_set.axis.coord[0] = 0.0;
plane2_sf.basis_set.axis.coord[1] = 1.0;
plane2_sf.basis_set.axis.coord[2] = 0.0;
plane2_sf.basis_set.ref_direction.coord[0] = 1.0;
plane2_sf.basis_set.ref_direction.coord[1] = 0.0;
plane2_sf.basis_set.ref_direction.coord[2] = 0.0;
PK_PLANE_create(&plane2_sf, &planes[1]);
// Plane 3
PK_PLANE_sf_t plane3_sf;
plane3_sf.basis_set.location.coord[0] = 2.0;
plane3_sf.basis_set.location.coord[1] = 0.0;
plane3_sf.basis_set.location.coord[2] = 0.0;
plane3_sf.basis_set.axis.coord[0] = 1.0;
plane3_sf.basis_set.axis.coord[1] = 0.0;
plane3_sf.basis_set.axis.coord[2] = 0.0;
plane3_sf.basis_set.ref_direction.coord[0] = 0.0;
plane3_sf.basis_set.ref_direction.coord[1] = 1.0;
plane3_sf.basis_set.ref_direction.coord[2] = 0.0;
PK_PLANE_create(&plane3_sf, &planes[2]);
// Plane 4
PK_PLANE_sf_t plane4_sf;
plane4_sf.basis_set.location.coord[0] = 0.0;
plane4_sf.basis_set.location.coord[1] = 0.0;
plane4_sf.basis_set.location.coord[2] = 0.0;
plane4_sf.basis_set.axis.coord[0] = 0.0;
plane4_sf.basis_set.axis.coord[1] = -1.0;
plane4_sf.basis_set.axis.coord[2] = 0.0;
plane4_sf.basis_set.ref_direction.coord[0] = 1.0;
plane4_sf.basis_set.ref_direction.coord[1] = 0.0;
plane4_sf.basis_set.ref_direction.coord[2] = 0.0;
PK_PLANE_create(&plane4_sf, &planes[3]);
// Plane 5
PK_PLANE_sf_t plane5_sf;
plane5_sf.basis_set.location.coord[0] = 0.0;
plane5_sf.basis_set.location.coord[1] = 0.0;
plane5_sf.basis_set.location.coord[2] = 0.0;
plane5_sf.basis_set.axis.coord[0] = 0.0;
plane5_sf.basis_set.axis.coord[1] = 0.0;
plane5_sf.basis_set.axis.coord[2] = -1.0;
plane5_sf.basis_set.ref_direction.coord[0] = 1.0;
plane5_sf.basis_set.ref_direction.coord[1] = 0.0;
plane5_sf.basis_set.ref_direction.coord[2] = 0.0;
PK_PLANE_create(&plane5_sf, &planes[4]);
// Plane 6
PK_PLANE_sf_t plane6_sf;
plane6_sf.basis_set.location.coord[0] = 0.0;
plane6_sf.basis_set.location.coord[1] = 0.0;
plane6_sf.basis_set.location.coord[2] = 0.0;
plane6_sf.basis_set.axis.coord[0] = -1.0;
plane6_sf.basis_set.axis.coord[1] = 0.0;
plane6_sf.basis_set.axis.coord[2] = 0.0;
plane6_sf.basis_set.ref_direction.coord[0] = 0.0;
plane6_sf.basis_set.ref_direction.coord[1] = 1.0;
plane6_sf.basis_set.ref_direction.coord[2] = 0.0;
PK_PLANE_create(&plane6_sf, &planes[5]);
// Curve 1
PK_LINE_sf_t curve1_sf;
curve1_sf.basis_set.location.coord[0] = 0.0;
curve1_sf.basis_set.location.coord[1] = 0.0;
curve1_sf.basis_set.location.coord[2] = 3.0;
curve1_sf.basis_set.axis.coord[0] = 0.0;
curve1_sf.basis_set.axis.coord[1] = -1.0;
curve1_sf.basis_set.axis.coord[2] = 0.0;
PK_LINE_create(&curve1_sf, &curves[0]);
// Curve 2
PK_LINE_sf_t curve2_sf;
curve2_sf.basis_set.location.coord[0] = 2.0;
curve2_sf.basis_set.location.coord[1] = 5.0;
curve2_sf.basis_set.location.coord[2] = 3.0;
curve2_sf.basis_set.axis.coord[0] = 1.0;
curve2_sf.basis_set.axis.coord[1] = 0.0;
curve2_sf.basis_set.axis.coord[2] = 0.0;
PK_LINE_create(&curve2_sf, &curves[1]);
// Curve 3
PK_LINE_sf_t curve3_sf;
curve3_sf.basis_set.location.coord[0] = 2.0;
curve3_sf.basis_set.location.coord[1] = 0.0;
curve3_sf.basis_set.location.coord[2] = 3.0;
curve3_sf.basis_set.axis.coord[0] = 0.0;
curve3_sf.basis_set.axis.coord[1] = -1.0;
curve3_sf.basis_set.axis.coord[2] = 0.0;
PK_LINE_create(&curve3_sf, &curves[2]);
// Curve 4
PK_LINE_sf_t curve4_sf;
curve4_sf.basis_set.location.coord[0] = 0.0;
curve4_sf.basis_set.location.coord[1] = 0.0;
curve4_sf.basis_set.location.coord[2] = 3.0;
curve4_sf.basis_set.axis.coord[0] = -1.0;
curve4_sf.basis_set.axis.coord[1] = 0.0;
curve4_sf.basis_set.axis.coord[2] = 0.0;
PK_LINE_create(&curve4_sf, &curves[3]);
// Curve 5
PK_LINE_sf_t curve5_sf;
curve5_sf.basis_set.location.coord[0] = 0.0;
curve5_sf.basis_set.location.coord[1] = 5.0;
curve5_sf.basis_set.location.coord[2] = 0.0;
curve5_sf.basis_set.axis.coord[0] = 0.0;
curve5_sf.basis_set.axis.coord[1] = 0.0;
curve5_sf.basis_set.axis.coord[2] = 1.0;
PK_LINE_create(&curve5_sf, &curves[4]);
// Curve 6
PK_LINE_sf_t curve6_sf;
curve6_sf.basis_set.location.coord[0] = 0.0;
curve6_sf.basis_set.location.coord[1] = 0.0;
curve6_sf.basis_set.location.coord[2] = 0.0;
curve6_sf.basis_set.axis.coord[0] = 0.0;
curve6_sf.basis_set.axis.coord[1] = 0.0;
curve6_sf.basis_set.axis.coord[2] = 1.0;
PK_LINE_create(&curve6_sf, &curves[5]);
// Curve 7
PK_LINE_sf_t curve7_sf;
curve7_sf.basis_set.location.coord[0] = 2.0;
curve7_sf.basis_set.location.coord[1] = 0.0;
curve7_sf.basis_set.location.coord[2] = 0.0;
curve7_sf.basis_set.axis.coord[0] = 0.0;
curve7_sf.basis_set.axis.coord[1] = 0.0;
curve7_sf.basis_set.axis.coord[2] = 1.0;
PK_LINE_create(&curve7_sf, &curves[6]);
// Curve 8
PK_LINE_sf_t curve8_sf;
curve8_sf.basis_set.location.coord[0] = 2.0;
curve8_sf.basis_set.location.coord[1] = 5.0;
curve8_sf.basis_set.location.coord[2] = 0.0;
curve8_sf.basis_set.axis.coord[0] = 0.0;
curve8_sf.basis_set.axis.coord[1] = 0.0;
curve8_sf.basis_set.axis.coord[2] = 1.0;
PK_LINE_create(&curve8_sf, &curves[7]);
// Curve 9
PK_LINE_sf_t curve9_sf;
curve9_sf.basis_set.location.coord[0] = 2.0;
curve9_sf.basis_set.location.coord[1] = 0.0;
curve9_sf.basis_set.location.coord[2] = 0.0;
curve9_sf.basis_set.axis.coord[0] = 0.0;
curve9_sf.basis_set.axis.coord[1] = -1.0;
curve9_sf.basis_set.axis.coord[2] = 0.0;
PK_LINE_create(&curve9_sf, &curves[8]);
// Curve 10
PK_LINE_sf_t curve10_sf;
curve10_sf.basis_set.location.coord[0] = 0.0;
curve10_sf.basis_set.location.coord[1] = 5.0;
curve10_sf.basis_set.location.coord[2] = 0.0;
curve10_sf.basis_set.axis.coord[0] = -1.0;
curve10_sf.basis_set.axis.coord[1] = 0.0;
curve10_sf.basis_set.axis.coord[2] = 0.0;
PK_LINE_create(&curve10_sf, &curves[9]);
// Curve 11
PK_LINE_sf_t curve11_sf;
curve11_sf.basis_set.location.coord[0] = 0.0;
curve11_sf.basis_set.location.coord[1] = 0.0;
curve11_sf.basis_set.location.coord[2] = 0.0;
curve11_sf.basis_set.axis.coord[0] = 0.0;
curve11_sf.basis_set.axis.coord[1] = -1.0;
curve11_sf.basis_set.axis.coord[2] = 0.0;
PK_LINE_create(&curve11_sf, &curves[10]);
// Curve 12
PK_LINE_sf_t curve12_sf;
curve12_sf.basis_set.location.coord[0] = 2.0;
curve12_sf.basis_set.location.coord[1] = 0.0;
curve12_sf.basis_set.location.coord[2] = 0.0;
curve12_sf.basis_set.axis.coord[0] = 1.0;
curve12_sf.basis_set.axis.coord[1] = 0.0;
curve12_sf.basis_set.axis.coord[2] = 0.0;
PK_LINE_create(&curve12_sf, &curves[11]);
// Point 1
PK_POINT_sf_t point1_sf;
point1_sf.position.coord[0] = 2.0;
point1_sf.position.coord[1] = 0.0;
point1_sf.position.coord[2] = 0.0;
PK_POINT_create(&point1_sf, &points[0]);
// Point 2
PK_POINT_sf_t point2_sf;
point2_sf.position.coord[0] = 0.0;
point2_sf.position.coord[1] = 0.0;
point2_sf.position.coord[2] = 0.0;
PK_POINT_create(&point2_sf, &points[1]);
// Point 3
PK_POINT_sf_t point3_sf;
point3_sf.position.coord[0] = 0.0;
point3_sf.position.coord[1] = 5.0;
point3_sf.position.coord[2] = 0.0;
PK_POINT_create(&point3_sf, &points[2]);
// Point 4
PK_POINT_sf_t point4_sf;
point4_sf.position.coord[0] = 2.0;
point4_sf.position.coord[1] = 5.0;
point4_sf.position.coord[2] = 0.0;
PK_POINT_create(&point4_sf, &points[3]);
// Point 5
PK_POINT_sf_t point5_sf;
point5_sf.position.coord[0] = 0.0;
point5_sf.position.coord[1] = 0.0;
point5_sf.position.coord[2] = 3.0;
PK_POINT_create(&point5_sf, &points[4]);
// Point 6
PK_POINT_sf_t point6_sf;
point6_sf.position.coord[0] = 2.0;
point6_sf.position.coord[1] = 0.0;
point6_sf.position.coord[2] = 3.0;
PK_POINT_create(&point6_sf, &points[5]);
// Point 7
PK_POINT_sf_t point7_sf;
point7_sf.position.coord[0] = 2.0;
point7_sf.position.coord[1] = 5.0;
point7_sf.position.coord[2] = 3.0;
PK_POINT_create(&point7_sf, &points[6]);
// Point 8
PK_POINT_sf_t point8_sf;
point8_sf.position.coord[0] = 0.0;
point8_sf.position.coord[1] = 5.0;
point8_sf.position.coord[2] = 3.0;
PK_POINT_create(&point8_sf, &points[7]);
CExampleAppDoc::ExAppShowMessage("Created 6 planes, 12 edges and 8 points");
//Attach Geometry
face_senses[0] = PK_LOGICAL_true;
face_senses[1] = PK_LOGICAL_true;
face_senses[2] = PK_LOGICAL_true;
face_senses[3] = PK_LOGICAL_true;
face_senses[4] = PK_LOGICAL_true;
face_senses[5] = PK_LOGICAL_true;
n_faces = 6;
n_edges = 12;
n_vertices = 8;
PK_VERTEX_attach_points(n_vertices, vertices, points);
PK_EDGE_attach_curves_o_m(options_attach);
options_attach.have_senses = PK_LOGICAL_true;
senses_attach[0] = PK_LOGICAL_false;
senses_attach[1] = PK_LOGICAL_false;
senses_attach[2] = PK_LOGICAL_false;
senses_attach[3] = PK_LOGICAL_false;
senses_attach[4] = PK_LOGICAL_true;
senses_attach[5] = PK_LOGICAL_true;
senses_attach[6] = PK_LOGICAL_true;
senses_attach[7] = PK_LOGICAL_true;
senses_attach[8] = PK_LOGICAL_false;
senses_attach[9] = PK_LOGICAL_false;
senses_attach[10] = PK_LOGICAL_false;
senses_attach[11] = PK_LOGICAL_false;
options_attach.senses = senses_attach;
PK_EDGE_attach_curves_2(n_edges, edges, curves, &options_attach, &tracking);
PK_FACE_attach_surfs(n_faces, faces, planes, face_senses);
PK_ENTITY_track_r_f(&tracking);
CExampleAppDoc::ExAppShowMessage("Attached geometry to topology");
// The model is now complete and can now be used for modelling in Parasolid
break;
default:
int n_parts;
PK_PART_t *parts;
PK_SESSION_ask_parts(&n_parts, &parts);
PK_ENTITY_delete(n_parts, parts);
PK_MEMORY_free(parts);
finished = 1;
}
return finished;
}