From ab5a5a41442d486b05eec379a0e9cade93685d73 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Wed, 29 Apr 2015 02:18:39 -0500
Subject: [PATCH] Add circle mesh test

---
 test/circle.step      | 85 +++++++++++++++++++++++++++++++++++++++++++
 test/test_meshmode.py | 23 ++++++++++++
 2 files changed, 108 insertions(+)
 create mode 100644 test/circle.step

diff --git a/test/circle.step b/test/circle.step
new file mode 100644
index 00000000..78f37055
--- /dev/null
+++ b/test/circle.step
@@ -0,0 +1,85 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION(('FreeCAD Model'),'2;1');
+FILE_NAME('/home/andreas/own/graphics/freecad/circle.step',
+  '2015-04-28T14:41:10',('FreeCAD'),('FreeCAD'),
+  'Open CASCADE STEP processor 6.7','FreeCAD','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('Circle001','Circle001','',(#8));
+#8 = MECHANICAL_CONTEXT('',#2,'mechanical');
+#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
+#10 = MANIFOLD_SURFACE_SHAPE_REPRESENTATION('',(#11,#15),#46);
+#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);
+#12 = CARTESIAN_POINT('',(0.,0.,0.));
+#13 = DIRECTION('',(0.,0.,1.));
+#14 = DIRECTION('',(1.,0.,-0.));
+#15 = SHELL_BASED_SURFACE_MODEL('',(#16));
+#16 = OPEN_SHELL('',(#17));
+#17 = ADVANCED_FACE('',(#18),#31,.T.);
+#18 = FACE_BOUND('',#19,.F.);
+#19 = EDGE_LOOP('',(#20));
+#20 = ORIENTED_EDGE('',*,*,#21,.T.);
+#21 = EDGE_CURVE('',#22,#22,#24,.T.);
+#22 = VERTEX_POINT('',#23);
+#23 = CARTESIAN_POINT('',(2.E-04,0.,0.));
+#24 = SURFACE_CURVE('',#25,(#30),.PCURVE_S1.);
+#25 = CIRCLE('',#26,2.E-04);
+#26 = AXIS2_PLACEMENT_3D('',#27,#28,#29);
+#27 = CARTESIAN_POINT('',(0.,0.,0.));
+#28 = DIRECTION('',(0.,0.,1.));
+#29 = DIRECTION('',(1.,0.,0.));
+#30 = PCURVE('',#31,#36);
+#31 = PLANE('',#32);
+#32 = AXIS2_PLACEMENT_3D('',#33,#34,#35);
+#33 = CARTESIAN_POINT('',(2.E-04,0.,0.));
+#34 = DIRECTION('',(0.,0.,-1.));
+#35 = DIRECTION('',(-1.,0.,0.));
+#36 = DEFINITIONAL_REPRESENTATION('',(#37),#45);
+#37 = ( BOUNDED_CURVE() B_SPLINE_CURVE(2,(#38,#39,#40,#41,#42,#43,#44),
+.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((1,2,2,2,2,1),(
+    -2.094395102393,0.,2.094395102393,4.188790204786,6.28318530718,
+8.377580409573),.UNSPECIFIED.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() 
+RATIONAL_B_SPLINE_CURVE((1.,0.5,1.,0.5,1.,0.5,1.)) REPRESENTATION_ITEM(
+  '') );
+#38 = CARTESIAN_POINT('',(0.,0.));
+#39 = CARTESIAN_POINT('',(0.,3.464101615138E-04));
+#40 = CARTESIAN_POINT('',(3.E-04,1.732050807569E-04));
+#41 = CARTESIAN_POINT('',(6.E-04,4.898587196589E-20));
+#42 = CARTESIAN_POINT('',(3.E-04,-1.732050807569E-04));
+#43 = CARTESIAN_POINT('',(2.981555974335E-19,-3.464101615138E-04));
+#44 = CARTESIAN_POINT('',(0.,0.));
+#45 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
+PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
+  ) );
+#46 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
+GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#50)) GLOBAL_UNIT_ASSIGNED_CONTEXT(
+(#47,#48,#49)) REPRESENTATION_CONTEXT('Context #1',
+  '3D Context with UNIT and UNCERTAINTY') );
+#47 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT($,.METRE.) );
+#48 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
+#49 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
+#50 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-10),#47,
+  'distance_accuracy_value','confusion accuracy');
+#51 = PRODUCT_TYPE('part',$,(#7));
+#52 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#53),
+  #46);
+#53 = STYLED_ITEM('color',(#54),#17);
+#54 = PRESENTATION_STYLE_ASSIGNMENT((#55));
+#55 = SURFACE_STYLE_USAGE(.BOTH.,#56);
+#56 = SURFACE_SIDE_STYLE('',(#57));
+#57 = SURFACE_STYLE_FILL_AREA(#58);
+#58 = FILL_AREA_STYLE('',(#59));
+#59 = FILL_AREA_STYLE_COLOUR('',#60);
+#60 = COLOUR_RGB('',0.800000011921,0.800000011921,0.800000011921);
+ENDSEC;
+END-ISO-10303-21;
diff --git a/test/test_meshmode.py b/test/test_meshmode.py
index 9455098e..c3a75bdd 100644
--- a/test/test_meshmode.py
+++ b/test/test_meshmode.py
@@ -39,6 +39,29 @@ import logging
 logger = logging.getLogger(__name__)
 
 
+def test_circle_mesh(do_plot=False):
+    from meshmode.mesh.io import generate_gmsh, FileSource
+    print("BEGIN GEN")
+    mesh = generate_gmsh(
+            FileSource("circle.step"), 2, order=2,
+            force_ambient_dim=2,
+            other_options=[
+                "-string", "Mesh.CharacteristicLengthMax = 0.05;"]
+            )
+    print("END GEN")
+    print(mesh.nelements)
+
+    from meshmode.mesh.processing import affine_map
+    mesh = affine_map(mesh, A=3*np.eye(2))
+
+    if do_plot:
+        from meshmode.mesh.visualization import draw_2d_mesh
+        draw_2d_mesh(mesh, fill=None, draw_connectivity=True,
+                set_bounding_box=True)
+        import matplotlib.pyplot as pt
+        pt.show()
+
+
 def test_boundary_interpolation(ctx_getter):
     cl_ctx = ctx_getter()
     queue = cl.CommandQueue(cl_ctx)
-- 
GitLab