Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: CI

on:
push:
pull_request:

jobs:
test:
name: Build and test (ubuntu-latest)
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: 1.92.0

- name: Rust cache
uses: Swatinem/rust-cache@v2

- name: Build
run: cargo build --workspace --all-features --exclude gui

- name: Test
run: cargo test --workspace --all-features --exclude gui
352 changes: 352 additions & 0 deletions examples/spline_linear_extrusion.step
Original file line number Diff line number Diff line change
@@ -0,0 +1,352 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('Open CASCADE Model'),'2;1');
FILE_NAME('Open CASCADE Shape Model','2025-12-11T16:15:12',('Author'),(
'Open CASCADE'),'Open CASCADE STEP processor 7.8','build123d',
'Unknown');
FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));
ENDSEC;
DATA;
#1 = APPLICATION_PROTOCOL_DEFINITION('international standard',
'automotive_design',2000,#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('COMPOUND','COMPOUND','',(#8));
#8 = PRODUCT_CONTEXT('',#2,'mechanical');
#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#10 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#15),#284);
#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);
#12 = CARTESIAN_POINT('',(0.,0.,0.));
#13 = DIRECTION('',(0.,0.,1.));
#14 = DIRECTION('',(1.,0.,-0.));
#15 = MANIFOLD_SOLID_BREP('',#16);
#16 = CLOSED_SHELL('',(#17,#142,#225,#272,#278));
#17 = ADVANCED_FACE('',(#18),#32,.F.);
#18 = FACE_BOUND('',#19,.F.);
#19 = EDGE_LOOP('',(#20,#55,#83,#116));
#20 = ORIENTED_EDGE('',*,*,#21,.T.);
#21 = EDGE_CURVE('',#22,#24,#26,.T.);
#22 = VERTEX_POINT('',#23);
#23 = CARTESIAN_POINT('',(5.,0.,0.));
#24 = VERTEX_POINT('',#25);
#25 = CARTESIAN_POINT('',(5.,0.,10.));
#26 = SURFACE_CURVE('',#27,(#31,#43),.PCURVE_S1.);
#27 = LINE('',#28,#29);
#28 = CARTESIAN_POINT('',(5.,0.,0.));
#29 = VECTOR('',#30,1.);
#30 = DIRECTION('',(0.,0.,1.));
#31 = PCURVE('',#32,#37);
#32 = PLANE('',#33);
#33 = AXIS2_PLACEMENT_3D('',#34,#35,#36);
#34 = CARTESIAN_POINT('',(5.,0.,0.));
#35 = DIRECTION('',(0.,1.,0.));
#36 = DIRECTION('',(1.,0.,0.));
#37 = DEFINITIONAL_REPRESENTATION('',(#38),#42);
#38 = LINE('',#39,#40);
#39 = CARTESIAN_POINT('',(0.,0.));
#40 = VECTOR('',#41,1.);
#41 = DIRECTION('',(0.,-1.));
#42 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#43 = PCURVE('',#44,#49);
#44 = PLANE('',#45);
#45 = AXIS2_PLACEMENT_3D('',#46,#47,#48);
#46 = CARTESIAN_POINT('',(3.,18.,0.));
#47 = DIRECTION('',(0.993883734674,0.110431526075,-0.));
#48 = DIRECTION('',(0.110431526075,-0.993883734674,0.));
#49 = DEFINITIONAL_REPRESENTATION('',(#50),#54);
#50 = LINE('',#51,#52);
#51 = CARTESIAN_POINT('',(18.110770276275,0.));
#52 = VECTOR('',#53,1.);
#53 = DIRECTION('',(0.,-1.));
#54 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#55 = ORIENTED_EDGE('',*,*,#56,.T.);
#56 = EDGE_CURVE('',#24,#57,#59,.T.);
#57 = VERTEX_POINT('',#58);
#58 = CARTESIAN_POINT('',(10.,0.,10.));
#59 = SURFACE_CURVE('',#60,(#64,#71),.PCURVE_S1.);
#60 = LINE('',#61,#62);
#61 = CARTESIAN_POINT('',(5.,0.,10.));
#62 = VECTOR('',#63,1.);
#63 = DIRECTION('',(1.,0.,0.));
#64 = PCURVE('',#32,#65);
#65 = DEFINITIONAL_REPRESENTATION('',(#66),#70);
#66 = LINE('',#67,#68);
#67 = CARTESIAN_POINT('',(0.,-10.));
#68 = VECTOR('',#69,1.);
#69 = DIRECTION('',(1.,0.));
#70 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#71 = PCURVE('',#72,#77);
#72 = PLANE('',#73);
#73 = AXIS2_PLACEMENT_3D('',#74,#75,#76);
#74 = CARTESIAN_POINT('',(6.654209077302,8.197480348355,10.));
#75 = DIRECTION('',(0.,0.,1.));
#76 = DIRECTION('',(1.,0.,-0.));
#77 = DEFINITIONAL_REPRESENTATION('',(#78),#82);
#78 = LINE('',#79,#80);
#79 = CARTESIAN_POINT('',(-1.654209077302,-8.197480348355));
#80 = VECTOR('',#81,1.);
#81 = DIRECTION('',(1.,0.));
#82 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#83 = ORIENTED_EDGE('',*,*,#84,.F.);
#84 = EDGE_CURVE('',#85,#57,#87,.T.);
#85 = VERTEX_POINT('',#86);
#86 = CARTESIAN_POINT('',(10.,0.,0.));
#87 = SURFACE_CURVE('',#88,(#92,#99),.PCURVE_S1.);
#88 = LINE('',#89,#90);
#89 = CARTESIAN_POINT('',(10.,0.,0.));
#90 = VECTOR('',#91,1.);
#91 = DIRECTION('',(0.,0.,1.));
#92 = PCURVE('',#32,#93);
#93 = DEFINITIONAL_REPRESENTATION('',(#94),#98);
#94 = LINE('',#95,#96);
#95 = CARTESIAN_POINT('',(5.,0.));
#96 = VECTOR('',#97,1.);
#97 = DIRECTION('',(0.,-1.));
#98 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#99 = PCURVE('',#100,#110);
#100 = SURFACE_OF_LINEAR_EXTRUSION('',#101,#108);
#101 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#102,#103,#104,#105,#106,#107),
.UNSPECIFIED.,.F.,.F.,(4,1,1,4),(0.,10.,17.071067811865,
20.676619087329),.UNSPECIFIED.);
#102 = CARTESIAN_POINT('',(10.,0.,0.));
#103 = CARTESIAN_POINT('',(12.913510553271,4.699486232701,0.));
#104 = CARTESIAN_POINT('',(11.380711874577,9.595598854801,0.));
#105 = CARTESIAN_POINT('',(5.578916774563,13.988127661751,0.));
#106 = CARTESIAN_POINT('',(3.480185251676,16.88471318541,-0.));
#107 = CARTESIAN_POINT('',(3.,18.,0.));
#108 = VECTOR('',#109,1.);
#109 = DIRECTION('',(-0.,-0.,-1.));
#110 = DEFINITIONAL_REPRESENTATION('',(#111),#115);
#111 = LINE('',#112,#113);
#112 = CARTESIAN_POINT('',(0.,0.));
#113 = VECTOR('',#114,1.);
#114 = DIRECTION('',(0.,-1.));
#115 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#116 = ORIENTED_EDGE('',*,*,#117,.F.);
#117 = EDGE_CURVE('',#22,#85,#118,.T.);
#118 = SURFACE_CURVE('',#119,(#123,#130),.PCURVE_S1.);
#119 = LINE('',#120,#121);
#120 = CARTESIAN_POINT('',(5.,0.,0.));
#121 = VECTOR('',#122,1.);
#122 = DIRECTION('',(1.,0.,0.));
#123 = PCURVE('',#32,#124);
#124 = DEFINITIONAL_REPRESENTATION('',(#125),#129);
#125 = LINE('',#126,#127);
#126 = CARTESIAN_POINT('',(0.,0.));
#127 = VECTOR('',#128,1.);
#128 = DIRECTION('',(1.,0.));
#129 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#130 = PCURVE('',#131,#136);
#131 = PLANE('',#132);
#132 = AXIS2_PLACEMENT_3D('',#133,#134,#135);
#133 = CARTESIAN_POINT('',(6.654209077302,8.197480348355,0.));
#134 = DIRECTION('',(0.,0.,1.));
#135 = DIRECTION('',(1.,0.,-0.));
#136 = DEFINITIONAL_REPRESENTATION('',(#137),#141);
#137 = LINE('',#138,#139);
#138 = CARTESIAN_POINT('',(-1.654209077302,-8.197480348355));
#139 = VECTOR('',#140,1.);
#140 = DIRECTION('',(1.,0.));
#141 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#142 = ADVANCED_FACE('',(#143),#100,.F.);
#143 = FACE_BOUND('',#144,.F.);
#144 = EDGE_LOOP('',(#145,#146,#175,#198));
#145 = ORIENTED_EDGE('',*,*,#84,.T.);
#146 = ORIENTED_EDGE('',*,*,#147,.T.);
#147 = EDGE_CURVE('',#57,#148,#150,.T.);
#148 = VERTEX_POINT('',#149);
#149 = CARTESIAN_POINT('',(3.,18.,10.));
#150 = SURFACE_CURVE('',#151,(#158,#165),.PCURVE_S1.);
#151 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#152,#153,#154,#155,#156,#157),
.UNSPECIFIED.,.F.,.F.,(4,1,1,4),(0.,10.,17.071067811865,
20.676619087329),.UNSPECIFIED.);
#152 = CARTESIAN_POINT('',(10.,0.,10.));
#153 = CARTESIAN_POINT('',(12.913510553271,4.699486232701,10.));
#154 = CARTESIAN_POINT('',(11.380711874577,9.595598854801,10.));
#155 = CARTESIAN_POINT('',(5.578916774563,13.988127661751,10.));
#156 = CARTESIAN_POINT('',(3.480185251676,16.88471318541,10.));
#157 = CARTESIAN_POINT('',(3.,18.,10.));
#158 = PCURVE('',#100,#159);
#159 = DEFINITIONAL_REPRESENTATION('',(#160),#164);
#160 = LINE('',#161,#162);
#161 = CARTESIAN_POINT('',(0.,-10.));
#162 = VECTOR('',#163,1.);
#163 = DIRECTION('',(1.,0.));
#164 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#165 = PCURVE('',#72,#166);
#166 = DEFINITIONAL_REPRESENTATION('',(#167),#174);
#167 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#168,#169,#170,#171,#172,#173),
.UNSPECIFIED.,.F.,.F.,(4,1,1,4),(0.,10.,17.071067811865,
20.676619087329),.UNSPECIFIED.);
#168 = CARTESIAN_POINT('',(3.345790922698,-8.197480348355));
#169 = CARTESIAN_POINT('',(6.259301475969,-3.497994115654));
#170 = CARTESIAN_POINT('',(4.726502797275,1.398118506446));
#171 = CARTESIAN_POINT('',(-1.075292302739,5.790647313396));
#172 = CARTESIAN_POINT('',(-3.174023825626,8.687232837055));
#173 = CARTESIAN_POINT('',(-3.654209077302,9.802519651645));
#174 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#175 = ORIENTED_EDGE('',*,*,#176,.F.);
#176 = EDGE_CURVE('',#177,#148,#179,.T.);
#177 = VERTEX_POINT('',#178);
#178 = CARTESIAN_POINT('',(3.,18.,0.));
#179 = SURFACE_CURVE('',#180,(#184,#191),.PCURVE_S1.);
#180 = LINE('',#181,#182);
#181 = CARTESIAN_POINT('',(3.,18.,0.));
#182 = VECTOR('',#183,1.);
#183 = DIRECTION('',(0.,0.,1.));
#184 = PCURVE('',#100,#185);
#185 = DEFINITIONAL_REPRESENTATION('',(#186),#190);
#186 = LINE('',#187,#188);
#187 = CARTESIAN_POINT('',(20.676619087329,0.));
#188 = VECTOR('',#189,1.);
#189 = DIRECTION('',(0.,-1.));
#190 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#191 = PCURVE('',#44,#192);
#192 = DEFINITIONAL_REPRESENTATION('',(#193),#197);
#193 = LINE('',#194,#195);
#194 = CARTESIAN_POINT('',(0.,0.));
#195 = VECTOR('',#196,1.);
#196 = DIRECTION('',(0.,-1.));
#197 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#198 = ORIENTED_EDGE('',*,*,#199,.F.);
#199 = EDGE_CURVE('',#85,#177,#200,.T.);
#200 = SURFACE_CURVE('',#201,(#208,#215),.PCURVE_S1.);
#201 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#202,#203,#204,#205,#206,#207),
.UNSPECIFIED.,.F.,.F.,(4,1,1,4),(0.,10.,17.071067811865,
20.676619087329),.UNSPECIFIED.);
#202 = CARTESIAN_POINT('',(10.,0.,0.));
#203 = CARTESIAN_POINT('',(12.913510553271,4.699486232701,0.));
#204 = CARTESIAN_POINT('',(11.380711874577,9.595598854801,0.));
#205 = CARTESIAN_POINT('',(5.578916774563,13.988127661751,0.));
#206 = CARTESIAN_POINT('',(3.480185251676,16.88471318541,-0.));
#207 = CARTESIAN_POINT('',(3.,18.,0.));
#208 = PCURVE('',#100,#209);
#209 = DEFINITIONAL_REPRESENTATION('',(#210),#214);
#210 = LINE('',#211,#212);
#211 = CARTESIAN_POINT('',(0.,0.));
#212 = VECTOR('',#213,1.);
#213 = DIRECTION('',(1.,0.));
#214 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#215 = PCURVE('',#131,#216);
#216 = DEFINITIONAL_REPRESENTATION('',(#217),#224);
#217 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#218,#219,#220,#221,#222,#223),
.UNSPECIFIED.,.F.,.F.,(4,1,1,4),(0.,10.,17.071067811865,
20.676619087329),.UNSPECIFIED.);
#218 = CARTESIAN_POINT('',(3.345790922698,-8.197480348355));
#219 = CARTESIAN_POINT('',(6.259301475969,-3.497994115654));
#220 = CARTESIAN_POINT('',(4.726502797275,1.398118506446));
#221 = CARTESIAN_POINT('',(-1.075292302739,5.790647313396));
#222 = CARTESIAN_POINT('',(-3.174023825626,8.687232837055));
#223 = CARTESIAN_POINT('',(-3.654209077302,9.802519651645));
#224 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#225 = ADVANCED_FACE('',(#226),#44,.F.);
#226 = FACE_BOUND('',#227,.F.);
#227 = EDGE_LOOP('',(#228,#229,#250,#251));
#228 = ORIENTED_EDGE('',*,*,#176,.T.);
#229 = ORIENTED_EDGE('',*,*,#230,.T.);
#230 = EDGE_CURVE('',#148,#24,#231,.T.);
#231 = SURFACE_CURVE('',#232,(#236,#243),.PCURVE_S1.);
#232 = LINE('',#233,#234);
#233 = CARTESIAN_POINT('',(3.,18.,10.));
#234 = VECTOR('',#235,1.);
#235 = DIRECTION('',(0.110431526075,-0.993883734674,0.));
#236 = PCURVE('',#44,#237);
#237 = DEFINITIONAL_REPRESENTATION('',(#238),#242);
#238 = LINE('',#239,#240);
#239 = CARTESIAN_POINT('',(0.,-10.));
#240 = VECTOR('',#241,1.);
#241 = DIRECTION('',(1.,0.));
#242 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#243 = PCURVE('',#72,#244);
#244 = DEFINITIONAL_REPRESENTATION('',(#245),#249);
#245 = LINE('',#246,#247);
#246 = CARTESIAN_POINT('',(-3.654209077302,9.802519651645));
#247 = VECTOR('',#248,1.);
#248 = DIRECTION('',(0.110431526075,-0.993883734674));
#249 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#250 = ORIENTED_EDGE('',*,*,#21,.F.);
#251 = ORIENTED_EDGE('',*,*,#252,.F.);
#252 = EDGE_CURVE('',#177,#22,#253,.T.);
#253 = SURFACE_CURVE('',#254,(#258,#265),.PCURVE_S1.);
#254 = LINE('',#255,#256);
#255 = CARTESIAN_POINT('',(3.,18.,0.));
#256 = VECTOR('',#257,1.);
#257 = DIRECTION('',(0.110431526075,-0.993883734674,0.));
#258 = PCURVE('',#44,#259);
#259 = DEFINITIONAL_REPRESENTATION('',(#260),#264);
#260 = LINE('',#261,#262);
#261 = CARTESIAN_POINT('',(0.,0.));
#262 = VECTOR('',#263,1.);
#263 = DIRECTION('',(1.,0.));
#264 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#265 = PCURVE('',#131,#266);
#266 = DEFINITIONAL_REPRESENTATION('',(#267),#271);
#267 = LINE('',#268,#269);
#268 = CARTESIAN_POINT('',(-3.654209077302,9.802519651645));
#269 = VECTOR('',#270,1.);
#270 = DIRECTION('',(0.110431526075,-0.993883734674));
#271 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#272 = ADVANCED_FACE('',(#273),#131,.F.);
#273 = FACE_BOUND('',#274,.F.);
#274 = EDGE_LOOP('',(#275,#276,#277));
#275 = ORIENTED_EDGE('',*,*,#117,.T.);
#276 = ORIENTED_EDGE('',*,*,#199,.T.);
#277 = ORIENTED_EDGE('',*,*,#252,.T.);
#278 = ADVANCED_FACE('',(#279),#72,.T.);
#279 = FACE_BOUND('',#280,.T.);
#280 = EDGE_LOOP('',(#281,#282,#283));
#281 = ORIENTED_EDGE('',*,*,#56,.T.);
#282 = ORIENTED_EDGE('',*,*,#147,.T.);
#283 = ORIENTED_EDGE('',*,*,#230,.T.);
#284 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#288)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#285,#286,#287)) REPRESENTATION_CONTEXT('Context #1',
'3D Context with UNIT and UNCERTAINTY') );
#285 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#286 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#287 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#288 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#285,
'distance_accuracy_value','confusion accuracy');
#289 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7));
ENDSEC;
END-ISO-10303-21;
Loading