Skip to content

Commit bde2f5b

Browse files
Minor | Added complex nested cas and updated doc
1 parent 0aa8466 commit bde2f5b

5 files changed

Lines changed: 281 additions & 1 deletion

File tree

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@ Install requirements with
1616

1717
## Usage
1818

19+
Step2gmsh requires two diferent files:
20+
- A json file where material properties are described for each geometry
21+
- A step file with all the geometry info
22+
23+
Both files must have the same label and share folder path.
24+
An example of those files can be found in [Five wires case](testData/five_wires/)
25+
1926
Launch from command line as
2027

2128
```shell

test/test_mesher.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,13 +268,34 @@ def test_lansink2024_single_wire_multipolar(self):
268268
'OpenBoundary_0',
269269
'Vacuum_0', 'Vacuum_1']
270270
expectedEntities = [1, 1, 1,
271-
1,
272271
1, 1]
273272
self.assertEqual(sorted(pGNames), sorted(expectedNames))
274273

275274
for idx, name in enumerate(expectedNames):
276275
self.assertEqual(self.countEntitiesInPhysicalGroupWithName(name), expectedEntities[idx], name)
277276

277+
def test_unshielded_nesting(self):
278+
caseName = 'UnshieldedNested'
279+
Mesher().meshFromStep(self.inputFileFromCaseName(caseName), caseName)
280+
281+
#gmsh.write(caseName + '.msh')
282+
#gmsh.write(caseName + '.vtk')
283+
284+
pGs = gmsh.model.getPhysicalGroups()
285+
pGNames = [gmsh.model.getPhysicalName(*pG) for pG in pGs]
286+
expectedNames = ['Conductor_0',
287+
'Conductor_1',
288+
'Conductor_2',
289+
'OpenBoundary_0',
290+
'Vacuum_0', 'Vacuum_1']
291+
expectedEntities = [2, 1, 1,
292+
1,
293+
2, 1]
294+
self.assertEqual(sorted(pGNames), sorted(expectedNames))
295+
296+
for idx, name in enumerate(expectedNames):
297+
self.assertEqual(self.countEntitiesInPhysicalGroupWithName(name), expectedEntities[idx], name)
298+
278299

279300
if __name__ == '__main__':
280301
unittest.main()
11.7 KB
Binary file not shown.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"CrossSection":[
3+
{
4+
"name":"Conductor_2",
5+
"material":{
6+
"type":"PEC"
7+
}
8+
},
9+
{
10+
"name":"Conductor_1",
11+
"material":{
12+
"type":"PEC"
13+
}
14+
},
15+
{
16+
"name":"ExtraConductor",
17+
"material":{
18+
"type":"PEC"
19+
}
20+
}
21+
]
22+
}
Lines changed: 230 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,230 @@
1+
ISO-10303-21;
2+
HEADER;
3+
FILE_DESCRIPTION(('FreeCAD Model'),'2;1');
4+
FILE_NAME('Open CASCADE Shape Model','2025-10-14T12:52:45',(''),(''),
5+
'Open CASCADE STEP processor 7.8','FreeCAD','Unknown');
6+
FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));
7+
ENDSEC;
8+
DATA;
9+
#1 = APPLICATION_PROTOCOL_DEFINITION('international standard',
10+
'automotive_design',2000,#2);
11+
#2 = APPLICATION_CONTEXT(
12+
'core data for automotive mechanical design processes');
13+
#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10);
14+
#4 = PRODUCT_DEFINITION_SHAPE('','',#5);
15+
#5 = PRODUCT_DEFINITION('design','',#6,#9);
16+
#6 = PRODUCT_DEFINITION_FORMATION('','',#7);
17+
#7 = PRODUCT('nested_coax','nested_coax','',(#8));
18+
#8 = PRODUCT_CONTEXT('',#2,'mechanical');
19+
#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
20+
#10 = SHAPE_REPRESENTATION('',(#11,#15,#19,#23),#27);
21+
#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);
22+
#12 = CARTESIAN_POINT('',(0.,0.,0.));
23+
#13 = DIRECTION('',(0.,0.,1.));
24+
#14 = DIRECTION('',(1.,0.,-0.));
25+
#15 = AXIS2_PLACEMENT_3D('',#16,#17,#18);
26+
#16 = CARTESIAN_POINT('',(0.,0.,0.));
27+
#17 = DIRECTION('',(0.,0.,1.));
28+
#18 = DIRECTION('',(1.,0.,0.));
29+
#19 = AXIS2_PLACEMENT_3D('',#20,#21,#22);
30+
#20 = CARTESIAN_POINT('',(0.,0.,0.));
31+
#21 = DIRECTION('',(0.,0.,1.));
32+
#22 = DIRECTION('',(1.,0.,0.));
33+
#23 = AXIS2_PLACEMENT_3D('',#24,#25,#26);
34+
#24 = CARTESIAN_POINT('',(5.,0.,0.));
35+
#25 = DIRECTION('',(0.,0.,1.));
36+
#26 = DIRECTION('',(1.,0.,0.));
37+
#27 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
38+
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#31)) GLOBAL_UNIT_ASSIGNED_CONTEXT(
39+
(#28,#29,#30)) REPRESENTATION_CONTEXT('Context #1',
40+
'3D Context with UNIT and UNCERTAINTY') );
41+
#28 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
42+
#29 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
43+
#30 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
44+
#31 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#28,
45+
'distance_accuracy_value','confusion accuracy');
46+
#32 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7));
47+
#33 = SHAPE_DEFINITION_REPRESENTATION(#34,#40);
48+
#34 = PRODUCT_DEFINITION_SHAPE('','',#35);
49+
#35 = PRODUCT_DEFINITION('design','',#36,#39);
50+
#36 = PRODUCT_DEFINITION_FORMATION('','',#37);
51+
#37 = PRODUCT('Conductor_1','Conductor_1','',(#38));
52+
#38 = PRODUCT_CONTEXT('',#2,'mechanical');
53+
#39 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
54+
#40 = MANIFOLD_SURFACE_SHAPE_REPRESENTATION('',(#11,#41),#71);
55+
#41 = SHELL_BASED_SURFACE_MODEL('',(#42));
56+
#42 = OPEN_SHELL('',(#43));
57+
#43 = ADVANCED_FACE('',(#44,#55),#66,.T.);
58+
#44 = FACE_BOUND('',#45,.T.);
59+
#45 = EDGE_LOOP('',(#46));
60+
#46 = ORIENTED_EDGE('',*,*,#47,.T.);
61+
#47 = EDGE_CURVE('',#48,#48,#50,.T.);
62+
#48 = VERTEX_POINT('',#49);
63+
#49 = CARTESIAN_POINT('',(2.8,0.,0.));
64+
#50 = CIRCLE('',#51,2.8);
65+
#51 = AXIS2_PLACEMENT_3D('',#52,#53,#54);
66+
#52 = CARTESIAN_POINT('',(0.,0.,0.));
67+
#53 = DIRECTION('',(0.,0.,1.));
68+
#54 = DIRECTION('',(1.,0.,0.));
69+
#55 = FACE_BOUND('',#56,.T.);
70+
#56 = EDGE_LOOP('',(#57));
71+
#57 = ORIENTED_EDGE('',*,*,#58,.F.);
72+
#58 = EDGE_CURVE('',#59,#59,#61,.T.);
73+
#59 = VERTEX_POINT('',#60);
74+
#60 = CARTESIAN_POINT('',(2.4,0.,0.));
75+
#61 = CIRCLE('',#62,2.4);
76+
#62 = AXIS2_PLACEMENT_3D('',#63,#64,#65);
77+
#63 = CARTESIAN_POINT('',(0.,0.,0.));
78+
#64 = DIRECTION('',(0.,0.,1.));
79+
#65 = DIRECTION('',(1.,0.,0.));
80+
#66 = PLANE('',#67);
81+
#67 = AXIS2_PLACEMENT_3D('',#68,#69,#70);
82+
#68 = CARTESIAN_POINT('',(-2.441857379535E-16,1.29885370033E-16,0.));
83+
#69 = DIRECTION('',(0.,0.,1.));
84+
#70 = DIRECTION('',(1.,0.,0.));
85+
#71 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
86+
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#75)) GLOBAL_UNIT_ASSIGNED_CONTEXT(
87+
(#72,#73,#74)) REPRESENTATION_CONTEXT('Context #1',
88+
'3D Context with UNIT and UNCERTAINTY') );
89+
#72 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
90+
#73 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
91+
#74 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
92+
#75 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#72,
93+
'distance_accuracy_value','confusion accuracy');
94+
#76 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#77,#79);
95+
#77 = ( REPRESENTATION_RELATIONSHIP('','',#40,#10)
96+
REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#78)
97+
SHAPE_REPRESENTATION_RELATIONSHIP() );
98+
#78 = ITEM_DEFINED_TRANSFORMATION('','',#11,#15);
99+
#79 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#80);
100+
#80 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('1','Conductor_1','',#5,#35,$);
101+
#81 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#37));
102+
#82 = SHAPE_DEFINITION_REPRESENTATION(#83,#89);
103+
#83 = PRODUCT_DEFINITION_SHAPE('','',#84);
104+
#84 = PRODUCT_DEFINITION('design','',#85,#88);
105+
#85 = PRODUCT_DEFINITION_FORMATION('','',#86);
106+
#86 = PRODUCT('Conductor_2','Conductor_2','',(#87));
107+
#87 = PRODUCT_CONTEXT('',#2,'mechanical');
108+
#88 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
109+
#89 = MANIFOLD_SURFACE_SHAPE_REPRESENTATION('',(#11,#90),#109);
110+
#90 = SHELL_BASED_SURFACE_MODEL('',(#91));
111+
#91 = OPEN_SHELL('',(#92));
112+
#92 = ADVANCED_FACE('',(#93),#104,.T.);
113+
#93 = FACE_BOUND('',#94,.T.);
114+
#94 = EDGE_LOOP('',(#95));
115+
#95 = ORIENTED_EDGE('',*,*,#96,.T.);
116+
#96 = EDGE_CURVE('',#97,#97,#99,.T.);
117+
#97 = VERTEX_POINT('',#98);
118+
#98 = CARTESIAN_POINT('',(1.,0.,0.));
119+
#99 = CIRCLE('',#100,1.);
120+
#100 = AXIS2_PLACEMENT_3D('',#101,#102,#103);
121+
#101 = CARTESIAN_POINT('',(0.,0.,0.));
122+
#102 = DIRECTION('',(0.,0.,1.));
123+
#103 = DIRECTION('',(1.,0.,-0.));
124+
#104 = PLANE('',#105);
125+
#105 = AXIS2_PLACEMENT_3D('',#106,#107,#108);
126+
#106 = CARTESIAN_POINT('',(-6.409875621279E-17,1.910944170279E-18,0.));
127+
#107 = DIRECTION('',(0.,0.,1.));
128+
#108 = DIRECTION('',(1.,0.,-0.));
129+
#109 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
130+
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#113)) GLOBAL_UNIT_ASSIGNED_CONTEXT
131+
((#110,#111,#112)) REPRESENTATION_CONTEXT('Context #1',
132+
'3D Context with UNIT and UNCERTAINTY') );
133+
#110 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
134+
#111 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
135+
#112 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
136+
#113 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#110,
137+
'distance_accuracy_value','confusion accuracy');
138+
#114 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#115,#117);
139+
#115 = ( REPRESENTATION_RELATIONSHIP('','',#89,#10)
140+
REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#116)
141+
SHAPE_REPRESENTATION_RELATIONSHIP() );
142+
#116 = ITEM_DEFINED_TRANSFORMATION('','',#11,#19);
143+
#117 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#118
144+
);
145+
#118 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('2','Conductor_2','',#5,#84,$);
146+
#119 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#86));
147+
#120 = SHAPE_DEFINITION_REPRESENTATION(#121,#127);
148+
#121 = PRODUCT_DEFINITION_SHAPE('','',#122);
149+
#122 = PRODUCT_DEFINITION('design','',#123,#126);
150+
#123 = PRODUCT_DEFINITION_FORMATION('','',#124);
151+
#124 = PRODUCT('ExtraConductor','ExtraConductor','',(#125));
152+
#125 = PRODUCT_CONTEXT('',#2,'mechanical');
153+
#126 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
154+
#127 = MANIFOLD_SURFACE_SHAPE_REPRESENTATION('',(#11,#128),#147);
155+
#128 = SHELL_BASED_SURFACE_MODEL('',(#129));
156+
#129 = OPEN_SHELL('',(#130));
157+
#130 = ADVANCED_FACE('',(#131),#142,.T.);
158+
#131 = FACE_BOUND('',#132,.T.);
159+
#132 = EDGE_LOOP('',(#133));
160+
#133 = ORIENTED_EDGE('',*,*,#134,.T.);
161+
#134 = EDGE_CURVE('',#135,#135,#137,.T.);
162+
#135 = VERTEX_POINT('',#136);
163+
#136 = CARTESIAN_POINT('',(1.,0.,0.));
164+
#137 = CIRCLE('',#138,1.);
165+
#138 = AXIS2_PLACEMENT_3D('',#139,#140,#141);
166+
#139 = CARTESIAN_POINT('',(0.,0.,0.));
167+
#140 = DIRECTION('',(0.,0.,1.));
168+
#141 = DIRECTION('',(1.,0.,0.));
169+
#142 = PLANE('',#143);
170+
#143 = AXIS2_PLACEMENT_3D('',#144,#145,#146);
171+
#144 = CARTESIAN_POINT('',(-6.409875621279E-17,1.910944170279E-18,0.));
172+
#145 = DIRECTION('',(0.,0.,1.));
173+
#146 = DIRECTION('',(1.,0.,0.));
174+
#147 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
175+
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#151)) GLOBAL_UNIT_ASSIGNED_CONTEXT
176+
((#148,#149,#150)) REPRESENTATION_CONTEXT('Context #1',
177+
'3D Context with UNIT and UNCERTAINTY') );
178+
#148 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
179+
#149 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
180+
#150 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
181+
#151 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#148,
182+
'distance_accuracy_value','confusion accuracy');
183+
#152 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#153,#155);
184+
#153 = ( REPRESENTATION_RELATIONSHIP('','',#127,#10)
185+
REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#154)
186+
SHAPE_REPRESENTATION_RELATIONSHIP() );
187+
#154 = ITEM_DEFINED_TRANSFORMATION('','',#11,#23);
188+
#155 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#156
189+
);
190+
#156 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('3','ExtraConductor','',#5,#122,$
191+
);
192+
#157 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#124));
193+
#158 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#159)
194+
,#109);
195+
#159 = STYLED_ITEM('color',(#160),#92);
196+
#160 = PRESENTATION_STYLE_ASSIGNMENT((#161,#167));
197+
#161 = SURFACE_STYLE_USAGE(.BOTH.,#162);
198+
#162 = SURFACE_SIDE_STYLE('',(#163));
199+
#163 = SURFACE_STYLE_FILL_AREA(#164);
200+
#164 = FILL_AREA_STYLE('',(#165));
201+
#165 = FILL_AREA_STYLE_COLOUR('',#166);
202+
#166 = COLOUR_RGB('',0.800000010877,0.800000010877,0.800000010877);
203+
#167 = CURVE_STYLE('',#168,POSITIVE_LENGTH_MEASURE(0.1),#169);
204+
#168 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous');
205+
#169 = COLOUR_RGB('',9.803921802644E-02,9.803921802644E-02,
206+
9.803921802644E-02);
207+
#170 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#171)
208+
,#147);
209+
#171 = STYLED_ITEM('color',(#172),#130);
210+
#172 = PRESENTATION_STYLE_ASSIGNMENT((#173,#178));
211+
#173 = SURFACE_STYLE_USAGE(.BOTH.,#174);
212+
#174 = SURFACE_SIDE_STYLE('',(#175));
213+
#175 = SURFACE_STYLE_FILL_AREA(#176);
214+
#176 = FILL_AREA_STYLE('',(#177));
215+
#177 = FILL_AREA_STYLE_COLOUR('',#166);
216+
#178 = CURVE_STYLE('',#179,POSITIVE_LENGTH_MEASURE(0.1),#169);
217+
#179 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous');
218+
#180 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#181)
219+
,#71);
220+
#181 = STYLED_ITEM('color',(#182),#43);
221+
#182 = PRESENTATION_STYLE_ASSIGNMENT((#183,#188));
222+
#183 = SURFACE_STYLE_USAGE(.BOTH.,#184);
223+
#184 = SURFACE_SIDE_STYLE('',(#185));
224+
#185 = SURFACE_STYLE_FILL_AREA(#186);
225+
#186 = FILL_AREA_STYLE('',(#187));
226+
#187 = FILL_AREA_STYLE_COLOUR('',#166);
227+
#188 = CURVE_STYLE('',#189,POSITIVE_LENGTH_MEASURE(0.1),#169);
228+
#189 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous');
229+
ENDSEC;
230+
END-ISO-10303-21;

0 commit comments

Comments
 (0)