]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Fixed read IGES and STEP. 1979/head
authorLuca Heltai <luca.heltai@sissa.it>
Sun, 13 Dec 2015 16:51:26 +0000 (17:51 +0100)
committerLuca Heltai <luca.heltai@sissa.it>
Sun, 13 Dec 2015 16:54:50 +0000 (17:54 +0100)
doc/news/changes.h
source/opencascade/utilities.cc
tests/opencascade/arclength_boundary_from_iges_01.cc [new file with mode: 0644]
tests/opencascade/arclength_boundary_from_iges_01.output [new file with mode: 0644]
tests/opencascade/arclength_boundary_from_step_01.cc [new file with mode: 0644]
tests/opencascade/arclength_boundary_from_step_01.output [new file with mode: 0644]
tests/opencascade/iges_files/line_03.iges [new file with mode: 0644]
tests/opencascade/step_describe_02.output
tests/opencascade/step_files/line_03.step [new file with mode: 0644]
tests/opencascade/step_write.cc
tests/opencascade/step_write.output

index d002d4e72774b9b2edc67747eb44b8e1898f6d56..ceeaa7988f4858e9cf0623bdc9cb84b28a344431 100644 (file)
@@ -183,6 +183,15 @@ inconvenience this causes.
 <a name="general"></a>
 <h3>General</h3>
 <ol>
+  <li> New: OpenCASCADE::read_IGES() and OpenCASCADE::read_STEP() have
+  been unified in behaviour, and now they allow to extract *all* elements of 
+  the IGES and STEP files instead of only the faces. This allows the 
+  use of iges files describing edges only to be used as input for some of 
+  the OpenCASCADE Manifold wrappers.
+  <br>
+  (Luca Heltai, 2015/12/13)
+  </li>
+
   <li> New: There is now a function Utilities::to_string that works like
   int_to_string, but is more safe for long integers, negative integers, and
   also handles floating point numbers. The implementation of int_to_string
index 37d4fdfde5175ab68f09c41463cad9c37dceeaa1..c170b97a3ddba8430284890ad93a05f0e8320944 100644 (file)
@@ -191,13 +191,11 @@ namespace OpenCASCADE
     IFSelect_PrintCount mode = IFSelect_ItemsByEntity;
     reader.PrintCheckLoad (failsonly, mode);
 
-    Handle(TColStd_HSequenceOfTransient) myList = reader.GiveList("iges-faces");
-    //selects all IGES faces in the
-    //file and puts them into a list
-    //called MyList,
-    Standard_Integer nTransFaces = reader.TransferList(myList);
+    Standard_Integer nRoots = reader.TransferRoots();
+    //selects all IGES entities (including non visible ones) in the
+    //file and puts them into a list called MyList,
 
-    AssertThrow(nTransFaces > 0,
+    AssertThrow(nRoots > 0,
                 ExcMessage("Read nothing from file."));
 
     // Handle IGES Scale here.
@@ -236,16 +234,14 @@ namespace OpenCASCADE
     IFSelect_PrintCount mode = IFSelect_ItemsByEntity;
     reader.PrintCheckLoad (failsonly, mode);
 
-    Handle(TColStd_HSequenceOfTransient) myList = reader.GiveList("step-faces");
-    //selects all IGES faces in the
-    //file and puts them into a list
-    //called MyList,
-    Standard_Integer nTransFaces = reader.TransferList(myList);
+    Standard_Integer nRoots = reader.TransferRoots();
+    //selects all IGES entities (including non visible ones) in the
+    //file and puts them into a list called MyList,
 
-    AssertThrow(nTransFaces > 0,
+    AssertThrow(nRoots > 0,
                 ExcMessage("Read nothing from file."));
 
-    // Handle IGES Scale here.
+    // Handle STEP Scale here.
     gp_Pnt Origin;
     gp_Trsf scale;
     scale.SetScale (Origin, scale_factor);
diff --git a/tests/opencascade/arclength_boundary_from_iges_01.cc b/tests/opencascade/arclength_boundary_from_iges_01.cc
new file mode 100644 (file)
index 0000000..a9b7f53
--- /dev/null
@@ -0,0 +1,51 @@
+//-----------------------------------------------------------
+//
+//    Copyright (C) 2014 - 2015 by the deal.II authors
+//
+//    This file is subject to LGPL and may not be distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//-----------------------------------------------------------
+
+#include "../tests.h"
+#include <fstream>
+#include <deal.II/base/logstream.h>
+
+#include <deal.II/opencascade/utilities.h>
+#include <deal.II/opencascade/boundary_lib.h>
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/grid_out.h>
+#include <deal.II/grid/grid_generator.h>
+
+#include <TopTools.hxx>
+#include <TopoDS_Shape.hxx>
+#include <Standard_Stream.hxx>
+
+// Create a Triangulation, interpolate its boundary points to a smooth
+// BSpline, and use that as an arlength Boundary Descriptor.
+
+using namespace OpenCASCADE;
+
+int main ()
+{
+  std::ofstream logfile("output");
+
+  TopoDS_Shape new_edge = read_IGES(SOURCE_DIR"/iges_files/line_03.iges", 1.0);
+
+  ArclengthProjectionLineManifold<1,3> manifold(new_edge);
+
+  Triangulation<1,3> tria;
+  GridGenerator::hyper_cube(tria);
+
+  tria.begin_active()->set_all_manifold_ids(1);
+  tria.set_manifold(1, manifold);
+
+  tria.refine_global(4);
+  GridOut gridout;
+  gridout.write_msh(tria, logfile);
+
+  return 0;
+}
+
diff --git a/tests/opencascade/arclength_boundary_from_iges_01.output b/tests/opencascade/arclength_boundary_from_iges_01.output
new file mode 100644 (file)
index 0000000..94fa0fe
--- /dev/null
@@ -0,0 +1,39 @@
+$NOD
+17
+1  0 0 0
+2  1 0 0
+3  0.5 1.125 0
+4  -0.213053 0.770812 0
+5  1.21305 0.770812 0
+6  -0.209733 0.361552 0
+7  0.090632 1.04613 0
+8  0.909368 1.04613 0
+9  1.20973 0.361552 0
+10  -0.118931 0.172725 0
+11  -0.251438 0.566341 0
+12  -0.0875601 0.936891 0
+13  0.291313 1.106 0
+14  0.708687 1.106 0
+15  1.08756 0.936891 0
+16  1.25144 0.566341 0
+17  1.11893 0.172725 0
+$ENDNOD
+$ELM
+16
+1 1 0 0 2 1 10 
+2 1 0 0 2 10 6 
+3 1 0 0 2 6 11 
+4 1 0 0 2 11 4 
+5 1 0 0 2 4 12 
+6 1 0 0 2 12 7 
+7 1 0 0 2 7 13 
+8 1 0 0 2 13 3 
+9 1 0 0 2 3 14 
+10 1 0 0 2 14 8 
+11 1 0 0 2 8 15 
+12 1 0 0 2 15 5 
+13 1 0 0 2 5 16 
+14 1 0 0 2 16 9 
+15 1 0 0 2 9 17 
+16 1 0 0 2 17 2 
+$ENDELM
diff --git a/tests/opencascade/arclength_boundary_from_step_01.cc b/tests/opencascade/arclength_boundary_from_step_01.cc
new file mode 100644 (file)
index 0000000..04aefcc
--- /dev/null
@@ -0,0 +1,58 @@
+//-----------------------------------------------------------
+//
+//    Copyright (C) 2014 - 2015 by the deal.II authors
+//
+//    This file is subject to LGPL and may not be distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//-----------------------------------------------------------
+
+#include "../tests.h"
+#include <fstream>
+#include <deal.II/base/logstream.h>
+
+#include <deal.II/opencascade/utilities.h>
+#include <deal.II/opencascade/boundary_lib.h>
+#include <deal.II/grid/tria.h>
+#include <deal.II/grid/grid_out.h>
+#include <deal.II/grid/grid_generator.h>
+
+#include <TopTools.hxx>
+#include <TopoDS_Shape.hxx>
+#include <Standard_Stream.hxx>
+
+// Create a Triangulation, interpolate its boundary points to a smooth
+// BSpline, and use that as an arlength Boundary Descriptor.
+
+using namespace OpenCASCADE;
+
+int main ()
+{
+  std::ofstream logfile("output");
+
+  TopoDS_Shape new_edge = read_STEP(SOURCE_DIR"/step_files/line_03.step", 1.0);
+
+  std::vector<TopoDS_Face> faces;
+  std::vector<TopoDS_Edge> edges;
+  std::vector<TopoDS_Vertex> vertices;
+
+  extract_geometrical_shapes(new_edge, faces, edges, vertices);
+  AssertDimension(edges.size(), 1);
+
+  ArclengthProjectionLineManifold<1,3> manifold(edges[0]);
+
+  Triangulation<1,3> tria;
+  GridGenerator::hyper_cube(tria);
+
+  tria.begin_active()->set_all_manifold_ids(1);
+  tria.set_manifold(1, manifold);
+
+  tria.refine_global(4);
+  GridOut gridout;
+  gridout.write_msh(tria, logfile);
+
+  return 0;
+}
+
diff --git a/tests/opencascade/arclength_boundary_from_step_01.output b/tests/opencascade/arclength_boundary_from_step_01.output
new file mode 100644 (file)
index 0000000..94fa0fe
--- /dev/null
@@ -0,0 +1,39 @@
+$NOD
+17
+1  0 0 0
+2  1 0 0
+3  0.5 1.125 0
+4  -0.213053 0.770812 0
+5  1.21305 0.770812 0
+6  -0.209733 0.361552 0
+7  0.090632 1.04613 0
+8  0.909368 1.04613 0
+9  1.20973 0.361552 0
+10  -0.118931 0.172725 0
+11  -0.251438 0.566341 0
+12  -0.0875601 0.936891 0
+13  0.291313 1.106 0
+14  0.708687 1.106 0
+15  1.08756 0.936891 0
+16  1.25144 0.566341 0
+17  1.11893 0.172725 0
+$ENDNOD
+$ELM
+16
+1 1 0 0 2 1 10 
+2 1 0 0 2 10 6 
+3 1 0 0 2 6 11 
+4 1 0 0 2 11 4 
+5 1 0 0 2 4 12 
+6 1 0 0 2 12 7 
+7 1 0 0 2 7 13 
+8 1 0 0 2 13 3 
+9 1 0 0 2 3 14 
+10 1 0 0 2 14 8 
+11 1 0 0 2 8 15 
+12 1 0 0 2 15 5 
+13 1 0 0 2 5 16 
+14 1 0 0 2 16 9 
+15 1 0 0 2 9 17 
+16 1 0 0 2 17 2 
+$ENDELM
diff --git a/tests/opencascade/iges_files/line_03.iges b/tests/opencascade/iges_files/line_03.iges
new file mode 100644 (file)
index 0000000..9433c32
--- /dev/null
@@ -0,0 +1,12 @@
+                                                                        S0000001
+,,31HOpen CASCADE IGES processor 6.7,13HFilename.iges,                  G0000001
+16HOpen CASCADE 6.7,31HOpen CASCADE IGES processor 6.7,32,308,15,308,15,G0000002
+,1.,2,2HMM,1,0.01,15H20151213.130947,1E-07,1.309333,6Hheltai,,11,0,     G0000003
+15H20151213.130947,;                                                    G0000004
+     126       1       0       0       0       0       0       000000000D0000001
+     126       0       0       4       0                               0D0000002
+126,5,3,1,0,1,0,0.,0.,0.,0.,1.,2.,3.,3.,3.,3.,1.,1.,1.,1.,1.,1., 0000001P0000001
+0.,0.,0.,-0.388888889,0.5,0.,-0.166666667,1.166666667,0.,        0000001P0000002
+1.166666667,1.166666667,0.,1.388888889,0.5,-0.,1.,0.,0.,0.,3.,   0000001P0000003
+-0.,-0.,1.;                                                      0000001P0000004
+S      1G      4D      2P      4                                        T0000001
index b760f0d2159b0cd9fcd996ed3c1ba70bd1ede756..77ef3d2b53ecc54235c3fa2d8bab571466987a82 100644 (file)
@@ -1,2 +1,2 @@
 
-DEAL::Shape contains 1 compounds, 0 compound solids, 0 solids, 0 shells, 3 wires.
+DEAL::Shape contains 1 compounds, 0 compound solids, 0 solids, 3 shells, 3 wires.
diff --git a/tests/opencascade/step_files/line_03.step b/tests/opencascade/step_files/line_03.step
new file mode 100644 (file)
index 0000000..909c928
--- /dev/null
@@ -0,0 +1,52 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION(('Open CASCADE Model'),'2;1');
+FILE_NAME('Open CASCADE Shape Model','2015-12-13T13:42:38',('Author'),(
+    'Open CASCADE'),'Open CASCADE STEP processor 6.7','Open CASCADE 6.7'
+  ,'Unknown');
+FILE_SCHEMA(('AUTOMOTIVE_DESIGN_CC2 { 1 2 10303 214 -1 1 5 4 }'));
+ENDSEC;
+DATA;
+#1 = APPLICATION_PROTOCOL_DEFINITION('committee draft',
+  'automotive_design',1997,#2);
+#2 = APPLICATION_CONTEXT(
+  'core data for automotive mechanical design processes');
+#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10);
+#4 = PRODUCT_DEFINITION_SHAPE('','',#5);
+#5 = PRODUCT_DEFINITION('design','',#6,#9);
+#6 = PRODUCT_DEFINITION_FORMATION('','',#7);
+#7 = PRODUCT('Open CASCADE STEP translator 6.7 1',
+  'Open CASCADE STEP translator 6.7 1','',(#8));
+#8 = MECHANICAL_CONTEXT('',#2,'mechanical');
+#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
+#10 = GEOMETRICALLY_BOUNDED_WIREFRAME_SHAPE_REPRESENTATION('',(#11,#15),
+  #26);
+#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);
+#12 = CARTESIAN_POINT('',(0.,0.,0.));
+#13 = DIRECTION('',(0.,0.,1.));
+#14 = DIRECTION('',(1.,0.,-0.));
+#15 = GEOMETRIC_CURVE_SET('',(#16));
+#16 = TRIMMED_CURVE('',#17,(#24,PARAMETER_VALUE(0.)),(#25,
+    PARAMETER_VALUE(3.)),.T.,.PARAMETER.);
+#17 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#18,#19,#20,#21,#22,#23),
+  .UNSPECIFIED.,.F.,.F.,(4,1,1,4),(0.,1.,2.,3.),.QUASI_UNIFORM_KNOTS.);
+#18 = CARTESIAN_POINT('',(0.,0.,0.));
+#19 = CARTESIAN_POINT('',(-0.388888888889,0.5,0.));
+#20 = CARTESIAN_POINT('',(-0.166666666667,1.166666666667,0.));
+#21 = CARTESIAN_POINT('',(1.166666666667,1.166666666667,0.));
+#22 = CARTESIAN_POINT('',(1.388888888889,0.5,-0.));
+#23 = CARTESIAN_POINT('',(1.,0.,0.));
+#24 = CARTESIAN_POINT('',(0.,0.,0.));
+#25 = CARTESIAN_POINT('',(1.,0.,0.));
+#26 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
+GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#30)) GLOBAL_UNIT_ASSIGNED_CONTEXT(
+(#27,#28,#29)) REPRESENTATION_CONTEXT('Context #1',
+  '3D Context with UNIT and UNCERTAINTY') );
+#27 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
+#28 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
+#29 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
+#30 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#27,
+  'distance_accuracy_value','confusion accuracy');
+#31 = PRODUCT_TYPE('part',$,(#7));
+ENDSEC;
+END-ISO-10303-21;
index b8fb7ee8f1dd9952f22a32073564459f31836a90..d08fa0b50ddb0a6f6bbf6b020a9160ef32d80931 100644 (file)
@@ -25,7 +25,7 @@ using namespace OpenCASCADE;
 
 int main ()
 {
-  TopoDS_Shape sh = read_STEP(SOURCE_DIR "/step_files/wigley.step");
+  TopoDS_Shape sh = read_STEP(SOURCE_DIR "/step_files/wigley.step", 1.0);
   write_STEP(sh, "tmp.step");
   std::ifstream in("tmp.step");
   std::ofstream out("output");
index 4139e071849e7a1bd2ad32ca044fe0dc65bfb9a1..7642cae68f3715b05b04c4c919f29b58ea4f89dc 100644 (file)
@@ -14,7 +14,7 @@ DATA;
 #6 = PRODUCT_DEFINITION_FORMATION('','',#7);
 #8 = MECHANICAL_CONTEXT('',#2,'mechanical');
 #9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
-#10 = MANIFOLD_SURFACE_SHAPE_REPRESENTATION('',(#11,#15),#143);
+#10 = MANIFOLD_SURFACE_SHAPE_REPRESENTATION('',(#11,#15),#147);
 #11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);
 #12 = CARTESIAN_POINT('',(0.,0.,0.));
 #13 = DIRECTION('',(0.,0.,1.));
@@ -23,28 +23,28 @@ DATA;
 #16 = OPEN_SHELL('',(#17));
 #17 = ADVANCED_FACE('',(#18),#40,.T.);
 #18 = FACE_BOUND('',#19,.T.);
-#19 = EDGE_LOOP('',(#20,#90,#106,#129));
+#19 = EDGE_LOOP('',(#20,#91,#108,#132));
 #20 = ORIENTED_EDGE('',*,*,#21,.F.);
 #21 = EDGE_CURVE('',#22,#24,#26,.T.);
 #22 = VERTEX_POINT('',#23);
-#23 = CARTESIAN_POINT('',(-1.25E-03,0.,1.5625E-04));
+#23 = CARTESIAN_POINT('',(-1.25E+03,0.,156.25));
 #24 = VERTEX_POINT('',#25);
-#25 = CARTESIAN_POINT('',(-1.25E-03,6.938893904E-21,-1.5625E-04));
+#25 = CARTESIAN_POINT('',(-1.25E+03,6.938893904E-15,-156.25));
 #26 = SURFACE_CURVE('',#27,(#39),.PCURVE_S1.);
 #27 = B_SPLINE_CURVE_WITH_KNOTS('',4,(#28,#29,#30,#31,#32,#33,#34,#35,
     #36,#37,#38),.UNSPECIFIED.,.F.,.F.,(5,3,3,5),(0.,0.434398431,
     0.67839972,1.),.UNSPECIFIED.);
-#28 = CARTESIAN_POINT('',(-1.25E-03,0.,1.5625E-04));
-#29 = CARTESIAN_POINT('',(-1.25E-03,0.,1.171875E-04));
-#30 = CARTESIAN_POINT('',(-1.25E-03,0.,7.8125E-05));
-#31 = CARTESIAN_POINT('',(-1.25E-03,0.,3.90625E-05));
-#32 = CARTESIAN_POINT('',(-1.25E-03,0.,-2.194137841E-05));
-#33 = CARTESIAN_POINT('',(-1.25E-03,0.,-4.186850308E-05));
-#34 = CARTESIAN_POINT('',(-1.25E-03,0.,-6.051483061E-05));
-#35 = CARTESIAN_POINT('',(-1.25E-03,0.,-1.01335678E-04));
-#36 = CARTESIAN_POINT('',(-1.25E-03,0.,-1.21016618E-04));
-#37 = CARTESIAN_POINT('',(-1.25E-03,0.,-1.39275692E-04));
-#38 = CARTESIAN_POINT('',(-1.25E-03,0.,-1.5625E-04));
+#28 = CARTESIAN_POINT('',(-1.25E+03,0.,156.25));
+#29 = CARTESIAN_POINT('',(-1.25E+03,0.,117.1875));
+#30 = CARTESIAN_POINT('',(-1.25E+03,0.,78.125));
+#31 = CARTESIAN_POINT('',(-1.25E+03,0.,39.0625));
+#32 = CARTESIAN_POINT('',(-1.25E+03,0.,-21.94137841));
+#33 = CARTESIAN_POINT('',(-1.25E+03,0.,-41.86850308));
+#34 = CARTESIAN_POINT('',(-1.25E+03,0.,-60.51483061));
+#35 = CARTESIAN_POINT('',(-1.25E+03,0.,-101.335678));
+#36 = CARTESIAN_POINT('',(-1.25E+03,0.,-121.016618));
+#37 = CARTESIAN_POINT('',(-1.25E+03,0.,-139.275692));
+#38 = CARTESIAN_POINT('',(-1.25E+03,0.,-156.25));
 #39 = PCURVE('',#40,#85);
 #40 = B_SPLINE_SURFACE_WITH_KNOTS('',3,4,(
     (#41,#42,#43,#44,#45,#46,#47,#48,#49,#50,#51)
@@ -53,145 +53,133 @@ DATA;
     ,(#74,#75,#76,#77,#78,#79,#80,#81,#82,#83,#84
   )),.UNSPECIFIED.,.F.,.F.,.F.,(4,4),(5,3,3,5),(0.,1.),(0.,0.434398431,
     0.67839972,1.),.UNSPECIFIED.);
-#41 = CARTESIAN_POINT('',(-1.25E-03,0.,1.5625E-04));
-#42 = CARTESIAN_POINT('',(-1.25E-03,0.,1.171875E-04));
-#43 = CARTESIAN_POINT('',(-1.25E-03,0.,7.8125E-05));
-#44 = CARTESIAN_POINT('',(-1.25E-03,0.,3.90625E-05));
-#45 = CARTESIAN_POINT('',(-1.25E-03,0.,-2.194137841E-05));
-#46 = CARTESIAN_POINT('',(-1.25E-03,0.,-4.186850308E-05));
-#47 = CARTESIAN_POINT('',(-1.25E-03,0.,-6.051483061E-05));
-#48 = CARTESIAN_POINT('',(-1.25E-03,0.,-1.01335678E-04));
-#49 = CARTESIAN_POINT('',(-1.25E-03,0.,-1.21016618E-04));
-#50 = CARTESIAN_POINT('',(-1.25E-03,0.,-1.39275692E-04));
-#51 = CARTESIAN_POINT('',(-1.25E-03,0.,-1.5625E-04));
-#52 = CARTESIAN_POINT('',(-4.27535926E-04,1.66356581E-04,1.5625E-04));
-#53 = CARTESIAN_POINT('',(-4.27535926E-04,1.66356581E-04,1.171875E-04));
-#54 = CARTESIAN_POINT('',(-4.27535926E-04,1.66356581E-04,7.8125E-05));
-#55 = CARTESIAN_POINT('',(-4.27535926E-04,1.66356581E-04,3.90625E-05));
-#56 = CARTESIAN_POINT('',(-4.27537148E-04,1.66340839E-04,
-    -2.194137841E-05));
-#57 = CARTESIAN_POINT('',(-4.26411306E-04,1.57707663E-04,
-    -4.186850308E-05));
-#58 = CARTESIAN_POINT('',(-4.24671145E-04,1.4360916E-04,-6.051483061E-05
-    ));
-#59 = CARTESIAN_POINT('',(-4.20417595E-04,1.00130616E-04,-1.01335678E-04
-    ));
-#60 = CARTESIAN_POINT('',(-4.18058171E-04,6.969502649E-05,
-    -1.21016618E-04));
-#61 = CARTESIAN_POINT('',(-4.16669646E-04,3.62728606E-05,-1.39275692E-04
-    ));
-#62 = CARTESIAN_POINT('',(-4.16666667E-04,0.,-1.5625E-04));
-#63 = CARTESIAN_POINT('',(4.27535926E-04,1.66356581E-04,1.5625E-04));
-#64 = CARTESIAN_POINT('',(4.27535926E-04,1.66356581E-04,1.171875E-04));
-#65 = CARTESIAN_POINT('',(4.27535926E-04,1.66356581E-04,7.8125E-05));
-#66 = CARTESIAN_POINT('',(4.27535926E-04,1.66356581E-04,3.90625E-05));
-#67 = CARTESIAN_POINT('',(4.27537148E-04,1.66340839E-04,-2.194137841E-05
-    ));
-#68 = CARTESIAN_POINT('',(4.26411306E-04,1.57707663E-04,-4.186850308E-05
-    ));
-#69 = CARTESIAN_POINT('',(4.24671145E-04,1.4360916E-04,-6.051483061E-05)
-  );
-#70 = CARTESIAN_POINT('',(4.20417595E-04,1.00130616E-04,-1.01335678E-04)
-  );
-#71 = CARTESIAN_POINT('',(4.18058171E-04,6.969502649E-05,-1.21016618E-04
-    ));
-#72 = CARTESIAN_POINT('',(4.16669646E-04,3.62728606E-05,-1.39275692E-04)
-  );
-#73 = CARTESIAN_POINT('',(4.16666667E-04,0.,-1.5625E-04));
-#74 = CARTESIAN_POINT('',(1.25E-03,-3.885780586E-19,1.5625E-04));
-#75 = CARTESIAN_POINT('',(1.25E-03,-3.885780586E-19,1.171875E-04));
-#76 = CARTESIAN_POINT('',(1.25E-03,-3.885780586E-19,7.8125E-05));
-#77 = CARTESIAN_POINT('',(1.25E-03,-3.885780586E-19,3.90625E-05));
-#78 = CARTESIAN_POINT('',(1.25E-03,-3.885524483E-19,-2.194137841E-05));
-#79 = CARTESIAN_POINT('',(1.25E-03,-3.683109958E-19,-4.186850308E-05));
-#80 = CARTESIAN_POINT('',(1.25E-03,-3.352606389E-19,-6.051483061E-05));
-#81 = CARTESIAN_POINT('',(1.25E-03,-2.335884101E-19,-1.01335678E-04));
-#82 = CARTESIAN_POINT('',(1.25E-03,-1.624730779E-19,-1.21016618E-04));
-#83 = CARTESIAN_POINT('',(1.25E-03,-8.457292169E-20,-1.39275692E-04));
-#84 = CARTESIAN_POINT('',(1.25E-03,0.,-1.5625E-04));
-#85 = DEFINITIONAL_REPRESENTATION('',(#86),#89);
-#86 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#87,#88),.UNSPECIFIED.,.F.,.F.,(2,
-    2),(0.,1.),.PIECEWISE_BEZIER_KNOTS.);
+#41 = CARTESIAN_POINT('',(-1.25E+03,0.,156.25));
+#42 = CARTESIAN_POINT('',(-1.25E+03,0.,117.1875));
+#43 = CARTESIAN_POINT('',(-1.25E+03,0.,78.125));
+#44 = CARTESIAN_POINT('',(-1.25E+03,0.,39.0625));
+#45 = CARTESIAN_POINT('',(-1.25E+03,0.,-21.94137841));
+#46 = CARTESIAN_POINT('',(-1.25E+03,0.,-41.86850308));
+#47 = CARTESIAN_POINT('',(-1.25E+03,0.,-60.51483061));
+#48 = CARTESIAN_POINT('',(-1.25E+03,0.,-101.335678));
+#49 = CARTESIAN_POINT('',(-1.25E+03,0.,-121.016618));
+#50 = CARTESIAN_POINT('',(-1.25E+03,0.,-139.275692));
+#51 = CARTESIAN_POINT('',(-1.25E+03,0.,-156.25));
+#52 = CARTESIAN_POINT('',(-427.535926,166.356581,156.25));
+#53 = CARTESIAN_POINT('',(-427.535926,166.356581,117.1875));
+#54 = CARTESIAN_POINT('',(-427.535926,166.356581,78.125));
+#55 = CARTESIAN_POINT('',(-427.535926,166.356581,39.0625));
+#56 = CARTESIAN_POINT('',(-427.537148,166.340839,-21.94137841));
+#57 = CARTESIAN_POINT('',(-426.411306,157.707663,-41.86850308));
+#58 = CARTESIAN_POINT('',(-424.671145,143.60916,-60.51483061));
+#59 = CARTESIAN_POINT('',(-420.417595,100.130616,-101.335678));
+#60 = CARTESIAN_POINT('',(-418.058171,69.69502649,-121.016618));
+#61 = CARTESIAN_POINT('',(-416.669646,36.2728606,-139.275692));
+#62 = CARTESIAN_POINT('',(-416.666667,0.,-156.25));
+#63 = CARTESIAN_POINT('',(427.535926,166.356581,156.25));
+#64 = CARTESIAN_POINT('',(427.535926,166.356581,117.1875));
+#65 = CARTESIAN_POINT('',(427.535926,166.356581,78.125));
+#66 = CARTESIAN_POINT('',(427.535926,166.356581,39.0625));
+#67 = CARTESIAN_POINT('',(427.537148,166.340839,-21.94137841));
+#68 = CARTESIAN_POINT('',(426.411306,157.707663,-41.86850308));
+#69 = CARTESIAN_POINT('',(424.671145,143.60916,-60.51483061));
+#70 = CARTESIAN_POINT('',(420.417595,100.130616,-101.335678));
+#71 = CARTESIAN_POINT('',(418.058171,69.69502649,-121.016618));
+#72 = CARTESIAN_POINT('',(416.669646,36.2728606,-139.275692));
+#73 = CARTESIAN_POINT('',(416.666667,0.,-156.25));
+#74 = CARTESIAN_POINT('',(1.25E+03,-3.885780586E-13,156.25));
+#75 = CARTESIAN_POINT('',(1.25E+03,-3.885780586E-13,117.1875));
+#76 = CARTESIAN_POINT('',(1.25E+03,-3.885780586E-13,78.125));
+#77 = CARTESIAN_POINT('',(1.25E+03,-3.885780586E-13,39.0625));
+#78 = CARTESIAN_POINT('',(1.25E+03,-3.885524483E-13,-21.94137841));
+#79 = CARTESIAN_POINT('',(1.25E+03,-3.683109958E-13,-41.86850308));
+#80 = CARTESIAN_POINT('',(1.25E+03,-3.352606389E-13,-60.51483061));
+#81 = CARTESIAN_POINT('',(1.25E+03,-2.335884101E-13,-101.335678));
+#82 = CARTESIAN_POINT('',(1.25E+03,-1.624730779E-13,-121.016618));
+#83 = CARTESIAN_POINT('',(1.25E+03,-8.457292169E-14,-139.275692));
+#84 = CARTESIAN_POINT('',(1.25E+03,0.,-156.25));
+#85 = DEFINITIONAL_REPRESENTATION('',(#86),#90);
+#86 = LINE('',#87,#88);
 #87 = CARTESIAN_POINT('',(0.,0.));
-#88 = CARTESIAN_POINT('',(0.,1.));
-#89 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
+#88 = VECTOR('',#89,1.);
+#89 = DIRECTION('',(-0.,1.));
+#90 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
 PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
   ) );
-#90 = ORIENTED_EDGE('',*,*,#91,.T.);
-#91 = EDGE_CURVE('',#22,#92,#94,.T.);
-#92 = VERTEX_POINT('',#93);
-#93 = CARTESIAN_POINT('',(1.25E-03,-3.885780586E-19,1.5625E-04));
-#94 = SURFACE_CURVE('',#95,(#100),.PCURVE_S1.);
-#95 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#96,#97,#98,#99),.UNSPECIFIED.,.F.
-  ,.F.,(4,4),(0.,1.),.PIECEWISE_BEZIER_KNOTS.);
-#96 = CARTESIAN_POINT('',(-1.25E-03,0.,1.5625E-04));
-#97 = CARTESIAN_POINT('',(-4.27535926E-04,1.66356581E-04,1.5625E-04));
-#98 = CARTESIAN_POINT('',(4.27535926E-04,1.66356581E-04,1.5625E-04));
-#99 = CARTESIAN_POINT('',(1.25E-03,-3.885780586E-19,1.5625E-04));
-#100 = PCURVE('',#40,#101);
-#101 = DEFINITIONAL_REPRESENTATION('',(#102),#105);
-#102 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#103,#104),.UNSPECIFIED.,.F.,.F.,
-  (2,2),(0.,1.),.PIECEWISE_BEZIER_KNOTS.);
-#103 = CARTESIAN_POINT('',(0.,0.));
-#104 = CARTESIAN_POINT('',(1.,0.));
-#105 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
+#91 = ORIENTED_EDGE('',*,*,#92,.T.);
+#92 = EDGE_CURVE('',#22,#93,#95,.T.);
+#93 = VERTEX_POINT('',#94);
+#94 = CARTESIAN_POINT('',(1.25E+03,-3.885780586E-13,156.25));
+#95 = SURFACE_CURVE('',#96,(#101),.PCURVE_S1.);
+#96 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#97,#98,#99,#100),.UNSPECIFIED.,
+  .F.,.F.,(4,4),(0.,1.),.PIECEWISE_BEZIER_KNOTS.);
+#97 = CARTESIAN_POINT('',(-1.25E+03,0.,156.25));
+#98 = CARTESIAN_POINT('',(-427.535926,166.356581,156.25));
+#99 = CARTESIAN_POINT('',(427.535926,166.356581,156.25));
+#100 = CARTESIAN_POINT('',(1.25E+03,-3.885780586E-13,156.25));
+#101 = PCURVE('',#40,#102);
+#102 = DEFINITIONAL_REPRESENTATION('',(#103),#107);
+#103 = LINE('',#104,#105);
+#104 = CARTESIAN_POINT('',(0.,0.));
+#105 = VECTOR('',#106,1.);
+#106 = DIRECTION('',(1.,0.));
+#107 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
 PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
   ) );
-#106 = ORIENTED_EDGE('',*,*,#107,.T.);
-#107 = EDGE_CURVE('',#92,#108,#110,.T.);
-#108 = VERTEX_POINT('',#109);
-#109 = CARTESIAN_POINT('',(1.25E-03,6.938893904E-21,-1.5625E-04));
-#110 = SURFACE_CURVE('',#111,(#123),.PCURVE_S1.);
-#111 = B_SPLINE_CURVE_WITH_KNOTS('',4,(#112,#113,#114,#115,#116,#117,
-    #118,#119,#120,#121,#122),.UNSPECIFIED.,.F.,.F.,(5,3,3,5),(0.,
+#108 = ORIENTED_EDGE('',*,*,#109,.T.);
+#109 = EDGE_CURVE('',#93,#110,#112,.T.);
+#110 = VERTEX_POINT('',#111);
+#111 = CARTESIAN_POINT('',(1.25E+03,6.938893904E-15,-156.25));
+#112 = SURFACE_CURVE('',#113,(#125),.PCURVE_S1.);
+#113 = B_SPLINE_CURVE_WITH_KNOTS('',4,(#114,#115,#116,#117,#118,#119,
+    #120,#121,#122,#123,#124),.UNSPECIFIED.,.F.,.F.,(5,3,3,5),(0.,
     0.434398431,0.67839972,1.),.UNSPECIFIED.);
-#112 = CARTESIAN_POINT('',(1.25E-03,-3.885780586E-19,1.5625E-04));
-#113 = CARTESIAN_POINT('',(1.25E-03,-3.885780586E-19,1.171875E-04));
-#114 = CARTESIAN_POINT('',(1.25E-03,-3.885780586E-19,7.8125E-05));
-#115 = CARTESIAN_POINT('',(1.25E-03,-3.885780586E-19,3.90625E-05));
-#116 = CARTESIAN_POINT('',(1.25E-03,-3.885524483E-19,-2.194137841E-05));
-#117 = CARTESIAN_POINT('',(1.25E-03,-3.683109958E-19,-4.186850308E-05));
-#118 = CARTESIAN_POINT('',(1.25E-03,-3.352606389E-19,-6.051483061E-05));
-#119 = CARTESIAN_POINT('',(1.25E-03,-2.335884101E-19,-1.01335678E-04));
-#120 = CARTESIAN_POINT('',(1.25E-03,-1.624730779E-19,-1.21016618E-04));
-#121 = CARTESIAN_POINT('',(1.25E-03,-8.457292169E-20,-1.39275692E-04));
-#122 = CARTESIAN_POINT('',(1.25E-03,0.,-1.5625E-04));
-#123 = PCURVE('',#40,#124);
-#124 = DEFINITIONAL_REPRESENTATION('',(#125),#128);
-#125 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#126,#127),.UNSPECIFIED.,.F.,.F.,
-  (2,2),(0.,1.),.PIECEWISE_BEZIER_KNOTS.);
-#126 = CARTESIAN_POINT('',(1.,0.));
-#127 = CARTESIAN_POINT('',(1.,1.));
-#128 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
+#114 = CARTESIAN_POINT('',(1.25E+03,-3.885780586E-13,156.25));
+#115 = CARTESIAN_POINT('',(1.25E+03,-3.885780586E-13,117.1875));
+#116 = CARTESIAN_POINT('',(1.25E+03,-3.885780586E-13,78.125));
+#117 = CARTESIAN_POINT('',(1.25E+03,-3.885780586E-13,39.0625));
+#118 = CARTESIAN_POINT('',(1.25E+03,-3.885524483E-13,-21.94137841));
+#119 = CARTESIAN_POINT('',(1.25E+03,-3.683109958E-13,-41.86850308));
+#120 = CARTESIAN_POINT('',(1.25E+03,-3.352606389E-13,-60.51483061));
+#121 = CARTESIAN_POINT('',(1.25E+03,-2.335884101E-13,-101.335678));
+#122 = CARTESIAN_POINT('',(1.25E+03,-1.624730779E-13,-121.016618));
+#123 = CARTESIAN_POINT('',(1.25E+03,-8.457292169E-14,-139.275692));
+#124 = CARTESIAN_POINT('',(1.25E+03,0.,-156.25));
+#125 = PCURVE('',#40,#126);
+#126 = DEFINITIONAL_REPRESENTATION('',(#127),#131);
+#127 = LINE('',#128,#129);
+#128 = CARTESIAN_POINT('',(1.,0.));
+#129 = VECTOR('',#130,1.);
+#130 = DIRECTION('',(0.,1.));
+#131 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
 PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
   ) );
-#129 = ORIENTED_EDGE('',*,*,#130,.F.);
-#130 = EDGE_CURVE('',#24,#108,#131,.T.);
-#131 = SURFACE_CURVE('',#132,(#137),.PCURVE_S1.);
-#132 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#133,#134,#135,#136),
+#132 = ORIENTED_EDGE('',*,*,#133,.F.);
+#133 = EDGE_CURVE('',#24,#110,#134,.T.);
+#134 = SURFACE_CURVE('',#135,(#140),.PCURVE_S1.);
+#135 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#136,#137,#138,#139),
   .UNSPECIFIED.,.F.,.F.,(4,4),(0.,1.),.PIECEWISE_BEZIER_KNOTS.);
-#133 = CARTESIAN_POINT('',(-1.25E-03,0.,-1.5625E-04));
-#134 = CARTESIAN_POINT('',(-4.16666667E-04,0.,-1.5625E-04));
-#135 = CARTESIAN_POINT('',(4.16666667E-04,0.,-1.5625E-04));
-#136 = CARTESIAN_POINT('',(1.25E-03,0.,-1.5625E-04));
-#137 = PCURVE('',#40,#138);
-#138 = DEFINITIONAL_REPRESENTATION('',(#139),#142);
-#139 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#140,#141),.UNSPECIFIED.,.F.,.F.,
-  (2,2),(0.,1.),.PIECEWISE_BEZIER_KNOTS.);
-#140 = CARTESIAN_POINT('',(0.,1.));
-#141 = CARTESIAN_POINT('',(1.,1.));
-#142 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
+#136 = CARTESIAN_POINT('',(-1.25E+03,0.,-156.25));
+#137 = CARTESIAN_POINT('',(-416.666667,0.,-156.25));
+#138 = CARTESIAN_POINT('',(416.666667,0.,-156.25));
+#139 = CARTESIAN_POINT('',(1.25E+03,0.,-156.25));
+#140 = PCURVE('',#40,#141);
+#141 = DEFINITIONAL_REPRESENTATION('',(#142),#146);
+#142 = LINE('',#143,#144);
+#143 = CARTESIAN_POINT('',(0.,1.));
+#144 = VECTOR('',#145,1.);
+#145 = DIRECTION('',(1.,-0.));
+#146 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
 PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
   ) );
-#143 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
-GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#147)) GLOBAL_UNIT_ASSIGNED_CONTEXT
-((#144,#145,#146)) REPRESENTATION_CONTEXT('Context #1',
+#147 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
+GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#151)) GLOBAL_UNIT_ASSIGNED_CONTEXT
+((#148,#149,#150)) REPRESENTATION_CONTEXT('Context #1',
   '3D Context with UNIT and UNCERTAINTY') );
-#144 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
-#145 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
-#146 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
-#147 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#144,
+#148 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
+#149 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
+#150 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
+#151 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#148,
   'distance_accuracy_value','confusion accuracy');
-#148 = PRODUCT_TYPE('part',$,(#7));
+#152 = PRODUCT_TYPE('part',$,(#7));
 ENDSEC;
 END-ISO-10303-21;

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.