From a6b77a609617198d4212e63726417276829808bf Mon Sep 17 00:00:00 2001 From: Carsten Arnholm Date: Fri, 12 Apr 2019 21:06:57 +0200 Subject: [PATCH] All files --- README.md | 4 + _config.yml | 1 + docs/_config.yml | 1 + docs/angel_48x48.bmp | Bin 0 -> 6966 bytes docs/angelcad_8h.html | 208 +++ docs/angelcad_8h_source.html | 1360 +++++++++++++++++++ docs/angelcad_ide_70pst.png | Bin 0 -> 127537 bytes docs/angelscript_csg_ide_80pst.png | Bin 0 -> 170643 bytes docs/annotated.html | 112 ++ docs/bc_s.png | Bin 0 -> 676 bytes docs/bdwn.png | Bin 0 -> 147 bytes docs/classarray-members.html | 96 ++ docs/classarray.html | 727 +++++++++++ docs/classas__reftype-members.html | 65 + docs/classas__reftype.html | 96 ++ docs/classboundingbox-members.html | 74 ++ docs/classboundingbox.html | 289 +++++ docs/classcircle-members.html | 76 ++ docs/classcircle.html | 286 ++++ docs/classcircle.png | Bin 0 -> 498 bytes docs/classcone-members.html | 79 ++ docs/classcone.html | 361 ++++++ docs/classcone.png | Bin 0 -> 412 bytes docs/classcube-members.html | 74 ++ docs/classcube.html | 241 ++++ docs/classcube.png | Bin 0 -> 421 bytes docs/classcuboid-members.html | 76 ++ docs/classcuboid.html | 298 +++++ docs/classcuboid.png | Bin 0 -> 431 bytes docs/classcylinder-members.html | 77 ++ docs/classcylinder.html | 312 +++++ docs/classcylinder.png | Bin 0 -> 479 bytes docs/classdictionary-members.html | 84 ++ docs/classdictionary.html | 487 +++++++ docs/classdictionary_value-members.html | 72 ++ docs/classdictionary_value.html | 216 ++++ docs/classdifference2d-members.html | 73 ++ docs/classdifference2d.html | 225 ++++ docs/classdifference2d.png | Bin 0 -> 602 bytes docs/classdifference3d-members.html | 73 ++ docs/classdifference3d.html | 225 ++++ docs/classdifference3d.png | Bin 0 -> 548 bytes docs/classes.html | 99 ++ docs/classfill2d-members.html | 74 ++ docs/classfill2d.html | 228 ++++ docs/classfill2d.png | Bin 0 -> 496 bytes docs/classhmatrix-members.html | 77 ++ docs/classhmatrix.html | 440 +++++++ docs/classhmatrix.png | Bin 0 -> 342 bytes docs/classhull2d-members.html | 77 ++ docs/classhull2d.html | 404 ++++++ docs/classhull2d.png | Bin 0 -> 502 bytes docs/classhull3d-members.html | 77 ++ docs/classhull3d.html | 404 ++++++ docs/classhull3d.png | Bin 0 -> 430 bytes docs/classimage2d-members.html | 69 + docs/classimage2d.html | 177 +++ docs/classintersection2d-members.html | 77 ++ docs/classintersection2d.html | 353 +++++ docs/classintersection2d.png | Bin 0 -> 625 bytes docs/classintersection3d-members.html | 77 ++ docs/classintersection3d.html | 353 +++++ docs/classintersection3d.png | Bin 0 -> 568 bytes docs/classlinear__extrude-members.html | 74 ++ docs/classlinear__extrude.html | 242 ++++ docs/classlinear__extrude.png | Bin 0 -> 580 bytes docs/classlocsys3d-members.html | 69 + docs/classlocsys3d.html | 203 +++ docs/classloft3d-members.html | 68 + docs/classloft3d.html | 205 +++ docs/classminkowski2d-members.html | 73 ++ docs/classminkowski2d.html | 225 ++++ docs/classminkowski2d.png | Bin 0 -> 594 bytes docs/classminkowski3d-members.html | 73 ++ docs/classminkowski3d.html | 215 +++ docs/classminkowski3d.png | Bin 0 -> 538 bytes docs/classmirror-members.html | 80 ++ docs/classmirror.html | 500 +++++++ docs/classmirror.png | Bin 0 -> 327 bytes docs/classoffset2d-members.html | 74 ++ docs/classoffset2d.html | 287 ++++ docs/classoffset2d.png | Bin 0 -> 517 bytes docs/classpface-members.html | 69 + docs/classpface.html | 248 ++++ docs/classpolygon-members.html | 82 ++ docs/classpolygon.html | 514 ++++++++ docs/classpolygon.png | Bin 0 -> 518 bytes docs/classpolyhedron-members.html | 85 ++ docs/classpolyhedron.html | 516 ++++++++ docs/classpolyhedron.png | Bin 0 -> 537 bytes docs/classpos2d-members.html | 71 + docs/classpos2d.html | 246 ++++ docs/classpos3d-members.html | 72 ++ docs/classpos3d.html | 274 ++++ docs/classrectangle-members.html | 75 ++ docs/classrectangle.html | 270 ++++ docs/classrectangle.png | Bin 0 -> 533 bytes docs/classrotate__extrude-members.html | 75 ++ docs/classrotate__extrude.html | 272 ++++ docs/classrotate__extrude.png | Bin 0 -> 571 bytes docs/classrotate__x-members.html | 78 ++ docs/classrotate__x.html | 438 +++++++ docs/classrotate__x.png | Bin 0 -> 363 bytes docs/classrotate__y-members.html | 78 ++ docs/classrotate__y.html | 438 +++++++ docs/classrotate__y.png | Bin 0 -> 362 bytes docs/classrotate__z-members.html | 78 ++ docs/classrotate__z.html | 438 +++++++ docs/classrotate__z.png | Bin 0 -> 358 bytes docs/classscale-members.html | 80 ++ docs/classscale.html | 493 +++++++ docs/classscale.png | Bin 0 -> 340 bytes docs/classshape-members.html | 69 + docs/classshape.html | 235 ++++ docs/classshape.png | Bin 0 -> 7255 bytes docs/classshape2d-members.html | 72 ++ docs/classshape2d.html | 300 +++++ docs/classshape2d.png | Bin 0 -> 2922 bytes docs/classsoffset2d-members.html | 69 + docs/classsoffset2d.html | 235 ++++ docs/classsoffset2d.png | Bin 0 -> 526 bytes docs/classsolid-members.html | 72 ++ docs/classsolid.html | 304 +++++ docs/classsolid.png | Bin 0 -> 4013 bytes docs/classsphere-members.html | 75 ++ docs/classsphere.html | 252 ++++ docs/classsphere.png | Bin 0 -> 426 bytes docs/classspline2d-members.html | 66 + docs/classspline2d.html | 129 ++ docs/classspline3d-members.html | 66 + docs/classspline3d.html | 129 ++ docs/classspline__path-members.html | 67 + docs/classspline__path.html | 178 +++ docs/classsquare-members.html | 74 ++ docs/classsquare.html | 242 ++++ docs/classsquare.png | Bin 0 -> 509 bytes docs/classstring-members.html | 86 ++ docs/classstring.html | 515 ++++++++ docs/classsweep-members.html | 73 ++ docs/classsweep.html | 225 ++++ docs/classsweep.png | Bin 0 -> 441 bytes docs/classtin__model-members.html | 73 ++ docs/classtin__model.html | 192 +++ docs/classtin__model.png | Bin 0 -> 470 bytes docs/classtmatrix-members.html | 75 ++ docs/classtmatrix.html | 334 +++++ docs/classtmatrix.png | Bin 0 -> 1048 bytes docs/classtransform__extrude-members.html | 73 ++ docs/classtransform__extrude.html | 211 +++ docs/classtransform__extrude.png | Bin 0 -> 617 bytes docs/classtranslate-members.html | 79 ++ docs/classtranslate.html | 466 +++++++ docs/classtranslate.png | Bin 0 -> 369 bytes docs/classunion2d-members.html | 77 ++ docs/classunion2d.html | 408 ++++++ docs/classunion2d.png | Bin 0 -> 510 bytes docs/classunion3d-members.html | 77 ++ docs/classunion3d.html | 408 ++++++ docs/classunion3d.png | Bin 0 -> 456 bytes docs/classvec2d-members.html | 76 ++ docs/classvec2d.html | 381 ++++++ docs/classvec3d-members.html | 77 ++ docs/classvec3d.html | 399 ++++++ docs/closed.png | Bin 0 -> 132 bytes docs/doc_8as.html | 83 ++ docs/doxygen.css | 1440 +++++++++++++++++++++ docs/doxygen.png | Bin 0 -> 3779 bytes docs/dynsections.js | 97 ++ docs/files.html | 66 + docs/ftv2blank.png | Bin 0 -> 86 bytes docs/ftv2doc.png | Bin 0 -> 746 bytes docs/ftv2folderclosed.png | Bin 0 -> 616 bytes docs/ftv2folderopen.png | Bin 0 -> 597 bytes docs/ftv2lastnode.png | Bin 0 -> 86 bytes docs/ftv2link.png | Bin 0 -> 746 bytes docs/ftv2mlastnode.png | Bin 0 -> 246 bytes docs/ftv2mnode.png | Bin 0 -> 246 bytes docs/ftv2node.png | Bin 0 -> 86 bytes docs/ftv2plastnode.png | Bin 0 -> 229 bytes docs/ftv2pnode.png | Bin 0 -> 229 bytes docs/ftv2splitbar.png | Bin 0 -> 314 bytes docs/ftv2vertline.png | Bin 0 -> 86 bytes docs/functions.html | 100 ++ docs/functions_b.html | 127 ++ docs/functions_c.html | 115 ++ docs/functions_d.html | 143 ++ docs/functions_e.html | 96 ++ docs/functions_f.html | 108 ++ docs/functions_func.html | 100 ++ docs/functions_func_b.html | 127 ++ docs/functions_func_c.html | 115 ++ docs/functions_func_d.html | 143 ++ docs/functions_func_e.html | 96 ++ docs/functions_func_f.html | 108 ++ docs/functions_func_g.html | 107 ++ docs/functions_func_h.html | 111 ++ docs/functions_func_i.html | 102 ++ docs/functions_func_l.html | 103 ++ docs/functions_func_m.html | 102 ++ docs/functions_func_n.html | 104 ++ docs/functions_func_o.html | 138 ++ docs/functions_func_p.html | 114 ++ docs/functions_func_r.html | 136 ++ docs/functions_func_s.html | 134 ++ docs/functions_func_t.html | 179 +++ docs/functions_func_u.html | 99 ++ docs/functions_func_v.html | 112 ++ docs/functions_func_w.html | 103 ++ docs/functions_func_x.html | 110 ++ docs/functions_func_y.html | 110 ++ docs/functions_func_z.html | 108 ++ docs/functions_g.html | 107 ++ docs/functions_h.html | 111 ++ docs/functions_i.html | 102 ++ docs/functions_l.html | 103 ++ docs/functions_m.html | 102 ++ docs/functions_n.html | 104 ++ docs/functions_o.html | 138 ++ docs/functions_p.html | 114 ++ docs/functions_r.html | 136 ++ docs/functions_s.html | 134 ++ docs/functions_t.html | 179 +++ docs/functions_u.html | 99 ++ docs/functions_v.html | 112 ++ docs/functions_vars.html | 74 ++ docs/functions_w.html | 103 ++ docs/functions_x.html | 110 ++ docs/functions_y.html | 110 ++ docs/functions_z.html | 108 ++ docs/globals.html | 66 + docs/globals_func.html | 66 + docs/hierarchy.html | 112 ++ docs/index.hhc | 1187 +++++++++++++++++ docs/index.hhk | 826 ++++++++++++ docs/index.hhp | 230 ++++ docs/index.html | 91 ++ docs/jquery.js | 31 + docs/mainpage_8h.html | 61 + docs/mainpage_8h_source.html | 63 + docs/nav_f.png | Bin 0 -> 153 bytes docs/nav_g.png | Bin 0 -> 95 bytes docs/nav_h.png | Bin 0 -> 98 bytes docs/open.png | Bin 0 -> 123 bytes docs/sync_off.png | Bin 0 -> 853 bytes docs/sync_on.png | Bin 0 -> 845 bytes docs/tab_a.png | Bin 0 -> 142 bytes docs/tab_b.png | Bin 0 -> 169 bytes docs/tab_h.png | Bin 0 -> 177 bytes docs/tab_s.png | Bin 0 -> 184 bytes docs/tabs.css | 60 + index.md | 16 + stl/test2.stl | Bin 0 -> 15284 bytes 252 files changed, 33562 insertions(+) create mode 100644 README.md create mode 100644 _config.yml create mode 100644 docs/_config.yml create mode 100644 docs/angel_48x48.bmp create mode 100644 docs/angelcad_8h.html create mode 100644 docs/angelcad_8h_source.html create mode 100644 docs/angelcad_ide_70pst.png create mode 100644 docs/angelscript_csg_ide_80pst.png create mode 100644 docs/annotated.html create mode 100644 docs/bc_s.png create mode 100644 docs/bdwn.png create mode 100644 docs/classarray-members.html create mode 100644 docs/classarray.html create mode 100644 docs/classas__reftype-members.html create mode 100644 docs/classas__reftype.html create mode 100644 docs/classboundingbox-members.html create mode 100644 docs/classboundingbox.html create mode 100644 docs/classcircle-members.html create mode 100644 docs/classcircle.html create mode 100644 docs/classcircle.png create mode 100644 docs/classcone-members.html create mode 100644 docs/classcone.html create mode 100644 docs/classcone.png create mode 100644 docs/classcube-members.html create mode 100644 docs/classcube.html create mode 100644 docs/classcube.png create mode 100644 docs/classcuboid-members.html create mode 100644 docs/classcuboid.html create mode 100644 docs/classcuboid.png create mode 100644 docs/classcylinder-members.html create mode 100644 docs/classcylinder.html create mode 100644 docs/classcylinder.png create mode 100644 docs/classdictionary-members.html create mode 100644 docs/classdictionary.html create mode 100644 docs/classdictionary_value-members.html create mode 100644 docs/classdictionary_value.html create mode 100644 docs/classdifference2d-members.html create mode 100644 docs/classdifference2d.html create mode 100644 docs/classdifference2d.png create mode 100644 docs/classdifference3d-members.html create mode 100644 docs/classdifference3d.html create mode 100644 docs/classdifference3d.png create mode 100644 docs/classes.html create mode 100644 docs/classfill2d-members.html create mode 100644 docs/classfill2d.html create mode 100644 docs/classfill2d.png create mode 100644 docs/classhmatrix-members.html create mode 100644 docs/classhmatrix.html create mode 100644 docs/classhmatrix.png create mode 100644 docs/classhull2d-members.html create mode 100644 docs/classhull2d.html create mode 100644 docs/classhull2d.png create mode 100644 docs/classhull3d-members.html create mode 100644 docs/classhull3d.html create mode 100644 docs/classhull3d.png create mode 100644 docs/classimage2d-members.html create mode 100644 docs/classimage2d.html create mode 100644 docs/classintersection2d-members.html create mode 100644 docs/classintersection2d.html create mode 100644 docs/classintersection2d.png create mode 100644 docs/classintersection3d-members.html create mode 100644 docs/classintersection3d.html create mode 100644 docs/classintersection3d.png create mode 100644 docs/classlinear__extrude-members.html create mode 100644 docs/classlinear__extrude.html create mode 100644 docs/classlinear__extrude.png create mode 100644 docs/classlocsys3d-members.html create mode 100644 docs/classlocsys3d.html create mode 100644 docs/classloft3d-members.html create mode 100644 docs/classloft3d.html create mode 100644 docs/classminkowski2d-members.html create mode 100644 docs/classminkowski2d.html create mode 100644 docs/classminkowski2d.png create mode 100644 docs/classminkowski3d-members.html create mode 100644 docs/classminkowski3d.html create mode 100644 docs/classminkowski3d.png create mode 100644 docs/classmirror-members.html create mode 100644 docs/classmirror.html create mode 100644 docs/classmirror.png create mode 100644 docs/classoffset2d-members.html create mode 100644 docs/classoffset2d.html create mode 100644 docs/classoffset2d.png create mode 100644 docs/classpface-members.html create mode 100644 docs/classpface.html create mode 100644 docs/classpolygon-members.html create mode 100644 docs/classpolygon.html create mode 100644 docs/classpolygon.png create mode 100644 docs/classpolyhedron-members.html create mode 100644 docs/classpolyhedron.html create mode 100644 docs/classpolyhedron.png create mode 100644 docs/classpos2d-members.html create mode 100644 docs/classpos2d.html create mode 100644 docs/classpos3d-members.html create mode 100644 docs/classpos3d.html create mode 100644 docs/classrectangle-members.html create mode 100644 docs/classrectangle.html create mode 100644 docs/classrectangle.png create mode 100644 docs/classrotate__extrude-members.html create mode 100644 docs/classrotate__extrude.html create mode 100644 docs/classrotate__extrude.png create mode 100644 docs/classrotate__x-members.html create mode 100644 docs/classrotate__x.html create mode 100644 docs/classrotate__x.png create mode 100644 docs/classrotate__y-members.html create mode 100644 docs/classrotate__y.html create mode 100644 docs/classrotate__y.png create mode 100644 docs/classrotate__z-members.html create mode 100644 docs/classrotate__z.html create mode 100644 docs/classrotate__z.png create mode 100644 docs/classscale-members.html create mode 100644 docs/classscale.html create mode 100644 docs/classscale.png create mode 100644 docs/classshape-members.html create mode 100644 docs/classshape.html create mode 100644 docs/classshape.png create mode 100644 docs/classshape2d-members.html create mode 100644 docs/classshape2d.html create mode 100644 docs/classshape2d.png create mode 100644 docs/classsoffset2d-members.html create mode 100644 docs/classsoffset2d.html create mode 100644 docs/classsoffset2d.png create mode 100644 docs/classsolid-members.html create mode 100644 docs/classsolid.html create mode 100644 docs/classsolid.png create mode 100644 docs/classsphere-members.html create mode 100644 docs/classsphere.html create mode 100644 docs/classsphere.png create mode 100644 docs/classspline2d-members.html create mode 100644 docs/classspline2d.html create mode 100644 docs/classspline3d-members.html create mode 100644 docs/classspline3d.html create mode 100644 docs/classspline__path-members.html create mode 100644 docs/classspline__path.html create mode 100644 docs/classsquare-members.html create mode 100644 docs/classsquare.html create mode 100644 docs/classsquare.png create mode 100644 docs/classstring-members.html create mode 100644 docs/classstring.html create mode 100644 docs/classsweep-members.html create mode 100644 docs/classsweep.html create mode 100644 docs/classsweep.png create mode 100644 docs/classtin__model-members.html create mode 100644 docs/classtin__model.html create mode 100644 docs/classtin__model.png create mode 100644 docs/classtmatrix-members.html create mode 100644 docs/classtmatrix.html create mode 100644 docs/classtmatrix.png create mode 100644 docs/classtransform__extrude-members.html create mode 100644 docs/classtransform__extrude.html create mode 100644 docs/classtransform__extrude.png create mode 100644 docs/classtranslate-members.html create mode 100644 docs/classtranslate.html create mode 100644 docs/classtranslate.png create mode 100644 docs/classunion2d-members.html create mode 100644 docs/classunion2d.html create mode 100644 docs/classunion2d.png create mode 100644 docs/classunion3d-members.html create mode 100644 docs/classunion3d.html create mode 100644 docs/classunion3d.png create mode 100644 docs/classvec2d-members.html create mode 100644 docs/classvec2d.html create mode 100644 docs/classvec3d-members.html create mode 100644 docs/classvec3d.html create mode 100644 docs/closed.png create mode 100644 docs/doc_8as.html create mode 100644 docs/doxygen.css create mode 100644 docs/doxygen.png create mode 100644 docs/dynsections.js create mode 100644 docs/files.html create mode 100644 docs/ftv2blank.png create mode 100644 docs/ftv2doc.png create mode 100644 docs/ftv2folderclosed.png create mode 100644 docs/ftv2folderopen.png create mode 100644 docs/ftv2lastnode.png create mode 100644 docs/ftv2link.png create mode 100644 docs/ftv2mlastnode.png create mode 100644 docs/ftv2mnode.png create mode 100644 docs/ftv2node.png create mode 100644 docs/ftv2plastnode.png create mode 100644 docs/ftv2pnode.png create mode 100644 docs/ftv2splitbar.png create mode 100644 docs/ftv2vertline.png create mode 100644 docs/functions.html create mode 100644 docs/functions_b.html create mode 100644 docs/functions_c.html create mode 100644 docs/functions_d.html create mode 100644 docs/functions_e.html create mode 100644 docs/functions_f.html create mode 100644 docs/functions_func.html create mode 100644 docs/functions_func_b.html create mode 100644 docs/functions_func_c.html create mode 100644 docs/functions_func_d.html create mode 100644 docs/functions_func_e.html create mode 100644 docs/functions_func_f.html create mode 100644 docs/functions_func_g.html create mode 100644 docs/functions_func_h.html create mode 100644 docs/functions_func_i.html create mode 100644 docs/functions_func_l.html create mode 100644 docs/functions_func_m.html create mode 100644 docs/functions_func_n.html create mode 100644 docs/functions_func_o.html create mode 100644 docs/functions_func_p.html create mode 100644 docs/functions_func_r.html create mode 100644 docs/functions_func_s.html create mode 100644 docs/functions_func_t.html create mode 100644 docs/functions_func_u.html create mode 100644 docs/functions_func_v.html create mode 100644 docs/functions_func_w.html create mode 100644 docs/functions_func_x.html create mode 100644 docs/functions_func_y.html create mode 100644 docs/functions_func_z.html create mode 100644 docs/functions_g.html create mode 100644 docs/functions_h.html create mode 100644 docs/functions_i.html create mode 100644 docs/functions_l.html create mode 100644 docs/functions_m.html create mode 100644 docs/functions_n.html create mode 100644 docs/functions_o.html create mode 100644 docs/functions_p.html create mode 100644 docs/functions_r.html create mode 100644 docs/functions_s.html create mode 100644 docs/functions_t.html create mode 100644 docs/functions_u.html create mode 100644 docs/functions_v.html create mode 100644 docs/functions_vars.html create mode 100644 docs/functions_w.html create mode 100644 docs/functions_x.html create mode 100644 docs/functions_y.html create mode 100644 docs/functions_z.html create mode 100644 docs/globals.html create mode 100644 docs/globals_func.html create mode 100644 docs/hierarchy.html create mode 100644 docs/index.hhc create mode 100644 docs/index.hhk create mode 100644 docs/index.hhp create mode 100644 docs/index.html create mode 100644 docs/jquery.js create mode 100644 docs/mainpage_8h.html create mode 100644 docs/mainpage_8h_source.html create mode 100644 docs/nav_f.png create mode 100644 docs/nav_g.png create mode 100644 docs/nav_h.png create mode 100644 docs/open.png create mode 100644 docs/sync_off.png create mode 100644 docs/sync_on.png create mode 100644 docs/tab_a.png create mode 100644 docs/tab_b.png create mode 100644 docs/tab_h.png create mode 100644 docs/tab_s.png create mode 100644 docs/tabs.css create mode 100644 index.md create mode 100644 stl/test2.stl diff --git a/README.md b/README.md new file mode 100644 index 0000000..ccfcba9 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# acdocs +AngelCAD - user documentation + +This repository contains the GitHub pages for AngelCAD. diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..2f7efbe --- /dev/null +++ b/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-minimal \ No newline at end of file diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 0000000..c741881 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-slate \ No newline at end of file diff --git a/docs/angel_48x48.bmp b/docs/angel_48x48.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e9e764003acb59b804c00c4dbbbbebdc5fff9edd GIT binary patch literal 6966 zcmdU!Nk}D05Qd$`vuVGyg@D1^?u`!%Ml@D<>K0f{p)piY^ zpP%Cos(dhMQBjdyfYv4ve6YMK8RUnChPJl0tf{tZjHII)3^nqk81m-3ckk?iwK%Dv zp+PlS2xF4M5)u+Ds=H_OCGqY}QZ}DnuWujWWDi;X z0SdH{62fE_NuF0sMERtMFN^2q=CUqUXVecU&=MaQ*4EZOK0X@dDR<}Q=2BBrWek;f zR>ZoD%IN_VXvsuuVsCG+sXXq4*Zr5=k(rrEHe^wz`soB(@*?6MHJc@Q%6qhZ`t(V~ zB;RE*j?r`USU^KSzhy)NPPbl0YQvw);CGCdR#a3}Sy|cU=H}hq9g&k|rlqAxGGD%Y z!E?A0N(%L_Ktn+AAp%rYRp|wc?fLn69Iv#rRDgoy;sse_z#7Bh3 zXhblhHmRqkrbh6=x0x;p7+(q6BpnhEzRguVEG$egks8!aT;7qy@kBs2D%AHtKpZhp z;HDq7)TRPqz1+loe0(Gh(kq)wpa8;>Dybg=BE!iRW6}Yz;veLk%2L}gD(T$zd zmP9Rl$%;ZTB%Lo?_`sigbU{IZ5!$qeqep0B;jBX7T59O|5QxYi_xJafgrA<~PM9NE)Yn0GnNk7mK z(DQ*m5!h6o1I{Qqk*A;{u$bF7A0W_m}K5VgRtXNoB&_^n!kcqOh zvyJFd4|jjgyZ&B`epH!ec}_Y6^n4H|VoT&Xs%)zW3z|IVg?#Pp?JW_IUI~UgdI;L6 zLZLANkUcf~3wd6-Ir7z3Pl=pPDikuJ!7kva)aMch@rsXOSawHD5e*cgR*wQG&_X~o zkVKD=#M=0nL|X`tj*gPJSyxC%h@im--mI)FzQqy4P027Fg{Vcj00Pu>)ohs-Bsmmh zA2>^UD#&OJuDzshA`A;;3&^(YBW7VkB}wTOwI~MyAOR}LXs?h*STiY-rZQS5%jZsq zDJVQ3BOZzkiuN}@H=$f}2H-4hffaP)5MS&urr0TcBRV=7s>Uflv + + + + + +AngelCAD: angelcad.h File Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
angelcad.h File Reference
+
+
+ +

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  boundingbox
 bounding box aligned with system axes More...
 
class  circle
 circle, centered at origin More...
 
class  cone
 cone with axis in z-direction, by default extending from origin More...
 
class  cube
 cube, by default in 1st octant with one corner toucing origin More...
 
class  cuboid
 cuboid, by default in 1st octant with one corner toucing origin More...
 
class  cylinder
 cylinder with axis in z-direction, by default extending from origin More...
 
class  difference2d
 2d difference boolean operation More...
 
class  difference3d
 3d difference boolean operation More...
 
class  fill2d
 2d fill operation, filling holes in input shapes More...
 
class  hmatrix
 Homogeneous transformation matrix. More...
 
class  hull2d
 2d hull operation, enclosing the input shapes More...
 
class  hull3d
 3d hull operation, enclosing the input solids More...
 
class  intersection2d
 2d intersection boolean operation More...
 
class  intersection3d
 3d intersection boolean operation More...
 
class  linear_extrude
 Extrude 2d shape in z direction into 3d solid. More...
 
class  locsys3d
 3d localsystem More...
 
class  minkowski2d
 2d Minkowski sum operation More...
 
class  minkowski3d
 3d Minkowski sum operation More...
 
class  mirror
 Mirror transformation around given point. More...
 
class  offset2d
 2d profile offset More...
 
class  pface
 Polyhedron face. More...
 
class  polygon
 polygon, vertices in CCW order More...
 
class  polyhedron
 Closed polyhedron volume defined by vertices and planar faces. More...
 
class  pos2d
 2d position coordinates More...
 
class  pos3d
 3d position coordinates More...
 
class  rectangle
 rectangle, by default located in 1st quadrant touching origin More...
 
class  rotate_extrude
 Extrude 2d shape CCW in XZ plane into 3d solid. More...
 
class  rotate_x
 Rotation around x. More...
 
class  rotate_y
 Rotation around y. More...
 
class  rotate_z
 Rotation around z. More...
 
class  scale
 Scaling transformation. More...
 
class  shape
 Abstract base for all primitives and booleans. More...
 
class  shape2d
 Abstract base for 2d primitives and booleans. More...
 
class  solid
 Abstract base for 3d primitives and booleans. More...
 
class  sphere
 sphere, centered at origin More...
 
class  spline2d
 2d cubic spline curve More...
 
class  spline3d
 3d cubic spline curve More...
 
class  spline_path
 spline_path for sweep More...
 
class  square
 square, by default located in 1st quadrant touching origin More...
 
class  sweep
 Sweep 2d shape along path curve to create 3d solid. More...
 
class  tmatrix
 Abstract base matrix for transformations. More...
 
class  transform_extrude
 Extrude from botton to top shapes using transform. More...
 
class  translate
 Translation in x, y and z. More...
 
class  union2d
 2d union boolean operation More...
 
class  union3d
 3d union boolean operation More...
 
class  vec2d
 2d direction vector More...
 
class  vec3d
 3d direction vector More...
 
+
+ + + + diff --git a/docs/angelcad_8h_source.html b/docs/angelcad_8h_source.html new file mode 100644 index 0000000..c0a8600 --- /dev/null +++ b/docs/angelcad_8h_source.html @@ -0,0 +1,1360 @@ + + + + + + +AngelCAD: angelcad.h Source File + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
angelcad.h
+
+
+Go to the documentation of this file.
1 #ifndef ANGELCAD_AUTODOC
+
2 #define ANGELCAD_AUTODOC
+
3 /*
+
4 This is AngelCAD autogenerated AngelScript documentation
+
5 AngelCAD version: v1.1-00
+
6 For language description, see:
+
7  * The script language : http://www.angelcode.com/angelscript/sdk/docs/manual/doc_script.html
+
8  * Script class overview : http://www.angelcode.com/angelscript/sdk/docs/manual/doc_script_class_desc.html
+
9 
+
10 Below follows a list of AngelCAD classes in alphabetical order written quasi c++ style
+
11 to facilitate using it as direct input to doxygen documentation system.
+
12 */
+
13 
+
15 
+ +
17 {
+
18 public:
+
20 
+
21  boundingbox();
+
22 
+
23  bool is_empty() const;
+
25 
+
26  double dx() const;
+
28 
+
29  double dy() const;
+
31 
+
32  double dz() const;
+
34 
+
35  pos3d@ center() const;
+
37 
+
38  pos3d@ p1() const;
+
40 
+
41  pos3d@ p2() const;
+
42  string Type() const;
+
44 
+
45  void enclose(pos3d@ p);
+
46 };
+
47 
+
49 
+
50 class circle : public shape2d
+
51 {
+
52 public:
+
53  circle(const pos2d@ p1, const pos2d@ p2, const pos2d@ p3 );
+
55 
+
56  circle(double r);
+
57 
+
58  boundingbox@ box() const;
+
60 
+
61  double r() const;
+
63 
+
64  double radius() const;
+
66 
+
67  string Type() const;
+
68  tmatrix@ transform() const;
+
69 };
+
70 
+
72 
+
74 class cone : public solid
+
75 {
+
76 public:
+
78 
+
82  cone(double h, double r1, double r2, bool center=false);
+
83 
+
84  boundingbox@ box() const;
+
86 
+
87  double h() const;
+
89 
+
90  double height() const;
+
92 
+
93  double r1() const;
+
95 
+
96  double r2() const;
+
98 
+
99  double radius1() const;
+
101 
+
102  double radius2() const;
+
104 
+
105  string Type() const;
+
106  tmatrix@ transform() const;
+
107 };
+
108 
+
110 class cube : public solid
+
111 {
+
112 public:
+
114 
+
116  cube(double size, bool center=false);
+
117 
+
118  boundingbox@ box() const;
+
120 
+
121  double size() const;
+
123 
+
124  string Type() const;
+
125  tmatrix@ transform() const;
+
126 };
+
127 
+
129 
+
131 class cuboid : public solid
+
132 {
+
133 public:
+
135 
+
139  cuboid(double dx, double dy, double dz, bool center=false);
+
140 
+
141  boundingbox@ box() const;
+
143 
+
144  double dx() const;
+
146 
+
147  double dy() const;
+
149 
+
150  double dz() const;
+
152 
+
153  string Type() const;
+
154  tmatrix@ transform() const;
+
155 };
+
156 
+
158 
+
160 class cylinder : public solid
+
161 {
+
162 public:
+
164 
+
167  cylinder(double h, double r, bool center=false);
+
168 
+
169  boundingbox@ box() const;
+
171 
+
172  double h() const;
+
174 
+
175  double height() const;
+
177 
+
178  double r() const;
+
180 
+
181  double radius() const;
+
183 
+
184  string Type() const;
+
185  tmatrix@ transform() const;
+
186 };
+
187 
+
189 
+
194 class difference2d : public shape2d
+
195 {
+
196 public:
+
198 
+
200  difference2d(shape2d@ incl, shape2d@ excl);
+
201 
+
202  boundingbox@ box() const;
+
204 
+
205  string Type() const;
+
206  tmatrix@ transform() const;
+
207 };
+
208 
+
210 
+
215 class difference3d : public solid
+
216 {
+
217 public:
+
219 
+
221  difference3d(solid@ incl, solid@ excl);
+
222 
+
223  boundingbox@ box() const;
+
225 
+
226  string Type() const;
+
227  tmatrix@ transform() const;
+
228 };
+
229 
+
231 
+
235 class fill2d : public shape2d
+
236 {
+
237 public:
+
239 
+
240  fill2d(array<shape2d@>@ arr);
+
241  fill2d(const shape2d@ s1);
+
242 
+
243  boundingbox@ box() const;
+
245 
+
246  string Type() const;
+
247  tmatrix@ transform() const;
+
248 };
+
249 
+
251 
+
253 class hmatrix : public tmatrix
+
254 {
+
255 public:
+
256  hmatrix(const vec3d@ xvec, const vec3d@ yvec, const pos3d@ pos = pos3d(0,0,0));
+
258 
+
262  hmatrix(const vec3d@ xvec, const vec3d@ yvec, const vec3d@ zvec, const pos3d@ pos = pos3d(0,0,0));
+
263 
+
264  pos2d@ opMul(pos2d@ obj);
+
266 
+
268  pos3d@ opMul(pos3d@ obj);
+
269  pos3d@ origin() const;
+
271 
+
273  shape2d@ opMul(shape2d@ obj);
+
275 
+
277  solid@ opMul(solid@ obj);
+
278  string Type() const;
+
280 
+
282  tmatrix@ opMul(const tmatrix@ B);
+
283  vec3d@ xdir() const;
+
284  vec3d@ ydir() const;
+
285  vec3d@ zdir() const;
+
287  void dump() const;
+
288 };
+
289 
+
291 
+
295 class hull2d : public shape2d
+
296 {
+
297 public:
+
299 
+
300  hull2d(array<shape2d@>@ arr);
+
302 
+
304  hull2d(const shape2d@ s1, const shape2d@ s2 );
+
306 
+
309  hull2d(const shape2d@ s1, const shape2d@ s2, const shape2d@ s3 );
+
311 
+
315  hull2d(const shape2d@ s1, const shape2d@ s2, const shape2d@ s3, const shape2d@ s4 );
+
317 
+
322  hull2d(const shape2d@ s1, const shape2d@ s2, const shape2d@ s3, const shape2d@ s4, const shape2d@ s5 );
+
323 
+
324  boundingbox@ box() const;
+
326 
+
327  string Type() const;
+
328  tmatrix@ transform() const;
+
329 };
+
330 
+
332 
+
336 class hull3d : public solid
+
337 {
+
338 public:
+
340 
+
341  hull3d(array<solid@>@ arr);
+
343 
+
345  hull3d(const solid@ s1, const solid@ s2 );
+
347 
+
350  hull3d(const solid@ s1, const solid@ s2, const solid@ s3 );
+
352 
+
356  hull3d(const solid@ s1, const solid@ s2, const solid@ s3, const solid@ s4 );
+
358 
+
363  hull3d(const solid@ s1, const solid@ s2, const solid@ s3, const solid@ s4, const solid@ s5 );
+
364 
+
365  boundingbox@ box() const;
+
367 
+
368  string Type() const;
+
369  tmatrix@ transform() const;
+
370 };
+
371 
+
373 
+
378 class intersection2d : public shape2d
+
379 {
+
380 public:
+
381  intersection2d(array<shape2d@>@ arr);
+
382  intersection2d(const shape2d@ s1, const shape2d@ s2 );
+
383  intersection2d(const shape2d@ s1, const shape2d@ s2, const shape2d@ s3 );
+
384  intersection2d(const shape2d@ s1, const shape2d@ s2, const shape2d@ s3, const shape2d@ s4 );
+
385  intersection2d(const shape2d@ s1, const shape2d@ s2, const shape2d@ s3, const shape2d@ s4, const shape2d@ s5 );
+
386 
+
387  boundingbox@ box() const;
+
389 
+
390  string Type() const;
+
391  tmatrix@ transform() const;
+
392 };
+
393 
+
395 
+
400 class intersection3d : public solid
+
401 {
+
402 public:
+
403  intersection3d(array<solid@>@ arr);
+
404  intersection3d(const solid@ s1, const solid@ s2 );
+
405  intersection3d(const solid@ s1, const solid@ s2, const solid@ s3 );
+
406  intersection3d(const solid@ s1, const solid@ s2, const solid@ s3, const solid@ s4 );
+
407  intersection3d(const solid@ s1, const solid@ s2, const solid@ s3, const solid@ s4, const solid@ s5 );
+
408 
+
409  boundingbox@ box() const;
+
411 
+
412  string Type() const;
+
413  tmatrix@ transform() const;
+
414 };
+
415 
+
417 
+
419 class linear_extrude : public solid
+
420 {
+
421 public:
+
423 
+
425  linear_extrude(const shape2d@ shape, double height);
+
426 
+
427  boundingbox@ box() const;
+
429 
+
430  double height() const;
+
432 
+
433  string Type() const;
+
434  tmatrix@ transform() const;
+
435 };
+
436 
+
438 
+
440 class locsys3d
+
441 {
+
442 public:
+
444 
+
446  locsys3d(const vec3d@ xvec, const vec3d@ zvec);
+
447 
+
449 
+
450  string Type() const;
+
452 
+
453  vec3d@ x() const;
+
455 
+
456  vec3d@ y() const;
+
458 
+
459  vec3d@ z() const;
+
460 };
+
461 
+
463 
+
469 class minkowski2d : public shape2d
+
470 {
+
471 public:
+
473 
+
475  minkowski2d(const shape2d@ a, const shape2d@ b );
+
476 
+
478 
+
479  boundingbox@ box() const;
+
481 
+
482  string Type() const;
+
483  tmatrix@ transform() const;
+
484 };
+
485 
+
487 
+
493 class minkowski3d : public solid
+
494 {
+
495 public:
+
496  minkowski3d(const solid@ a, const solid@ b );
+
497 
+
499 
+
500  boundingbox@ box() const;
+
502 
+
503  string Type() const;
+
504  tmatrix@ transform() const;
+
505 };
+
506 
+
508 
+
510 class mirror : public tmatrix
+
511 {
+
512 public:
+
514 
+
517  mirror(double dx, double dy, double dz);
+
519 
+
521  mirror(vec3d@ normal, pos3d@ point = pos3d(0,0,0) );
+
522 
+
524 
+
525  double dx() const;
+
527 
+
528  double dy() const;
+
530 
+
531  double dz() const;
+
532  pos2d@ opMul(pos2d@ obj);
+
534 
+
536  pos3d@ opMul(pos3d@ obj);
+
537  pos3d@ origin() const;
+
539 
+
541  shape2d@ opMul(shape2d@ obj);
+
543 
+
545  solid@ opMul(solid@ obj);
+
546  string Type() const;
+
548 
+
550  tmatrix@ opMul(const tmatrix@ B);
+
551  vec3d@ xdir() const;
+
552  vec3d@ ydir() const;
+
553  vec3d@ zdir() const;
+
555  void dump() const;
+
556 };
+
557 
+
559 
+
562 class offset2d : public shape2d
+
563 {
+
564 public:
+
566 
+
570  offset2d(array<shape2d@>@ arr, double r=0x7fc00000, double delta=0x7fc00000, bool chamfer=false);
+
572 
+
576  offset2d(const shape2d@ profile, double r=0x7fc00000, double delta=0x7fc00000, bool chamfer=false);
+
577 
+
578  boundingbox@ box() const;
+
580 
+
581  string Type() const;
+
582  tmatrix@ transform() const;
+
583 };
+
584 
+
586 
+
590 class pface
+
591 {
+
592 public:
+
594 
+
597  pface(uint iv1, uint iv2, uint iv3 );
+
599 
+
603  pface(uint iv1, uint iv2, uint iv3, uint iv4 );
+
604 
+
606 
+
607  string Type() const;
+
609 
+
610  uint nvert() const;
+
612 
+
614  uint vindex(uint iv) const;
+
615 };
+
616 
+
618 
+
620 class polygon : public shape2d
+
621 {
+
622 public:
+
623  polygon(array<pos2d@>@ points, bool check=true);
+
625 
+
628  polygon(const pos2d@ p1, const pos2d@ p2, const pos2d@ p3 );
+
630 
+
634  polygon(const pos2d@ p1, const pos2d@ p2, const pos2d@ p3, const pos2d@ p4 );
+
636 
+
641  polygon(const pos2d@ p1, const pos2d@ p2, const pos2d@ p3, const pos2d@ p4, const pos2d@ p5 );
+
643 
+
645  polygon(const spline2d@ spline, uint nseg=30);
+
646  polygon(double r, uint np);
+
647 
+
648  boundingbox@ box() const;
+
650 
+
651  double area() const;
+
653 
+
654  double signed_area() const;
+
655  pos2d@ vertex(uint iv) const;
+
657 
+
658  string Type() const;
+
659  tmatrix@ transform() const;
+
661 
+
662  uint size() const;
+
663 };
+
664 
+
666 
+
669 class polyhedron : public solid
+
670 {
+
671 public:
+
672  polyhedron(array<pos3d@>@ points);
+
674 
+
676  polyhedron(array<pos3d@>@ points, array<pface@>@ faces);
+
677  polyhedron(string file, int id=-1);
+
678 
+
679  boundingbox@ box() const;
+
681 
+
683  double face_area(uint iface) const;
+
685 
+
686  double volume() const;
+
688 
+
690  pface@ face(uint iface) const;
+
692 
+
694  pos3d@ vertex(uint iv) const;
+
696 
+
697  string Type() const;
+
698  tmatrix@ transform() const;
+
700 
+
701  uint nface() const;
+
703 
+
704  uint nvert() const;
+
706 
+
707  void flip_face(uint iface);
+
709  void flip_faces();
+
711 
+
713  void set_vertex(uint iv, pos3d@ pos);
+
714  void verify() const;
+
715 };
+
716 
+
718 
+
720 class pos2d
+
721 {
+
722 public:
+
724 
+
726  pos2d(double x,double y);
+
727 
+
729 
+
731  double dist(const pos2d@ pos) const;
+
733 
+
734  double x() const;
+
736 
+
737  double y() const;
+
738  pos2d@ opMul(double f1);
+
739  pos2d@ opMul_r(double f1);
+
741 
+
742  string Type() const;
+
743 };
+
744 
+
746 
+
748 class pos3d
+
749 {
+
750 public:
+
752 
+
755  pos3d(double x,double y, double z);
+
756 
+
758 
+
760  double dist(const pos3d@ pos) const;
+
762 
+
763  double x() const;
+
765 
+
766  double y() const;
+
768 
+
769  double z() const;
+
770  pos3d@ opMul(double f1);
+
771  pos3d@ opMul_r(double f1);
+
773 
+
774  string Type() const;
+
775 };
+
776 
+
778 
+
781 class rectangle : public shape2d
+
782 {
+
783 public:
+
785 
+
788  rectangle(double dx, double dy, bool center=false);
+
789 
+
790  boundingbox@ box() const;
+
792 
+
793  double dx() const;
+
795 
+
796  double dy() const;
+
798 
+
799  string Type() const;
+
800  tmatrix@ transform() const;
+
801 };
+
802 
+
804 
+
808 class rotate_extrude : public solid
+
809 {
+
810 public:
+
812 
+
815  rotate_extrude(const shape2d@ shape, double deg, double pitch = 0.0);
+
816 
+
817  boundingbox@ box() const;
+
819 
+
820  double deg() const;
+
822 
+
823  double rad() const;
+
825 
+
826  string Type() const;
+
827  tmatrix@ transform() const;
+
828 };
+
829 
+
831 
+
833 class rotate_x : public tmatrix
+
834 {
+
835 public:
+
837 
+
839  rotate_x(double deg=0x7fc00000, double rad=0x7fc00000);
+
840 
+
842 
+
843  double deg() const;
+
845 
+
846  double rad() const;
+
847  pos2d@ opMul(pos2d@ obj);
+
849 
+
851  pos3d@ opMul(pos3d@ obj);
+
852  pos3d@ origin() const;
+
854 
+
856  shape2d@ opMul(shape2d@ obj);
+
858 
+
860  solid@ opMul(solid@ obj);
+
862 
+
863  string Type() const;
+
865 
+
867  tmatrix@ opMul(const tmatrix@ B);
+
868  vec3d@ xdir() const;
+
869  vec3d@ ydir() const;
+
870  vec3d@ zdir() const;
+
872  void dump() const;
+
873 };
+
874 
+
876 
+
878 class rotate_y : public tmatrix
+
879 {
+
880 public:
+
882 
+
884  rotate_y(double deg=0x7fc00000, double rad=0x7fc00000);
+
885 
+
887 
+
888  double deg() const;
+
890 
+
891  double rad() const;
+
892  pos2d@ opMul(pos2d@ obj);
+
894 
+
896  pos3d@ opMul(pos3d@ obj);
+
897  pos3d@ origin() const;
+
899 
+
901  shape2d@ opMul(shape2d@ obj);
+
903 
+
905  solid@ opMul(solid@ obj);
+
907 
+
908  string Type() const;
+
910 
+
912  tmatrix@ opMul(const tmatrix@ B);
+
913  vec3d@ xdir() const;
+
914  vec3d@ ydir() const;
+
915  vec3d@ zdir() const;
+
917  void dump() const;
+
918 };
+
919 
+
921 
+
923 class rotate_z : public tmatrix
+
924 {
+
925 public:
+
927 
+
929  rotate_z(double deg=0x7fc00000, double rad=0x7fc00000);
+
930 
+
932 
+
933  double deg() const;
+
935 
+
936  double rad() const;
+
937  pos2d@ opMul(pos2d@ obj);
+
939 
+
941  pos3d@ opMul(pos3d@ obj);
+
942  pos3d@ origin() const;
+
944 
+
946  shape2d@ opMul(shape2d@ obj);
+
948 
+
950  solid@ opMul(solid@ obj);
+
952 
+
953  string Type() const;
+
955 
+
957  tmatrix@ opMul(const tmatrix@ B);
+
958  vec3d@ xdir() const;
+
959  vec3d@ ydir() const;
+
960  vec3d@ zdir() const;
+
962  void dump() const;
+
963 };
+
964 
+
966 
+
968 class scale : public tmatrix
+
969 {
+
970 public:
+
972 
+
973  scale(double s);
+
975 
+
978  scale(double sx, double sy, double sz=1.0);
+
979 
+
981 
+
982  double sx() const;
+
984 
+
985  double sy() const;
+
987 
+
988  double sz() const;
+
989  pos2d@ opMul(pos2d@ obj);
+
991 
+
993  pos3d@ opMul(pos3d@ obj);
+
994  pos3d@ origin() const;
+
996 
+
998  shape2d@ opMul(shape2d@ obj);
+
1000 
+
1002  solid@ opMul(solid@ obj);
+
1004 
+
1005  string Type() const;
+
1007 
+
1009  tmatrix@ opMul(const tmatrix@ B);
+
1010  vec3d@ xdir() const;
+
1011  vec3d@ ydir() const;
+
1012  vec3d@ zdir() const;
+
1014  void dump() const;
+
1015 };
+
1016 
+
1018 class shape
+
1019 {
+
1020 public:
+
1021  boundingbox@ box() const;
+
1023 
+
1024  string Type() const;
+
1025  tmatrix@ transform() const;
+
1027 
+
1028  void write_csg(string path);
+
1030 
+
1032  void write_xcsg(string path, double secant_tolerance = - 1.0);
+
1033 };
+
1034 
+
1036 
+
1038 class shape2d : public shape
+
1039 {
+
1040 public:
+
1041  boundingbox@ box() const;
+
1043 
+
1044  shape2d@ opAdd(shape2d@ b);
+
1046 
+
1047  shape2d@ opAnd(shape2d@ b);
+
1049 
+
1050  shape2d@ opSub(shape2d@ b);
+
1052 
+
1053  string Type() const;
+
1054  tmatrix@ transform() const;
+
1056 
+
1057  void write_csg(string path);
+
1059 
+
1061  void write_xcsg(string path, double secant_tolerance = - 1.0);
+
1062 };
+
1063 
+
1065 
+
1067 class solid : public shape
+
1068 {
+
1069 public:
+
1070  boundingbox@ box() const;
+
1072 
+
1073  solid@ opAdd(solid@ b);
+
1075 
+
1076  solid@ opAnd(solid@ b);
+
1078 
+
1079  solid@ opSub(solid@ b);
+
1081 
+
1082  string Type() const;
+
1083  tmatrix@ transform() const;
+
1085 
+
1086  void write_csg(string path);
+
1088 
+
1090  void write_xcsg(string path, double secant_tolerance = - 1.0);
+
1091 };
+
1092 
+
1094 
+
1096 class sphere : public solid
+
1097 {
+
1098 public:
+
1100 
+
1101  sphere(double r);
+
1102 
+
1103  boundingbox@ box() const;
+
1105 
+
1106  double r() const;
+
1108 
+
1109  double radius() const;
+
1111 
+
1112  string Type() const;
+
1113  tmatrix@ transform() const;
+
1114 };
+
1115 
+
1117 
+ +
1120 {
+
1121 public:
+
1123 
+
1124  spline2d(array<pos2d@>@ points);
+
1125 
+
1127 
+
1128  string Type() const;
+
1129 };
+
1130 
+
1132 
+ +
1135 {
+
1136 public:
+
1138 
+
1139  spline3d(array<pos3d@>@ points);
+
1140 
+
1142 
+
1143  string Type() const;
+
1144 };
+
1145 
+
1147 
+ +
1150 {
+
1151 public:
+
1153 
+
1155  spline_path(array<pos3d@>@ p, array<vec3d@>@ v);
+
1157 
+
1159  spline_path(array<pos3d@>@ p, vec3d@ v);
+
1160 
+
1162 
+
1163  string Type() const;
+
1164 };
+
1165 
+
1167 
+
1170 class square : public shape2d
+
1171 {
+
1172 public:
+
1174 
+
1176  square(double size, bool center=false);
+
1177 
+
1178  boundingbox@ box() const;
+
1180 
+
1181  double size() const;
+
1183 
+
1184  string Type() const;
+
1185  tmatrix@ transform() const;
+
1186 };
+
1187 
+
1189 
+
1191 class sweep : public solid
+
1192 {
+
1193 public:
+
1195 
+
1197  sweep(const shape2d@ shape,const spline_path@ path);
+
1198 
+
1200 
+
1201  boundingbox@ box() const;
+
1203 
+
1204  string Type() const;
+
1205  tmatrix@ transform() const;
+
1206 };
+
1207 
+
1209 
+
1211 class tmatrix
+
1212 {
+
1213 public:
+
1214  pos2d@ opMul(pos2d@ obj);
+
1216 
+
1218  pos3d@ opMul(pos3d@ obj);
+
1219  pos3d@ origin() const;
+
1221 
+
1223  shape2d@ opMul(shape2d@ obj);
+
1225 
+
1227  solid@ opMul(solid@ obj);
+
1229 
+
1230  string Type() const;
+
1232 
+
1234  tmatrix@ opMul(const tmatrix@ B);
+
1235  vec3d@ xdir() const;
+
1236  vec3d@ ydir() const;
+
1237  vec3d@ zdir() const;
+
1239  void dump() const;
+
1240 };
+
1241 
+
1243 
+
1246 class transform_extrude : public solid
+
1247 {
+
1248 public:
+
1249  transform_extrude(const shape2d@ bottom, const shape2d@ top);
+
1250 
+
1251  boundingbox@ box() const;
+
1253 
+
1254  string Type() const;
+
1255  tmatrix@ transform() const;
+
1256 };
+
1257 
+
1259 
+
1261 class translate : public tmatrix
+
1262 {
+
1263 public:
+
1265 
+
1268  translate(double dx, double dy, double dz=0.0);
+
1269 
+
1271 
+
1272  double dx() const;
+
1274 
+
1275  double dy() const;
+
1277 
+
1278  double dz() const;
+
1279  pos2d@ opMul(pos2d@ obj);
+
1281 
+
1283  pos3d@ opMul(pos3d@ obj);
+
1284  pos3d@ origin() const;
+
1286 
+
1288  shape2d@ opMul(shape2d@ obj);
+
1290 
+
1292  solid@ opMul(solid@ obj);
+
1294 
+
1295  string Type() const;
+
1297 
+
1299  tmatrix@ opMul(const tmatrix@ B);
+
1300  vec3d@ xdir() const;
+
1301  vec3d@ ydir() const;
+
1302  vec3d@ zdir() const;
+
1304  void dump() const;
+
1305 };
+
1306 
+
1308 
+
1313 class union2d : public shape2d
+
1314 {
+
1315 public:
+
1317 
+
1318  union2d(array<shape2d@>@ arr);
+
1320 
+
1322  union2d(const shape2d@ s1, const shape2d@ s2 );
+
1324 
+
1327  union2d(const shape2d@ s1, const shape2d@ s2, const shape2d@ s3 );
+
1329 
+
1333  union2d(const shape2d@ s1, const shape2d@ s2, const shape2d@ s3, const shape2d@ s4 );
+
1335 
+
1340  union2d(const shape2d@ s1, const shape2d@ s2, const shape2d@ s3, const shape2d@ s4, const shape2d@ s5 );
+
1341 
+
1342  boundingbox@ box() const;
+
1344 
+
1345  string Type() const;
+
1346  tmatrix@ transform() const;
+
1347 };
+
1348 
+
1350 
+
1355 class union3d : public solid
+
1356 {
+
1357 public:
+
1359 
+
1360  union3d(array<solid@>@ arr);
+
1362 
+
1364  union3d(const solid@ s1, const solid@ s2 );
+
1366 
+
1369  union3d(const solid@ s1, const solid@ s2, const solid@ s3 );
+
1371 
+
1375  union3d(const solid@ s1, const solid@ s2, const solid@ s3, const solid@ s4 );
+
1377 
+
1382  union3d(const solid@ s1, const solid@ s2, const solid@ s3, const solid@ s4, const solid@ s5 );
+
1383 
+
1384  boundingbox@ box() const;
+
1386 
+
1387  string Type() const;
+
1388  tmatrix@ transform() const;
+
1389 };
+
1390 
+
1392 
+
1394 class vec2d
+
1395 {
+
1396 public:
+
1398 
+
1400  vec2d(const pos2d@ p1, const pos2d@ p2);
+
1402 
+
1404  vec2d(double x,double y);
+
1405 
+
1407 
+
1409  double angle(const vec2d@ other) const;
+
1411 
+
1413  double cross(const vec2d@ other) const;
+
1415 
+
1417  double dot(const vec2d@ other) const;
+
1419 
+
1420  double length() const;
+
1422 
+
1423  double x() const;
+
1425 
+
1426  double y() const;
+
1428 
+
1429  string Type() const;
+
1430  vec2d@ opMul(double f1);
+
1431  vec2d@ opMul_r(double f1);
+
1433  void normalise();
+
1434 };
+
1435 
+
1437 
+
1439 class vec3d
+
1440 {
+
1441 public:
+
1442  vec3d(const pos3d@ p1, const pos3d@ p2);
+
1444 
+
1447  vec3d(double x,double y, double z);
+
1448 
+
1450 
+
1452  double angle(const vec3d@ other) const;
+
1454 
+
1456  double dot(const vec3d@ other) const;
+
1458 
+
1459  double length() const;
+
1461 
+
1462  double x() const;
+
1464 
+
1465  double y() const;
+
1467 
+
1468  double z() const;
+
1470 
+
1471  string Type() const;
+
1473 
+
1475  vec3d@ cross(const vec3d@ other) const;
+
1476  vec3d@ opMul(double f1);
+
1477  vec3d@ opMul_r(double f1);
+
1479  void normalise();
+
1480 };
+
1481 #endif // ANGELCAD_AUTODOC
+
double r() const
sphere radius
+
vec3d zdir() const
+
pos3d origin() const
+
3d intersection boolean operation
Definition: angelcad.h:400
+
void normalise()
normalise vector length
+
tmatrix transform() const
+
Extrude from botton to top shapes using transform.
Definition: angelcad.h:1246
+
pos2d opMul(pos2d @obj)
+
rectangle(double dx, double dy, bool center=false)
constructor
+
string Type() const
class type string
+
cylinder(double h, double r, bool center=false)
constructor
+
string Type() const
Object type string.
+
double sy() const
scale factor in y direction
+
boundingbox box() const
+
double h() const
height of cone
+
union3d(array< solid @> @arr)
union3d constructor
+
pos2d opMul(pos2d @obj)
+
boundingbox box() const
+
string Type() const
Object type string.
+
boundingbox box() const
return bounding box
+
double radius() const
radius of circle
+
void flip_face(uint iface)
Flip polyhedron face normal.
+
Polyhedron face.
Definition: angelcad.h:590
+
double dz() const
translation in z direction
+
void write_csg(string path)
Write to OpenSCAD .csg file.
+
Closed polyhedron volume defined by vertices and planar faces.
Definition: angelcad.h:669
+
tmatrix transform() const
+
2d hull operation, enclosing the input shapes
Definition: angelcad.h:295
+
string Type() const
Object type string.
+
2d fill operation, filling holes in input shapes
Definition: angelcad.h:235
+
void set_vertex(uint iv, pos3d @pos)
Set vertex position.
+
3d Minkowski sum operation
Definition: angelcad.h:493
+
Abstract base for all primitives and booleans.
Definition: angelcad.h:1018
+
string Type() const
class type string
+
double z() const
vector z component
+
tmatrix transform() const
+
boundingbox box() const
return bounding box
+
void dump() const
dump matrix to console
+
double x() const
vector x component
+
void write_csg(string path)
Write to OpenSCAD .csg file.
+
vec3d ydir() const
+
shape2d opSub(shape2d @b)
Boolean difference operator- overload.
+
vec3d zdir() const
+
boundingbox box() const
+
intersection2d(array< shape2d @> @arr)
+
void flip_faces()
Flip all polyhedron face normals.
+
string Type() const
class type string
+
double y() const
y coordinate
+
boundingbox box() const
+
scale(double s)
constructor
+
pos3d center() const
center position
+
tmatrix transform() const
+
2d profile offset
Definition: angelcad.h:562
+
string Type() const
class type string
+
vec3d cross(const vec3d @other) const
cross product: double cp = v.cross(other);
+
Abstract base matrix for transformations.
Definition: angelcad.h:1211
+
boundingbox box() const
+
double deg() const
rotation angle in degrees
+
vec3d ydir() const
+
double dy() const
bounding box extent
+
vec3d ydir() const
+
double r() const
radius of circle
+
string Type() const
+
double y() const
vector y component
+
3d localsystem
Definition: angelcad.h:440
+
union2d(array< shape2d @> @arr)
constructor
+
cone(double h, double r1, double r2, bool center=false)
constructor
+
void dump() const
dump matrix to console
+
string Type() const
Object type string.
+
double rad() const
rotation angle in radians
+
string Type() const
class type string
+
Rotation around y.
Definition: angelcad.h:878
+
string Type() const
class type string
+
double height() const
height of cone
+
vec3d ydir() const
+
fill2d(array< shape2d @> @arr)
constructor
+
void write_xcsg(string path, double secant_tolerance=-1.0)
Write to AngelCAD .xcsg file.
+
vec3d zdir() const
+
double r() const
Radius of cylnder.
+
vec3d xdir() const
+
vec3d zdir() const
+
spline_path(array< pos3d @> @p, array< vec3d @> @v)
constructor
+
pos2d opMul(pos2d @obj)
+
void dump() const
dump matrix to console
+
uint size() const
number of polygon points
+
void write_csg(string path)
Write to OpenSCAD .csg file.
+
pos3d(double x, double y, double z)
constructor
+
cone with axis in z-direction, by default extending from origin
Definition: angelcad.h:74
+
tmatrix transform() const
+
sphere, centered at origin
Definition: angelcad.h:1096
+
double size() const
size of cube
+
boundingbox box() const
+
void verify() const
+
square, by default located in 1st quadrant touching origin
Definition: angelcad.h:1170
+
string Type() const
class type string
+
pos2d(double x, double y)
constructor
+
vec3d xdir() const
+
string Type() const
class type string
+
vec3d zdir() const
+
tmatrix transform() const
+
double x() const
vector x component
+
void dump() const
dump matrix to console
+
cuboid, by default in 1st octant with one corner toucing origin
Definition: angelcad.h:131
+
double area() const
Polygon area.
+
double height() const
Height of cylnder.
+
3d direction vector
Definition: angelcad.h:1439
+
pos3d opMul_r(double f1)
+
2d position coordinates
Definition: angelcad.h:720
+
double size() const
size of square
+
Mirror transformation around given point.
Definition: angelcad.h:510
+
cylinder with axis in z-direction, by default extending from origin
Definition: angelcad.h:160
+
Abstract base for 2d primitives and booleans.
Definition: angelcad.h:1038
+
cube(double size, bool center=false)
constructor
+
double volume() const
polyhedron volume
+
boundingbox box() const
+
pos2d opMul(pos2d @obj)
+
pos3d origin() const
+
vec3d xdir() const
+
polyhedron(array< pos3d @> @points)
+
spline3d(array< pos3d @> @points)
constructor
+
tmatrix transform() const
+
vec3d zdir() const
+
double rad() const
extrusion angle in radians
+
rotate_y(double deg=0x7fc00000, double rad=0x7fc00000)
constructor (rotate around y)
+
locsys3d(const vec3d @xvec, const vec3d @zvec)
constructor
+
double y() const
vector y component
+
tmatrix transform() const
+
solid opAnd(solid @b)
Boolean intersection operator& overload.
+
string Type() const
Object type string.
+
double dx() const
translation in x direction
+
vec3d xdir() const
+
minkowski2d(const shape2d @a, const shape2d @b)
constructor
+
rectangle, by default located in 1st quadrant touching origin
Definition: angelcad.h:781
+
boundingbox box() const
+
boundingbox box() const
+
double dx() const
bounding box extent
+
string Type() const
class type string
+
vec3d opMul_r(double f1)
+
double dz() const
length in z-drection
+
boundingbox box() const
+
3d cubic spline curve
Definition: angelcad.h:1134
+
vec3d ydir() const
+
Rotation around x.
Definition: angelcad.h:833
+
double x() const
x coordinate
+
double radius1() const
bottom radius
+
boundingbox box() const
+
boundingbox box() const
+
pos2d opMul(pos2d @obj)
+
polygon, vertices in CCW order
Definition: angelcad.h:620
+
vec2d(const pos2d @p1, const pos2d @p2)
constructor
+
square(double size, bool center=false)
constructor
+
string Type() const
+
uint vindex(uint iv) const
polyhedron vertex index for face index
+
double dy() const
length in y-drection
+
tmatrix transform() const
+
string Type() const
class type string
+
pface(uint iv1, uint iv2, uint iv3)
polyhedron face constructor
+
double dx() const
mirror transform normal vector, x-component
+
rotate_extrude(const shape2d @shape, double deg, double pitch=0.0)
constructor
+
bool is_empty() const
+
void normalise()
normalise vector length
+
double z() const
z coordinate
+
double angle(const vec3d @other) const
angle between: double rad = v.angle(other);
+
rotate_z(double deg=0x7fc00000, double rad=0x7fc00000)
constructor (rotate around z)
+
Extrude 2d shape in z direction into 3d solid.
Definition: angelcad.h:419
+
double signed_area() const
Signed polygon area, return negative area for polygons oriented CW.
+
void dump() const
dump matrix to console
+
pos2d opMul(double f1)
+
translate(double dx, double dy, double dz=0.0)
constructor
+
boundingbox box() const
+
bounding box aligned with system axes
Definition: angelcad.h:16
+
string Type() const
class type string
+
3d union boolean operation
Definition: angelcad.h:1355
+
offset2d(array< shape2d @> @arr, double r=0x7fc00000, double delta=0x7fc00000, bool chamfer=false)
constructor
+
boundingbox box() const
+
boundingbox box() const
+
string Type() const
Object type string.
+
boundingbox box() const
+
double deg() const
rotation angle in degrees
+
hull2d(array< shape2d @> @arr)
constructor
+
tmatrix transform() const
+
3d difference boolean operation
Definition: angelcad.h:215
+
string Type() const
+
string Type() const
class type string
+
difference3d(solid @incl, solid @excl)
constructor
+
boundingbox box() const
return bounding box
+
boundingbox box() const
+
vec2d opMul_r(double f1)
+
2d Minkowski sum operation
Definition: angelcad.h:469
+
string Type() const
Object type string.
+
vec2d opMul(double f1)
+
uint nface() const
Number of faces.
+
difference2d(shape2d @incl, shape2d @excl)
constructor
+
2d intersection boolean operation
Definition: angelcad.h:378
+
Translation in x, y and z.
Definition: angelcad.h:1261
+
sweep(const shape2d @shape, const spline_path @path)
constructor
+
string Type() const
Object type string.
+
tmatrix transform() const
+
double deg() const
extrusion angle in degrees
+
string Type() const
class type string
+
pos2d vertex(uint iv) const
+
Sweep 2d shape along path curve to create 3d solid.
Definition: angelcad.h:1191
+
void dump() const
dump matrix to console
+
double dot(const vec3d @other) const
dot product: double cp = v.dot(other);
+
minkowski3d(const solid @a, const solid @b)
+
string Type() const
Object type string.
+
tmatrix transform() const
+
double cross(const vec2d @other) const
cross product: double cp = v.cross(other);
+
string Type() const
Object type string.
+
void write_xcsg(string path, double secant_tolerance=-1.0)
Write to AngelCAD .xcsg file.
+
string Type() const
class type string
+
double radius() const
sphere radius
+
double length() const
length of vector
+
vec3d ydir() const
+
vec3d xdir() const
+
linear_extrude(const shape2d @shape, double height)
constructor
+
spline2d(array< pos2d @> @points)
constructor
+
vec3d zdir() const
+
rotate_x(double deg=0x7fc00000, double rad=0x7fc00000)
constructor (rotate around x)
+
vec3d(const pos3d @p1, const pos3d @p2)
+
Extrude 2d shape CCW in XZ plane into 3d solid.
Definition: angelcad.h:808
+
double face_area(uint iface) const
polyhedron face area
+
solid opSub(solid @b)
Boolean difference operator- overload.
+
vec3d z() const
local z-direction vector
+
double angle(const vec2d @other) const
angle between: double rad = v.angle(other);
+
3d hull operation, enclosing the input solids
Definition: angelcad.h:336
+
vec3d ydir() const
+
pos3d origin() const
+
double radius() const
Radius of cylnder.
+
vec3d ydir() const
+
string Type() const
Object type string.
+
tmatrix transform() const
+
string Type() const
class type string
+
shape2d opAdd(shape2d @b)
Boolean union operator+ overload.
+
double dy() const
extent in y direction
+
vec3d x() const
local x-direction vector
+
tmatrix transform() const
+
vec3d opMul(double f1)
+
hmatrix(const vec3d @xvec, const vec3d @yvec, const pos3d @pos=pos3d(0, 0, 0))
+
void write_xcsg(string path, double secant_tolerance=-1.0)
Write to AngelCAD .xcsg file.
+
double rad() const
rotation angle in radians
+
vec3d y() const
local y-direction vector
+
Abstract base for 3d primitives and booleans.
Definition: angelcad.h:1067
+
pos2d opMul(pos2d @obj)
+
string Type() const
Object type string.
+
double dist(const pos2d @pos) const
distance from other position
+
double dz() const
mirror transform normal vector, z-component
+
boundingbox box() const
+
pos3d opMul(double f1)
+
shape2d opAnd(shape2d @b)
Boolean intersection operator& overload.
+
tmatrix transform() const
+
tmatrix transform() const
+
boundingbox()
constructor
+
double sz() const
scale factor in z direction
+
double dz() const
bounding box extent
+
pos3d origin() const
+
cube, by default in 1st octant with one corner toucing origin
Definition: angelcad.h:110
+
double sx() const
scale factor in x direction
+
double dx() const
extent in x direction
+
boundingbox box() const
+
pos3d vertex(uint iv) const
polyhedron vertex
+
pos3d p1() const
low position
+
circle(const pos2d @p1, const pos2d @p2, const pos2d @p3)
+
void dump() const
dump matrix to console
+
pos3d origin() const
+
double y() const
y coordinate
+
2d direction vector
Definition: angelcad.h:1394
+
boundingbox box() const
+
tmatrix transform() const
+
double length() const
length of vector
+
double r2() const
top radius
+
pos3d origin() const
+
string Type() const
Object type string.
+
Homogeneous transformation matrix.
Definition: angelcad.h:253
+
vec3d xdir() const
+
double dot(const vec2d @other) const
dot product: double cp = v.dot(other);
+
tmatrix transform() const
+
boundingbox box() const
+
void dump() const
dump matrix to console
+
Scaling transformation.
Definition: angelcad.h:968
+
pface face(uint iface) const
polyhedron face
+
pos2d opMul(pos2d @obj)
+
double x() const
x coordinate
+
string Type() const
Object type string.
+
string Type() const
class type string
+
string Type() const
class type string
+
pos3d origin() const
+
polygon(array< pos2d @> @points, bool check=true)
+
double radius2() const
top radius
+
pos2d opMul_r(double f1)
+
boundingbox box() const
+
mirror(double dx, double dy, double dz)
constructor, mirror around origin
+
string Type() const
class type string
+
tmatrix transform() const
+
vec3d xdir() const
+
hull3d(array< solid @> @arr)
constructor
+
tmatrix transform() const
+
string Type() const
class type string
+
pos2d opMul(pos2d @obj)
+
tmatrix transform() const
+
double height() const
extrusion height
+
uint nvert() const
number of vertices in face
+
3d position coordinates
Definition: angelcad.h:748
+
string Type() const
class type string
+
cuboid(double dx, double dy, double dz, bool center=false)
constructor
+
uint nvert() const
Number of vertices.
+
2d cubic spline curve
Definition: angelcad.h:1119
+
boundingbox box() const
+
vec3d zdir() const
+
transform_extrude(const shape2d @bottom, const shape2d @top)
+
tmatrix transform() const
+
double dy() const
mirror transform normal vector, y-component
+
void enclose(pos3d @p)
enclose a new position, this may extend the boundingbox
+
double r1() const
bottom radius
+
double deg() const
rotation angle in degrees
+
solid opAdd(solid @b)
Boolean union operator+ overload.
+
pos3d p2() const
high position
+
string Type() const
class type string
+
boundingbox box() const
+
intersection3d(array< solid @> @arr)
+
tmatrix transform() const
+
tmatrix transform() const
+
tmatrix transform() const
+
string Type() const
Object type string.
+
string Type() const
Object type string.
+
double dist(const pos3d @pos) const
distance from other position
+
tmatrix transform() const
+
string Type() const
class type string
+
boundingbox box() const
+
double dx() const
length in x-drection
+
sphere(double r)
constructor
+
vec3d xdir() const
+
double dy() const
translation in y direction
+
string Type() const
Object type string.
+
spline_path for sweep
Definition: angelcad.h:1149
+
string Type() const
Object type string.
+
2d union boolean operation
Definition: angelcad.h:1313
+
Rotation around z.
Definition: angelcad.h:923
+
string Type() const
Object type string.
+
2d difference boolean operation
Definition: angelcad.h:194
+
string Type() const
class type string
+
tmatrix transform() const
+
tmatrix transform() const
+
pos3d origin() const
+
string Type() const
class type string
+
circle, centered at origin
Definition: angelcad.h:50
+
tmatrix transform() const
+
boundingbox box() const
+
string Type() const
Object type string.
+
double rad() const
rotation angle in radians
+
double h() const
Height of cylnder.
+
+ + + + diff --git a/docs/angelcad_ide_70pst.png b/docs/angelcad_ide_70pst.png new file mode 100644 index 0000000000000000000000000000000000000000..57399ebf24da887f0c3d5a404087a65f7cb049c9 GIT binary patch literal 127537 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/angelscript_csg_ide_80pst.png b/docs/angelscript_csg_ide_80pst.png new file mode 100644 index 0000000000000000000000000000000000000000..86372d46f78aae8d3ca15e5c65453289d969c01d GIT binary patch literal 170643 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%0DwbJ6H6&IhxeVQCNJBRQK^3O#69D0AJ=<}GO)wp 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 + + + + + +AngelCAD: Class List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 CboundingboxBounding box aligned with system axes
 CcircleCircle, centered at origin
 CconeCone with axis in z-direction, by default extending from origin
 CcubeCube, by default in 1st octant with one corner toucing origin
 CcuboidCuboid, by default in 1st octant with one corner toucing origin
 CcylinderCylinder with axis in z-direction, by default extending from origin
 Cdifference2d2d difference boolean operation
 Cdifference3d3d difference boolean operation
 Cfill2d2d fill operation, filling holes in input shapes
 ChmatrixHomogeneous transformation matrix
 Chull2d2d hull operation, enclosing the input shapes
 Chull3d3d hull operation, enclosing the input solids
 Cintersection2d2d intersection boolean operation
 Cintersection3d3d intersection boolean operation
 Clinear_extrudeExtrude 2d shape in z direction into 3d solid
 Clocsys3d3d localsystem
 Cminkowski2d2d Minkowski sum operation
 Cminkowski3d3d Minkowski sum operation
 CmirrorMirror transformation around given point
 Coffset2d2d profile offset
 CpfacePolyhedron face
 CpolygonPolygon, vertices in CCW order
 CpolyhedronClosed polyhedron volume defined by vertices and planar faces
 Cpos2d2d position coordinates
 Cpos3d3d position coordinates
 CrectangleRectangle, by default located in 1st quadrant touching origin
 Crotate_extrudeExtrude 2d shape CCW in XZ plane into 3d solid
 Crotate_xRotation around x
 Crotate_yRotation around y
 Crotate_zRotation around z
 CscaleScaling transformation
 CshapeAbstract base for all primitives and booleans
 Cshape2dAbstract base for 2d primitives and booleans
 CsolidAbstract base for 3d primitives and booleans
 CsphereSphere, centered at origin
 Cspline2d2d cubic spline curve
 Cspline3d3d cubic spline curve
 Cspline_pathSpline_path for sweep
 CsquareSquare, by default located in 1st quadrant touching origin
 CsweepSweep 2d shape along path curve to create 3d solid
 CtmatrixAbstract base matrix for transformations
 Ctransform_extrudeExtrude from botton to top shapes using transform
 CtranslateTranslation in x, y and z
 Cunion2d2d union boolean operation
 Cunion3d3d union boolean operation
 Cvec2d2d direction vector
 Cvec3d3d direction vector
+
+
+ + + + diff --git a/docs/bc_s.png b/docs/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/docs/bdwn.png b/docs/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.0-05 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
array Member List
+
+
+ +

This is the complete list of members for array, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
array(int &in)array
array(int &in, uint length)array
array(int &in, uint length, const T &in value)array
empty() const array
erase(uint)array
find(const T &in value) const array
find(uint startAt, const T &in value) const array
findByRef(const T &in value) const array
findByRef(uint startAt, const T &in value) const array
get_length() const array
insert(uint, const T &in)array
insertAt(uint index, const T &in value)array
insertLast(const T &in value)array
isEmpty() const array
length() const array
opAssign(const T[]&in)array
opEquals(const T[]&in) const array
opIndex(uint index)array
opIndex(uint index) const array
pop_back()array
push_back(const T &in)array
removeAt(uint index)array
removeLast()array
reserve(uint length)array
resize(uint length)array
reverse()array
set_length(uint)array
size() const array
sortAsc()array
sortAsc(uint startAt, uint count)array
sortDesc()array
sortDesc(uint startAt, uint count)array
+ + + + diff --git a/docs/classarray.html b/docs/classarray.html new file mode 100644 index 0000000..e054b00 --- /dev/null +++ b/docs/classarray.html @@ -0,0 +1,727 @@ + + + + + + +AngelCAD: array Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.0-05 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
array Class Reference
+
+
+ +

#include <angelcad.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

T[] array (int &in)
 
T[] array (int &in, uint length)
 
T[] array (int &in, uint length, const T &in value)
 
T & opIndex (uint index)
 
T &[] opAssign (const T[]&in)
 
bool empty () const
 
bool isEmpty () const
 
bool opEquals (const T[]&in) const
 
const T & opIndex (uint index) const
 
int find (const T &in value) const
 
int find (uint startAt, const T &in value) const
 
int findByRef (const T &in value) const
 
int findByRef (uint startAt, const T &in value) const
 
uint get_length () const
 
uint length () const
 
uint size () const
 
void erase (uint)
 
void insert (uint, const T &in)
 
void insertAt (uint index, const T &in value)
 
void insertLast (const T &in value)
 
void pop_back ()
 
void push_back (const T &in)
 
void removeAt (uint index)
 
void removeLast ()
 
void reserve (uint length)
 
void resize (uint length)
 
void reverse ()
 
void set_length (uint)
 
void sortAsc ()
 
void sortAsc (uint startAt, uint count)
 
void sortDesc ()
 
void sortDesc (uint startAt, uint count)
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
T [] array::array (int & in)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
T [] array::array (int & in,
uint length 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
T [] array::array (int & in,
uint length,
const T &in value 
)
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
bool array::empty () const
+
+ +
+
+ +
+
+ + + + + + + + +
void array::erase (uint )
+
+ +
+
+ +
+
+ + + + + + + + +
int array::find (const T &in value) const
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int array::find (uint startAt,
const T &in value 
) const
+
+ +
+
+ +
+
+ + + + + + + + +
int array::findByRef (const T &in value) const
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int array::findByRef (uint startAt,
const T &in value 
) const
+
+ +
+
+ +
+
+ + + + + + + +
uint array::get_length () const
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void array::insert (uint ,
const T & in 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void array::insertAt (uint index,
const T &in value 
)
+
+ +
+
+ +
+
+ + + + + + + + +
void array::insertLast (const T &in value)
+
+ +
+
+ +
+
+ + + + + + + +
bool array::isEmpty () const
+
+ +
+
+ +
+
+ + + + + + + +
uint array::length () const
+
+ +
+
+ +
+
+ + + + + + + + +
T& [] array::opAssign (const T &[] in)
+
+ +
+
+ +
+
+ + + + + + + + +
bool array::opEquals (const T &[] in) const
+
+ +
+
+ +
+
+ + + + + + + + +
T& array::opIndex (uint index)
+
+ +
+
+ +
+
+ + + + + + + + +
const T& array::opIndex (uint index) const
+
+ +
+
+ +
+
+ + + + + + + +
void array::pop_back ()
+
+ +
+
+ +
+
+ + + + + + + + +
void array::push_back (const T & in)
+
+ +
+
+ +
+
+ + + + + + + + +
void array::removeAt (uint index)
+
+ +
+
+ +
+
+ + + + + + + +
void array::removeLast ()
+
+ +
+
+ +
+
+ + + + + + + + +
void array::reserve (uint length)
+
+ +
+
+ +
+
+ + + + + + + + +
void array::resize (uint length)
+
+ +
+
+ +
+
+ + + + + + + +
void array::reverse ()
+
+ +
+
+ +
+
+ + + + + + + + +
void array::set_length (uint )
+
+ +
+
+ +
+
+ + + + + + + +
uint array::size () const
+
+ +
+
+ +
+
+ + + + + + + +
void array::sortAsc ()
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void array::sortAsc (uint startAt,
uint count 
)
+
+ +
+
+ +
+
+ + + + + + + +
void array::sortDesc ()
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void array::sortDesc (uint startAt,
uint count 
)
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classas__reftype-members.html b/docs/classas__reftype-members.html new file mode 100644 index 0000000..f8bf87f --- /dev/null +++ b/docs/classas__reftype-members.html @@ -0,0 +1,65 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.0-05 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
as_reftype Member List
+
+
+ +

This is the complete list of members for as_reftype, including all inherited members.

+ + +
Type() const as_reftype
+ + + + diff --git a/docs/classas__reftype.html b/docs/classas__reftype.html new file mode 100644 index 0000000..c7088f3 --- /dev/null +++ b/docs/classas__reftype.html @@ -0,0 +1,96 @@ + + + + + + +AngelCAD: as_reftype Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.0-05 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
as_reftype Class Reference
+
+
+ +

Astract reference counted type. + More...

+ +

#include <angelcad.h>

+ + + + +

+Public Member Functions

string Type () const
 
+

Detailed Description

+

Astract reference counted type.

+

Member Function Documentation

+ +
+
+ + + + + + + +
string as_reftype::Type () const
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classboundingbox-members.html b/docs/classboundingbox-members.html new file mode 100644 index 0000000..ac5624d --- /dev/null +++ b/docs/classboundingbox-members.html @@ -0,0 +1,74 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
boundingbox Member List
+
+
+ +

This is the complete list of members for boundingbox, including all inherited members.

+ + + + + + + + + + + +
boundingbox()boundingbox
center() const boundingbox
dx() const boundingbox
dy() const boundingbox
dz() const boundingbox
enclose(pos3d @p)boundingbox
is_empty() const boundingbox
p1() const boundingbox
p2() const boundingbox
Type() const boundingbox
+ + + + diff --git a/docs/classboundingbox.html b/docs/classboundingbox.html new file mode 100644 index 0000000..cf063f0 --- /dev/null +++ b/docs/classboundingbox.html @@ -0,0 +1,289 @@ + + + + + + +AngelCAD: boundingbox Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
boundingbox Class Reference
+
+
+ +

bounding box aligned with system axes + More...

+ +

#include <angelcad.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 boundingbox ()
 constructor More...
 
bool is_empty () const
 
double dx () const
 bounding box extent More...
 
double dy () const
 bounding box extent More...
 
double dz () const
 bounding box extent More...
 
pos3d center () const
 center position More...
 
pos3d p1 () const
 low position More...
 
pos3d p2 () const
 high position More...
 
string Type () const
 
void enclose (pos3d @p)
 enclose a new position, this may extend the boundingbox More...
 
+

Detailed Description

+

bounding box aligned with system axes

+

A bounding box representes the range of an object in x,y and z

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
boundingbox::boundingbox ()
+
+ +

constructor

+

creates an empty/uninitialised bounding box

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
pos3d boundingbox::center () const
+
+ +

center position

+
Returns
bounding box geometric center
+ +
+
+ +
+
+ + + + + + + +
double boundingbox::dx () const
+
+ +

bounding box extent

+
Returns
bounding box extent in x-direction
+ +
+
+ +
+
+ + + + + + + +
double boundingbox::dy () const
+
+ +

bounding box extent

+
Returns
bounding box extent in y-direction
+ +
+
+ +
+
+ + + + + + + +
double boundingbox::dz () const
+
+ +

bounding box extent

+
Returns
bounding box extent in z-direction
+ +
+
+ +
+
+ + + + + + + + +
void boundingbox::enclose (pos3dp)
+
+ +

enclose a new position, this may extend the boundingbox

+
Parameters
+ + +
pposition to enclose
+
+
+ +
+
+ +
+
+ + + + + + + +
bool boundingbox::is_empty () const
+
+ +
+
+ +
+
+ + + + + + + +
pos3d boundingbox::p1 () const
+
+ +

low position

+
Returns
position containing minimum x,y,z
+ +
+
+ +
+
+ + + + + + + +
pos3d boundingbox::p2 () const
+
+ +

high position

+
Returns
position containing maximum x,y,z
+ +
+
+ +
+
+ + + + + + + +
string boundingbox::Type () const
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcircle-members.html b/docs/classcircle-members.html new file mode 100644 index 0000000..1092ae9 --- /dev/null +++ b/docs/classcircle-members.html @@ -0,0 +1,76 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
circle Member List
+
+
+ +

This is the complete list of members for circle, including all inherited members.

+ + + + + + + + + + + + + +
box() const circle
circle(const pos2d @p1, const pos2d @p2, const pos2d @p3)circle
circle(double r)circle
opAdd(shape2d @b)shape2d
opAnd(shape2d @b)shape2d
opSub(shape2d @b)shape2d
r() const circle
radius() const circle
transform() const circle
Type() const circle
write_csg(string path)shape2d
write_xcsg(string path, double secant_tolerance=-1.0)shape2d
+ + + + diff --git a/docs/classcircle.html b/docs/classcircle.html new file mode 100644 index 0000000..44bb585 --- /dev/null +++ b/docs/classcircle.html @@ -0,0 +1,286 @@ + + + + + + +AngelCAD: circle Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
circle Class Reference
+
+
+ +

circle, centered at origin + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for circle:
+
+
+ + +shape2d +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 circle (const pos2d @p1, const pos2d @p2, const pos2d @p3)
 
 circle (double r)
 constructor More...
 
boundingbox box () const
 
double r () const
 radius of circle More...
 
double radius () const
 radius of circle More...
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from shape2d
boundingbox box () const
 
shape2d opAdd (shape2d @b)
 Boolean union operator+ overload. More...
 
shape2d opAnd (shape2d @b)
 Boolean intersection operator& overload. More...
 
shape2d opSub (shape2d @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

circle, centered at origin

+

A 2d object defined by its radius. Centered on origin.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
circle::circle (const pos2dp1,
const pos2dp2,
const pos2dp3 
)
+
+ +
+
+ +
+
+ + + + + + + + +
circle::circle (double r)
+
+ +

constructor

+
Parameters
+ + +
rradius of circle
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox circle::box () const
+
+ +
+
+ +
+
+ + + + + + + +
double circle::r () const
+
+ +

radius of circle

+
Returns
radius of circle
+ +
+
+ +
+
+ + + + + + + +
double circle::radius () const
+
+ +

radius of circle

+
Returns
radius of circle
+ +
+
+ +
+
+ + + + + + + +
tmatrix circle::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string circle::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcircle.png b/docs/classcircle.png new file mode 100644 index 0000000000000000000000000000000000000000..50d61a1762f2a503ffe284f2bdc80d261dd9b464 GIT binary patch literal 498 zcmeAS@N?(olHy`uVBq!ia0vp^HbC6L!3-pODl3$Mlth3}i0l9V|AEXGZ@!lHADRGU zf$@O@2Ut7r$OE|?B|(0{3_wL7aP?G(5d#Bbqo<2wNCo5Dxp(spEAY7W+k033caN)E z&>E1TFgYsMXO00gdrz?D_8q(Xo4hYc1ozdedA|P{d(-SPw%mYwNe`c`;y3``foJwmN@$vGJf)&7|uU*$cUuBfr?#yqkK;HLEaJrp6{K z^Z1oRD~~&V6bt=%G}3dr`0AqPceL2F%k?hZ%bI)LE-gMRdeS+QdZYW=-a*~ + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
cone Member List
+
+
+ +

This is the complete list of members for cone, including all inherited members.

+ + + + + + + + + + + + + + + + +
box() const cone
cone(double h, double r1, double r2, bool center=false)cone
h() const cone
height() const cone
opAdd(solid @b)solid
opAnd(solid @b)solid
opSub(solid @b)solid
r1() const cone
r2() const cone
radius1() const cone
radius2() const cone
transform() const cone
Type() const cone
write_csg(string path)solid
write_xcsg(string path, double secant_tolerance=-1.0)solid
+ + + + diff --git a/docs/classcone.html b/docs/classcone.html new file mode 100644 index 0000000..f053369 --- /dev/null +++ b/docs/classcone.html @@ -0,0 +1,361 @@ + + + + + + +AngelCAD: cone Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
cone Class Reference
+
+
+ +

cone with axis in z-direction, by default extending from origin + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for cone:
+
+
+ + +solid +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 cone (double h, double r1, double r2, bool center=false)
 constructor More...
 
boundingbox box () const
 
double h () const
 height of cone More...
 
double height () const
 height of cone More...
 
double r1 () const
 bottom radius More...
 
double r2 () const
 top radius More...
 
double radius1 () const
 bottom radius More...
 
double radius2 () const
 top radius More...
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from solid
boundingbox box () const
 
solid opAdd (solid @b)
 Boolean union operator+ overload. More...
 
solid opAnd (solid @b)
 Boolean intersection operator& overload. More...
 
solid opSub (solid @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

cone with axis in z-direction, by default extending from origin

+

A cone extends in the z-direction. By default the bottom is at origin

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cone::cone (double h,
double r1,
double r2,
bool center = false 
)
+
+ +

constructor

+
Parameters
+ + + + + +
hheight of cone
r1bottom radius of cone
r2top radius of cone
centertrue if cone is centered in z-direction
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox cone::box () const
+
+ +
+
+ +
+
+ + + + + + + +
double cone::h () const
+
+ +

height of cone

+
Returns
height of cone
+ +
+
+ +
+
+ + + + + + + +
double cone::height () const
+
+ +

height of cone

+
Returns
height of cone
+ +
+
+ +
+
+ + + + + + + +
double cone::r1 () const
+
+ +

bottom radius

+
Returns
bottom radius
+ +
+
+ +
+
+ + + + + + + +
double cone::r2 () const
+
+ +

top radius

+
Returns
top radius
+ +
+
+ +
+
+ + + + + + + +
double cone::radius1 () const
+
+ +

bottom radius

+
Returns
bottom radius
+ +
+
+ +
+
+ + + + + + + +
double cone::radius2 () const
+
+ +

top radius

+
Returns
top radius
+ +
+
+ +
+
+ + + + + + + +
tmatrix cone::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string cone::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcone.png b/docs/classcone.png new file mode 100644 index 0000000000000000000000000000000000000000..34e09cbde60e68d29fd6ec4a0ce95881ecf6a9f8 GIT binary patch literal 412 zcmeAS@N?(olHy`uVBq!ia0vp^dO+O4!3-qVD`|cMQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;F*MSIwv2 zth>H%-JE+|U(Tm!-TvO+FLQHFeb(mtnk7a1tNz}ZopNp07j0$F@>{__9AhV~`%`rH zZmmQ^2W!HdIs0@p?U##NKUV*09-j7!K{1%UV}_N(kt>_8AFSV{p{jXcTbR3ZmGQ2Z z+t%I?d-X2$&gJsQr`Nu1jQhR$pUTWaTc2m4JJo?^_s`s=;`*et{CgsU(!F2Hx5JIC zG-o{GBdd_~ia`))cE!ZJG&4RngHu-+mGpi^U00qm^|H=|@|PUHH=MJo`W+T@zt3*# x?|^sbC+!Shc4;-w0pVqQ0u!&FJ=6A+VVSzfgpZ3<4S_+);OXk;vd$@?2>@=MzSaN$ literal 0 HcmV?d00001 diff --git a/docs/classcube-members.html b/docs/classcube-members.html new file mode 100644 index 0000000..2a37366 --- /dev/null +++ b/docs/classcube-members.html @@ -0,0 +1,74 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
cube Member List
+
+
+ +

This is the complete list of members for cube, including all inherited members.

+ + + + + + + + + + + +
box() const cube
cube(double size, bool center=false)cube
opAdd(solid @b)solid
opAnd(solid @b)solid
opSub(solid @b)solid
size() const cube
transform() const cube
Type() const cube
write_csg(string path)solid
write_xcsg(string path, double secant_tolerance=-1.0)solid
+ + + + diff --git a/docs/classcube.html b/docs/classcube.html new file mode 100644 index 0000000..e539b23 --- /dev/null +++ b/docs/classcube.html @@ -0,0 +1,241 @@ + + + + + + +AngelCAD: cube Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
cube Class Reference
+
+
+ +

cube, by default in 1st octant with one corner toucing origin + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for cube:
+
+
+ + +solid +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 cube (double size, bool center=false)
 constructor More...
 
boundingbox box () const
 
double size () const
 size of cube More...
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from solid
boundingbox box () const
 
solid opAdd (solid @b)
 Boolean union operator+ overload. More...
 
solid opAnd (solid @b)
 Boolean intersection operator& overload. More...
 
solid opSub (solid @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

cube, by default in 1st octant with one corner toucing origin

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
cube::cube (double size,
bool center = false 
)
+
+ +

constructor

+
Parameters
+ + + +
sizelength of sides
centertrue if cube is centered on origin
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox cube::box () const
+
+ +
+
+ +
+
+ + + + + + + +
double cube::size () const
+
+ +

size of cube

+
Returns
side length
+ +
+
+ +
+
+ + + + + + + +
tmatrix cube::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string cube::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcube.png b/docs/classcube.png new file mode 100644 index 0000000000000000000000000000000000000000..f311fea005b3b13dee15bf1aa8fdaa5aff6b9e83 GIT binary patch literal 421 zcmeAS@N?(olHy`uVBq!ia0vp^dO+O4!3-qVD`|cMQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;U(X8v``j3tGO5V@2pZ8+#-B;p?$G#ezS-nYJTiNsc%v~z3PfE+bCo(AA`?Y*K z+}NMFOdT^pCNe55;}iI(boWe-3{S$8^H&c4y#FFQc6PXicIirAwqJL%W2Ntzb$ops z>bZB{uPg7uZ)U$+{bsw;miu>8QyKJtj&g}JH?i9! + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
cuboid Member List
+
+
+ +

This is the complete list of members for cuboid, including all inherited members.

+ + + + + + + + + + + + + +
box() const cuboid
cuboid(double dx, double dy, double dz, bool center=false)cuboid
dx() const cuboid
dy() const cuboid
dz() const cuboid
opAdd(solid @b)solid
opAnd(solid @b)solid
opSub(solid @b)solid
transform() const cuboid
Type() const cuboid
write_csg(string path)solid
write_xcsg(string path, double secant_tolerance=-1.0)solid
+ + + + diff --git a/docs/classcuboid.html b/docs/classcuboid.html new file mode 100644 index 0000000..90b030d --- /dev/null +++ b/docs/classcuboid.html @@ -0,0 +1,298 @@ + + + + + + +AngelCAD: cuboid Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
cuboid Class Reference
+
+
+ +

cuboid, by default in 1st octant with one corner toucing origin + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for cuboid:
+
+
+ + +solid +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 cuboid (double dx, double dy, double dz, bool center=false)
 constructor More...
 
boundingbox box () const
 
double dx () const
 length in x-drection More...
 
double dy () const
 length in y-drection More...
 
double dz () const
 length in z-drection More...
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from solid
boundingbox box () const
 
solid opAdd (solid @b)
 Boolean union operator+ overload. More...
 
solid opAnd (solid @b)
 Boolean intersection operator& overload. More...
 
solid opSub (solid @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

cuboid, by default in 1st octant with one corner toucing origin

+

A cuboid is like a cube, but with separate dimensions in x,y and z. By default the cuboid touches the origin, and extends along positive x,y,z.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cuboid::cuboid (double dx,
double dy,
double dz,
bool center = false 
)
+
+ +

constructor

+
Parameters
+ + + + + +
dxlength in x-drection
dylength of y-direction
dzlength of z-direction
centertrue if cuboid is centered on origin
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox cuboid::box () const
+
+ +
+
+ +
+
+ + + + + + + +
double cuboid::dx () const
+
+ +

length in x-drection

+
Returns
length in x-drection
+ +
+
+ +
+
+ + + + + + + +
double cuboid::dy () const
+
+ +

length in y-drection

+
Returns
length in x-drection
+ +
+
+ +
+
+ + + + + + + +
double cuboid::dz () const
+
+ +

length in z-drection

+
Returns
length in x-drection
+ +
+
+ +
+
+ + + + + + + +
tmatrix cuboid::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string cuboid::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcuboid.png b/docs/classcuboid.png new file mode 100644 index 0000000000000000000000000000000000000000..c61f81a544fbb5cb17ad28eacddede8c45f626d0 GIT binary patch literal 431 zcmeAS@N?(olHy`uVBq!ia0vp^MnK%b!3-oPZSa@?q$C1-LR|m<{|{uoc=NTi{}4zJ zj1L?*z}k679?0b=3GxeO04f53tEWPMhA`TBx;TbZFutApFt6Ewhwc1))qDRZiXX^j zKB8zdU>8xc2Y4bw^d#D zaf?xXU|uV$x9<0|t4?h@o?o|}i#`43I$JyM;2U?=KkoCqH1FR2FZv>$w>~F!?XKo( zuoHIZ+hgRLslHxB`E^Xdy(=3RGAxnca%fw~kOHLG%fHLS{}-ITL~mQqjJaX6BHcGW zU8$>BrukVpHTG+S{Nqlc>rs}05q>YlzP;KU^J0dIZL-FsDGz5odN+@0!TIR84VR~s zeeyEgbdEK(Mw_vShgIQl0D}>T@)kATEF?lD=BT-BlhRJ#oT%h S^#%e%m%-E3&t;ucLK6U)P`bGQ literal 0 HcmV?d00001 diff --git a/docs/classcylinder-members.html b/docs/classcylinder-members.html new file mode 100644 index 0000000..0ab1306 --- /dev/null +++ b/docs/classcylinder-members.html @@ -0,0 +1,77 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
cylinder Member List
+
+
+ +

This is the complete list of members for cylinder, including all inherited members.

+ + + + + + + + + + + + + + +
box() const cylinder
cylinder(double h, double r, bool center=false)cylinder
h() const cylinder
height() const cylinder
opAdd(solid @b)solid
opAnd(solid @b)solid
opSub(solid @b)solid
r() const cylinder
radius() const cylinder
transform() const cylinder
Type() const cylinder
write_csg(string path)solid
write_xcsg(string path, double secant_tolerance=-1.0)solid
+ + + + diff --git a/docs/classcylinder.html b/docs/classcylinder.html new file mode 100644 index 0000000..a1d1553 --- /dev/null +++ b/docs/classcylinder.html @@ -0,0 +1,312 @@ + + + + + + +AngelCAD: cylinder Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
cylinder Class Reference
+
+
+ +

cylinder with axis in z-direction, by default extending from origin + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for cylinder:
+
+
+ + +solid +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 cylinder (double h, double r, bool center=false)
 constructor More...
 
boundingbox box () const
 
double h () const
 Height of cylnder. More...
 
double height () const
 Height of cylnder. More...
 
double r () const
 Radius of cylnder. More...
 
double radius () const
 Radius of cylnder. More...
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from solid
boundingbox box () const
 
solid opAdd (solid @b)
 Boolean union operator+ overload. More...
 
solid opAnd (solid @b)
 Boolean intersection operator& overload. More...
 
solid opSub (solid @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

cylinder with axis in z-direction, by default extending from origin

+

A cylinder is defined by height and radius. By default the cuboid extends from the origin, in z-direction.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
cylinder::cylinder (double h,
double r,
bool center = false 
)
+
+ +

constructor

+
Parameters
+ + + + +
hheight of cylinder
rradius of cylinder
centertrue if cylinder is centered on origin in z-direction
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox cylinder::box () const
+
+ +
+
+ +
+
+ + + + + + + +
double cylinder::h () const
+
+ +

Height of cylnder.

+
Returns
height of cylnder
+ +
+
+ +
+
+ + + + + + + +
double cylinder::height () const
+
+ +

Height of cylnder.

+
Returns
height of cylnder
+ +
+
+ +
+
+ + + + + + + +
double cylinder::r () const
+
+ +

Radius of cylnder.

+
Returns
radius of cylnder
+ +
+
+ +
+
+ + + + + + + +
double cylinder::radius () const
+
+ +

Radius of cylnder.

+
Returns
radius of cylnder
+ +
+
+ +
+
+ + + + + + + +
tmatrix cylinder::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string cylinder::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classcylinder.png b/docs/classcylinder.png new file mode 100644 index 0000000000000000000000000000000000000000..66783367ce74e329c4774f199c3cf1bc696d21a5 GIT binary patch literal 479 zcmeAS@N?(olHy`uVBq!ia0vp^RzTdr!3-oD(>YRrlth3}i0l9V|AEXGZ@!lHADRGU zf$@O@2Ut7r$OE|?B|(0{3_wL7aP?G(5d#Bbo~MgrNCo5DxexmeDG0E&=TF}EUpd~} zl6xt~y7WC7ZH!$!I?+A#hQ^;8JtwuV4{uf}{poC)6Ln+u)^+n|z54YuENC)Y*YfJD zRhQS~wD$dyE>JpFar=)*;oN0e^Vdu)neuw`v~xEiS2t|`)0Y}C>D-okpZ15UzU2Kbh)vlH0hznAC7)%04W!;?%7g{ZDPeLKY1 zSezmE-lyXmb@HySU$^Xft<&Ef^`#AJ2n#^==m$G<9Asxaa5!Z9!Jzp_a9_Cl8lx$l#`5+rGHW)lz L{an^LB{Ts51PI%; literal 0 HcmV?d00001 diff --git a/docs/classdictionary-members.html b/docs/classdictionary-members.html new file mode 100644 index 0000000..0cb6c4a --- /dev/null +++ b/docs/classdictionary-members.html @@ -0,0 +1,84 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.0-05 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
dictionary Member List
+
+
+ +

This is the complete list of members for dictionary, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
clear()dictionary
delete(const string &in)dictionary
deleteAll()dictionary
dictionary()dictionary
empty() const dictionary
erase(const string &in)dictionary
exists(const string &in) const dictionary
get(const string &in,?&out) const dictionary
get(const string &in, double &out) const dictionary
get(const string &in, int64 &out) const dictionary
getKeys() const dictionary
getSize() const dictionary
isEmpty() const dictionary
opAssign(const dictionary &in)dictionary
opIndex(const string &in) const dictionary
opIndex(const string &in)dictionary
set(const string &in, const ?&in)dictionary
set(const string &in, const double &in)dictionary
set(const string &in, const int64 &in)dictionary
size() const dictionary
+ + + + diff --git a/docs/classdictionary.html b/docs/classdictionary.html new file mode 100644 index 0000000..3af72f6 --- /dev/null +++ b/docs/classdictionary.html @@ -0,0 +1,487 @@ + + + + + + +AngelCAD: dictionary Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.0-05 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
dictionary Class Reference
+
+
+ +

#include <angelcad.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

dictionary dictionary ()
 
bool delete (const string &in)
 
bool empty () const
 
bool exists (const string &in) const
 
bool get (const string &in,?&out) const
 
bool get (const string &in, double &out) const
 
bool get (const string &in, int64 &out) const
 
bool isEmpty () const
 
const dictionaryValueopIndex (const string &in) const
 
dictionaryopAssign (const dictionary &in)
 
dictionaryValueopIndex (const string &in)
 
string[] getKeys () const
 
uint getSize () const
 
uint size () const
 
void clear ()
 
void deleteAll ()
 
void erase (const string &in)
 
void set (const string &in, const ?&in)
 
void set (const string &in, const double &in)
 
void set (const string &in, const int64 &in)
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
dictionary dictionary::dictionary ()
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
void dictionary::clear ()
+
+ +
+
+ +
+
+ + + + + + + + +
bool dictionary::delete (const stringin)
+
+ +
+
+ +
+
+ + + + + + + +
void dictionary::deleteAll ()
+
+ +
+
+ +
+
+ + + + + + + +
bool dictionary::empty () const
+
+ +
+
+ +
+
+ + + + + + + + +
void dictionary::erase (const stringin)
+
+ +
+
+ +
+
+ + + + + + + + +
bool dictionary::exists (const stringin) const
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool dictionary::get (const stringin,
?& out 
) const
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool dictionary::get (const stringin,
double & out 
) const
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
bool dictionary::get (const stringin,
int64 & out 
) const
+
+ +
+
+ +
+
+ + + + + + + +
string [] dictionary::getKeys () const
+
+ +
+
+ +
+
+ + + + + + + +
uint dictionary::getSize () const
+
+ +
+
+ +
+
+ + + + + + + +
bool dictionary::isEmpty () const
+
+ +
+
+ +
+
+ + + + + + + + +
dictionary& dictionary::opAssign (const dictionaryin)
+
+ +
+
+ +
+
+ + + + + + + + +
const dictionaryValue& dictionary::opIndex (const stringin) const
+
+ +
+
+ +
+
+ + + + + + + + +
dictionaryValue& dictionary::opIndex (const stringin)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void dictionary::set (const stringin,
const ?& in 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void dictionary::set (const stringin,
const double & in 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void dictionary::set (const stringin,
const int64 & in 
)
+
+ +
+
+ +
+
+ + + + + + + +
uint dictionary::size () const
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classdictionary_value-members.html b/docs/classdictionary_value-members.html new file mode 100644 index 0000000..53eec61 --- /dev/null +++ b/docs/classdictionary_value-members.html @@ -0,0 +1,72 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.0-05 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
dictionaryValue Member List
+
+
+ +

This is the complete list of members for dictionaryValue, including all inherited members.

+ + + + + + + + + +
opAssign(const ?&in)dictionaryValue
opAssign(const dictionaryValue &in)dictionaryValue
opAssign(double)dictionaryValue
opAssign(int64)dictionaryValue
opConv()dictionaryValue
opConv()dictionaryValue
opConv(?&out)dictionaryValue
opHndlAssign(const ?&in)dictionaryValue
+ + + + diff --git a/docs/classdictionary_value.html b/docs/classdictionary_value.html new file mode 100644 index 0000000..83b234e --- /dev/null +++ b/docs/classdictionary_value.html @@ -0,0 +1,216 @@ + + + + + + +AngelCAD: dictionaryValue Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.0-05 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
dictionaryValue Class Reference
+
+
+ +

#include <angelcad.h>

+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

dictionaryValueopAssign (const ?&in)
 
dictionaryValueopAssign (const dictionaryValue &in)
 
dictionaryValueopAssign (double)
 
dictionaryValueopAssign (int64)
 
dictionaryValueopHndlAssign (const ?&in)
 
double opConv ()
 
int64 opConv ()
 
void opConv (?&out)
 
+

Member Function Documentation

+ +
+
+ + + + + + + + +
dictionaryValue& dictionaryValue::opAssign (const ?& in)
+
+ +
+
+ +
+
+ + + + + + + + +
dictionaryValue& dictionaryValue::opAssign (const dictionaryValuein)
+
+ +
+
+ +
+
+ + + + + + + + +
dictionaryValue& dictionaryValue::opAssign (double )
+
+ +
+
+ +
+
+ + + + + + + + +
dictionaryValue& dictionaryValue::opAssign (int64 )
+
+ +
+
+ +
+
+ + + + + + + +
double dictionaryValue::opConv ()
+
+ +
+
+ +
+
+ + + + + + + +
int64 dictionaryValue::opConv ()
+
+ +
+
+ +
+
+ + + + + + + + +
void dictionaryValue::opConv (?& out)
+
+ +
+
+ +
+
+ + + + + + + + +
dictionaryValue& dictionaryValue::opHndlAssign (const ?& in)
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classdifference2d-members.html b/docs/classdifference2d-members.html new file mode 100644 index 0000000..a91b271 --- /dev/null +++ b/docs/classdifference2d-members.html @@ -0,0 +1,73 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
difference2d Member List
+
+
+ +

This is the complete list of members for difference2d, including all inherited members.

+ + + + + + + + + + +
box() const difference2d
difference2d(shape2d @incl, shape2d @excl)difference2d
opAdd(shape2d @b)shape2d
opAnd(shape2d @b)shape2d
opSub(shape2d @b)shape2d
transform() const difference2d
Type() const difference2d
write_csg(string path)shape2d
write_xcsg(string path, double secant_tolerance=-1.0)shape2d
+ + + + diff --git a/docs/classdifference2d.html b/docs/classdifference2d.html new file mode 100644 index 0000000..4296075 --- /dev/null +++ b/docs/classdifference2d.html @@ -0,0 +1,225 @@ + + + + + + +AngelCAD: difference2d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
difference2d Class Reference
+
+
+ +

2d difference boolean operation + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for difference2d:
+
+
+ + +shape2d +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 difference2d (shape2d @incl, shape2d @excl)
 constructor More...
 
boundingbox box () const
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from shape2d
boundingbox box () const
 
shape2d opAdd (shape2d @b)
 Boolean union operator+ overload. More...
 
shape2d opAnd (shape2d @b)
 Boolean intersection operator& overload. More...
 
shape2d opSub (shape2d @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

2d difference boolean operation

+

difference2d is a 2-dimensional boolean operation. It can be invoked either explicitly or using subtraction operator:
+
+ explicit: shape2d@ object = difference2d(circle(100),circle(50));
+
+ using subtraction operator: shape2d@ object = circle(100) - circle(50);

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
difference2d::difference2d (shape2dincl,
shape2dexcl 
)
+
+ +

constructor

+
Parameters
+ + + +
inclobject to be included
exclobject to be excluded (subtracted)
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox difference2d::box () const
+
+ +
+
+ +
+
+ + + + + + + +
tmatrix difference2d::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string difference2d::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classdifference2d.png b/docs/classdifference2d.png new file mode 100644 index 0000000000000000000000000000000000000000..dae9879a2c4e428bb512443ecb3a8279aca9906a GIT binary patch literal 602 zcmeAS@N?(olHy`uVBq!ia0vp^Awb;0!3-q*JZ+W(DTx4|5ZC|z{{xvX-h3_XKQsZz z0^m!2+;Ar*{o=f2K+tsubG&VTa#{}b#v z1qUv$Y=5o1HA<6N;zWx6x%#A@i&BeJZaxa~-1Ky_iN__|fBQ{R5-paQ^!ZORc{tak zR=56Ch}kZ6&siTFqmF(0d+cv+rtkg@={0PB^#1erN+o5hdCuA#aQWW1%d_}iKEL;W z%kN1gsV~?5-5uoltHWFMWY6aMV9A!zMAQEdG8<1;F~Yz#T}ftf1`qI(3-wom3-xw*K1DG=s%EUn&+*)(KPt} zlG&zja}Pf|3wGi6_fBgMRee`|dFuB5rX}A#voD>rrHd?wI&oYRV8{XaV6KVo=ipcO z_zrOGyt_O>P51HK53_$af2r7gX@dCg{OKHhf0LJ|1o-a~h+m(++2T^$f!6DB^^Zl9 zifg7$>t_7Xl$Q0`uATMezxLPH#50Q%BdzjX>YE&!yty}7%3-?V}F=qFDSqN#Tz&om=G8|UHx3vIVCg!0BJlJ(*OVf literal 0 HcmV?d00001 diff --git a/docs/classdifference3d-members.html b/docs/classdifference3d-members.html new file mode 100644 index 0000000..7dacf5e --- /dev/null +++ b/docs/classdifference3d-members.html @@ -0,0 +1,73 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
difference3d Member List
+
+
+ +

This is the complete list of members for difference3d, including all inherited members.

+ + + + + + + + + + +
box() const difference3d
difference3d(solid @incl, solid @excl)difference3d
opAdd(solid @b)solid
opAnd(solid @b)solid
opSub(solid @b)solid
transform() const difference3d
Type() const difference3d
write_csg(string path)solid
write_xcsg(string path, double secant_tolerance=-1.0)solid
+ + + + diff --git a/docs/classdifference3d.html b/docs/classdifference3d.html new file mode 100644 index 0000000..a695d68 --- /dev/null +++ b/docs/classdifference3d.html @@ -0,0 +1,225 @@ + + + + + + +AngelCAD: difference3d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
difference3d Class Reference
+
+
+ +

3d difference boolean operation + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for difference3d:
+
+
+ + +solid +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 difference3d (solid @incl, solid @excl)
 constructor More...
 
boundingbox box () const
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from solid
boundingbox box () const
 
solid opAdd (solid @b)
 Boolean union operator+ overload. More...
 
solid opAnd (solid @b)
 Boolean intersection operator& overload. More...
 
solid opSub (solid @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

3d difference boolean operation

+

difference3d is a 3-dimensional boolean operation. It can be invoked either explicitly or using subtraction operator:
+
+ explicit: solid@ object = difference3d(sphere(100),sphere(50));
+
+ using subtraction operator: solid@ object = sphere(100) - sphere(50);

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
difference3d::difference3d (solidincl,
solidexcl 
)
+
+ +

constructor

+
Parameters
+ + + +
inclobjects to be included
exclobjects to be excluded (subtracted)
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox difference3d::box () const
+
+ +
+
+ +
+
+ + + + + + + +
tmatrix difference3d::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string difference3d::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classdifference3d.png b/docs/classdifference3d.png new file mode 100644 index 0000000000000000000000000000000000000000..f8ebda27a25d45be6e24e5a64753fa29f86f4cef GIT binary patch literal 548 zcmeAS@N?(olHy`uVBq!ia0vp^Awb;0!3-q*JZ+W(DTx4|5ZC|z{{xvX-h3_XKQsZz z0^&7LlfAr*{o=RPcIQQ%>lu5Y~Wzq0t$ zs)B;h>V=ofj2=6EC{gA7E^lm{Z{Yb!b;+bBr+1ooUb3x=n-!LLYq`xgZBMBWQ%&}7 zi%ZoqpEXs5*J9$djeFvE?$`b6vwuTsP0o+ifBdDczFj*@CG$+{tZm!Mvu`ck|Lx!1 zcixwbr~AGAKh^7!rs7nU_)S;NoRMtk)?v7JW`f>nme)L)Wxt}Ad;Aah?#%VT$Ahtk zQ?o%|k@bV>5{7*(A`iII((WZpdgAS&dUAU7r7f|lla`3znOZhc#kN?>_xA71*{A%9 z|I91-ZqxI$Dmv;|)T>GRwwKKKm%rxa6rjzyPFkM(T1d1}bLkUa&I8jYF#WjXQM_Ya z(RVY3bsM(*7U)@$x@Ys>S3muB&0lA;=HR!to0|Xrt6QG(;ivcJqsKq4X|m1ru=%*- zx?N$;#+nZ+B6W57)gG{3z4G+#nmF(6_A$cto~N0&FL~^?#ro~09Z{DPe=T0Q`sKyH yyZ$Zx?H&`l*q){N9dm_X5JSAvtRSy*H4GioRJ8j4+}I9`QU*^~KbLh*2~7YL69m`* literal 0 HcmV?d00001 diff --git a/docs/classes.html b/docs/classes.html new file mode 100644 index 0000000..2f95985 --- /dev/null +++ b/docs/classes.html @@ -0,0 +1,99 @@ + + + + + + +AngelCAD: Class Index + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
Class Index
+
+
+
B | C | D | F | H | I | L | M | O | P | R | S | T | U | V
+ + + + + + + + + + + + + + + + + + + + +
  b  
+
  h  
+
minkowski3d   rotate_x   transform_extrude   
mirror   rotate_y   translate   
boundingbox   hmatrix   
  o  
+
rotate_z   
  u  
+
  c  
+
hull2d   
  s  
+
hull3d   offset2d   union2d   
circle   
  i  
+
  p  
+
scale   union3d   
cone   shape   
  v  
+
cube   intersection2d   pface   shape2d   
cuboid   intersection3d   polygon   solid   vec2d   
cylinder   
  l  
+
polyhedron   sphere   vec3d   
  d  
+
pos2d   spline2d   
linear_extrude   pos3d   spline3d   
difference2d   locsys3d   
  r  
+
spline_path   
difference3d   
  m  
+
square   
  f  
+
rectangle   sweep   
minkowski2d   rotate_extrude   
  t  
+
fill2d   
tmatrix   
+
B | C | D | F | H | I | L | M | O | P | R | S | T | U | V
+
+ + + + diff --git a/docs/classfill2d-members.html b/docs/classfill2d-members.html new file mode 100644 index 0000000..1cf82e3 --- /dev/null +++ b/docs/classfill2d-members.html @@ -0,0 +1,74 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
fill2d Member List
+
+
+ +

This is the complete list of members for fill2d, including all inherited members.

+ + + + + + + + + + + +
box() const fill2d
fill2d(array< shape2d @> @arr)fill2d
fill2d(const shape2d @s1)fill2d
opAdd(shape2d @b)shape2d
opAnd(shape2d @b)shape2d
opSub(shape2d @b)shape2d
transform() const fill2d
Type() const fill2d
write_csg(string path)shape2d
write_xcsg(string path, double secant_tolerance=-1.0)shape2d
+ + + + diff --git a/docs/classfill2d.html b/docs/classfill2d.html new file mode 100644 index 0000000..0fa4616 --- /dev/null +++ b/docs/classfill2d.html @@ -0,0 +1,228 @@ + + + + + + +AngelCAD: fill2d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
fill2d Class Reference
+
+
+ +

2d fill operation, filling holes in input shapes + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for fill2d:
+
+
+ + +shape2d +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 fill2d (array< shape2d @> @arr)
 constructor More...
 
 fill2d (const shape2d @s1)
 
boundingbox box () const
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from shape2d
boundingbox box () const
 
shape2d opAdd (shape2d @b)
 Boolean union operator+ overload. More...
 
shape2d opAnd (shape2d @b)
 Boolean intersection operator& overload. More...
 
shape2d opSub (shape2d @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

2d fill operation, filling holes in input shapes

+

fill2d is a 2-dimensional boolean operation that removes internal holes in in 2d shapes, but leaves a possibly concave outer contour intact. fill2d can be invoked either on a single shape2d or an array.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
fill2d::fill2d (array< shape2d @> @ arr)
+
+ +

constructor

+
Parameters
+ + +
arrarray of 2d shapes
+
+
+ +
+
+ +
+
+ + + + + + + + +
fill2d::fill2d (const shape2ds1)
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox fill2d::box () const
+
+ +
+
+ +
+
+ + + + + + + +
tmatrix fill2d::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string fill2d::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classfill2d.png b/docs/classfill2d.png new file mode 100644 index 0000000000000000000000000000000000000000..173d22c6330ef65545f497ef7e6ae5f30b4d4f18 GIT binary patch literal 496 zcmVvTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0004hNkl?T?QZ;wyZb1(B#klU^fO6%&+p0> zMB9e7uV)wXx*b{^;zBXImSZ2E%g%T!r?exlO!owid7l)lij@tLvevkBY2CeZm3FB0 z-D*qHk>*?fZdsB}`J=MC`yc=pEC8cCk(cFx{X|~far=?{!D>$#pob{~bTDOr4yFvy z!T%|{yN`lP(il^gNm2{5v>nF|Iqb##N`4({+Yp14v;BZ|`5>?J(BcpmirG)_bXG1` zsikMr;@-8=PN~JHTcC7{rhF1B8_Hre?p#{cV&l$L+M(8E?Nj!3wI%7u<)6&=%93=& zAC=wR2LZU?W1pL4d0;=0S9jcgB!BV89iYvW0Xmp6KnGI>=wQkK9ek~9W;O~2FvgTq z{lntc!pqnn1&Vee$A!$lFTX!Y>830000 + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
hmatrix Member List
+
+
+ +

This is the complete list of members for hmatrix, including all inherited members.

+ + + + + + + + + + + + + + +
dump() const hmatrix
hmatrix(const vec3d @xvec, const vec3d @yvec, const pos3d @pos=pos3d(0, 0, 0))hmatrix
hmatrix(const vec3d @xvec, const vec3d @yvec, const vec3d @zvec, const pos3d @pos=pos3d(0, 0, 0))hmatrix
opMul(pos2d @obj)hmatrix
opMul(pos3d @obj)hmatrix
opMul(shape2d @obj)hmatrix
opMul(solid @obj)hmatrix
opMul(const tmatrix @B)hmatrix
origin() const hmatrix
Type() const hmatrix
xdir() const hmatrix
ydir() const hmatrix
zdir() const hmatrix
+ + + + diff --git a/docs/classhmatrix.html b/docs/classhmatrix.html new file mode 100644 index 0000000..dfa8478 --- /dev/null +++ b/docs/classhmatrix.html @@ -0,0 +1,440 @@ + + + + + + +AngelCAD: hmatrix Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
hmatrix Class Reference
+
+
+ +

Homogeneous transformation matrix. + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for hmatrix:
+
+
+ + +tmatrix + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 hmatrix (const vec3d @xvec, const vec3d @yvec, const pos3d @pos=pos3d(0, 0, 0))
 
 hmatrix (const vec3d @xvec, const vec3d @yvec, const vec3d @zvec, const pos3d @pos=pos3d(0, 0, 0))
 constructor, 4 column values More...
 
pos2d opMul (pos2d @obj)
 
pos3d opMul (pos3d @obj)
 transform a point: pos3d@ p = T*obj; More...
 
pos3d origin () const
 
shape2d opMul (shape2d @obj)
 transform a 2d shape: shape2d@ s = T*obj; More...
 
solid opMul (solid @obj)
 transform a solid: solid@ s = T*obj; More...
 
string Type () const
 
tmatrix opMul (const tmatrix @B)
 matrix multiplication: A = T*B More...
 
vec3d xdir () const
 
vec3d ydir () const
 
vec3d zdir () const
 
void dump () const
 dump matrix to console More...
 
- Public Member Functions inherited from tmatrix
pos2d opMul (pos2d @obj)
 
pos3d opMul (pos3d @obj)
 transform a point: pos3d@ p = T*obj; More...
 
pos3d origin () const
 
shape2d opMul (shape2d @obj)
 transform a 2d shape: shape2d@ s = T*obj; More...
 
solid opMul (solid @obj)
 transform a solid: solid@ s = T*obj; More...
 
string Type () const
 class type string More...
 
tmatrix opMul (const tmatrix @B)
 matrix multiplication: A = T*B More...
 
vec3d xdir () const
 
vec3d ydir () const
 
vec3d zdir () const
 
void dump () const
 dump matrix to console More...
 
+

Detailed Description

+

Homogeneous transformation matrix.

+

hmatrix is a transformation expressed as homogenous transformation matrix.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
hmatrix::hmatrix (const vec3dxvec,
const vec3dyvec,
const pos3dpos = pos3d(0, 0, 0) 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
hmatrix::hmatrix (const vec3dxvec,
const vec3dyvec,
const vec3dzvec,
const pos3dpos = pos3d(0, 0, 0) 
)
+
+ +

constructor, 4 column values

+
Parameters
+ + + + + +
xvec1st matrix column
yvec2nd matrix column
zvec3rd matrix column
pos4rd matrix column
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
void hmatrix::dump () const
+
+ +

dump matrix to console

+ +
+
+ +
+
+ + + + + + + + +
pos2d hmatrix::opMul (pos2dobj)
+
+ +
+
+ +
+
+ + + + + + + + +
pos3d hmatrix::opMul (pos3dobj)
+
+ +

transform a point: pos3d@ p = T*obj;

+
Parameters
+ + +
objposition to be transformed
+
+
+
Returns
transformed position
+ +
+
+ +
+
+ + + + + + + + +
shape2d hmatrix::opMul (shape2dobj)
+
+ +

transform a 2d shape: shape2d@ s = T*obj;

+
Parameters
+ + +
objobject to be transformed
+
+
+
Returns
transformed object
+ +
+
+ +
+
+ + + + + + + + +
solid hmatrix::opMul (solidobj)
+
+ +

transform a solid: solid@ s = T*obj;

+
Parameters
+ + +
objobject to be transformed
+
+
+
Returns
transformed object
+ +
+
+ +
+
+ + + + + + + + +
tmatrix hmatrix::opMul (const tmatrixB)
+
+ +

matrix multiplication: A = T*B

+
Parameters
+ + +
Bmatrix to be post-multiplied with this matrix
+
+
+
Returns
resulting matrixt
+ +
+
+ +
+
+ + + + + + + +
pos3d hmatrix::origin () const
+
+ +
+
+ +
+
+ + + + + + + +
string hmatrix::Type () const
+
+ +
+
+ +
+
+ + + + + + + +
vec3d hmatrix::xdir () const
+
+ +
+
+ +
+
+ + + + + + + +
vec3d hmatrix::ydir () const
+
+ +
+
+ +
+
+ + + + + + + +
vec3d hmatrix::zdir () const
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classhmatrix.png b/docs/classhmatrix.png new file mode 100644 index 0000000000000000000000000000000000000000..c03447befcb412cebb15a8e370987e904ad49856 GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^CO{m(!3-o54== z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNjDTWKJzX3_Dj471eYmb!frs_M<;zFD*FWK2 z=dg2f&!^Qh%F^O0L)Kb8~;5%q!bz z{L4HwJaJ}RvE^H)pDCL~>m62ZGWhiLX9y3kbYN7%)2C}i`vg4C9d#>L2)&xXa6o~N zq2m~rRUhltrb(TvRlgj4m%Bxf!QSi^M}zeKZWotDjEoHtHd4Gfk?$^T=5UbaTl($x z=bcmR+wZ + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
hull2d Member List
+
+
+ +

This is the complete list of members for hull2d, including all inherited members.

+ + + + + + + + + + + + + + +
box() const hull2d
hull2d(array< shape2d @> @arr)hull2d
hull2d(const shape2d @s1, const shape2d @s2)hull2d
hull2d(const shape2d @s1, const shape2d @s2, const shape2d @s3)hull2d
hull2d(const shape2d @s1, const shape2d @s2, const shape2d @s3, const shape2d @s4)hull2d
hull2d(const shape2d @s1, const shape2d @s2, const shape2d @s3, const shape2d @s4, const shape2d @s5)hull2d
opAdd(shape2d @b)shape2d
opAnd(shape2d @b)shape2d
opSub(shape2d @b)shape2d
transform() const hull2d
Type() const hull2d
write_csg(string path)shape2d
write_xcsg(string path, double secant_tolerance=-1.0)shape2d
+ + + + diff --git a/docs/classhull2d.html b/docs/classhull2d.html new file mode 100644 index 0000000..02f4b73 --- /dev/null +++ b/docs/classhull2d.html @@ -0,0 +1,404 @@ + + + + + + +AngelCAD: hull2d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
hull2d Class Reference
+
+
+ +

2d hull operation, enclosing the input shapes + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for hull2d:
+
+
+ + +shape2d +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 hull2d (array< shape2d @> @arr)
 constructor More...
 
 hull2d (const shape2d @s1, const shape2d @s2)
 constructor More...
 
 hull2d (const shape2d @s1, const shape2d @s2, const shape2d @s3)
 constructor More...
 
 hull2d (const shape2d @s1, const shape2d @s2, const shape2d @s3, const shape2d @s4)
 constructor More...
 
 hull2d (const shape2d @s1, const shape2d @s2, const shape2d @s3, const shape2d @s4, const shape2d @s5)
 constructor More...
 
boundingbox box () const
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from shape2d
boundingbox box () const
 
shape2d opAdd (shape2d @b)
 Boolean union operator+ overload. More...
 
shape2d opAnd (shape2d @b)
 Boolean intersection operator& overload. More...
 
shape2d opSub (shape2d @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

2d hull operation, enclosing the input shapes

+

hull2d is a 2-dimensional boolean operation. It encapsulates the input objects with a convex shape. It can for example be used to create a rectangle with rounded cornes using 4 circles.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
hull2d::hull2d (array< shape2d @> @ arr)
+
+ +

constructor

+
Parameters
+ + +
arrarray of 2d shapes
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
hull2d::hull2d (const shape2ds1,
const shape2ds2 
)
+
+ +

constructor

+
Parameters
+ + + +
s1shape
s2shape
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
hull2d::hull2d (const shape2ds1,
const shape2ds2,
const shape2ds3 
)
+
+ +

constructor

+
Parameters
+ + + + +
s1shape
s3shape
s2shape
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
hull2d::hull2d (const shape2ds1,
const shape2ds2,
const shape2ds3,
const shape2ds4 
)
+
+ +

constructor

+
Parameters
+ + + + + +
s1shape
s2shape
s3shape
s4shape
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
hull2d::hull2d (const shape2ds1,
const shape2ds2,
const shape2ds3,
const shape2ds4,
const shape2ds5 
)
+
+ +

constructor

+
Parameters
+ + + + + + +
s1shape
s2shape
s3shape
s4shape
s5shape
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox hull2d::box () const
+
+ +
+
+ +
+
+ + + + + + + +
tmatrix hull2d::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string hull2d::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classhull2d.png b/docs/classhull2d.png new file mode 100644 index 0000000000000000000000000000000000000000..9cf067e83b43faf359d58433b6e0366de199bc22 GIT binary patch literal 502 zcmeAS@N?(olHy`uVBq!ia0vp^HbC6L!3-pODl3$Mlth3}i0l9V|AEXGZ@!lHADRGU zf$@O@2Ut7r$OE|?B|(0{3_wL7aP?G(5d#BbtEY=&NCo5Dxp(tg6hzpb*QkH|E5CCS zx0aIDjTCcTUS&p^bLY)Iij{wlEAV`keB$MKm6x;bPu1=CHt$*bPOFK}9~(RpG2e7` zr_B71d(X;FFY>bfbgINNVg7f=!(9=xJujt&WSv{P+f+QWJ?{S7Z7Oe9{(E&_*ZY#< z|B$ls_bd-uI2TM;|72pjVg8BDxAW~M+244p$h^fMrGc%D=fZ&rj8Z>lZ`xh0zeDA# zVaiOEs|Mc33-cx%jo(_++qS6Y<-4~PO^m8C&(-UX zx}~{Q;;XDiXy8=-q}*kDBB#zOUVUTDm6#>6Rdc`FrN);*)kq1-ZV2(-QLJlig~Jopb#*U7(8A5T-G@yGywp_bLevb literal 0 HcmV?d00001 diff --git a/docs/classhull3d-members.html b/docs/classhull3d-members.html new file mode 100644 index 0000000..ff109de --- /dev/null +++ b/docs/classhull3d-members.html @@ -0,0 +1,77 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
hull3d Member List
+
+
+ +

This is the complete list of members for hull3d, including all inherited members.

+ + + + + + + + + + + + + + +
box() const hull3d
hull3d(array< solid @> @arr)hull3d
hull3d(const solid @s1, const solid @s2)hull3d
hull3d(const solid @s1, const solid @s2, const solid @s3)hull3d
hull3d(const solid @s1, const solid @s2, const solid @s3, const solid @s4)hull3d
hull3d(const solid @s1, const solid @s2, const solid @s3, const solid @s4, const solid @s5)hull3d
opAdd(solid @b)solid
opAnd(solid @b)solid
opSub(solid @b)solid
transform() const hull3d
Type() const hull3d
write_csg(string path)solid
write_xcsg(string path, double secant_tolerance=-1.0)solid
+ + + + diff --git a/docs/classhull3d.html b/docs/classhull3d.html new file mode 100644 index 0000000..9f3e39a --- /dev/null +++ b/docs/classhull3d.html @@ -0,0 +1,404 @@ + + + + + + +AngelCAD: hull3d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
hull3d Class Reference
+
+
+ +

3d hull operation, enclosing the input solids + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for hull3d:
+
+
+ + +solid +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 hull3d (array< solid @> @arr)
 constructor More...
 
 hull3d (const solid @s1, const solid @s2)
 constructor More...
 
 hull3d (const solid @s1, const solid @s2, const solid @s3)
 constructor More...
 
 hull3d (const solid @s1, const solid @s2, const solid @s3, const solid @s4)
 constructor More...
 
 hull3d (const solid @s1, const solid @s2, const solid @s3, const solid @s4, const solid @s5)
 constructor More...
 
boundingbox box () const
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from solid
boundingbox box () const
 
solid opAdd (solid @b)
 Boolean union operator+ overload. More...
 
solid opAnd (solid @b)
 Boolean intersection operator& overload. More...
 
solid opSub (solid @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

3d hull operation, enclosing the input solids

+

hull3d is a 3-dimensional boolean operation. It encapsulates the input objects with a convex shape. It can for example be used to create a cuboid with rounded cornes using 8 spheres.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
hull3d::hull3d (array< solid @> @ arr)
+
+ +

constructor

+
Parameters
+ + +
arrarray of solids
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
hull3d::hull3d (const solids1,
const solids2 
)
+
+ +

constructor

+
Parameters
+ + + +
s1solid
s2solid
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
hull3d::hull3d (const solids1,
const solids2,
const solids3 
)
+
+ +

constructor

+
Parameters
+ + + + +
s1solid
s2solid
s3solid
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
hull3d::hull3d (const solids1,
const solids2,
const solids3,
const solids4 
)
+
+ +

constructor

+
Parameters
+ + + + + +
s1solid
s2solid
s3solid
s4solid
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
hull3d::hull3d (const solids1,
const solids2,
const solids3,
const solids4,
const solids5 
)
+
+ +

constructor

+
Parameters
+ + + + + + +
s1solid
s2solid
s3solid
s4solid
s5solid
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox hull3d::box () const
+
+ +
+
+ +
+
+ + + + + + + +
tmatrix hull3d::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string hull3d::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classhull3d.png b/docs/classhull3d.png new file mode 100644 index 0000000000000000000000000000000000000000..6989e91b714ecc7714f3c05c15036eb41b3ba741 GIT binary patch literal 430 zcmeAS@N?(olHy`uVBq!ia0vp^dO+O4!3-qVD`|cMQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;1loC+d+vI0d{^$OTJ!9?{Zh4aZ+PXtaxt#D zk{uh)x0|V!e_7DH`sx$9vmUQ5doDX`@{Q>CHsADS=;}Y8IdO^muk|0gcd2asQ+W4o ztwciyYr>p4`*bwzm#;57=Km`H+?gwkPRsZN3`-k2R;I6S{$CR471S^_sM@*edi901 zYa%jVz0Cga^WW@Up00S++WudY6OMf~m=S(--kBbiSmRR9t`o1{y*td{vghma?Qmm1 z=P`B6v~oCdg;5D;_D7|=XL4kC5~lQDxE=dCWA=@pi#qYIQjgD!^IH{CKHnnh_jN0| z9j|{2RtNYR?7esVi`Cw_))(LBUp(hpb=GP2cLigH^FY&F;>?YupK-r(5?STHCQ1<) OxD1}IelF{r5}E*;qQ=Dl literal 0 HcmV?d00001 diff --git a/docs/classimage2d-members.html b/docs/classimage2d-members.html new file mode 100644 index 0000000..58fa494 --- /dev/null +++ b/docs/classimage2d-members.html @@ -0,0 +1,69 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  V3.3-02 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
image2d Member List
+
+
+ +

This is the complete list of members for image2d, including all inherited members.

+ + + + + + +
height() const image2d
image2d(string file)image2d
resize(uint width, uint height)image2d
Type() const image2d
width() const image2d
+ + + + diff --git a/docs/classimage2d.html b/docs/classimage2d.html new file mode 100644 index 0000000..2b97e8d --- /dev/null +++ b/docs/classimage2d.html @@ -0,0 +1,177 @@ + + + + + + +AngelCAD: image2d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  V3.3-02 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
image2d Class Reference
+
+
+ +

Bitmap image supporting PNG, JPG, GIF, XPM and more. + More...

+ +

#include <angelcad.h>

+ + + + + + + + + + + + +

+Public Member Functions

 image2d (string file)
 
string Type () const
 
uint height () const
 
uint width () const
 
void resize (uint width, uint height)
 
+

Detailed Description

+

Bitmap image supporting PNG, JPG, GIF, XPM and more.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
image2d::image2d (string file)
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
uint image2d::height () const
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void image2d::resize (uint width,
uint height 
)
+
+ +
+
+ +
+
+ + + + + + + +
string image2d::Type () const
+
+ +
+
+ +
+
+ + + + + + + +
uint image2d::width () const
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classintersection2d-members.html b/docs/classintersection2d-members.html new file mode 100644 index 0000000..62b36c4 --- /dev/null +++ b/docs/classintersection2d-members.html @@ -0,0 +1,77 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
intersection2d Member List
+
+
+ +

This is the complete list of members for intersection2d, including all inherited members.

+ + + + + + + + + + + + + + +
box() const intersection2d
intersection2d(array< shape2d @> @arr)intersection2d
intersection2d(const shape2d @s1, const shape2d @s2)intersection2d
intersection2d(const shape2d @s1, const shape2d @s2, const shape2d @s3)intersection2d
intersection2d(const shape2d @s1, const shape2d @s2, const shape2d @s3, const shape2d @s4)intersection2d
intersection2d(const shape2d @s1, const shape2d @s2, const shape2d @s3, const shape2d @s4, const shape2d @s5)intersection2d
opAdd(shape2d @b)shape2d
opAnd(shape2d @b)shape2d
opSub(shape2d @b)shape2d
transform() const intersection2d
Type() const intersection2d
write_csg(string path)shape2d
write_xcsg(string path, double secant_tolerance=-1.0)shape2d
+ + + + diff --git a/docs/classintersection2d.html b/docs/classintersection2d.html new file mode 100644 index 0000000..b0d9e38 --- /dev/null +++ b/docs/classintersection2d.html @@ -0,0 +1,353 @@ + + + + + + +AngelCAD: intersection2d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
intersection2d Class Reference
+
+
+ +

2d intersection boolean operation + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for intersection2d:
+
+
+ + +shape2d +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 intersection2d (array< shape2d @> @arr)
 
 intersection2d (const shape2d @s1, const shape2d @s2)
 
 intersection2d (const shape2d @s1, const shape2d @s2, const shape2d @s3)
 
 intersection2d (const shape2d @s1, const shape2d @s2, const shape2d @s3, const shape2d @s4)
 
 intersection2d (const shape2d @s1, const shape2d @s2, const shape2d @s3, const shape2d @s4, const shape2d @s5)
 
boundingbox box () const
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from shape2d
boundingbox box () const
 
shape2d opAdd (shape2d @b)
 Boolean union operator+ overload. More...
 
shape2d opAnd (shape2d @b)
 Boolean intersection operator& overload. More...
 
shape2d opSub (shape2d @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

2d intersection boolean operation

+

intersection2d is a 2-dimensional boolean operation. It can be invoked either explicitly or using & operator:
+
+ explicit: shape2d@ object = intersection2d(circle(100),translate(75,0,0)*circle(50));
+
+ using & operator: shape2d@ object = circle(100) & translate(75,0,0)*circle(50);

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
intersection2d::intersection2d (array< shape2d @> @ arr)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
intersection2d::intersection2d (const shape2ds1,
const shape2ds2 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
intersection2d::intersection2d (const shape2ds1,
const shape2ds2,
const shape2ds3 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
intersection2d::intersection2d (const shape2ds1,
const shape2ds2,
const shape2ds3,
const shape2ds4 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
intersection2d::intersection2d (const shape2ds1,
const shape2ds2,
const shape2ds3,
const shape2ds4,
const shape2ds5 
)
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox intersection2d::box () const
+
+ +
+
+ +
+
+ + + + + + + +
tmatrix intersection2d::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string intersection2d::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classintersection2d.png b/docs/classintersection2d.png new file mode 100644 index 0000000000000000000000000000000000000000..f4a61611c8412a2c5c7b9e028ed43700df4a119a GIT binary patch literal 625 zcmeAS@N?(olHy`uVBq!ia0vp^(Lmh6!3-q#JEdy@DTx4|5ZC|z{{xvX-h3_XKQsZz z0^fFY zQyza;+`gH1*|Tbak}co$m-R*GZgOr?*(s3cxvA#PT$Pulb}#)Vo1eXG@hyDPmcyOZ zf4+Xv430Daadz(RalLHwX#2Zao(}~N2mOoGc>aFV>Mb)>GUsPkM!%f>>7CKcT~B;# zl{};M%72URRDCJ*aGFZ@X6xs3Y8iH%V|dWAxLV@RlfHL>Z`Hn+{J(9-X?~!sfH~q2 zZvv-zgX$fIX%Nm&q4IN<){fIu#1H9uPCLJIvdY_uL3{UZe!H)FSNOaAuj)jmK3h2@ zW4+k_9Xg)2)$a;_L!6lX^7LYrt@D}7%ipb9)qT3acyiUdpwBUBy)V}N_FQ^4<^JQn zd)97=-ZQ;?`pGM*+p@Dv^uKqiFuwrfy?t7Q` zVY2lu_pP(hK?TjdUeG`d@X4u9%>M|0^D7S02$Kp~J^?|E^nU*z?fy z?)5tiZJB4U-MnU7H~(0wM)~RMX{**+uRm)a{kL~h;dysmcD>(kPFb0Xdpn(ViZ6d2 z$9H4L_TAHbPZzwY`;+|oUD2Pd`<~|oA1S>1Y-vgU%S^xNcX`z-%L`?9+_qaebB5i@ uy&KrBKfCdr^T2FKAd01zdujgsz`UDB?fAy#NL^t1VDNPHb6Mw<&;$Tm`7-JN literal 0 HcmV?d00001 diff --git a/docs/classintersection3d-members.html b/docs/classintersection3d-members.html new file mode 100644 index 0000000..4f7c5df --- /dev/null +++ b/docs/classintersection3d-members.html @@ -0,0 +1,77 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
intersection3d Member List
+
+
+ +

This is the complete list of members for intersection3d, including all inherited members.

+ + + + + + + + + + + + + + +
box() const intersection3d
intersection3d(array< solid @> @arr)intersection3d
intersection3d(const solid @s1, const solid @s2)intersection3d
intersection3d(const solid @s1, const solid @s2, const solid @s3)intersection3d
intersection3d(const solid @s1, const solid @s2, const solid @s3, const solid @s4)intersection3d
intersection3d(const solid @s1, const solid @s2, const solid @s3, const solid @s4, const solid @s5)intersection3d
opAdd(solid @b)solid
opAnd(solid @b)solid
opSub(solid @b)solid
transform() const intersection3d
Type() const intersection3d
write_csg(string path)solid
write_xcsg(string path, double secant_tolerance=-1.0)solid
+ + + + diff --git a/docs/classintersection3d.html b/docs/classintersection3d.html new file mode 100644 index 0000000..135f89d --- /dev/null +++ b/docs/classintersection3d.html @@ -0,0 +1,353 @@ + + + + + + +AngelCAD: intersection3d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
intersection3d Class Reference
+
+
+ +

3d intersection boolean operation + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for intersection3d:
+
+
+ + +solid +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 intersection3d (array< solid @> @arr)
 
 intersection3d (const solid @s1, const solid @s2)
 
 intersection3d (const solid @s1, const solid @s2, const solid @s3)
 
 intersection3d (const solid @s1, const solid @s2, const solid @s3, const solid @s4)
 
 intersection3d (const solid @s1, const solid @s2, const solid @s3, const solid @s4, const solid @s5)
 
boundingbox box () const
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from solid
boundingbox box () const
 
solid opAdd (solid @b)
 Boolean union operator+ overload. More...
 
solid opAnd (solid @b)
 Boolean intersection operator& overload. More...
 
solid opSub (solid @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

3d intersection boolean operation

+

intersection3d is a 2-dimensional boolean operation. It can be invoked either explicitly or using & operator:
+
+ explicit: solid@ object = intersection3d(sphere(100),translate(75,0,0)*sphere(50));
+
+ using & operator: solid@ object = sphere(100) & translate(75,0,0)*sphere(50);

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
intersection3d::intersection3d (array< solid @> @ arr)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
intersection3d::intersection3d (const solids1,
const solids2 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
intersection3d::intersection3d (const solids1,
const solids2,
const solids3 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
intersection3d::intersection3d (const solids1,
const solids2,
const solids3,
const solids4 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
intersection3d::intersection3d (const solids1,
const solids2,
const solids3,
const solids4,
const solids5 
)
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox intersection3d::box () const
+
+ +
+
+ +
+
+ + + + + + + +
tmatrix intersection3d::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string intersection3d::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classintersection3d.png b/docs/classintersection3d.png new file mode 100644 index 0000000000000000000000000000000000000000..d3cb726a8100bd4b386086affde053777dcf21f9 GIT binary patch literal 568 zcmeAS@N?(olHy`uVBq!ia0vp^(Lmh6!3-q#JEdy@DTx4|5ZC|z{{xvX-h3_XKQsZz z0^#Ar*{o=f3V+Y{28@Z|A+|zq0;x z2Ez-g*4^n=t5p5+c-8v~|0k!3v8Z_}E{UFGWB*QX(wFytmhASqx2Yt#dY!`$#-ATPRW#{U` z{>Scjy7R=ZKi4eJjs8B_lCvoO*^|GYWh2!meNnxn>p8E)dy@K%+%z#}2YY4*fyQ@< z9h2F2xtGqcx%4;twaQ%vc64ijZg}o|XXz9n7FLB8piA~0-79~w@Wzg(d$P57(sy+1 zKF|AL#OH9)tfbMw^50g1kB(@&`RvXR_gt_5?;VgQu&X%Q~loCII|z3?Tpj literal 0 HcmV?d00001 diff --git a/docs/classlinear__extrude-members.html b/docs/classlinear__extrude-members.html new file mode 100644 index 0000000..1a4c06f --- /dev/null +++ b/docs/classlinear__extrude-members.html @@ -0,0 +1,74 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
linear_extrude Member List
+
+
+ +

This is the complete list of members for linear_extrude, including all inherited members.

+ + + + + + + + + + + +
box() const linear_extrude
height() const linear_extrude
linear_extrude(const shape2d @shape, double height)linear_extrude
opAdd(solid @b)solid
opAnd(solid @b)solid
opSub(solid @b)solid
transform() const linear_extrude
Type() const linear_extrude
write_csg(string path)solid
write_xcsg(string path, double secant_tolerance=-1.0)solid
+ + + + diff --git a/docs/classlinear__extrude.html b/docs/classlinear__extrude.html new file mode 100644 index 0000000..f93d476 --- /dev/null +++ b/docs/classlinear__extrude.html @@ -0,0 +1,242 @@ + + + + + + +AngelCAD: linear_extrude Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
linear_extrude Class Reference
+
+
+ +

Extrude 2d shape in z direction into 3d solid. + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for linear_extrude:
+
+
+ + +solid +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 linear_extrude (const shape2d @shape, double height)
 constructor More...
 
boundingbox box () const
 
double height () const
 extrusion height More...
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from solid
boundingbox box () const
 
solid opAdd (solid @b)
 Boolean union operator+ overload. More...
 
solid opAnd (solid @b)
 Boolean intersection operator& overload. More...
 
solid opSub (solid @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

Extrude 2d shape in z direction into 3d solid.

+

linear_extrude extrudes a 2d shape in z-direction, creating a solid.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
linear_extrude::linear_extrude (const shape2dshape,
double height 
)
+
+ +

constructor

+
Parameters
+ + + +
shape2d profile to be extruded
heightdistance in z direction to extrude
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox linear_extrude::box () const
+
+ +
+
+ +
+
+ + + + + + + +
double linear_extrude::height () const
+
+ +

extrusion height

+
Returns
extrusion height
+ +
+
+ +
+
+ + + + + + + +
tmatrix linear_extrude::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string linear_extrude::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classlinear__extrude.png b/docs/classlinear__extrude.png new file mode 100644 index 0000000000000000000000000000000000000000..d5fb39dcfd562603c68f0b8ba1daa13895a54ef8 GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^u|V9x!3-of#fawuDTx4|5ZC|z{{xvX-h3_XKQsZz z0^%bqTdAr*{o=RVxDSb@ilKR&JIzk6JF z#>HiOZ>Ty;?`JYPko6qzvHSS@5vh# zuby!_%WYC$Px$}sH&ruxws=o+-*NYh4p)P)4?|+ht>v0Q@>%nrHvWqE?S9?o7GumM zz6TS_82Yy`S1ge|p!}9WE|dMk54GJhBPC|2uud%V{PZLBTTuVC$xFibB-g+2oOF7^ z-jKkRzR|z$>_4%Ow;+Hx;O=~e2|(&-w<_xW8i&pno#d)xT+-n}MYoOH4QKe0TKInluKz^eg-Rt!F%TvR(!3vb^~&noC(eviAw9pKj#{1w}c7r>mdK II;Vst0Dxx{Q2+n{ literal 0 HcmV?d00001 diff --git a/docs/classlocsys3d-members.html b/docs/classlocsys3d-members.html new file mode 100644 index 0000000..5773af5 --- /dev/null +++ b/docs/classlocsys3d-members.html @@ -0,0 +1,69 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
locsys3d Member List
+
+
+ +

This is the complete list of members for locsys3d, including all inherited members.

+ + + + + + +
locsys3d(const vec3d @xvec, const vec3d @zvec)locsys3d
Type() const locsys3d
x() const locsys3d
y() const locsys3d
z() const locsys3d
+ + + + diff --git a/docs/classlocsys3d.html b/docs/classlocsys3d.html new file mode 100644 index 0000000..6149003 --- /dev/null +++ b/docs/classlocsys3d.html @@ -0,0 +1,203 @@ + + + + + + +AngelCAD: locsys3d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
locsys3d Class Reference
+
+
+ +

3d localsystem + More...

+ +

#include <angelcad.h>

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 locsys3d (const vec3d @xvec, const vec3d @zvec)
 constructor More...
 
string Type () const
 class type string More...
 
vec3d x () const
 local x-direction vector More...
 
vec3d y () const
 local y-direction vector More...
 
vec3d z () const
 local z-direction vector More...
 
+

Detailed Description

+

3d localsystem

+

a locsys3d represents local coordinate system directions.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
locsys3d::locsys3d (const vec3dxvec,
const vec3dzvec 
)
+
+ +

constructor

+
Parameters
+ + + +
xveclocal x-direction vector
zveclocal z-direction vector
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
string locsys3d::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+ +
+
+ + + + + + + +
vec3d locsys3d::x () const
+
+ +

local x-direction vector

+
Returns
local x-direction vector
+ +
+
+ +
+
+ + + + + + + +
vec3d locsys3d::y () const
+
+ +

local y-direction vector

+
Returns
local y-direction vector
+ +
+
+ +
+
+ + + + + + + +
vec3d locsys3d::z () const
+
+ +

local z-direction vector

+
Returns
local z-direction vector
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classloft3d-members.html b/docs/classloft3d-members.html new file mode 100644 index 0000000..ce961b9 --- /dev/null +++ b/docs/classloft3d-members.html @@ -0,0 +1,68 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  V3.3-02 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
loft3d Member List
+
+
+ +

This is the complete list of members for loft3d, including all inherited members.

+ + + + + +
loft3d(array< spline3d @> @splines, uint ntseg=30)loft3d
loft3d(image2d @imagefile, double dx, double dy, int ntseg=-1)loft3d
loft3d(string textfile, double dx, double dy, int ntseg=-1)loft3d
Type() const loft3d
+ + + + diff --git a/docs/classloft3d.html b/docs/classloft3d.html new file mode 100644 index 0000000..772cb4c --- /dev/null +++ b/docs/classloft3d.html @@ -0,0 +1,205 @@ + + + + + + +AngelCAD: loft3d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  V3.3-02 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
loft3d Class Reference
+
+
+ +

Lofted surface. + More...

+ +

#include <angelcad.h>

+ + + + + + + + + + +

+Public Member Functions

 loft3d (array< spline3d @> @splines, uint ntseg=30)
 
 loft3d (image2d @imagefile, double dx, double dy, int ntseg=-1)
 
 loft3d (string textfile, double dx, double dy, int ntseg=-1)
 
string Type () const
 
+

Detailed Description

+

Lofted surface.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
loft3d::loft3d (array< spline3d @> @ splines,
uint ntseg = 30 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
loft3d::loft3d (image2dimagefile,
double dx,
double dy,
int ntseg = -1 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
loft3d::loft3d (string textfile,
double dx,
double dy,
int ntseg = -1 
)
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
string loft3d::Type () const
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classminkowski2d-members.html b/docs/classminkowski2d-members.html new file mode 100644 index 0000000..ee262be --- /dev/null +++ b/docs/classminkowski2d-members.html @@ -0,0 +1,73 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
minkowski2d Member List
+
+
+ +

This is the complete list of members for minkowski2d, including all inherited members.

+ + + + + + + + + + +
box() const minkowski2d
minkowski2d(const shape2d @a, const shape2d @b)minkowski2d
opAdd(shape2d @b)shape2d
opAnd(shape2d @b)shape2d
opSub(shape2d @b)shape2d
transform() const minkowski2d
Type() const minkowski2d
write_csg(string path)shape2d
write_xcsg(string path, double secant_tolerance=-1.0)shape2d
+ + + + diff --git a/docs/classminkowski2d.html b/docs/classminkowski2d.html new file mode 100644 index 0000000..7a52ae0 --- /dev/null +++ b/docs/classminkowski2d.html @@ -0,0 +1,225 @@ + + + + + + +AngelCAD: minkowski2d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
minkowski2d Class Reference
+
+
+ +

2d Minkowski sum operation + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for minkowski2d:
+
+
+ + +shape2d +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 minkowski2d (const shape2d @a, const shape2d @b)
 constructor More...
 
boundingbox box () const
 return bounding box More...
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from shape2d
boundingbox box () const
 
shape2d opAdd (shape2d @b)
 Boolean union operator+ overload. More...
 
shape2d opAnd (shape2d @b)
 Boolean intersection operator& overload. More...
 
shape2d opSub (shape2d @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

2d Minkowski sum operation

+

minkowski2d is a 2-dimensional boolean operation requiring exactly 2 parameters, a and b. The first parameter (a) is generally the larger and can be concave or convex. The second parameter (b) is assumed smaller and convex (such as a circle). Typical use of the minkowski sum is to create an object with rounded corners.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
minkowski2d::minkowski2d (const shape2da,
const shape2db 
)
+
+ +

constructor

+
Parameters
+ + + +
aconvex/concave object to be modified
bconvex 'tool' object
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox minkowski2d::box () const
+
+ +

return bounding box

+
Returns
The bounding box of the minkowski sum
+ +
+
+ +
+
+ + + + + + + +
tmatrix minkowski2d::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string minkowski2d::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classminkowski2d.png b/docs/classminkowski2d.png new file mode 100644 index 0000000000000000000000000000000000000000..23c4cee310cbfeeccaeed2df3cce0fbcf36a97e8 GIT binary patch literal 594 zcmV-Y0vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0005uNkl#xnPan*0Dof&-HP=1ZLFVJ~ba5RzNjl~F zEL+#t&az8oCqa=51|C`A(Q|%Qu=?4Rn9QrLs$|7|PB4@+|R^T#j%Hs+_|^Cpa`Qj%^GN=fozR+^c)0&tHBz!!hz zG`Tzdm9x>?`3=fnQt?m%I1x$!A3_P>Lnr}!2ql0Ip#&I`QcAv%06YmLfDgU0&POlX z)|Ts1;%5IS%4=n@o-5ZuUZ2PND2Gv=T!wY+;HsZv9ju + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
minkowski3d Member List
+
+
+ +

This is the complete list of members for minkowski3d, including all inherited members.

+ + + + + + + + + + +
box() const minkowski3d
minkowski3d(const solid @a, const solid @b)minkowski3d
opAdd(solid @b)solid
opAnd(solid @b)solid
opSub(solid @b)solid
transform() const minkowski3d
Type() const minkowski3d
write_csg(string path)solid
write_xcsg(string path, double secant_tolerance=-1.0)solid
+ + + + diff --git a/docs/classminkowski3d.html b/docs/classminkowski3d.html new file mode 100644 index 0000000..8ccccb7 --- /dev/null +++ b/docs/classminkowski3d.html @@ -0,0 +1,215 @@ + + + + + + +AngelCAD: minkowski3d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
minkowski3d Class Reference
+
+
+ +

3d Minkowski sum operation + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for minkowski3d:
+
+
+ + +solid +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 minkowski3d (const solid @a, const solid @b)
 
boundingbox box () const
 return bounding box More...
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from solid
boundingbox box () const
 
solid opAdd (solid @b)
 Boolean union operator+ overload. More...
 
solid opAnd (solid @b)
 Boolean intersection operator& overload. More...
 
solid opSub (solid @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

3d Minkowski sum operation

+

minkowski3d is a 3-dimensional boolean operation requiring exactly 2 parameters, a and b. The first parameter (a) is generally the larger and can be concave or convex. The second parameter (b) is assumed smaller and convex (such as a circle). Typical use of the minkowski sum is to create an object with rounded edges.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
minkowski3d::minkowski3d (const solida,
const solidb 
)
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox minkowski3d::box () const
+
+ +

return bounding box

+
Returns
The bounding box of the minkowski sum
+ +
+
+ +
+
+ + + + + + + +
tmatrix minkowski3d::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string minkowski3d::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classminkowski3d.png b/docs/classminkowski3d.png new file mode 100644 index 0000000000000000000000000000000000000000..16a7637652baf5607aa3c51bed6f6da828c9ed92 GIT binary patch literal 538 zcmeAS@N?(olHy`uVBq!ia0vp^Al$*h3?!YyeI5WQi2$Dv*Z=?j1DP-0d@b!iGy%v0 z;{yi{uy)>&2XZ+|g8YIRfQmri>ZuST1_s8Jo-U3d6^w7^GEQ2pAiz4?JoMiG6Y;!k zF+oz3r?1_=J9uFt&jr37b_JzF+=`xlL7JX&ep6j1>3uwVYSW8Txifx$^ql0zH|6uP zrB@gJ+gLqm$;9N;x3Axw`?ILXx+2x~we8L3$@0_FPppZd)8^3zLllo*}rpzjFRWCLo+w6*?rpTiq7*NvQN)ms@b}C<(k^{CNg(c z*HnD?|5ndFpwM%dmzL_u!|`EmE)k3seVhln<1Ky5md9I4-#y2#QSWgym@`3XDuY}Q z=L1DJ)jlPtOPs4=atKp}#MHMxU!-o|xisEuPjvm1r#p)_+l8%joIC$G!A z@%LXuqF!r#X!*2l%l?M2KHbY!wqY^{oV6Hj{-maAE{*uf?!u!SIzdwKJTM{|JYD@< J);T3K0RYPX@Z|si literal 0 HcmV?d00001 diff --git a/docs/classmirror-members.html b/docs/classmirror-members.html new file mode 100644 index 0000000..c5e9457 --- /dev/null +++ b/docs/classmirror-members.html @@ -0,0 +1,80 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
mirror Member List
+
+
+ +

This is the complete list of members for mirror, including all inherited members.

+ + + + + + + + + + + + + + + + + +
dump() const mirror
dx() const mirror
dy() const mirror
dz() const mirror
mirror(double dx, double dy, double dz)mirror
mirror(vec3d @normal, pos3d @point=pos3d(0, 0, 0))mirror
opMul(pos2d @obj)mirror
opMul(pos3d @obj)mirror
opMul(shape2d @obj)mirror
opMul(solid @obj)mirror
opMul(const tmatrix @B)mirror
origin() const mirror
Type() const mirror
xdir() const mirror
ydir() const mirror
zdir() const mirror
+ + + + diff --git a/docs/classmirror.html b/docs/classmirror.html new file mode 100644 index 0000000..4a50522 --- /dev/null +++ b/docs/classmirror.html @@ -0,0 +1,500 @@ + + + + + + +AngelCAD: mirror Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
mirror Class Reference
+
+
+ +

Mirror transformation around given point. + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for mirror:
+
+
+ + +tmatrix + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 mirror (double dx, double dy, double dz)
 constructor, mirror around origin More...
 
 mirror (vec3d @normal, pos3d @point=pos3d(0, 0, 0))
 constructor, mirror around given point More...
 
double dx () const
 mirror transform normal vector, x-component More...
 
double dy () const
 mirror transform normal vector, y-component More...
 
double dz () const
 mirror transform normal vector, z-component More...
 
pos2d opMul (pos2d @obj)
 
pos3d opMul (pos3d @obj)
 transform a point: pos3d@ p = T*obj; More...
 
pos3d origin () const
 
shape2d opMul (shape2d @obj)
 transform a 2d shape: shape2d@ s = T*obj; More...
 
solid opMul (solid @obj)
 transform a solid: solid@ s = T*obj; More...
 
string Type () const
 
tmatrix opMul (const tmatrix @B)
 matrix multiplication: A = T*B More...
 
vec3d xdir () const
 
vec3d ydir () const
 
vec3d zdir () const
 
void dump () const
 dump matrix to console More...
 
- Public Member Functions inherited from tmatrix
pos2d opMul (pos2d @obj)
 
pos3d opMul (pos3d @obj)
 transform a point: pos3d@ p = T*obj; More...
 
pos3d origin () const
 
shape2d opMul (shape2d @obj)
 transform a 2d shape: shape2d@ s = T*obj; More...
 
solid opMul (solid @obj)
 transform a solid: solid@ s = T*obj; More...
 
string Type () const
 class type string More...
 
tmatrix opMul (const tmatrix @B)
 matrix multiplication: A = T*B More...
 
vec3d xdir () const
 
vec3d ydir () const
 
vec3d zdir () const
 
void dump () const
 dump matrix to console More...
 
+

Detailed Description

+

Mirror transformation around given point.

+

mirror is a transformation creating mirror images of 2d or 3d objects.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
mirror::mirror (double dx,
double dy,
double dz 
)
+
+ +

constructor, mirror around origin

+
Parameters
+ + + + +
dxx-component of mirror plane normal
dyy-component of mirror plane normal
dzz-component of mirror plane normal
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
mirror::mirror (vec3dnormal,
pos3dpoint = pos3d(0, 0, 0) 
)
+
+ +

constructor, mirror around given point

+
Parameters
+ + + +
normalmirror plane normal vector
pointpoint in mirror plane
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
void mirror::dump () const
+
+ +

dump matrix to console

+ +
+
+ +
+
+ + + + + + + +
double mirror::dx () const
+
+ +

mirror transform normal vector, x-component

+
Returns
normal vector, x-component
+ +
+
+ +
+
+ + + + + + + +
double mirror::dy () const
+
+ +

mirror transform normal vector, y-component

+
Returns
normal vector, y-component
+ +
+
+ +
+
+ + + + + + + +
double mirror::dz () const
+
+ +

mirror transform normal vector, z-component

+
Returns
normal vector,z-component
+ +
+
+ +
+
+ + + + + + + + +
pos2d mirror::opMul (pos2dobj)
+
+ +
+
+ +
+
+ + + + + + + + +
pos3d mirror::opMul (pos3dobj)
+
+ +

transform a point: pos3d@ p = T*obj;

+
Parameters
+ + +
objposition to be transformed
+
+
+
Returns
transformed position
+ +
+
+ +
+
+ + + + + + + + +
shape2d mirror::opMul (shape2dobj)
+
+ +

transform a 2d shape: shape2d@ s = T*obj;

+
Parameters
+ + +
objobject to be transformed
+
+
+
Returns
transformed object
+ +
+
+ +
+
+ + + + + + + + +
solid mirror::opMul (solidobj)
+
+ +

transform a solid: solid@ s = T*obj;

+
Parameters
+ + +
objobject to be transformed
+
+
+
Returns
transformed object
+ +
+
+ +
+
+ + + + + + + + +
tmatrix mirror::opMul (const tmatrixB)
+
+ +

matrix multiplication: A = T*B

+
Parameters
+ + +
Bmatrix to be post-multiplied with this matrix
+
+
+
Returns
resulting matrixt
+ +
+
+ +
+
+ + + + + + + +
pos3d mirror::origin () const
+
+ +
+
+ +
+
+ + + + + + + +
string mirror::Type () const
+
+ +
+
+ +
+
+ + + + + + + +
vec3d mirror::xdir () const
+
+ +
+
+ +
+
+ + + + + + + +
vec3d mirror::ydir () const
+
+ +
+
+ +
+
+ + + + + + + +
vec3d mirror::zdir () const
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classmirror.png b/docs/classmirror.png new file mode 100644 index 0000000000000000000000000000000000000000..fbda74627dda5de5a3073c66bd82cb3e21150c95 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^20$FZ!3-obG}zt)DTx4|5ZC|z{{xvX-h3_XKQsZz z0^o zech$qCsU3s5aB2>onOIl=dSXDNhaqOvrJy1ochARRLLW2DM#8grl1p2Q>&}D?!Wpz z{Dj|BugzOkFLz(?H(B2$?sUu75-puEJP;M7&V9fo2`AH2o_a_;) RE}#z?JYD@<);T3K0RVc%hL->U literal 0 HcmV?d00001 diff --git a/docs/classoffset2d-members.html b/docs/classoffset2d-members.html new file mode 100644 index 0000000..e1d74a8 --- /dev/null +++ b/docs/classoffset2d-members.html @@ -0,0 +1,74 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
offset2d Member List
+
+
+ +

This is the complete list of members for offset2d, including all inherited members.

+ + + + + + + + + + + +
box() const offset2d
offset2d(array< shape2d @> @arr, double r=0x7fc00000, double delta=0x7fc00000, bool chamfer=false)offset2d
offset2d(const shape2d @profile, double r=0x7fc00000, double delta=0x7fc00000, bool chamfer=false)offset2d
opAdd(shape2d @b)shape2d
opAnd(shape2d @b)shape2d
opSub(shape2d @b)shape2d
transform() const offset2d
Type() const offset2d
write_csg(string path)shape2d
write_xcsg(string path, double secant_tolerance=-1.0)shape2d
+ + + + diff --git a/docs/classoffset2d.html b/docs/classoffset2d.html new file mode 100644 index 0000000..2242a69 --- /dev/null +++ b/docs/classoffset2d.html @@ -0,0 +1,287 @@ + + + + + + +AngelCAD: offset2d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
offset2d Class Reference
+
+
+ +

2d profile offset + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for offset2d:
+
+
+ + +shape2d +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 offset2d (array< shape2d @> @arr, double r=0x7fc00000, double delta=0x7fc00000, bool chamfer=false)
 constructor More...
 
 offset2d (const shape2d @profile, double r=0x7fc00000, double delta=0x7fc00000, bool chamfer=false)
 constructor More...
 
boundingbox box () const
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from shape2d
boundingbox box () const
 
shape2d opAdd (shape2d @b)
 Boolean union operator+ overload. More...
 
shape2d opAnd (shape2d @b)
 Boolean intersection operator& overload. More...
 
shape2d opSub (shape2d @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

2d profile offset

+

offset2d is a special 2d operation used for inflating or shrinking a 2d shape, optionally creating rounded corners and chamfers.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
offset2d::offset2d (array< shape2d @> @ arr,
double r = 0x7fc00000,
double delta = 0x7fc00000,
bool chamfer = false 
)
+
+ +

constructor

+
Parameters
+ + + + + +
arrarray of 2d profiles to be offset
rradius if rounded offset required (cannot be combined with delta)
deltastraight offset if shart corners required (cannot be combined with r)
chamfertrue if sharp corners to be chamfered (relevant with delta only)
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
offset2d::offset2d (const shape2dprofile,
double r = 0x7fc00000,
double delta = 0x7fc00000,
bool chamfer = false 
)
+
+ +

constructor

+
Parameters
+ + + + + +
profile2d profile to be offset
rradius if rounded offset required (cannot be combined with delta)
deltastraight offset if shart corners required (cannot be combined with r)
chamfertrue if sharp corners to be chamfered (relevant with delta only)
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox offset2d::box () const
+
+ +
+
+ +
+
+ + + + + + + +
tmatrix offset2d::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string offset2d::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classoffset2d.png b/docs/classoffset2d.png new file mode 100644 index 0000000000000000000000000000000000000000..7d17c39793d4ddc1a9ea87bf12376b1dcd4c65cd GIT binary patch literal 517 zcmeAS@N?(olHy`uVBq!ia0vp^HbC6L!3-pODl3$Mlth3}i0l9V|AEXGZ@!lHADRGU zf$@O@2Ut7r$OE|?B|(0{3_wL7aP?G(5d#C`6i*k&kP61Pb1(L_DDb%QZ}0s7|Kw^W zE+wl6YRP3Y3s#EwMZZ$nmy~u*+h@`*lLtSFCzY(f-+GtHD*xHenAiiKzZo@g_T`lF zwp-5ePP%hw`Hz&AtbJ6ofZ=`T8 zf`#jA^On72{L3=$X5BBrKacvY9b!R_Xke6rxoLgt+~RfN77cd1H_Gp8+i%@BHKmkq z{qu$#osVVzCHJ(&#owECSpC+VYR2>e4q4+L$B*pPw`(eXZg=;vUE_b@X&2u;SaR>r z%E#wCXJl>XPkld^UwlQ0^nyT;HQ|ZR=e)kcKk=cIV(Ax^DZn^m@O1TaS?83{1OR3E B?E(M* literal 0 HcmV?d00001 diff --git a/docs/classpface-members.html b/docs/classpface-members.html new file mode 100644 index 0000000..1973693 --- /dev/null +++ b/docs/classpface-members.html @@ -0,0 +1,69 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
pface Member List
+
+
+ +

This is the complete list of members for pface, including all inherited members.

+ + + + + + +
nvert() const pface
pface(uint iv1, uint iv2, uint iv3)pface
pface(uint iv1, uint iv2, uint iv3, uint iv4)pface
Type() const pface
vindex(uint iv) const pface
+ + + + diff --git a/docs/classpface.html b/docs/classpface.html new file mode 100644 index 0000000..d00f9b9 --- /dev/null +++ b/docs/classpface.html @@ -0,0 +1,248 @@ + + + + + + +AngelCAD: pface Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
pface Class Reference
+
+
+ +

Polyhedron face. + More...

+ +

#include <angelcad.h>

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 pface (uint iv1, uint iv2, uint iv3)
 polyhedron face constructor More...
 
 pface (uint iv1, uint iv2, uint iv3, uint iv4)
 polyhedron face constructor More...
 
string Type () const
 class type string More...
 
uint nvert () const
 number of vertices in face More...
 
uint vindex (uint iv) const
 polyhedron vertex index for face index More...
 
+

Detailed Description

+

Polyhedron face.

+

pface represents a single face of a polyhedron. It contains integer indices referring to the polyhedron vertices. When viewed from outside the polyhedron, a pface should list its vertices in CCW sequence.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
pface::pface (uint iv1,
uint iv2,
uint iv3 
)
+
+ +

polyhedron face constructor

+
Parameters
+ + + + +
iv1polyhedron vertex index
iv2polyhedron vertex index
iv3polyhedron vertex index
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
pface::pface (uint iv1,
uint iv2,
uint iv3,
uint iv4 
)
+
+ +

polyhedron face constructor

+
Parameters
+ + + + + +
iv1polyhedron vertex index
iv2polyhedron vertex index
iv3polyhedron vertex index
iv4polyhedron vertex index
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
uint pface::nvert () const
+
+ +

number of vertices in face

+
Returns
number of vertices in face
+ +
+
+ +
+
+ + + + + + + +
string pface::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+ +
+
+ + + + + + + + +
uint pface::vindex (uint iv) const
+
+ +

polyhedron vertex index for face index

+
Parameters
+ + +
ivface index
+
+
+
Returns
polyhedron face index
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classpolygon-members.html b/docs/classpolygon-members.html new file mode 100644 index 0000000..94f6c1c --- /dev/null +++ b/docs/classpolygon-members.html @@ -0,0 +1,82 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
polygon Member List
+
+
+ +

This is the complete list of members for polygon, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
area() const polygon
box() const polygon
opAdd(shape2d @b)shape2d
opAnd(shape2d @b)shape2d
opSub(shape2d @b)shape2d
polygon(array< pos2d @> @points, bool check=true)polygon
polygon(const pos2d @p1, const pos2d @p2, const pos2d @p3)polygon
polygon(const pos2d @p1, const pos2d @p2, const pos2d @p3, const pos2d @p4)polygon
polygon(const pos2d @p1, const pos2d @p2, const pos2d @p3, const pos2d @p4, const pos2d @p5)polygon
polygon(const spline2d @spline, uint nseg=30)polygon
polygon(double r, uint np)polygon
signed_area() const polygon
size() const polygon
transform() const polygon
Type() const polygon
vertex(uint iv) const polygon
write_csg(string path)shape2d
write_xcsg(string path, double secant_tolerance=-1.0)shape2d
+ + + + diff --git a/docs/classpolygon.html b/docs/classpolygon.html new file mode 100644 index 0000000..8750478 --- /dev/null +++ b/docs/classpolygon.html @@ -0,0 +1,514 @@ + + + + + + +AngelCAD: polygon Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
polygon Class Reference
+
+
+ +

polygon, vertices in CCW order + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for polygon:
+
+
+ + +shape2d +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 polygon (array< pos2d @> @points, bool check=true)
 
 polygon (const pos2d @p1, const pos2d @p2, const pos2d @p3)
 constructor (triangle), points must be given in CCW order More...
 
 polygon (const pos2d @p1, const pos2d @p2, const pos2d @p3, const pos2d @p4)
 constructor (quadrilateral), points must be given in CCW order More...
 
 polygon (const pos2d @p1, const pos2d @p2, const pos2d @p3, const pos2d @p4, const pos2d @p5)
 constructor (pentagon), points must be given in CCW order More...
 
 polygon (const spline2d @spline, uint nseg=30)
 constructor (spline), points must be given in CCW order More...
 
 polygon (double r, uint np)
 
boundingbox box () const
 
double area () const
 Polygon area. More...
 
double signed_area () const
 Signed polygon area, return negative area for polygons oriented CW. More...
 
pos2d vertex (uint iv) const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
uint size () const
 number of polygon points More...
 
- Public Member Functions inherited from shape2d
boundingbox box () const
 
shape2d opAdd (shape2d @b)
 Boolean union operator+ overload. More...
 
shape2d opAnd (shape2d @b)
 Boolean intersection operator& overload. More...
 
shape2d opSub (shape2d @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

polygon, vertices in CCW order

+

a polygon is a 2d object. It is defined by vertex positions listed in CCW sequence.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
polygon::polygon (array< pos2d @> @ points,
bool check = true 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
polygon::polygon (const pos2dp1,
const pos2dp2,
const pos2dp3 
)
+
+ +

constructor (triangle), points must be given in CCW order

+
Parameters
+ + + + +
p1position
p2position
p3position
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
polygon::polygon (const pos2dp1,
const pos2dp2,
const pos2dp3,
const pos2dp4 
)
+
+ +

constructor (quadrilateral), points must be given in CCW order

+
Parameters
+ + + + + +
p1position
p2position
p3position
p4position
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
polygon::polygon (const pos2dp1,
const pos2dp2,
const pos2dp3,
const pos2dp4,
const pos2dp5 
)
+
+ +

constructor (pentagon), points must be given in CCW order

+
Parameters
+ + + + + + +
p1position
p2position
p3position
p4position
p5position
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
polygon::polygon (const spline2dspline,
uint nseg = 30 
)
+
+ +

constructor (spline), points must be given in CCW order

+
Parameters
+ + + +
spline2d spline curve defining polygon profile
nsegnumber of straight segments for spline
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
polygon::polygon (double r,
uint np 
)
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
double polygon::area () const
+
+ +

Polygon area.

+

return computed area of polygon

+ +
+
+ +
+
+ + + + + + + +
boundingbox polygon::box () const
+
+ +
+
+ +
+
+ + + + + + + +
double polygon::signed_area () const
+
+ +

Signed polygon area, return negative area for polygons oriented CW.

+

return signed computed area of polygon

+ +
+
+ +
+
+ + + + + + + +
uint polygon::size () const
+
+ +

number of polygon points

+
Returns
number of polygon points
+ +
+
+ +
+
+ + + + + + + +
tmatrix polygon::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string polygon::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+ +
+
+ + + + + + + + +
pos2d polygon::vertex (uint iv) const
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classpolygon.png b/docs/classpolygon.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b9135d872dc9b4bb6aade448fa14f1411f3233 GIT binary patch literal 518 zcmV+h0{Q)kP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0004%NklpXFck``*dj0M8|2=hvPG@%l3E+r?jIUnLZOJ^S&rp6)Q86ver2Bnfmn1RobD} zpH^FvN;Tj5cf*o&sXq$4yH5(BqYYqIci?TiLEnLQcAmZk|6;Wl3^1Yv0}N=v00UYu zz<~Zw*xh|rxFpSK!7@o|$t+DrI{=5dIA6h!ZS62I$a(bKV0RbrJ`OFK=s1mD!P8zj zT&0%QCg=0fN;{<%qaK0MDVp#_tjwH?)j0E+s+^58S80b@pKG78ud6LdrMg$5szh?vn!O=+{0s+jfJ#1MloSeGC5Lk2^qH3kDd_f&m7!V1NNF7+^qO3!9nE3Imwa zf^$E>8~qTx_a5Ew`W|pJ!F`y+ajYugWBrTFdf6y;tH@2bHlM)H%!lDP_ZfVVY;n+D z + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
polyhedron Member List
+
+
+ +

This is the complete list of members for polyhedron, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
box() const polyhedron
face(uint iface) const polyhedron
face_area(uint iface) const polyhedron
flip_face(uint iface)polyhedron
flip_faces()polyhedron
nface() const polyhedron
nvert() const polyhedron
opAdd(solid @b)solid
opAnd(solid @b)solid
opSub(solid @b)solid
polyhedron(array< pos3d @> @points)polyhedron
polyhedron(array< pos3d @> @points, array< pface @> @faces)polyhedron
polyhedron(string file, int id=-1)polyhedron
set_vertex(uint iv, pos3d @pos)polyhedron
transform() const polyhedron
Type() const polyhedron
verify() const polyhedron
vertex(uint iv) const polyhedron
volume() const polyhedron
write_csg(string path)solid
write_xcsg(string path, double secant_tolerance=-1.0)solid
+ + + + diff --git a/docs/classpolyhedron.html b/docs/classpolyhedron.html new file mode 100644 index 0000000..13fb29f --- /dev/null +++ b/docs/classpolyhedron.html @@ -0,0 +1,516 @@ + + + + + + +AngelCAD: polyhedron Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
polyhedron Class Reference
+
+
+ +

Closed polyhedron volume defined by vertices and planar faces. + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for polyhedron:
+
+
+ + +solid +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 polyhedron (array< pos3d @> @points)
 
 polyhedron (array< pos3d @> @points, array< pface @> @faces)
 constructor More...
 
 polyhedron (string file, int id=-1)
 
boundingbox box () const
 
double face_area (uint iface) const
 polyhedron face area More...
 
double volume () const
 polyhedron volume More...
 
pface face (uint iface) const
 polyhedron face More...
 
pos3d vertex (uint iv) const
 polyhedron vertex More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
uint nface () const
 Number of faces. More...
 
uint nvert () const
 Number of vertices. More...
 
void flip_face (uint iface)
 Flip polyhedron face normal. More...
 
void flip_faces ()
 Flip all polyhedron face normals. More...
 
void set_vertex (uint iv, pos3d @pos)
 Set vertex position. More...
 
void verify () const
 
- Public Member Functions inherited from solid
boundingbox box () const
 
solid opAdd (solid @b)
 Boolean union operator+ overload. More...
 
solid opAnd (solid @b)
 Boolean intersection operator& overload. More...
 
solid opSub (solid @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

Closed polyhedron volume defined by vertices and planar faces.

+

a polyhedron is a general 3d object, defined by its vertices and polyhedron faces. It is useful in many contexts. It can be constructed directly or by reference to an input file.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
polyhedron::polyhedron (array< pos3d @> @ points)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
polyhedron::polyhedron (array< pos3d @> @ points,
array< pface @> @ faces 
)
+
+ +

constructor

+
Parameters
+ + + +
pointsarray of vertex coordinates
facesarray of polyhedron faces
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
polyhedron::polyhedron (string file,
int id = -1 
)
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox polyhedron::box () const
+
+ +
+
+ +
+
+ + + + + + + + +
pface polyhedron::face (uint iface) const
+
+ +

polyhedron face

+
Parameters
+ + +
ifaceindex of polyhedron face
+
+
+
Returns
polyhedron face
+ +
+
+ +
+
+ + + + + + + + +
double polyhedron::face_area (uint iface) const
+
+ +

polyhedron face area

+
Parameters
+ + +
ifaceindex of polyhedron face
+
+
+
Returns
computed area of polyhedron face
+ +
+
+ +
+
+ + + + + + + + +
void polyhedron::flip_face (uint iface)
+
+ +

Flip polyhedron face normal.

+
Parameters
+ + +
ifaceindex of polyhedron face
+
+
+ +
+
+ +
+
+ + + + + + + +
void polyhedron::flip_faces ()
+
+ +

Flip all polyhedron face normals.

+ +
+
+ +
+
+ + + + + + + +
uint polyhedron::nface () const
+
+ +

Number of faces.

+
Returns
number of faces in polyhedron
+ +
+
+ +
+
+ + + + + + + +
uint polyhedron::nvert () const
+
+ +

Number of vertices.

+
Returns
number of vertices in polyhedron
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void polyhedron::set_vertex (uint iv,
pos3dpos 
)
+
+ +

Set vertex position.

+
Parameters
+ + + +
ivindex of polyhedron vertex
posnew position of vertex
+
+
+ +
+
+ +
+
+ + + + + + + +
tmatrix polyhedron::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string polyhedron::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+ +
+
+ + + + + + + +
void polyhedron::verify () const
+
+ +
+
+ +
+
+ + + + + + + + +
pos3d polyhedron::vertex (uint iv) const
+
+ +

polyhedron vertex

+
Parameters
+ + +
ivindex of polyhedron vertex
+
+
+
Returns
polyhedron vertex position
+ +
+
+ +
+
+ + + + + + + +
double polyhedron::volume () const
+
+ +

polyhedron volume

+
Returns
computed volume of polyhedron
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classpolyhedron.png b/docs/classpolyhedron.png new file mode 100644 index 0000000000000000000000000000000000000000..6bd6ef5ee83e1a07dce351b0e48e1fba540011e7 GIT binary patch literal 537 zcmeAS@N?(olHy`uVBq!ia0vp^K0w^T!3-p;4F2v0QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;(tbL#UGhFx1trmB36d2{pDr;_u#OqOr1 zshTxu%hOM5f19UFD)9oDs$p!*&Gdkc*+FFDrbLb{uBY6>=jeufJGy+P5reuW^M{E> z4Dv84TiBu9L!^hJ-zlbjkh`;HU|rre2}E{djePp$o! zxs2z4=P8DoB|Hb*VbrbFQ-T&PU^p@X=nD2t{>k@i|6H%{&*6ENQ5F4+^Zlya`Et|x zR<7oYtqR+e`tSIcu3g_O->~I`l_}g_9ToR*>YBMm^|~TAioC;i&thBf<;|(GNw1gh z`Tiy=b@t_)ywlUx`xl#*==(0veV6~(<=OvpeX0EWZvLrfd!QT@=B4TQhv`DI!V`wi SjQ+rQWbkzLb6Mw<&;$VfFa6R0 literal 0 HcmV?d00001 diff --git a/docs/classpos2d-members.html b/docs/classpos2d-members.html new file mode 100644 index 0000000..16ffba2 --- /dev/null +++ b/docs/classpos2d-members.html @@ -0,0 +1,71 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
pos2d Member List
+
+
+ +

This is the complete list of members for pos2d, including all inherited members.

+ + + + + + + + +
dist(const pos2d @pos) const pos2d
opMul(double f1)pos2d
opMul_r(double f1)pos2d
pos2d(double x, double y)pos2d
Type() const pos2d
x() const pos2d
y() const pos2d
+ + + + diff --git a/docs/classpos2d.html b/docs/classpos2d.html new file mode 100644 index 0000000..bd226ca --- /dev/null +++ b/docs/classpos2d.html @@ -0,0 +1,246 @@ + + + + + + +AngelCAD: pos2d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
pos2d Class Reference
+
+
+ +

2d position coordinates + More...

+ +

#include <angelcad.h>

+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 pos2d (double x, double y)
 constructor More...
 
double dist (const pos2d @pos) const
 distance from other position More...
 
double x () const
 x coordinate More...
 
double y () const
 y coordinate More...
 
pos2d opMul (double f1)
 
pos2d opMul_r (double f1)
 
string Type () const
 class type string More...
 
+

Detailed Description

+

2d position coordinates

+

a pos2d is a position in 2d space. It is used with 2d objects.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
pos2d::pos2d (double x,
double y 
)
+
+ +

constructor

+
Parameters
+ + + +
xcoordinate
ycoordinate
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
double pos2d::dist (const pos2dpos) const
+
+ +

distance from other position

+
Parameters
+ + +
posother position
+
+
+
Returns
distance from pos
+ +
+
+ +
+
+ + + + + + + + +
pos2d pos2d::opMul (double f1)
+
+ +
+
+ +
+
+ + + + + + + + +
pos2d pos2d::opMul_r (double f1)
+
+ +
+
+ +
+
+ + + + + + + +
string pos2d::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+ +
+
+ + + + + + + +
double pos2d::x () const
+
+ +

x coordinate

+
Returns
x coordinate
+ +
+
+ +
+
+ + + + + + + +
double pos2d::y () const
+
+ +

y coordinate

+
Returns
y coordinate
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classpos3d-members.html b/docs/classpos3d-members.html new file mode 100644 index 0000000..03517c1 --- /dev/null +++ b/docs/classpos3d-members.html @@ -0,0 +1,72 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
pos3d Member List
+
+
+ +

This is the complete list of members for pos3d, including all inherited members.

+ + + + + + + + + +
dist(const pos3d @pos) const pos3d
opMul(double f1)pos3d
opMul_r(double f1)pos3d
pos3d(double x, double y, double z)pos3d
Type() const pos3d
x() const pos3d
y() const pos3d
z() const pos3d
+ + + + diff --git a/docs/classpos3d.html b/docs/classpos3d.html new file mode 100644 index 0000000..5d219cf --- /dev/null +++ b/docs/classpos3d.html @@ -0,0 +1,274 @@ + + + + + + +AngelCAD: pos3d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
pos3d Class Reference
+
+
+ +

3d position coordinates + More...

+ +

#include <angelcad.h>

+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 pos3d (double x, double y, double z)
 constructor More...
 
double dist (const pos3d @pos) const
 distance from other position More...
 
double x () const
 x coordinate More...
 
double y () const
 y coordinate More...
 
double z () const
 z coordinate More...
 
pos3d opMul (double f1)
 
pos3d opMul_r (double f1)
 
string Type () const
 class type string More...
 
+

Detailed Description

+

3d position coordinates

+

a pos3d is a position in 3d space. It is used with 3d objects.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
pos3d::pos3d (double x,
double y,
double z 
)
+
+ +

constructor

+
Parameters
+ + + + +
xcoordinate
ycoordinate
zcoordinate
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
double pos3d::dist (const pos3dpos) const
+
+ +

distance from other position

+
Parameters
+ + +
posother position
+
+
+
Returns
distance from pos
+ +
+
+ +
+
+ + + + + + + + +
pos3d pos3d::opMul (double f1)
+
+ +
+
+ +
+
+ + + + + + + + +
pos3d pos3d::opMul_r (double f1)
+
+ +
+
+ +
+
+ + + + + + + +
string pos3d::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+ +
+
+ + + + + + + +
double pos3d::x () const
+
+ +

x coordinate

+
Returns
x coordinate
+ +
+
+ +
+
+ + + + + + + +
double pos3d::y () const
+
+ +

y coordinate

+
Returns
y coordinate
+ +
+
+ +
+
+ + + + + + + +
double pos3d::z () const
+
+ +

z coordinate

+
Returns
z coordinate
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classrectangle-members.html b/docs/classrectangle-members.html new file mode 100644 index 0000000..d43ce39 --- /dev/null +++ b/docs/classrectangle-members.html @@ -0,0 +1,75 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
rectangle Member List
+
+
+ +

This is the complete list of members for rectangle, including all inherited members.

+ + + + + + + + + + + + +
box() const rectangle
dx() const rectangle
dy() const rectangle
opAdd(shape2d @b)shape2d
opAnd(shape2d @b)shape2d
opSub(shape2d @b)shape2d
rectangle(double dx, double dy, bool center=false)rectangle
transform() const rectangle
Type() const rectangle
write_csg(string path)shape2d
write_xcsg(string path, double secant_tolerance=-1.0)shape2d
+ + + + diff --git a/docs/classrectangle.html b/docs/classrectangle.html new file mode 100644 index 0000000..e7bc113 --- /dev/null +++ b/docs/classrectangle.html @@ -0,0 +1,270 @@ + + + + + + +AngelCAD: rectangle Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
rectangle Class Reference
+
+
+ +

rectangle, by default located in 1st quadrant touching origin + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for rectangle:
+
+
+ + +shape2d +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 rectangle (double dx, double dy, bool center=false)
 constructor More...
 
boundingbox box () const
 
double dx () const
 extent in x direction More...
 
double dy () const
 extent in y direction More...
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from shape2d
boundingbox box () const
 
shape2d opAdd (shape2d @b)
 Boolean union operator+ overload. More...
 
shape2d opAnd (shape2d @b)
 Boolean intersection operator& overload. More...
 
shape2d opSub (shape2d @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

rectangle, by default located in 1st quadrant touching origin

+

a rectangle is a 2d object defined by its extent in x and y. By default it touches the origin and extends along positive x and y.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
rectangle::rectangle (double dx,
double dy,
bool center = false 
)
+
+ +

constructor

+
Parameters
+ + + + +
dxextent in x direction
dyextent in y direction
centertrue if rectangle should be centered on origin
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox rectangle::box () const
+
+ +
+
+ +
+
+ + + + + + + +
double rectangle::dx () const
+
+ +

extent in x direction

+
Returns
extent in x direction
+ +
+
+ +
+
+ + + + + + + +
double rectangle::dy () const
+
+ +

extent in y direction

+
Returns
extent in y direction
+ +
+
+ +
+
+ + + + + + + +
tmatrix rectangle::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string rectangle::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classrectangle.png b/docs/classrectangle.png new file mode 100644 index 0000000000000000000000000000000000000000..ad9cbd1cfaefd847a81b9d747d1e237e0fdb7fbb GIT binary patch literal 533 zcmV+w0_y#VP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0004`NklJwnMM>j=DtGDu@s$kI{prUBxedjC8(-;1OQ8I0N|3Fux(z1o3I0%2tVN?dJ%*m0JugF zf)E4%u=+0qRaKXuB7r?^=Fe ze}+JkFBF7IP*wE^0G9fI|9aczMYst&z=`k^KB5;v2m*j>1R)4P00681LJ$#g2?78P z1>rSewqxx-NjTn8d(UsAeWbl?KMs`>cS6}~r}9=;*IT*R#$X8TktumVIKI-Ba2YJ& zw2xz0J8xnbRB};=#`!u6(~I-;QT|F__5uLjP + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
rotate_extrude Member List
+
+
+ +

This is the complete list of members for rotate_extrude, including all inherited members.

+ + + + + + + + + + + + +
box() const rotate_extrude
deg() const rotate_extrude
opAdd(solid @b)solid
opAnd(solid @b)solid
opSub(solid @b)solid
rad() const rotate_extrude
rotate_extrude(const shape2d @shape, double deg, double pitch=0.0)rotate_extrude
transform() const rotate_extrude
Type() const rotate_extrude
write_csg(string path)solid
write_xcsg(string path, double secant_tolerance=-1.0)solid
+ + + + diff --git a/docs/classrotate__extrude.html b/docs/classrotate__extrude.html new file mode 100644 index 0000000..3e26f77 --- /dev/null +++ b/docs/classrotate__extrude.html @@ -0,0 +1,272 @@ + + + + + + +AngelCAD: rotate_extrude Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
rotate_extrude Class Reference
+
+
+ +

Extrude 2d shape CCW in XZ plane into 3d solid. + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for rotate_extrude:
+
+
+ + +solid +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 rotate_extrude (const shape2d @shape, double deg, double pitch=0.0)
 constructor More...
 
boundingbox box () const
 
double deg () const
 extrusion angle in degrees More...
 
double rad () const
 extrusion angle in radians More...
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from solid
boundingbox box () const
 
solid opAdd (solid @b)
 Boolean union operator+ overload. More...
 
solid opAnd (solid @b)
 Boolean intersection operator& overload. More...
 
solid opSub (solid @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

Extrude 2d shape CCW in XZ plane into 3d solid.

+

rotate_extrude allows extruding a 2d shape along a circular path. A positive angle rotates the object around the y axis (CCW direction).
+
+ solid@ object = rotate_extrude(translate(100,0)*circle(10),deg:60);

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
rotate_extrude::rotate_extrude (const shape2dshape,
double deg,
double pitch = 0.0 
)
+
+ +

constructor

+
Parameters
+ + + + +
shape2d profile shape to extrude
degrotation in degrees. Rotation is CCW around y axis.
pitchdistance to offset profile in y direction for each revolution
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox rotate_extrude::box () const
+
+ +
+
+ +
+
+ + + + + + + +
double rotate_extrude::deg () const
+
+ +

extrusion angle in degrees

+
Returns
extrusion angle in degrees
+ +
+
+ +
+
+ + + + + + + +
double rotate_extrude::rad () const
+
+ +

extrusion angle in radians

+
Returns
extrusion angle in radians
+ +
+
+ +
+
+ + + + + + + +
tmatrix rotate_extrude::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string rotate_extrude::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classrotate__extrude.png b/docs/classrotate__extrude.png new file mode 100644 index 0000000000000000000000000000000000000000..66bb19fc336c733715a2ef161900d01fd773e3e5 GIT binary patch literal 571 zcmeAS@N?(olHy`uVBq!ia0vp^u|V9x!3-of#fawuDTx4|5ZC|z{{xvX-h3_XKQsZz z0^Q=Tr4Ar*{o=RTaYT7k!nKR&JIzk8hP ztw*L&+p^!~EuUG%F!Nc5;wNe2%?1XZTuN^zJ^3j9#&uHMgXwQm4X1CNef#fR71@tx z?2hY)zrJjw8*j5e3}9!xA_==a|=duD5+XOKYVbd`SlH2tqx%AQt_MSth1c|H+|t&EK`zYHu0zFs$9eTv0P=@06fJ3m8~H&WPV&zwDfRt<*33 zx20RAthoJUzI*YNs&$E{bC>eIXPmp&b?x1}D{J4{-S7GP#B4!)_5bZ=#VPA&*`@4W zwEWxc>h + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
rotate_x Member List
+
+
+ +

This is the complete list of members for rotate_x, including all inherited members.

+ + + + + + + + + + + + + + + +
deg() const rotate_x
dump() const rotate_x
opMul(pos2d @obj)rotate_x
opMul(pos3d @obj)rotate_x
opMul(shape2d @obj)rotate_x
opMul(solid @obj)rotate_x
opMul(const tmatrix @B)rotate_x
origin() const rotate_x
rad() const rotate_x
rotate_x(double deg=0x7fc00000, double rad=0x7fc00000)rotate_x
Type() const rotate_x
xdir() const rotate_x
ydir() const rotate_x
zdir() const rotate_x
+ + + + diff --git a/docs/classrotate__x.html b/docs/classrotate__x.html new file mode 100644 index 0000000..2a21fcd --- /dev/null +++ b/docs/classrotate__x.html @@ -0,0 +1,438 @@ + + + + + + +AngelCAD: rotate_x Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
rotate_x Class Reference
+
+
+ +

Rotation around x. + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for rotate_x:
+
+
+ + +tmatrix + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 rotate_x (double deg=0x7fc00000, double rad=0x7fc00000)
 constructor (rotate around x) More...
 
double deg () const
 rotation angle in degrees More...
 
double rad () const
 rotation angle in radians More...
 
pos2d opMul (pos2d @obj)
 
pos3d opMul (pos3d @obj)
 transform a point: pos3d@ p = T*obj; More...
 
pos3d origin () const
 
shape2d opMul (shape2d @obj)
 transform a 2d shape: shape2d@ s = T*obj; More...
 
solid opMul (solid @obj)
 transform a solid: solid@ s = T*obj; More...
 
string Type () const
 class type string More...
 
tmatrix opMul (const tmatrix @B)
 matrix multiplication: A = T*B More...
 
vec3d xdir () const
 
vec3d ydir () const
 
vec3d zdir () const
 
void dump () const
 dump matrix to console More...
 
- Public Member Functions inherited from tmatrix
pos2d opMul (pos2d @obj)
 
pos3d opMul (pos3d @obj)
 transform a point: pos3d@ p = T*obj; More...
 
pos3d origin () const
 
shape2d opMul (shape2d @obj)
 transform a 2d shape: shape2d@ s = T*obj; More...
 
solid opMul (solid @obj)
 transform a solid: solid@ s = T*obj; More...
 
string Type () const
 class type string More...
 
tmatrix opMul (const tmatrix @B)
 matrix multiplication: A = T*B More...
 
vec3d xdir () const
 
vec3d ydir () const
 
vec3d zdir () const
 
void dump () const
 dump matrix to console More...
 
+

Detailed Description

+

Rotation around x.

+

rotate_x is a transformation rotating around the x-axis. Positive angle according to right hand rule.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
rotate_x::rotate_x (double deg = 0x7fc00000,
double rad = 0x7fc00000 
)
+
+ +

constructor (rotate around x)

+
Parameters
+ + + +
degrotation specified in degrees (cannot be combined with rad)
radrotation specified in radians (cannot be combined with deg)
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
double rotate_x::deg () const
+
+ +

rotation angle in degrees

+
Returns
rotation angle in degrees
+ +
+
+ +
+
+ + + + + + + +
void rotate_x::dump () const
+
+ +

dump matrix to console

+ +
+
+ +
+
+ + + + + + + + +
pos2d rotate_x::opMul (pos2dobj)
+
+ +
+
+ +
+
+ + + + + + + + +
pos3d rotate_x::opMul (pos3dobj)
+
+ +

transform a point: pos3d@ p = T*obj;

+
Parameters
+ + +
objposition to be transformed
+
+
+
Returns
transformed position
+ +
+
+ +
+
+ + + + + + + + +
shape2d rotate_x::opMul (shape2dobj)
+
+ +

transform a 2d shape: shape2d@ s = T*obj;

+
Parameters
+ + +
objobject to be transformed
+
+
+
Returns
transformed object
+ +
+
+ +
+
+ + + + + + + + +
solid rotate_x::opMul (solidobj)
+
+ +

transform a solid: solid@ s = T*obj;

+
Parameters
+ + +
objobject to be transformed
+
+
+
Returns
transformed object
+ +
+
+ +
+
+ + + + + + + + +
tmatrix rotate_x::opMul (const tmatrixB)
+
+ +

matrix multiplication: A = T*B

+
Parameters
+ + +
Bmatrix to be post-multiplied with this matrix
+
+
+
Returns
resulting matrixt
+ +
+
+ +
+
+ + + + + + + +
pos3d rotate_x::origin () const
+
+ +
+
+ +
+
+ + + + + + + +
double rotate_x::rad () const
+
+ +

rotation angle in radians

+
Returns
rotation angle in radians
+ +
+
+ +
+
+ + + + + + + +
string rotate_x::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+ +
+
+ + + + + + + +
vec3d rotate_x::xdir () const
+
+ +
+
+ +
+
+ + + + + + + +
vec3d rotate_x::ydir () const
+
+ +
+
+ +
+
+ + + + + + + +
vec3d rotate_x::zdir () const
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classrotate__x.png b/docs/classrotate__x.png new file mode 100644 index 0000000000000000000000000000000000000000..01cef6c9a324347c569553ecf5b049660d0e8f8a GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^mOvc9!3-p)*y^eRDTx4|5ZC|z{{xvX-h3_XKQsZz z0^EwY&9sV=UCj^1dDY|(zadQww`I({e`z?2j%wJ=Ukt%BypLhr(C{K zu$Ly&0bOo~jtx6?0!?$)B?a`(&VTvVgfV6r=L17uhW<>ZikeB8X<|&w93L`1#}r-q z*S@p&)A^FhY~#0=kDYP+{p;$Bkkd=)Jx(D(lOkdBOvz#ZP$9`s7n&3W$XdRya((+l`fuX?Q>FVdQ&MBb@ E086)`82|tP literal 0 HcmV?d00001 diff --git a/docs/classrotate__y-members.html b/docs/classrotate__y-members.html new file mode 100644 index 0000000..cdea72f --- /dev/null +++ b/docs/classrotate__y-members.html @@ -0,0 +1,78 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
rotate_y Member List
+
+
+ +

This is the complete list of members for rotate_y, including all inherited members.

+ + + + + + + + + + + + + + + +
deg() const rotate_y
dump() const rotate_y
opMul(pos2d @obj)rotate_y
opMul(pos3d @obj)rotate_y
opMul(shape2d @obj)rotate_y
opMul(solid @obj)rotate_y
opMul(const tmatrix @B)rotate_y
origin() const rotate_y
rad() const rotate_y
rotate_y(double deg=0x7fc00000, double rad=0x7fc00000)rotate_y
Type() const rotate_y
xdir() const rotate_y
ydir() const rotate_y
zdir() const rotate_y
+ + + + diff --git a/docs/classrotate__y.html b/docs/classrotate__y.html new file mode 100644 index 0000000..f4cbb66 --- /dev/null +++ b/docs/classrotate__y.html @@ -0,0 +1,438 @@ + + + + + + +AngelCAD: rotate_y Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
rotate_y Class Reference
+
+
+ +

Rotation around y. + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for rotate_y:
+
+
+ + +tmatrix + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 rotate_y (double deg=0x7fc00000, double rad=0x7fc00000)
 constructor (rotate around y) More...
 
double deg () const
 rotation angle in degrees More...
 
double rad () const
 rotation angle in radians More...
 
pos2d opMul (pos2d @obj)
 
pos3d opMul (pos3d @obj)
 transform a point: pos3d@ p = T*obj; More...
 
pos3d origin () const
 
shape2d opMul (shape2d @obj)
 transform a 2d shape: shape2d@ s = T*obj; More...
 
solid opMul (solid @obj)
 transform a solid: solid@ s = T*obj; More...
 
string Type () const
 class type string More...
 
tmatrix opMul (const tmatrix @B)
 matrix multiplication: A = T*B More...
 
vec3d xdir () const
 
vec3d ydir () const
 
vec3d zdir () const
 
void dump () const
 dump matrix to console More...
 
- Public Member Functions inherited from tmatrix
pos2d opMul (pos2d @obj)
 
pos3d opMul (pos3d @obj)
 transform a point: pos3d@ p = T*obj; More...
 
pos3d origin () const
 
shape2d opMul (shape2d @obj)
 transform a 2d shape: shape2d@ s = T*obj; More...
 
solid opMul (solid @obj)
 transform a solid: solid@ s = T*obj; More...
 
string Type () const
 class type string More...
 
tmatrix opMul (const tmatrix @B)
 matrix multiplication: A = T*B More...
 
vec3d xdir () const
 
vec3d ydir () const
 
vec3d zdir () const
 
void dump () const
 dump matrix to console More...
 
+

Detailed Description

+

Rotation around y.

+

rotate_y is a transformation rotating around the y-axis. Positive angle according to right hand rule.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
rotate_y::rotate_y (double deg = 0x7fc00000,
double rad = 0x7fc00000 
)
+
+ +

constructor (rotate around y)

+
Parameters
+ + + +
degrotation specified in degrees (cannot be combined with rad)
radrotation specified in radians (cannot be combined with deg)
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
double rotate_y::deg () const
+
+ +

rotation angle in degrees

+
Returns
rotation angle in degrees
+ +
+
+ +
+
+ + + + + + + +
void rotate_y::dump () const
+
+ +

dump matrix to console

+ +
+
+ +
+
+ + + + + + + + +
pos2d rotate_y::opMul (pos2dobj)
+
+ +
+
+ +
+
+ + + + + + + + +
pos3d rotate_y::opMul (pos3dobj)
+
+ +

transform a point: pos3d@ p = T*obj;

+
Parameters
+ + +
objposition to be transformed
+
+
+
Returns
transformed position
+ +
+
+ +
+
+ + + + + + + + +
shape2d rotate_y::opMul (shape2dobj)
+
+ +

transform a 2d shape: shape2d@ s = T*obj;

+
Parameters
+ + +
objobject to be transformed
+
+
+
Returns
transformed object
+ +
+
+ +
+
+ + + + + + + + +
solid rotate_y::opMul (solidobj)
+
+ +

transform a solid: solid@ s = T*obj;

+
Parameters
+ + +
objobject to be transformed
+
+
+
Returns
transformed object
+ +
+
+ +
+
+ + + + + + + + +
tmatrix rotate_y::opMul (const tmatrixB)
+
+ +

matrix multiplication: A = T*B

+
Parameters
+ + +
Bmatrix to be post-multiplied with this matrix
+
+
+
Returns
resulting matrixt
+ +
+
+ +
+
+ + + + + + + +
pos3d rotate_y::origin () const
+
+ +
+
+ +
+
+ + + + + + + +
double rotate_y::rad () const
+
+ +

rotation angle in radians

+
Returns
rotation angle in radians
+ +
+
+ +
+
+ + + + + + + +
string rotate_y::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+ +
+
+ + + + + + + +
vec3d rotate_y::xdir () const
+
+ +
+
+ +
+
+ + + + + + + +
vec3d rotate_y::ydir () const
+
+ +
+
+ +
+
+ + + + + + + +
vec3d rotate_y::zdir () const
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classrotate__y.png b/docs/classrotate__y.png new file mode 100644 index 0000000000000000000000000000000000000000..890bb8a5c3821895d245adf54aca25fd8a62479b GIT binary patch literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^RzMuU!3-qpxu&TBDTx4|5ZC|z{{xvX-h3_XKQsZz z0^ zHVv!Yo|C7}Xx1op+q3n3i$D{9lS*a9x~xf8g7RwhV#8EdE)6`ZGws-;t#+|b73Fi6 z_b*qgzI^&+t)4Ca)mkNvw*7VZ;+LiM3+pr=u4L+&sdZq&N+uo + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
rotate_z Member List
+
+
+ +

This is the complete list of members for rotate_z, including all inherited members.

+ + + + + + + + + + + + + + + +
deg() const rotate_z
dump() const rotate_z
opMul(pos2d @obj)rotate_z
opMul(pos3d @obj)rotate_z
opMul(shape2d @obj)rotate_z
opMul(solid @obj)rotate_z
opMul(const tmatrix @B)rotate_z
origin() const rotate_z
rad() const rotate_z
rotate_z(double deg=0x7fc00000, double rad=0x7fc00000)rotate_z
Type() const rotate_z
xdir() const rotate_z
ydir() const rotate_z
zdir() const rotate_z
+ + + + diff --git a/docs/classrotate__z.html b/docs/classrotate__z.html new file mode 100644 index 0000000..614fb10 --- /dev/null +++ b/docs/classrotate__z.html @@ -0,0 +1,438 @@ + + + + + + +AngelCAD: rotate_z Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
rotate_z Class Reference
+
+
+ +

Rotation around z. + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for rotate_z:
+
+
+ + +tmatrix + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 rotate_z (double deg=0x7fc00000, double rad=0x7fc00000)
 constructor (rotate around z) More...
 
double deg () const
 rotation angle in degrees More...
 
double rad () const
 rotation angle in radians More...
 
pos2d opMul (pos2d @obj)
 
pos3d opMul (pos3d @obj)
 transform a point: pos3d@ p = T*obj; More...
 
pos3d origin () const
 
shape2d opMul (shape2d @obj)
 transform a 2d shape: shape2d@ s = T*obj; More...
 
solid opMul (solid @obj)
 transform a solid: solid@ s = T*obj; More...
 
string Type () const
 class type string More...
 
tmatrix opMul (const tmatrix @B)
 matrix multiplication: A = T*B More...
 
vec3d xdir () const
 
vec3d ydir () const
 
vec3d zdir () const
 
void dump () const
 dump matrix to console More...
 
- Public Member Functions inherited from tmatrix
pos2d opMul (pos2d @obj)
 
pos3d opMul (pos3d @obj)
 transform a point: pos3d@ p = T*obj; More...
 
pos3d origin () const
 
shape2d opMul (shape2d @obj)
 transform a 2d shape: shape2d@ s = T*obj; More...
 
solid opMul (solid @obj)
 transform a solid: solid@ s = T*obj; More...
 
string Type () const
 class type string More...
 
tmatrix opMul (const tmatrix @B)
 matrix multiplication: A = T*B More...
 
vec3d xdir () const
 
vec3d ydir () const
 
vec3d zdir () const
 
void dump () const
 dump matrix to console More...
 
+

Detailed Description

+

Rotation around z.

+

rotate_z is a transformation rotating around the z-axis. Positive angle according to right hand rule.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
rotate_z::rotate_z (double deg = 0x7fc00000,
double rad = 0x7fc00000 
)
+
+ +

constructor (rotate around z)

+
Parameters
+ + + +
degrotation specified in degrees (cannot be combined with rad)
radrotation specified in radians (cannot be combined with deg)
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
double rotate_z::deg () const
+
+ +

rotation angle in degrees

+
Returns
rotation angle in degrees
+ +
+
+ +
+
+ + + + + + + +
void rotate_z::dump () const
+
+ +

dump matrix to console

+ +
+
+ +
+
+ + + + + + + + +
pos2d rotate_z::opMul (pos2dobj)
+
+ +
+
+ +
+
+ + + + + + + + +
pos3d rotate_z::opMul (pos3dobj)
+
+ +

transform a point: pos3d@ p = T*obj;

+
Parameters
+ + +
objposition to be transformed
+
+
+
Returns
transformed position
+ +
+
+ +
+
+ + + + + + + + +
shape2d rotate_z::opMul (shape2dobj)
+
+ +

transform a 2d shape: shape2d@ s = T*obj;

+
Parameters
+ + +
objobject to be transformed
+
+
+
Returns
transformed object
+ +
+
+ +
+
+ + + + + + + + +
solid rotate_z::opMul (solidobj)
+
+ +

transform a solid: solid@ s = T*obj;

+
Parameters
+ + +
objobject to be transformed
+
+
+
Returns
transformed object
+ +
+
+ +
+
+ + + + + + + + +
tmatrix rotate_z::opMul (const tmatrixB)
+
+ +

matrix multiplication: A = T*B

+
Parameters
+ + +
Bmatrix to be post-multiplied with this matrix
+
+
+
Returns
resulting matrixt
+ +
+
+ +
+
+ + + + + + + +
pos3d rotate_z::origin () const
+
+ +
+
+ +
+
+ + + + + + + +
double rotate_z::rad () const
+
+ +

rotation angle in radians

+
Returns
rotation angle in radians
+ +
+
+ +
+
+ + + + + + + +
string rotate_z::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+ +
+
+ + + + + + + +
vec3d rotate_z::xdir () const
+
+ +
+
+ +
+
+ + + + + + + +
vec3d rotate_z::ydir () const
+
+ +
+
+ +
+
+ + + + + + + +
vec3d rotate_z::zdir () const
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classrotate__z.png b/docs/classrotate__z.png new file mode 100644 index 0000000000000000000000000000000000000000..cd06fa7affab132d145d2c31d8635b01a651630f GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^mOvc9!3-p)*y^eRDTx4|5ZC|z{{xvX-h3_XKQsZz z0^2(YH}cmDr>l9g3I zM5W~RktIULua3@rddGC1uoH(K$D}6@rY`dg@{ZhPH_KFYDc&x{ + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
scale Member List
+
+
+ +

This is the complete list of members for scale, including all inherited members.

+ + + + + + + + + + + + + + + + + +
dump() const scale
opMul(pos2d @obj)scale
opMul(pos3d @obj)scale
opMul(shape2d @obj)scale
opMul(solid @obj)scale
opMul(const tmatrix @B)scale
origin() const scale
scale(double s)scale
scale(double sx, double sy, double sz=1.0)scale
sx() const scale
sy() const scale
sz() const scale
Type() const scale
xdir() const scale
ydir() const scale
zdir() const scale
+ + + + diff --git a/docs/classscale.html b/docs/classscale.html new file mode 100644 index 0000000..c6e61cb --- /dev/null +++ b/docs/classscale.html @@ -0,0 +1,493 @@ + + + + + + +AngelCAD: scale Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
scale Class Reference
+
+
+ +

Scaling transformation. + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for scale:
+
+
+ + +tmatrix + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 scale (double s)
 constructor More...
 
 scale (double sx, double sy, double sz=1.0)
 constructor More...
 
double sx () const
 scale factor in x direction More...
 
double sy () const
 scale factor in y direction More...
 
double sz () const
 scale factor in z direction More...
 
pos2d opMul (pos2d @obj)
 
pos3d opMul (pos3d @obj)
 transform a point: pos3d@ p = T*obj; More...
 
pos3d origin () const
 
shape2d opMul (shape2d @obj)
 transform a 2d shape: shape2d@ s = T*obj; More...
 
solid opMul (solid @obj)
 transform a solid: solid@ s = T*obj; More...
 
string Type () const
 class type string More...
 
tmatrix opMul (const tmatrix @B)
 matrix multiplication: A = T*B More...
 
vec3d xdir () const
 
vec3d ydir () const
 
vec3d zdir () const
 
void dump () const
 dump matrix to console More...
 
- Public Member Functions inherited from tmatrix
pos2d opMul (pos2d @obj)
 
pos3d opMul (pos3d @obj)
 transform a point: pos3d@ p = T*obj; More...
 
pos3d origin () const
 
shape2d opMul (shape2d @obj)
 transform a 2d shape: shape2d@ s = T*obj; More...
 
solid opMul (solid @obj)
 transform a solid: solid@ s = T*obj; More...
 
string Type () const
 class type string More...
 
tmatrix opMul (const tmatrix @B)
 matrix multiplication: A = T*B More...
 
vec3d xdir () const
 
vec3d ydir () const
 
vec3d zdir () const
 
void dump () const
 dump matrix to console More...
 
+

Detailed Description

+

Scaling transformation.

+

shape is an abstract base class for all 2d and 3d objects.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
scale::scale (double s)
+
+ +

constructor

+
Parameters
+ + +
sscale factor in x,y and z
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
scale::scale (double sx,
double sy,
double sz = 1.0 
)
+
+ +

constructor

+
Parameters
+ + + + +
sxscale factor in x
syscale factor in y
szscale factor in z
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
void scale::dump () const
+
+ +

dump matrix to console

+ +
+
+ +
+
+ + + + + + + + +
pos2d scale::opMul (pos2dobj)
+
+ +
+
+ +
+
+ + + + + + + + +
pos3d scale::opMul (pos3dobj)
+
+ +

transform a point: pos3d@ p = T*obj;

+
Parameters
+ + +
objposition to be transformed
+
+
+
Returns
transformed position
+ +
+
+ +
+
+ + + + + + + + +
shape2d scale::opMul (shape2dobj)
+
+ +

transform a 2d shape: shape2d@ s = T*obj;

+
Parameters
+ + +
objobject to be transformed
+
+
+
Returns
transformed object
+ +
+
+ +
+
+ + + + + + + + +
solid scale::opMul (solidobj)
+
+ +

transform a solid: solid@ s = T*obj;

+
Parameters
+ + +
objobject to be transformed
+
+
+
Returns
transformed object
+ +
+
+ +
+
+ + + + + + + + +
tmatrix scale::opMul (const tmatrixB)
+
+ +

matrix multiplication: A = T*B

+
Parameters
+ + +
Bmatrix to be post-multiplied with this matrix
+
+
+
Returns
resulting matrixt
+ +
+
+ +
+
+ + + + + + + +
pos3d scale::origin () const
+
+ +
+
+ +
+
+ + + + + + + +
double scale::sx () const
+
+ +

scale factor in x direction

+
Returns
scale factor in x direction
+ +
+
+ +
+
+ + + + + + + +
double scale::sy () const
+
+ +

scale factor in y direction

+
Returns
scale factor in y direction
+ +
+
+ +
+
+ + + + + + + +
double scale::sz () const
+
+ +

scale factor in z direction

+
Returns
scale factor in z direction
+ +
+
+ +
+
+ + + + + + + +
string scale::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+ +
+
+ + + + + + + +
vec3d scale::xdir () const
+
+ +
+
+ +
+
+ + + + + + + +
vec3d scale::ydir () const
+
+ +
+
+ +
+
+ + + + + + + +
vec3d scale::zdir () const
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classscale.png b/docs/classscale.png new file mode 100644 index 0000000000000000000000000000000000000000..72a805f6a2725afdb3bb7a6a1f7d05d617223614 GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^20$FZ!3-obG}zt)DTx4|5ZC|z{{xvX-h3_XKQsZz z0^bL+OK#BnR@3LarUaMzYe&-3#i&4Vg0{pRjkn#SUJJ(Shhn|0-r6}RS}T3h44 z|8MJE%cW99YqV>HZXJ0#_mR2ND>aoZx?5LPF5LZc*WF8(;>x^i9VewlG^zAfxE7T2 zGh9ez?hp{&rkml?8X|9e=#c)LOF|57I*bWNgc#g(7XFBZnYjltlN e=)p5O2iUK@ + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
shape Member List
+
+
+ +

This is the complete list of members for shape, including all inherited members.

+ + + + + + +
box() const shape
transform() const shape
Type() const shape
write_csg(string path)shape
write_xcsg(string path, double secant_tolerance=-1.0)shape
+ + + + diff --git a/docs/classshape.html b/docs/classshape.html new file mode 100644 index 0000000..641b5e4 --- /dev/null +++ b/docs/classshape.html @@ -0,0 +1,235 @@ + + + + + + +AngelCAD: shape Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
shape Class Reference
+
+
+ +

Abstract base for all primitives and booleans. + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for shape:
+
+
+ + +shape2d +solid +circle +difference2d +fill2d +hull2d +intersection2d +minkowski2d +offset2d +polygon +rectangle +square +union2d +cone +cube +cuboid +cylinder +difference3d +hull3d +intersection3d +linear_extrude +minkowski3d +polyhedron +rotate_extrude +sphere +sweep +transform_extrude +union3d + +
+ + + + + + + + + + + + + + + +

+Public Member Functions

boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

Abstract base for all primitives and booleans.

+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox shape::box () const
+
+ +
+
+ +
+
+ + + + + + + +
tmatrix shape::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string shape::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+ +
+
+ + + + + + + + +
void shape::write_csg (string path)
+
+ +

Write to OpenSCAD .csg file.

+
Parameters
+ + +
pathfile path
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void shape::write_xcsg (string path,
double secant_tolerance = -1.0 
)
+
+ +

Write to AngelCAD .xcsg file.

+
Parameters
+ + + +
pathfile path
secant_tolerancetolerance for geometry precision
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classshape.png b/docs/classshape.png new file mode 100644 index 0000000000000000000000000000000000000000..f756c16eb8f9ff1028d96ee6c9bf1bce17ec93eb GIT binary patch literal 7255 zcmds63sh5Ax~A=IZ7s-j93N;kv)V{zsx?4_D6d@GI+`lP)(0YwK#@2+B;_F?BqVLE zFxE<@hYEy1qD~7IkZ1uT1cI7s8cB#Y@`gkuoX8`Ia3CQBlGy=k=}bFoP1np_bBDE9 zCpp>4-e-UR|NY3)n`xip}^bcGu{o|;{pab|JrZu^>J}o4HMtmx;N`7 zL;pzHxr4tse&_xdpIF$srPP-;tw?a&URc$OeXXP>+SLqWXQ+luaew31Me8q5hf^sB z#FX4|U)<+H?pdbNbuc2U1GPPI{%$|JgJu&N^GPTIReR0ki>vPMKRi2d(k2@k%7`&9 zVF|ghhUMeC-oo@KU4?xQLTqAjx%Clg9n=n!?ge8d7*(j@=_NVTT(=1m z&n!b^TB!-!Rm=0(Z#r9R$F}q-E@pzslPJH_4j*m?<4Zhlbt-mC=9fkl^%^?d{JY+G zHDh-JC3pB#T)>-SB_5TQvwdy5!SeCvKbu=S_&OQ)ru9ePoqw#VP5A>;h1YBoHR~(q zpY!L(I#;paXO6T5xk?|APD#C79lxG&xJkWc_VkuAc0j(2WiUFt7CdPZjJAqPJUVK) z1&5B$Uv=eC5VJFdW}lJ?+hgo2$2JX`q=oNk*qIjHvSO2@T=Wg|K&5yZLu1TE=;@59DaEO|BF8gitUSCnS1ouA~3zcI|ZuluJXdj zOMGz~Krj-OrReo{6&KG_a@TW7QY)R4T;MSH-i4eH+ww$B49&9pAy+6{ROnc?nn>J(9;~DJ(k7 zSw}yhwAIri1r__U16hG-2M6^eO6$~=J6gUk;!v=P(et229|DmX+hFw{ax|ifsC;Eh zYWU3pPJyn{%}0f4^7kgDk+8RztKy4vJWrCke;V2Tdl)O*_-&H|$IiJCXuTfcC4fU9 zM)t>#u_+gZA*Z#5M2U3+u_k*lvN?a?*gAPxj<}>ir}4|A+EXlzTZLKF;L^|iE%5Ay zFm>tW^YRh-+Tbl&8nL_Mf1yYKVe7{-oKG2^XdGS#@T2y;0-!vIlb$Q_D7@>;m!IC3 z$Ds+Brh0W?7f(6+acXROb9di7K`x-Ce-n_V7Y3F*nfue!fT)a(9Ewm!rQ{f1M&=^S^-xCqfzwi*< zAO!J!YG8BlL8z~rSzEGZCuDnqjj4GyQBwMWz|!_9Z{0-!f1Qkz_*7gHX^Q2i`RZyr}pI$7-dV)=7v@Gn9N z^J&17xp6l`eyBLkB%j;-1&q-1JhD+fI5w8Tju8c*`0P@&wr(G+{zhB&XSDT_8xHk_ zHgAhu_s(hS#WYe>jbY&2Mme*uin3JDcAfq}osy}ViiqXEevbqrwvQA=?_d<2!nPth zG}D#qXNZ7RsBK(o7_x#yb8Cr*yFUqqw7st&%G&})S3H>n37%vQU($D-f?6jxJ>fZh z+pA?MQf)OngfGyE{X``gOGWEsv_&)HhKy=T(Jgha!?Rf{V5IzL;8NmvQg5t=Lkq7) z0@@QEsPT)vF>+kbuaHS&8QKvEAn7Qx{r;BHwe{dpqyBez+=e-Ro2md*Xs?;$znMLN z;MrkdDBs&SSC5W?>>;gO;n&Gi_CHY-j|I=a3q!t_bMD4#&bd`9@x+eNeZ?S^79h5O z!ymR6)5uM4Ls;9?ErTdij9kLnj~5*dK2;~UpPrAleu>Is4Ye~->5#&|^otOjDsKlw zw$UGUMk>YXdZs;fbDHFeYI~btEp~RGxOV;YL^w1wP|xK!^s~Q})sU`cD27f<#XnpT zADj}YH;gnL58*`eJ*mN>NAeHRwX&T!6-7Y9!831_=FYMz*z$I!l-bOS@;fi|w8!=` zj>6RE1R3ei!I-$6JhQ&eMnFa;vve33WlD*N3*E?_|{l+xYjTaAB7Gpa{G+ zCfDG3;(t;J{$jfQ=hR3N&Lqh?jYjeX2DUL%Z^}VtFLPs-UlDYg2Wwk7Z}7~oBa@mkG(mI(Rv*nd-m4(`jJ)(% z!1QLyCsLaeP?}QeF14y0UxRKi{9ZAzIp4hyZJAhx%p8DbG?e{Fa-9b~vmvmpB|62I zZ2S(1BaSmxzZbm3PkV;LGoKx(&_^{bM-tAd0@~^3BR~~s>wEzt|KY!lkzJ7#T5{&- z`!mc(!%}p^P&^mwum;@h5`2Q@P7a*tT8wPnBp*#(WyxTw732>w@}iu{(*n{rBREve zce9*fn_^(~u=t?^l+k7Gsi9=ZLPWiS|P4$vqI7 zFgaXh%`UELpp1vjW_kL_nWpyvA*@!&+^lt2RWX4;{F+CbYz1Csd-3;}u5WX2=QXWj zExyY7Notx;P0Q>J?hc6FE5?(H_4x8Mo*A!@jR`lJpSHjQYd3XY&ELapA{dfI6|WK{ z$x9U#+$E&25#*5^kj9{O*Df~D5tmLd(m{zqZU84e85 ze!<`^aGz0kHJ8M`L-k9+NeS>$Bg79(m5)Oi3riMs`I~{b)b!;s3^$|6(@&!NoAH zU-@C~xISR!!(u}r-=v@RRu{ZYknW@;fDbTv9*Hjz!2Ybuj)vZ{7K_rt^H^R#+}DB= ze2G^y^*ThPqT%~P<8hAep{e^jYm@wm5>TwL18bdXG^Rog$2$NIs3bBTf3J-Ou z8$t{CYikFH<3~UQTx?!7{80eI*EV`xa;H5oj&BIjj$!1Y=6Sllal}ujmtSG}1uP?` z^*;xUW{nxx73)|Q#Ef_eRu4zzJvK3Uo{lk8;np@L zkRA4zvm2}a^Q{ihZuJlP#MtN@Hkv5;YTgeuGWw*uPy`E`v(y+WGgCu_1-c@@&2fBn zb;VYKpj^hOc+YRv`XVu{*Rz>hzU0w#) z4&R+9X#6$OzDg40CH|Jm0y+4{H+kk#Yg|={q*@VpBQU>lXIi_~dtPewwd;SYjZ_iS zwv%Gl%2JsZ(blhp`whz|Q2&u<_ap7iR^G@KA}fhufg|9d=7xLaIa`AbcLhb3eujCu zp8=^BqzDLYacur4Lleu24>JxzGfBKFcnmjqZCL|1Hg!FY@Fuv1kN6O_(USmZJFqIi z=#Sme-}=~Dl>+2c)&GNhJ_YjmP)7I*EWR)pY2wDyU%5tu|V^(^IJX>sv%6kSS%&!va_EkYL@}Q1)xU? znOWYk!OgZ4bn}auoQ{>B>>4~)5jU;mE zpE?hRLKTx=17!1@>Bx==9u24Up9W;-G%HpAuvalbz`2870Z3k4abE1o{ciqOL>R9( z7YQT&&q(}fXU`F|vn^)V`F<>L#|sR))*%I@nq4!Ot%DI9x=7ToO6Rg?oO}c2bL{24;h+IHi5B8K7x0I0?Il$7VJslWC-JClLKiuXVTOIs`mvF>5rhN zgm0ZvG{&q0Ce+Ao#9PYUM(U@_gZjmmfJuFh%@`zhrj0i{MMWInJtuDG8q51Z121o` z$Smwt2OXn>)>-?RV+_XAxQs`QKYECNXVVAc;5=$$9rg!e#XVwpxvB7ZyB?nue6FC`jBT_N?4bA*Hx}^hzUlANwfr1J$8lw3lBfsy`oYqbO~C5xuZbHYV=%ITSjOIJ<%QYZ&HNEzA$groIUpj(VWd+i1B}H@FAeJJRT)R5kh?E%&~T>vqO79+T_x}z26;liY_8w z6bF5Kzui9gl>YsxEM3OE2^xhqZ5XIh6EbGPmN>5KI(Z(2=Dv33P5;}TVtHI;=AQ!| zgs^DlK{;U)qf>G53I<2++PH(5DN+_96ThB%a8kYgOKxle`zlkD*-|8q54N{)6cs`s zPmh4U^PQUgy2)X&rmiJiSt|v89PE6{#7sN$FXj2(}4+_sW82bZ;I0knG1nelfrh9lm7;H(X(&okiZCKDGPCq3@2@UI1e zPFCXWYt2C)diZDc|HKi^zh2&fxwT83tOU-Eu80mlIRIFAR%CaFqaa0(p-q-T*a^`= zL}#C9ZxRJr{cwTJM~g}MVop4RMa%Y$xQU{cc v3UGm#QCy%)04HowKf{}=b7K#P94;xL4do}P?cae@Ko{b+(6?&di23NRO0HMu literal 0 HcmV?d00001 diff --git a/docs/classshape2d-members.html b/docs/classshape2d-members.html new file mode 100644 index 0000000..0ba22db --- /dev/null +++ b/docs/classshape2d-members.html @@ -0,0 +1,72 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
shape2d Member List
+
+
+ +

This is the complete list of members for shape2d, including all inherited members.

+ + + + + + + + + +
box() const shape2d
opAdd(shape2d @b)shape2d
opAnd(shape2d @b)shape2d
opSub(shape2d @b)shape2d
transform() const shape2d
Type() const shape2d
write_csg(string path)shape2d
write_xcsg(string path, double secant_tolerance=-1.0)shape2d
+ + + + diff --git a/docs/classshape2d.html b/docs/classshape2d.html new file mode 100644 index 0000000..310f482 --- /dev/null +++ b/docs/classshape2d.html @@ -0,0 +1,300 @@ + + + + + + +AngelCAD: shape2d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
shape2d Class Reference
+
+
+ +

Abstract base for 2d primitives and booleans. + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for shape2d:
+
+
+ + +shape +circle +difference2d +fill2d +hull2d +intersection2d +minkowski2d +offset2d +polygon +rectangle +square +union2d + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

boundingbox box () const
 
shape2d opAdd (shape2d @b)
 Boolean union operator+ overload. More...
 
shape2d opAnd (shape2d @b)
 Boolean intersection operator& overload. More...
 
shape2d opSub (shape2d @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

Abstract base for 2d primitives and booleans.

+

shape2d is an abstract base class for all 2d objects.

+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox shape2d::box () const
+
+ +
+
+ +
+
+ + + + + + + + +
shape2d shape2d::opAdd (shape2db)
+
+ +

Boolean union operator+ overload.

+
Returns
resulting 2d shape
+ +
+
+ +
+
+ + + + + + + + +
shape2d shape2d::opAnd (shape2db)
+
+ +

Boolean intersection operator& overload.

+
Returns
resulting 2d shape
+ +
+
+ +
+
+ + + + + + + + +
shape2d shape2d::opSub (shape2db)
+
+ +

Boolean difference operator- overload.

+
Returns
resulting 2d shape
+ +
+
+ +
+
+ + + + + + + +
tmatrix shape2d::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string shape2d::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+ +
+
+ + + + + + + + +
void shape2d::write_csg (string path)
+
+ +

Write to OpenSCAD .csg file.

+
Parameters
+ + +
pathfile path
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void shape2d::write_xcsg (string path,
double secant_tolerance = -1.0 
)
+
+ +

Write to AngelCAD .xcsg file.

+
Parameters
+ + + +
pathfile path
secant_tolerancetolerance for geometry precision
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classshape2d.png b/docs/classshape2d.png new file mode 100644 index 0000000000000000000000000000000000000000..24b60b421f3b88a1513920ce17f6477eff5cc533 GIT binary patch literal 2922 zcmcgudr%YS7T+WWH1g>9g4z&unhd2XXhn%3fHHD*y-HAofDjTz#0QTENO%N@wXF~2 zV&em}kVx+x(y9amBr1WdrJ4(thm8_20b-+u2r+>mA-r-o&`#R9*UtUN?##}9-|Wu$ z&N;uwo--lATOBb=F#rHKg4?$2hMy1sAn(jY!K=lC$SU~Z8nR-Dr{&u0LDF@sw+@5w;udUU&QY+Llz;|Gc`rG-#v zwkue$&iyucx0F1Gv@zD}kfCzz!;D>q@xO7!|FVP99k+4o*8_Fgz#2lc{wR=OTE`&m z$R#!8BuH?CW*;5Gu=YXIz+^fu!p*v!!|dg0?lHw^RrMEbZq(Mdfe965rOF@aZRTHA zgN?~sO;FY=eVQ{nGVoM&fXQ-eGdb2?ep7xpYgbjx!3<5W+nV-d z&kPnMo$QM;jB;`@n-l+}AX}xQs~G3j#w;TD$~gE;(AG552aN6289AgKTwmQ7M!b-5 z)v3ns?JXJ>XX3u7Pe%|bCU5o2=MTQd_tky`wcaAK^PuPMV545d$>eF=$Cpu;gSm%T zCg`<+cDduVN3B1*P!Pf;N1+(?cKGHVxR&+H!8e^iSJLeHH9%L;|CO-~n}GSQvFBXS zg(mOiV9ah?;0lCn=#tiu+XZs%uL|iglmGk_%ACm8dP(S*F=ByqC6mY(q-Oco2!>?; zHn&9kN0yGuEY}>EF&m1)Y6myeO+VB<@$whWDREydBJYzW!voh9k?I}j5&7MJf>rce*4RaJgY?#&b(n#t?`!4Shy zdq`TR$wpZi$ki)kizASpQa$EQQtzUwdl+yyM}q#zNDg?c2OcS4%#IXM8AIE$LZRoH zR$d@Dyyq`S-SjbIdrEc=*3GV5`3r?o*gM zSc!DOxGnvizouV_u%_RbNT;gOeUyMc)wzUEbZOB#-;W~0-k`M+PKW?gtOAZbH}tJ) zh=+zekNlV7-`#%LBc>uD*I4l<8Daqf9Ol{rzi}uQN=$V{c-F*Ni#&O!EN*Zz<~SOM z!Z%-U>dF+)VUoW;m6}2RT2o_Qo6RD~-+(ARjRU9E-|0<|8~f?Zy}?=viG> zkga<3`nugJeqa%yHVZ@Jd5ezMMW+W*%J60>Y#K*5ag`N_DjJIWA_>O!p{qLRzS?g- zhxX);ruU~UfH^x+!_#x3<&oI!R9wh7JE18+&iN$PAgmNK+2l_VD|%ykpfPB$Ri1Y;@Xl=}Sp ziu($n^Q5RX8whqEj~&9wJK}e7+1gp}%vw|x;XBaa(_p{kA}!!c|J7xRg<5fO`sAYR zTnp7^bMMVR{p^alFN$D9C!E&Ak=n9IjX7z#z7G7}V3Z)4(5$(R5Nzx_DCvsAma;Cq zNPS6FML}{A-u$x@LLN4n7ZgBd;oBl9lSv8($&pAv=cDCdUVx5Cy zPn|U8a+No5%wo0nI9iDnP2um#J%J*#XMA?hAda~=@F*m$j(juy_Zj%6*bC{@77d~H z*eEO0d6j(17iQsz7o}|70Sl$9U6jh5{1&#*Jk)u-MEE|V{Oq&!-vdBZ+YuC$Z+ZkuyG`6mX7lx zl#pdE&_04vRV(xCCU0Z|Jgq|7uQgYfjOsGe$V9j48o>u-S<>`^rggtc>o*?io#8=4 bKC&!bZ)kcNwjlx@i~%qxc#ANQ@%euMtmR4F literal 0 HcmV?d00001 diff --git a/docs/classsoffset2d-members.html b/docs/classsoffset2d-members.html new file mode 100644 index 0000000..7fb1844 --- /dev/null +++ b/docs/classsoffset2d-members.html @@ -0,0 +1,69 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  V3.3-02 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
soffset2d Member List
+
+
+ +

This is the complete list of members for soffset2d, including all inherited members.

+ + + + + + +
soffset2d(array< shape2d @> @arr, double delta, bool chamfer=false)soffset2d
soffset2d(const shape2d @sh, double delta, bool chamfer=false)soffset2d
Type() const soffset2d
write_csg(string path)soffset2d
write_xcsg(string path, double secant_tolerance=-1.0)soffset2d
+ + + + diff --git a/docs/classsoffset2d.html b/docs/classsoffset2d.html new file mode 100644 index 0000000..4cb9935 --- /dev/null +++ b/docs/classsoffset2d.html @@ -0,0 +1,235 @@ + + + + + + +AngelCAD: soffset2d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  V3.3-02 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
soffset2d Class Reference
+
+
+ +

2d straight edge offset + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for soffset2d:
+
+
+ + +shape2d +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 soffset2d (array< shape2d @> @arr, double delta, bool chamfer=false)
 
 soffset2d (const shape2d @sh, double delta, bool chamfer=false)
 
string Type () const
 
void write_csg (string path)
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 
- Public Member Functions inherited from shape2d
string Type () const
 
void write_csg (string path)
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 
- Public Member Functions inherited from shape
string Type () const
 
void write_csg (string path)
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 
+

Detailed Description

+

2d straight edge offset

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
soffset2d::soffset2d (array< shape2d @> @ arr,
double delta,
bool chamfer = false 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
soffset2d::soffset2d (const shape2dsh,
double delta,
bool chamfer = false 
)
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
string soffset2d::Type () const
+
+ +
+
+ +
+
+ + + + + + + + +
void soffset2d::write_csg (string path)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void soffset2d::write_xcsg (string path,
double secant_tolerance = -1.0 
)
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classsoffset2d.png b/docs/classsoffset2d.png new file mode 100644 index 0000000000000000000000000000000000000000..e7bad4153be2d47d3855bbbe23e9d491318b664a GIT binary patch literal 526 zcmV+p0`dKcP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0004b|kMc;>%pFHf~u&$ryRaG5=lH{_2x4e+#lSJzAdF>s3KP%@WK0B9VDWUA{^pVUxpG^BGOEH+; zmBQ)H@?DPgdNrQYB>$RYiG75t<;?g&#AdO*d#>Mto$>l}i6@VGL%ND%xhvyt1KWpCKj8_^Re|RqeYMjn^Z3eu7np|7{ zoW}Xz_+rf8Y47mfzdrvqar + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
solid Member List
+
+
+ +

This is the complete list of members for solid, including all inherited members.

+ + + + + + + + + +
box() const solid
opAdd(solid @b)solid
opAnd(solid @b)solid
opSub(solid @b)solid
transform() const solid
Type() const solid
write_csg(string path)solid
write_xcsg(string path, double secant_tolerance=-1.0)solid
+ + + + diff --git a/docs/classsolid.html b/docs/classsolid.html new file mode 100644 index 0000000..ba32765 --- /dev/null +++ b/docs/classsolid.html @@ -0,0 +1,304 @@ + + + + + + +AngelCAD: solid Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
solid Class Reference
+
+
+ +

Abstract base for 3d primitives and booleans. + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for solid:
+
+
+ + +shape +cone +cube +cuboid +cylinder +difference3d +hull3d +intersection3d +linear_extrude +minkowski3d +polyhedron +rotate_extrude +sphere +sweep +transform_extrude +union3d + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

boundingbox box () const
 
solid opAdd (solid @b)
 Boolean union operator+ overload. More...
 
solid opAnd (solid @b)
 Boolean intersection operator& overload. More...
 
solid opSub (solid @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

Abstract base for 3d primitives and booleans.

+

solid is an abstract base class for all 3d objects.

+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox solid::box () const
+
+ +
+
+ +
+
+ + + + + + + + +
solid solid::opAdd (solidb)
+
+ +

Boolean union operator+ overload.

+
Returns
resulting solid
+ +
+
+ +
+
+ + + + + + + + +
solid solid::opAnd (solidb)
+
+ +

Boolean intersection operator& overload.

+
Returns
resulting solid
+ +
+
+ +
+
+ + + + + + + + +
solid solid::opSub (solidb)
+
+ +

Boolean difference operator- overload.

+
Returns
resulting solid
+ +
+
+ +
+
+ + + + + + + +
tmatrix solid::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string solid::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+ +
+
+ + + + + + + + +
void solid::write_csg (string path)
+
+ +

Write to OpenSCAD .csg file.

+
Parameters
+ + +
pathfile path
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void solid::write_xcsg (string path,
double secant_tolerance = -1.0 
)
+
+ +

Write to AngelCAD .xcsg file.

+
Parameters
+ + + +
pathfile path
secant_tolerancetolerance for geometry precision
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classsolid.png b/docs/classsolid.png new file mode 100644 index 0000000000000000000000000000000000000000..059f3340a6cf72220775d108b9631815cebf2800 GIT binary patch literal 4013 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 literal 0 HcmV?d00001 diff --git a/docs/classsphere-members.html b/docs/classsphere-members.html new file mode 100644 index 0000000..579fe45 --- /dev/null +++ b/docs/classsphere-members.html @@ -0,0 +1,75 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
sphere Member List
+
+
+ +

This is the complete list of members for sphere, including all inherited members.

+ + + + + + + + + + + + +
box() const sphere
opAdd(solid @b)solid
opAnd(solid @b)solid
opSub(solid @b)solid
r() const sphere
radius() const sphere
sphere(double r)sphere
transform() const sphere
Type() const sphere
write_csg(string path)solid
write_xcsg(string path, double secant_tolerance=-1.0)solid
+ + + + diff --git a/docs/classsphere.html b/docs/classsphere.html new file mode 100644 index 0000000..597f43d --- /dev/null +++ b/docs/classsphere.html @@ -0,0 +1,252 @@ + + + + + + +AngelCAD: sphere Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
sphere Class Reference
+
+
+ +

sphere, centered at origin + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for sphere:
+
+
+ + +solid +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 sphere (double r)
 constructor More...
 
boundingbox box () const
 
double r () const
 sphere radius More...
 
double radius () const
 sphere radius More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
- Public Member Functions inherited from solid
boundingbox box () const
 
solid opAdd (solid @b)
 Boolean union operator+ overload. More...
 
solid opAnd (solid @b)
 Boolean intersection operator& overload. More...
 
solid opSub (solid @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

sphere, centered at origin

+

a sphere is a 3d object defined by its radius.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
sphere::sphere (double r)
+
+ +

constructor

+
Parameters
+ + +
rradius
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox sphere::box () const
+
+ +
+
+ +
+
+ + + + + + + +
double sphere::r () const
+
+ +

sphere radius

+
Returns
radius
+ +
+
+ +
+
+ + + + + + + +
double sphere::radius () const
+
+ +

sphere radius

+
Returns
radius
+ +
+
+ +
+
+ + + + + + + +
tmatrix sphere::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string sphere::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classsphere.png b/docs/classsphere.png new file mode 100644 index 0000000000000000000000000000000000000000..a82a6af32ce2e1a79b7e3e23372122aa3effff4b GIT binary patch literal 426 zcmV;b0agBqP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0003wNklSP}-(sG)@=~ncXb|+GdRQC37V=Bh$_8`_HpdH)iIkoVk?|5wQsX`nu`cyKQ!8 zfeDBiT4DTu>WnkaICGI9A~FgD04DtpX8fGbm{9gKElj+-(@DoA6IXYzFd9;)*)=nV z$E&H-%dKM4i*m#|lPhb`1jq-d%JSwsw%p1TbKUZ|y`M`j#Sbw6Fx3MYA|ji<0BG(O Uuk;J?&Hw-a07*qoM6N<$f?Yel(f|Me literal 0 HcmV?d00001 diff --git a/docs/classspline2d-members.html b/docs/classspline2d-members.html new file mode 100644 index 0000000..25bede1 --- /dev/null +++ b/docs/classspline2d-members.html @@ -0,0 +1,66 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
spline2d Member List
+
+
+ +

This is the complete list of members for spline2d, including all inherited members.

+ + + +
spline2d(array< pos2d @> @points)spline2d
Type() const spline2d
+ + + + diff --git a/docs/classspline2d.html b/docs/classspline2d.html new file mode 100644 index 0000000..6c803b5 --- /dev/null +++ b/docs/classspline2d.html @@ -0,0 +1,129 @@ + + + + + + +AngelCAD: spline2d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
spline2d Class Reference
+
+
+ +

2d cubic spline curve + More...

+ +

#include <angelcad.h>

+ + + + + + + + +

+Public Member Functions

 spline2d (array< pos2d @> @points)
 constructor More...
 
string Type () const
 class type string More...
 
+

Detailed Description

+

2d cubic spline curve

+

a spline2d is a 2d cubic spline curve.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
spline2d::spline2d (array< pos2d @> @ points)
+
+ +

constructor

+
Parameters
+ + +
pointsarray of points on the spline curve
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
string spline2d::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classspline3d-members.html b/docs/classspline3d-members.html new file mode 100644 index 0000000..a8c1ae4 --- /dev/null +++ b/docs/classspline3d-members.html @@ -0,0 +1,66 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
spline3d Member List
+
+
+ +

This is the complete list of members for spline3d, including all inherited members.

+ + + +
spline3d(array< pos3d @> @points)spline3d
Type() const spline3d
+ + + + diff --git a/docs/classspline3d.html b/docs/classspline3d.html new file mode 100644 index 0000000..957cad6 --- /dev/null +++ b/docs/classspline3d.html @@ -0,0 +1,129 @@ + + + + + + +AngelCAD: spline3d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
spline3d Class Reference
+
+
+ +

3d cubic spline curve + More...

+ +

#include <angelcad.h>

+ + + + + + + + +

+Public Member Functions

 spline3d (array< pos3d @> @points)
 constructor More...
 
string Type () const
 class type string More...
 
+

Detailed Description

+

3d cubic spline curve

+

a spline3d is a 3d cubic spline curve.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
spline3d::spline3d (array< pos3d @> @ points)
+
+ +

constructor

+
Parameters
+ + +
pointsarray of points on the spline curve
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
string spline3d::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classspline__path-members.html b/docs/classspline__path-members.html new file mode 100644 index 0000000..7ce8cab --- /dev/null +++ b/docs/classspline__path-members.html @@ -0,0 +1,67 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
spline_path Member List
+
+
+ +

This is the complete list of members for spline_path, including all inherited members.

+ + + + +
spline_path(array< pos3d @> @p, array< vec3d @> @v)spline_path
spline_path(array< pos3d @> @p, vec3d @v)spline_path
Type() const spline_path
+ + + + diff --git a/docs/classspline__path.html b/docs/classspline__path.html new file mode 100644 index 0000000..e0e06f0 --- /dev/null +++ b/docs/classspline__path.html @@ -0,0 +1,178 @@ + + + + + + +AngelCAD: spline_path Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
spline_path Class Reference
+
+
+ +

spline_path for sweep + More...

+ +

#include <angelcad.h>

+ + + + + + + + + + + +

+Public Member Functions

 spline_path (array< pos3d @> @p, array< vec3d @> @v)
 constructor More...
 
 spline_path (array< pos3d @> @p, vec3d @v)
 constructor More...
 
string Type () const
 class type string More...
 
+

Detailed Description

+

spline_path for sweep

+

a spline_path defines a cubic spline sweep path.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
spline_path::spline_path (array< pos3d @> @ p,
array< vec3d @> @ v 
)
+
+ +

constructor

+
Parameters
+ + + +
parray of points on the spline sweep curve
varray of "up" vectors orienting the sweep profile, 'v' must have same length as 'p'.
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
spline_path::spline_path (array< pos3d @> @ p,
vec3dv 
)
+
+ +

constructor

+
Parameters
+ + + +
parray of points on the spline sweep curve
vsingle "up" vector orienting the sweep profile for all points
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
string spline_path::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classsquare-members.html b/docs/classsquare-members.html new file mode 100644 index 0000000..348963f --- /dev/null +++ b/docs/classsquare-members.html @@ -0,0 +1,74 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
square Member List
+
+
+ +

This is the complete list of members for square, including all inherited members.

+ + + + + + + + + + + +
box() const square
opAdd(shape2d @b)shape2d
opAnd(shape2d @b)shape2d
opSub(shape2d @b)shape2d
size() const square
square(double size, bool center=false)square
transform() const square
Type() const square
write_csg(string path)shape2d
write_xcsg(string path, double secant_tolerance=-1.0)shape2d
+ + + + diff --git a/docs/classsquare.html b/docs/classsquare.html new file mode 100644 index 0000000..1b31326 --- /dev/null +++ b/docs/classsquare.html @@ -0,0 +1,242 @@ + + + + + + +AngelCAD: square Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
square Class Reference
+
+
+ +

square, by default located in 1st quadrant touching origin + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for square:
+
+
+ + +shape2d +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 square (double size, bool center=false)
 constructor More...
 
boundingbox box () const
 
double size () const
 size of square More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
- Public Member Functions inherited from shape2d
boundingbox box () const
 
shape2d opAdd (shape2d @b)
 Boolean union operator+ overload. More...
 
shape2d opAnd (shape2d @b)
 Boolean intersection operator& overload. More...
 
shape2d opSub (shape2d @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

square, by default located in 1st quadrant touching origin

+

a square is a 2d quadrilateral with equal dimensions in x and y. By default it touches the origin and extend along positive x and y.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
square::square (double size,
bool center = false 
)
+
+ +

constructor

+
Parameters
+ + + +
sizeextent in x and y
centertrue if square to be centered on origon
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox square::box () const
+
+ +
+
+ +
+
+ + + + + + + +
double square::size () const
+
+ +

size of square

+
Returns
size of square
+ +
+
+ +
+
+ + + + + + + +
tmatrix square::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string square::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classsquare.png b/docs/classsquare.png new file mode 100644 index 0000000000000000000000000000000000000000..462050ae56863f82c9d31ab0bc61d61bd91fed06 GIT binary patch literal 509 zcmVvTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0004uNklyCpU5Jt~@llcCRyi&m%1q*JnW=q2Xxf~eACjQ0Uy%$`P`WSNhnIv8FyRrq* zmS(Q=UPYd#Ly1isIP~grtmC@f9+z?oJMxNj4d5L2n}lU&?HWnDQn>Tc`t;6O*df=S zW?PcZ6yN%@Wl4I=m&)$$od8sr0D8G2Pty(ijy${l_AU7jvpr;h7KRMaz>onN7&1Tu z|5J8%?**5nK87rlq!MOnI<^gRn2Yn7{My!*CLVI^tsBh4CwcCN5}P=1=xv9mz4mez zT3VY1*QykD3N4(W+2>}OZrFF^+3mM)$q)Xx1C$vuKm$VtXkf?y4GbBefyc^bX1!nleGD0( zf!~zpSGUy5_=`9eI`R3v9Ojp@%G(~>b5Txf_bb;8s`3){QGWdmx5tXSi}W1!>D0?R z@9+6(*qfTN9XF|G` + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.0-05 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
string Member List
+
+
+ +

This is the complete list of members for string, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
empty() const string
find(const string &in, uint start=0) const string
findFirst(const string &in, uint start=0) const string
findLast(const string &in, int start=-1) const string
get_length() const string
isEmpty() const string
length() const string
opAssign(bool)string
opAssign(const string &in)string
opAssign(double)string
opAssign(float)string
opAssign(int64)string
opAssign(uint64)string
opCmp(const string &in) const string
opEquals(const string &in) const string
opIndex(uint) const string
opIndex(uint)string
resize(uint)string
rfind(const string &in, int start=-1) const string
set_length(uint)string
size() const string
substr(uint start=0, int count=-1) const string
+ + + + diff --git a/docs/classstring.html b/docs/classstring.html new file mode 100644 index 0000000..fb043b2 --- /dev/null +++ b/docs/classstring.html @@ -0,0 +1,515 @@ + + + + + + +AngelCAD: string Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.0-05 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
string Class Reference
+
+
+ +

#include <angelcad.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool empty () const
 
bool isEmpty () const
 
bool opEquals (const string &in) const
 
const uint8 & opIndex (uint) const
 
int find (const string &in, uint start=0) const
 
int findFirst (const string &in, uint start=0) const
 
int findLast (const string &in, int start=-1) const
 
int opCmp (const string &in) const
 
int rfind (const string &in, int start=-1) const
 
string substr (uint start=0, int count=-1) const
 
stringopAssign (bool)
 
stringopAssign (const string &in)
 
stringopAssign (double)
 
stringopAssign (float)
 
stringopAssign (int64)
 
stringopAssign (uint64)
 
uint get_length () const
 
uint length () const
 
uint size () const
 
uint8 & opIndex (uint)
 
void resize (uint)
 
void set_length (uint)
 
+

Member Function Documentation

+ +
+
+ + + + + + + +
bool string::empty () const
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int string::find (const stringin,
uint start = 0 
) const
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int string::findFirst (const stringin,
uint start = 0 
) const
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int string::findLast (const stringin,
int start = -1 
) const
+
+ +
+
+ +
+
+ + + + + + + +
uint string::get_length () const
+
+ +
+
+ +
+
+ + + + + + + +
bool string::isEmpty () const
+
+ +
+
+ +
+
+ + + + + + + +
uint string::length () const
+
+ +
+
+ +
+
+ + + + + + + + +
string& string::opAssign (bool )
+
+ +
+
+ +
+
+ + + + + + + + +
string& string::opAssign (const stringin)
+
+ +
+
+ +
+
+ + + + + + + + +
string& string::opAssign (double )
+
+ +
+
+ +
+
+ + + + + + + + +
string& string::opAssign (float )
+
+ +
+
+ +
+
+ + + + + + + + +
string& string::opAssign (int64 )
+
+ +
+
+ +
+
+ + + + + + + + +
string& string::opAssign (uint64 )
+
+ +
+
+ +
+
+ + + + + + + + +
int string::opCmp (const stringin) const
+
+ +
+
+ +
+
+ + + + + + + + +
bool string::opEquals (const stringin) const
+
+ +
+
+ +
+
+ + + + + + + + +
const uint8& string::opIndex (uint ) const
+
+ +
+
+ +
+
+ + + + + + + + +
uint8& string::opIndex (uint )
+
+ +
+
+ +
+
+ + + + + + + + +
void string::resize (uint )
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int string::rfind (const stringin,
int start = -1 
) const
+
+ +
+
+ +
+
+ + + + + + + + +
void string::set_length (uint )
+
+ +
+
+ +
+
+ + + + + + + +
uint string::size () const
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
string string::substr (uint start = 0,
int count = -1 
) const
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classsweep-members.html b/docs/classsweep-members.html new file mode 100644 index 0000000..5bc0340 --- /dev/null +++ b/docs/classsweep-members.html @@ -0,0 +1,73 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
sweep Member List
+
+
+ +

This is the complete list of members for sweep, including all inherited members.

+ + + + + + + + + + +
box() const sweep
opAdd(solid @b)solid
opAnd(solid @b)solid
opSub(solid @b)solid
sweep(const shape2d @shape, const spline_path @path)sweep
transform() const sweep
Type() const sweep
write_csg(string path)solid
write_xcsg(string path, double secant_tolerance=-1.0)solid
+ + + + diff --git a/docs/classsweep.html b/docs/classsweep.html new file mode 100644 index 0000000..8498d35 --- /dev/null +++ b/docs/classsweep.html @@ -0,0 +1,225 @@ + + + + + + +AngelCAD: sweep Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
sweep Class Reference
+
+
+ +

Sweep 2d shape along path curve to create 3d solid. + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for sweep:
+
+
+ + +solid +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 sweep (const shape2d @shape, const spline_path @path)
 constructor More...
 
boundingbox box () const
 return bounding box More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
- Public Member Functions inherited from solid
boundingbox box () const
 
solid opAdd (solid @b)
 Boolean union operator+ overload. More...
 
solid opAnd (solid @b)
 Boolean intersection operator& overload. More...
 
solid opSub (solid @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

Sweep 2d shape along path curve to create 3d solid.

+

a sweep creates a solid by sweeping a 2d profile along a path curve

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
sweep::sweep (const shape2dshape,
const spline_pathpath 
)
+
+ +

constructor

+
Parameters
+ + + +
shape2d profile shape to sweep
pathThe path cirve to sweep along
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox sweep::box () const
+
+ +

return bounding box

+
Returns
The bounding box of the sweep
+ +
+
+ +
+
+ + + + + + + +
tmatrix sweep::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string sweep::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classsweep.png b/docs/classsweep.png new file mode 100644 index 0000000000000000000000000000000000000000..71d08f43f505b6565e90524802f1f5c9c44ad74f GIT binary patch literal 441 zcmeAS@N?(olHy`uVBq!ia0vp^20+}w!3-p)xz1P%q$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IXgJv?0;Ln;{G&W)YaqQJvu9lvVN|B2y( zqM}FNocni0CwPm(GF6xCnxl7Zne;r*SGpfmdD*v~!;JOzo!;Z0Z#qgWUp8&G%|>f$ z?w>Q(i^hdU1f5!l?=D?^sO~iXw+XK|+*=)~+Th(aW53d# f`>%7;#2zpoH5V=WQ_TPjQw9c4S3j3^P6 + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  V3.3-02 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
tin_model Member List
+
+
+ +

This is the complete list of members for tin_model, including all inherited members.

+ + + + + + + + + + +
box() const tin_model
opAdd(solid @b)solid
opAnd(solid @b)solid
opSub(solid @b)solid
size() const tin_model
tin_model(array< pos3d @> @points)tin_model
Type() const tin_model
write_csg(string path)solid
write_xcsg(string path, double secant_tolerance=-1.0)solid
+ + + + diff --git a/docs/classtin__model.html b/docs/classtin__model.html new file mode 100644 index 0000000..e8bc923 --- /dev/null +++ b/docs/classtin__model.html @@ -0,0 +1,192 @@ + + + + + + +AngelCAD: tin_model Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  V3.3-02 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
tin_model Class Reference
+
+
+ +

tin_model, vertices in CCW order + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for tin_model:
+
+
+ + +solid +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 tin_model (array< pos3d @> @points)
 
boundingbox box () const
 
string Type () const
 
uint size () const
 
- Public Member Functions inherited from solid
boundingbox box () const
 
solid opAdd (solid @b)
 Boolean union operator+ overload. More...
 
solid opAnd (solid @b)
 Boolean intersection operator& overload. More...
 
solid opSub (solid @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

tin_model, vertices in CCW order

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
tin_model::tin_model (array< pos3d @> @ points)
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox tin_model::box () const
+
+ +
+
+ +
+
+ + + + + + + +
uint tin_model::size () const
+
+ +
+
+ +
+
+ + + + + + + +
string tin_model::Type () const
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classtin__model.png b/docs/classtin__model.png new file mode 100644 index 0000000000000000000000000000000000000000..8550bb4245e896bcfd1920056d9766d2c126a800 GIT binary patch literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^jzHYO!3-q(&y{flDTx4|5ZC|z{{xvX-h3_XKQsZz z0^R8JSjkP61PcklK!D+sVYFisb`|9_%* zq1J*GH%{igDHH1JXkGv3#uu?wtJXPqUYaOyj#csG!arRKpEDv?mE7I#5tgdI#IAVb zDLE6}Nue*f%C?>pHBs9WmUvP)e)*+Hw{rFJ`%$4PH=h*9-&(l+TjKVvpDKBCSv~WL zzm?VWIZSfrOcV_XwPkF$?8ES&D|&{S{zEaL2P%IKDW6kn5nz}iWr?YdD<&xjhhm2P6Y%lWPkga+NSDXxUo-zKfy8J}-juX?ImiUSzku3sD4M9M|Sr{@t>o#?CXbUhDsI>G> zSf#kSB#K>(kwLFm + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
tmatrix Member List
+
+
+ +

This is the complete list of members for tmatrix, including all inherited members.

+ + + + + + + + + + + + +
dump() const tmatrix
opMul(pos2d @obj)tmatrix
opMul(pos3d @obj)tmatrix
opMul(shape2d @obj)tmatrix
opMul(solid @obj)tmatrix
opMul(const tmatrix @B)tmatrix
origin() const tmatrix
Type() const tmatrix
xdir() const tmatrix
ydir() const tmatrix
zdir() const tmatrix
+ + + + diff --git a/docs/classtmatrix.html b/docs/classtmatrix.html new file mode 100644 index 0000000..f1aa4e5 --- /dev/null +++ b/docs/classtmatrix.html @@ -0,0 +1,334 @@ + + + + + + +AngelCAD: tmatrix Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
tmatrix Class Reference
+
+
+ +

Abstract base matrix for transformations. + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for tmatrix:
+
+
+ + +hmatrix +mirror +rotate_x +rotate_y +rotate_z +scale +translate + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

pos2d opMul (pos2d @obj)
 
pos3d opMul (pos3d @obj)
 transform a point: pos3d@ p = T*obj; More...
 
pos3d origin () const
 
shape2d opMul (shape2d @obj)
 transform a 2d shape: shape2d@ s = T*obj; More...
 
solid opMul (solid @obj)
 transform a solid: solid@ s = T*obj; More...
 
string Type () const
 class type string More...
 
tmatrix opMul (const tmatrix @B)
 matrix multiplication: A = T*B More...
 
vec3d xdir () const
 
vec3d ydir () const
 
vec3d zdir () const
 
void dump () const
 dump matrix to console More...
 
+

Detailed Description

+

Abstract base matrix for transformations.

+

a tmatrix an abstract base class for all transformations.

+

Member Function Documentation

+ +
+
+ + + + + + + +
void tmatrix::dump () const
+
+ +

dump matrix to console

+ +
+
+ +
+
+ + + + + + + + +
pos2d tmatrix::opMul (pos2dobj)
+
+ +
+
+ +
+
+ + + + + + + + +
pos3d tmatrix::opMul (pos3dobj)
+
+ +

transform a point: pos3d@ p = T*obj;

+
Parameters
+ + +
objposition to be transformed
+
+
+
Returns
transformed position
+ +
+
+ +
+
+ + + + + + + + +
shape2d tmatrix::opMul (shape2dobj)
+
+ +

transform a 2d shape: shape2d@ s = T*obj;

+
Parameters
+ + +
objobject to be transformed
+
+
+
Returns
transformed object
+ +
+
+ +
+
+ + + + + + + + +
solid tmatrix::opMul (solidobj)
+
+ +

transform a solid: solid@ s = T*obj;

+
Parameters
+ + +
objobject to be transformed
+
+
+
Returns
transformed object
+ +
+
+ +
+
+ + + + + + + + +
tmatrix tmatrix::opMul (const tmatrixB)
+
+ +

matrix multiplication: A = T*B

+
Parameters
+ + +
Bmatrix to be post-multiplied with this matrix
+
+
+
Returns
resulting matrixt
+ +
+
+ +
+
+ + + + + + + +
pos3d tmatrix::origin () const
+
+ +
+
+ +
+
+ + + + + + + +
string tmatrix::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+ +
+
+ + + + + + + +
vec3d tmatrix::xdir () const
+
+ +
+
+ +
+
+ + + + + + + +
vec3d tmatrix::ydir () const
+
+ +
+
+ +
+
+ + + + + + + +
vec3d tmatrix::zdir () const
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classtmatrix.png b/docs/classtmatrix.png new file mode 100644 index 0000000000000000000000000000000000000000..333a7f0ef29b875081907a56a2423b071d1361ab GIT binary patch literal 1048 zcmeAS@N?(olHy`uVBq!ia0y~yV0-{%2XHV0$#2`k(twmifKQ0)|NsAi%olIImi8Z- z0AzvjfddCvJMYK?xf~@ye!&btMIdnXREQA+1M_lE7srqa#d$ar#O)xw;6TRw^d zl_;-mV&u}1c<^S)w6??@YwvHnWA2xIe*N?1cVrJR%$f0tbDoU;q~}MIEoW~}XjmP< z>F4TpzB_}PZHK_?ru@4%n;6%fUG-p#>+f2AZtC4bv;5K zw*d%)1+rz1U+j5oF;Ajlan19(axRCnoIy6S45nf{M~b){dRdt_&S45jKIovcoM9vR z;%DbCX%RSNmCT{I=Ft=Zrxli=UK5riFL4GE7Os=B_Dy~Cazlb=RjYdFq%56?Af4qN zLA|WrT~9?kSDj?xpA=%8zwX~X`9ofdmPA-<8YUUPanhW$DeB~^;B9`p%(j%Xcn2Mu ze`lrGAK!zAzr4@=cqezpHTn4S{$d-d6uq5<%++n{^ZniL{Jk1prTY2R!zrnA;r zM>ow6o}l+`Nu;)BcgNEmma4p(ZPU2xGIr`Ni_-gB_~wtX|>WM-F!Cp)4z}N9{hP0$F|jMOYXt`eV?ljp0-#f-_E*z$(wJD z$2M-++dREa>UY)Lt?D~IOxp57D=)awyGEY{+Tt^UO~!YI-1jhRaPEr zQaxJKrE)c5!;%P)5K@Gmz0T4uaL93zA}}R5&Jl9rFum{jlRe5KZlUy{Z<~PGn8DN4 K&t;ucLK6Um64<){ literal 0 HcmV?d00001 diff --git a/docs/classtransform__extrude-members.html b/docs/classtransform__extrude-members.html new file mode 100644 index 0000000..7513d4a --- /dev/null +++ b/docs/classtransform__extrude-members.html @@ -0,0 +1,73 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
transform_extrude Member List
+
+
+ +

This is the complete list of members for transform_extrude, including all inherited members.

+ + + + + + + + + + +
box() const transform_extrude
opAdd(solid @b)solid
opAnd(solid @b)solid
opSub(solid @b)solid
transform() const transform_extrude
transform_extrude(const shape2d @bottom, const shape2d @top)transform_extrude
Type() const transform_extrude
write_csg(string path)solid
write_xcsg(string path, double secant_tolerance=-1.0)solid
+ + + + diff --git a/docs/classtransform__extrude.html b/docs/classtransform__extrude.html new file mode 100644 index 0000000..22913d1 --- /dev/null +++ b/docs/classtransform__extrude.html @@ -0,0 +1,211 @@ + + + + + + +AngelCAD: transform_extrude Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
transform_extrude Class Reference
+
+
+ +

Extrude from botton to top shapes using transform. + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for transform_extrude:
+
+
+ + +solid +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 transform_extrude (const shape2d @bottom, const shape2d @top)
 
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
- Public Member Functions inherited from solid
boundingbox box () const
 
solid opAdd (solid @b)
 Boolean union operator+ overload. More...
 
solid opAnd (solid @b)
 Boolean intersection operator& overload. More...
 
solid opSub (solid @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

Extrude from botton to top shapes using transform.

+

transform_extrude is a special extrision operation, defined by two 2d shapes, representing bottom and top of extrusion.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
transform_extrude::transform_extrude (const shape2dbottom,
const shape2dtop 
)
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox transform_extrude::box () const
+
+ +
+
+ +
+
+ + + + + + + +
tmatrix transform_extrude::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string transform_extrude::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classtransform__extrude.png b/docs/classtransform__extrude.png new file mode 100644 index 0000000000000000000000000000000000000000..c34c86f26f1ff400dfbb5202fbac475155c3a565 GIT binary patch literal 617 zcmeAS@N?(olHy`uVBq!ia0vp^ML^ua!3-pMxcm)(lth3}i0l9V|AEXGZ@!lHADRGU zf$@O@2Ut7r$OE|?B|(0{3_wL7aP?G(5d#C`4^J1zkP61Pb01DxqQJv8TR(K)f93f~ z^DJKVy$gBtHa9DmRqT?G^V#?_XOa%8Xif_8n#64H7^(77`Cnn`%#zf)p6|8(lkOEe zTe8hv_br2Y_B@rn&*yEr8~x?nn%)Q}uyK77NJ$D`Xo4>R4XWi-8 zq~%p#*G70&J+)qLGIi1u2QAf;jpAg3~d(yg(3yZE# zT4H`Dbeh!OEAF?S-uM=BZrauBdg-aVzn^M2a!iX~`1k(W)9hMdlk8L}wBJv2=@BQ! z4i%uoY*zlcWD_QNK$UM9uqgGHS``XFa1-|*~W1QD;H*8AZeD+@{pW3(l+7&TD#d4|Z z=UlH@nG@VMW%u?f-!~`q%nu*mZS!ZEyRp7j^n!Ic*P1N6bHa;nSG_*wKc)8Qx5j%R wIu1PYn$z#wH@tqL&j}8`1gl+3rwE;tmw0Fpm6PS|08AGQp00i_>zopr0H5y>XaE2J literal 0 HcmV?d00001 diff --git a/docs/classtranslate-members.html b/docs/classtranslate-members.html new file mode 100644 index 0000000..a6d2e44 --- /dev/null +++ b/docs/classtranslate-members.html @@ -0,0 +1,79 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
translate Member List
+
+
+ +

This is the complete list of members for translate, including all inherited members.

+ + + + + + + + + + + + + + + + +
dump() const translate
dx() const translate
dy() const translate
dz() const translate
opMul(pos2d @obj)translate
opMul(pos3d @obj)translate
opMul(shape2d @obj)translate
opMul(solid @obj)translate
opMul(const tmatrix @B)translate
origin() const translate
translate(double dx, double dy, double dz=0.0)translate
Type() const translate
xdir() const translate
ydir() const translate
zdir() const translate
+ + + + diff --git a/docs/classtranslate.html b/docs/classtranslate.html new file mode 100644 index 0000000..b2378d4 --- /dev/null +++ b/docs/classtranslate.html @@ -0,0 +1,466 @@ + + + + + + +AngelCAD: translate Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
translate Class Reference
+
+
+ +

Translation in x, y and z. + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for translate:
+
+
+ + +tmatrix + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 translate (double dx, double dy, double dz=0.0)
 constructor More...
 
double dx () const
 translation in x direction More...
 
double dy () const
 translation in y direction More...
 
double dz () const
 translation in z direction More...
 
pos2d opMul (pos2d @obj)
 
pos3d opMul (pos3d @obj)
 transform a point: pos3d@ p = T*obj; More...
 
pos3d origin () const
 
shape2d opMul (shape2d @obj)
 transform a 2d shape: shape2d@ s = T*obj; More...
 
solid opMul (solid @obj)
 transform a solid: solid@ s = T*obj; More...
 
string Type () const
 class type string More...
 
tmatrix opMul (const tmatrix @B)
 matrix multiplication: A = T*B More...
 
vec3d xdir () const
 
vec3d ydir () const
 
vec3d zdir () const
 
void dump () const
 dump matrix to console More...
 
- Public Member Functions inherited from tmatrix
pos2d opMul (pos2d @obj)
 
pos3d opMul (pos3d @obj)
 transform a point: pos3d@ p = T*obj; More...
 
pos3d origin () const
 
shape2d opMul (shape2d @obj)
 transform a 2d shape: shape2d@ s = T*obj; More...
 
solid opMul (solid @obj)
 transform a solid: solid@ s = T*obj; More...
 
string Type () const
 class type string More...
 
tmatrix opMul (const tmatrix @B)
 matrix multiplication: A = T*B More...
 
vec3d xdir () const
 
vec3d ydir () const
 
vec3d zdir () const
 
void dump () const
 dump matrix to console More...
 
+

Detailed Description

+

Translation in x, y and z.

+

translate is a transformation translating a 2d or 3d object.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
translate::translate (double dx,
double dy,
double dz = 0.0 
)
+
+ +

constructor

+
Parameters
+ + + + +
dxtranslation in x direction
dytranslation in y direction
dztranslation in z direction
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
void translate::dump () const
+
+ +

dump matrix to console

+ +
+
+ +
+
+ + + + + + + +
double translate::dx () const
+
+ +

translation in x direction

+
Returns
translation in x direction
+ +
+
+ +
+
+ + + + + + + +
double translate::dy () const
+
+ +

translation in y direction

+
Returns
translation in y direction
+ +
+
+ +
+
+ + + + + + + +
double translate::dz () const
+
+ +

translation in z direction

+
Returns
translation in z direction
+ +
+
+ +
+
+ + + + + + + + +
pos2d translate::opMul (pos2dobj)
+
+ +
+
+ +
+
+ + + + + + + + +
pos3d translate::opMul (pos3dobj)
+
+ +

transform a point: pos3d@ p = T*obj;

+
Parameters
+ + +
objposition to be transformed
+
+
+
Returns
transformed position
+ +
+
+ +
+
+ + + + + + + + +
shape2d translate::opMul (shape2dobj)
+
+ +

transform a 2d shape: shape2d@ s = T*obj;

+
Parameters
+ + +
objobject to be transformed
+
+
+
Returns
transformed object
+ +
+
+ +
+
+ + + + + + + + +
solid translate::opMul (solidobj)
+
+ +

transform a solid: solid@ s = T*obj;

+
Parameters
+ + +
objobject to be transformed
+
+
+
Returns
transformed object
+ +
+
+ +
+
+ + + + + + + + +
tmatrix translate::opMul (const tmatrixB)
+
+ +

matrix multiplication: A = T*B

+
Parameters
+ + +
Bmatrix to be post-multiplied with this matrix
+
+
+
Returns
resulting matrixt
+ +
+
+ +
+
+ + + + + + + +
pos3d translate::origin () const
+
+ +
+
+ +
+
+ + + + + + + +
string translate::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+ +
+
+ + + + + + + +
vec3d translate::xdir () const
+
+ +
+
+ +
+
+ + + + + + + +
vec3d translate::ydir () const
+
+ +
+
+ +
+
+ + + + + + + +
vec3d translate::zdir () const
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classtranslate.png b/docs/classtranslate.png new file mode 100644 index 0000000000000000000000000000000000000000..77bc7142f170fd92e489d818f17e17d262ae9ea8 GIT binary patch literal 369 zcmeAS@N?(olHy`uVBq!ia0vp^Hb5M}!3-peM4lxADTx4|5ZC|z{{xvX-h3_XKQsZz z0^tqf8u%# z1-`{W(`USy^wwkIyr9D0{v3)GiXM~t6;G>V`tK{5Le8}NhR|Yy@S}- zpHggj!1ADl^T280%2{$Z{GZ(Xdb|ILxPSEt23sD<1=cm7vV%Y9o)H@O(bh+R@qpW?myb5w$2>(_Gmt)H&lnHKXr?$qh?>wI2so4m)Z zy=ZId&25>#Kg^W=`Of(HqSy1Eu6X-}i_cGb!E~VMA6Dh0J$u66qrtmY!(Pc57(NW1 Lu6{1-oD!M<7cZzB literal 0 HcmV?d00001 diff --git a/docs/classunion2d-members.html b/docs/classunion2d-members.html new file mode 100644 index 0000000..8a274b9 --- /dev/null +++ b/docs/classunion2d-members.html @@ -0,0 +1,77 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
union2d Member List
+
+
+ +

This is the complete list of members for union2d, including all inherited members.

+ + + + + + + + + + + + + + +
box() const union2d
opAdd(shape2d @b)shape2d
opAnd(shape2d @b)shape2d
opSub(shape2d @b)shape2d
transform() const union2d
Type() const union2d
union2d(array< shape2d @> @arr)union2d
union2d(const shape2d @s1, const shape2d @s2)union2d
union2d(const shape2d @s1, const shape2d @s2, const shape2d @s3)union2d
union2d(const shape2d @s1, const shape2d @s2, const shape2d @s3, const shape2d @s4)union2d
union2d(const shape2d @s1, const shape2d @s2, const shape2d @s3, const shape2d @s4, const shape2d @s5)union2d
write_csg(string path)shape2d
write_xcsg(string path, double secant_tolerance=-1.0)shape2d
+ + + + diff --git a/docs/classunion2d.html b/docs/classunion2d.html new file mode 100644 index 0000000..99c4c52 --- /dev/null +++ b/docs/classunion2d.html @@ -0,0 +1,408 @@ + + + + + + +AngelCAD: union2d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
union2d Class Reference
+
+
+ +

2d union boolean operation + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for union2d:
+
+
+ + +shape2d +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 union2d (array< shape2d @> @arr)
 constructor More...
 
 union2d (const shape2d @s1, const shape2d @s2)
 constructor More...
 
 union2d (const shape2d @s1, const shape2d @s2, const shape2d @s3)
 constructor More...
 
 union2d (const shape2d @s1, const shape2d @s2, const shape2d @s3, const shape2d @s4)
 constructor More...
 
 union2d (const shape2d @s1, const shape2d @s2, const shape2d @s3, const shape2d @s4, const shape2d @s5)
 constructor More...
 
boundingbox box () const
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from shape2d
boundingbox box () const
 
shape2d opAdd (shape2d @b)
 Boolean union operator+ overload. More...
 
shape2d opAnd (shape2d @b)
 Boolean intersection operator& overload. More...
 
shape2d opSub (shape2d @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

2d union boolean operation

+

union2d is a 2-dimensional boolean operation. It can be invoked either explicitly or using + operator:
+
+ explicit: shape2d@ object = union2d(circle(100),translate(75,0,0)*circle(50));
+
+ using & operator: shape2d@ object = circle(100) + translate(75,0,0)*circle(50);

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
union2d::union2d (array< shape2d @> @ arr)
+
+ +

constructor

+
Parameters
+ + +
arrarray of 2d shapes
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
union2d::union2d (const shape2ds1,
const shape2ds2 
)
+
+ +

constructor

+
Parameters
+ + + +
s12d shape
s22d shape
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
union2d::union2d (const shape2ds1,
const shape2ds2,
const shape2ds3 
)
+
+ +

constructor

+
Parameters
+ + + + +
s12d shape
s22d shape
s32d shape
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
union2d::union2d (const shape2ds1,
const shape2ds2,
const shape2ds3,
const shape2ds4 
)
+
+ +

constructor

+
Parameters
+ + + + + +
s12d shape
s22d shape
s32d shape
s42d shape
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
union2d::union2d (const shape2ds1,
const shape2ds2,
const shape2ds3,
const shape2ds4,
const shape2ds5 
)
+
+ +

constructor

+
Parameters
+ + + + + + +
s12d shape
s22d shape
s32d shape
s42d shape
s52d shape
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox union2d::box () const
+
+ +
+
+ +
+
+ + + + + + + +
tmatrix union2d::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string union2d::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classunion2d.png b/docs/classunion2d.png new file mode 100644 index 0000000000000000000000000000000000000000..68071520ee1ad5daab367db0daeacd12615db8fc GIT binary patch literal 510 zcmeAS@N?(olHy`uVBq!ia0vp^HbC6L!3-pODl3$Mlth3}i0l9V|AEXGZ@!lHADRGU zf$@O@2Ut7r$OE|?B|(0{3_wL7aP?G(5d#BbucwP+NCo5Dxp(spEAY7W+k033caOU? zi^u5%*UT$fiyyIkEZ$HU{Zy>{dtia5RPw2p$&;WqZ{As9aC0OMkA}M^9T4 z{BPx(cXk{HSh){qls`$`nRtI*OZ+BHkR9k-9rn_z4 ziH*Dbmeih)Fx;4b^3c^!j~g;>y6jvm`BP)L%lG3AF)r_?Y)+bc`eoJiPdDc-?%Vk( r_WO^|rmJ}`oCKO(u{tNs?1XscQ7Q4a*B46wBa6Y))z4*}Q$iB}d#Ul_ literal 0 HcmV?d00001 diff --git a/docs/classunion3d-members.html b/docs/classunion3d-members.html new file mode 100644 index 0000000..59ea924 --- /dev/null +++ b/docs/classunion3d-members.html @@ -0,0 +1,77 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
union3d Member List
+
+
+ +

This is the complete list of members for union3d, including all inherited members.

+ + + + + + + + + + + + + + +
box() const union3d
opAdd(solid @b)solid
opAnd(solid @b)solid
opSub(solid @b)solid
transform() const union3d
Type() const union3d
union3d(array< solid @> @arr)union3d
union3d(const solid @s1, const solid @s2)union3d
union3d(const solid @s1, const solid @s2, const solid @s3)union3d
union3d(const solid @s1, const solid @s2, const solid @s3, const solid @s4)union3d
union3d(const solid @s1, const solid @s2, const solid @s3, const solid @s4, const solid @s5)union3d
write_csg(string path)solid
write_xcsg(string path, double secant_tolerance=-1.0)solid
+ + + + diff --git a/docs/classunion3d.html b/docs/classunion3d.html new file mode 100644 index 0000000..895789b --- /dev/null +++ b/docs/classunion3d.html @@ -0,0 +1,408 @@ + + + + + + +AngelCAD: union3d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
union3d Class Reference
+
+
+ +

3d union boolean operation + More...

+ +

#include <angelcad.h>

+
+Inheritance diagram for union3d:
+
+
+ + +solid +shape + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 union3d (array< solid @> @arr)
 union3d constructor More...
 
 union3d (const solid @s1, const solid @s2)
 constructor More...
 
 union3d (const solid @s1, const solid @s2, const solid @s3)
 constructor More...
 
 union3d (const solid @s1, const solid @s2, const solid @s3, const solid @s4)
 constructor More...
 
 union3d (const solid @s1, const solid @s2, const solid @s3, const solid @s4, const solid @s5)
 constructor More...
 
boundingbox box () const
 
string Type () const
 Object type string. More...
 
tmatrix transform () const
 
- Public Member Functions inherited from solid
boundingbox box () const
 
solid opAdd (solid @b)
 Boolean union operator+ overload. More...
 
solid opAnd (solid @b)
 Boolean intersection operator& overload. More...
 
solid opSub (solid @b)
 Boolean difference operator- overload. More...
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
- Public Member Functions inherited from shape
boundingbox box () const
 
string Type () const
 class type string More...
 
tmatrix transform () const
 
void write_csg (string path)
 Write to OpenSCAD .csg file. More...
 
void write_xcsg (string path, double secant_tolerance=-1.0)
 Write to AngelCAD .xcsg file. More...
 
+

Detailed Description

+

3d union boolean operation

+

union3d is a 3-dimensional boolean operation. It can be invoked either explicitly or using + operator:
+
+ explicit: solid@ object = union3d(sphere(100),translate(75,0,0)*sphere(50));
+
+ using & operator: solid@ object = sphere(100) + translate(75,0,0)*sphere(50);

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
union3d::union3d (array< solid @> @ arr)
+
+ +

union3d constructor

+
Parameters
+ + +
arrarray of solids
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
union3d::union3d (const solids1,
const solids2 
)
+
+ +

constructor

+
Parameters
+ + + +
s1solid
s2solid
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
union3d::union3d (const solids1,
const solids2,
const solids3 
)
+
+ +

constructor

+
Parameters
+ + + + +
s1solid
s2solid
s3solid
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
union3d::union3d (const solids1,
const solids2,
const solids3,
const solids4 
)
+
+ +

constructor

+
Parameters
+ + + + + +
s1solid
s2solid
s3solid
s4solid
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
union3d::union3d (const solids1,
const solids2,
const solids3,
const solids4,
const solids5 
)
+
+ +

constructor

+
Parameters
+ + + + + + +
s1solid
s2solid
s3solid
s4solid
s5solid
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
boundingbox union3d::box () const
+
+ +
+
+ +
+
+ + + + + + + +
tmatrix union3d::transform () const
+
+ +
+
+ +
+
+ + + + + + + +
string union3d::Type () const
+
+ +

Object type string.

+
Returns
type name string
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classunion3d.png b/docs/classunion3d.png new file mode 100644 index 0000000000000000000000000000000000000000..a1be606e638219b4287b81fa68cce96d7978d6b0 GIT binary patch literal 456 zcmeAS@N?(olHy`uVBq!ia0vp^mO$LW!3-p`0yd`uDTx4|5ZC|z{{xvX-h3_XKQsZz z0^a8DPSJ3}qz6~9DOfGvSzkE0Ek$HW!r`LzD zWoOr(Q3-up{n=o*SuWqEN{#fs&uqnYkhbzcCozW$AdK=HOz^s06f0aCTanra=RXe4d>7@}#_Z zTjyE2+D=^?DcAej{X&t~&5E{=L+9qay|k(~_0tUt`{Mk(OLx}9<<8r?yee^W<&N}~ uQL;P2D*w(?-^%(!5NPs_lP1QeKd{dKC#g`@U?vO + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
vec2d Member List
+
+
+ +

This is the complete list of members for vec2d, including all inherited members.

+ + + + + + + + + + + + + +
angle(const vec2d @other) const vec2d
cross(const vec2d @other) const vec2d
dot(const vec2d @other) const vec2d
length() const vec2d
normalise()vec2d
opMul(double f1)vec2d
opMul_r(double f1)vec2d
Type() const vec2d
vec2d(const pos2d @p1, const pos2d @p2)vec2d
vec2d(double x, double y)vec2d
x() const vec2d
y() const vec2d
+ + + + diff --git a/docs/classvec2d.html b/docs/classvec2d.html new file mode 100644 index 0000000..7205f68 --- /dev/null +++ b/docs/classvec2d.html @@ -0,0 +1,381 @@ + + + + + + +AngelCAD: vec2d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
vec2d Class Reference
+
+
+ +

2d direction vector + More...

+ +

#include <angelcad.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 vec2d (const pos2d @p1, const pos2d @p2)
 constructor More...
 
 vec2d (double x, double y)
 constructor More...
 
double angle (const vec2d @other) const
 angle between: double rad = v.angle(other); More...
 
double cross (const vec2d @other) const
 cross product: double cp = v.cross(other); More...
 
double dot (const vec2d @other) const
 dot product: double cp = v.dot(other); More...
 
double length () const
 length of vector More...
 
double x () const
 vector x component More...
 
double y () const
 vector y component More...
 
string Type () const
 class type string More...
 
vec2d opMul (double f1)
 
vec2d opMul_r (double f1)
 
void normalise ()
 normalise vector length More...
 
+

Detailed Description

+

2d direction vector

+

vec2d is a 2-dimensional vector offering useful operations such as dot and cross products.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
vec2d::vec2d (const pos2dp1,
const pos2dp2 
)
+
+ +

constructor

+
Parameters
+ + + +
p1vector start position
p2vector end position
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
vec2d::vec2d (double x,
double y 
)
+
+ +

constructor

+
Parameters
+ + + +
xvector x component
yvector y component
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
double vec2d::angle (const vec2dother) const
+
+ +

angle between: double rad = v.angle(other);

+
Parameters
+ + +
othervector to compute angle relative to this
+
+
+
Returns
angle value in radians
+ +
+
+ +
+
+ + + + + + + + +
double vec2d::cross (const vec2dother) const
+
+ +

cross product: double cp = v.cross(other);

+
Parameters
+ + +
othervector to multiply with
+
+
+
Returns
cross product value
+ +
+
+ +
+
+ + + + + + + + +
double vec2d::dot (const vec2dother) const
+
+ +

dot product: double cp = v.dot(other);

+
Parameters
+ + +
othervector to multiply with
+
+
+
Returns
dot product value
+ +
+
+ +
+
+ + + + + + + +
double vec2d::length () const
+
+ +

length of vector

+
Returns
length of vector
+ +
+
+ +
+
+ + + + + + + +
void vec2d::normalise ()
+
+ +

normalise vector length

+ +
+
+ +
+
+ + + + + + + + +
vec2d vec2d::opMul (double f1)
+
+ +
+
+ +
+
+ + + + + + + + +
vec2d vec2d::opMul_r (double f1)
+
+ +
+
+ +
+
+ + + + + + + +
string vec2d::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+ +
+
+ + + + + + + +
double vec2d::x () const
+
+ +

vector x component

+
Returns
vector x component
+ +
+
+ +
+
+ + + + + + + +
double vec2d::y () const
+
+ +

vector y component

+
Returns
vector y component
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/classvec3d-members.html b/docs/classvec3d-members.html new file mode 100644 index 0000000..adfe4e3 --- /dev/null +++ b/docs/classvec3d-members.html @@ -0,0 +1,77 @@ + + + + + + +AngelCAD: Member List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
vec3d Member List
+
+
+ +

This is the complete list of members for vec3d, including all inherited members.

+ + + + + + + + + + + + + + +
angle(const vec3d @other) const vec3d
cross(const vec3d @other) const vec3d
dot(const vec3d @other) const vec3d
length() const vec3d
normalise()vec3d
opMul(double f1)vec3d
opMul_r(double f1)vec3d
Type() const vec3d
vec3d(const pos3d @p1, const pos3d @p2)vec3d
vec3d(double x, double y, double z)vec3d
x() const vec3d
y() const vec3d
z() const vec3d
+ + + + diff --git a/docs/classvec3d.html b/docs/classvec3d.html new file mode 100644 index 0000000..a4ab0ef --- /dev/null +++ b/docs/classvec3d.html @@ -0,0 +1,399 @@ + + + + + + +AngelCAD: vec3d Class Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
vec3d Class Reference
+
+
+ +

3d direction vector + More...

+ +

#include <angelcad.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 vec3d (const pos3d @p1, const pos3d @p2)
 
 vec3d (double x, double y, double z)
 constructor More...
 
double angle (const vec3d @other) const
 angle between: double rad = v.angle(other); More...
 
double dot (const vec3d @other) const
 dot product: double cp = v.dot(other); More...
 
double length () const
 length of vector More...
 
double x () const
 vector x component More...
 
double y () const
 vector y component More...
 
double z () const
 vector z component More...
 
string Type () const
 class type string More...
 
vec3d cross (const vec3d @other) const
 cross product: double cp = v.cross(other); More...
 
vec3d opMul (double f1)
 
vec3d opMul_r (double f1)
 
void normalise ()
 normalise vector length More...
 
+

Detailed Description

+

3d direction vector

+

vec3d is a 3-dimensional vector offering useful operations such as dot and cross products.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
vec3d::vec3d (const pos3dp1,
const pos3dp2 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
vec3d::vec3d (double x,
double y,
double z 
)
+
+ +

constructor

+
Parameters
+ + + + +
xvector x component
yvector y component
zvector z component
+
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
double vec3d::angle (const vec3dother) const
+
+ +

angle between: double rad = v.angle(other);

+
Parameters
+ + +
othervector to compute angle relative to this
+
+
+
Returns
angle value in radians
+ +
+
+ +
+
+ + + + + + + + +
vec3d vec3d::cross (const vec3dother) const
+
+ +

cross product: double cp = v.cross(other);

+
Parameters
+ + +
othervector to multiply with
+
+
+
Returns
cross product value
+ +
+
+ +
+
+ + + + + + + + +
double vec3d::dot (const vec3dother) const
+
+ +

dot product: double cp = v.dot(other);

+
Parameters
+ + +
othervector to multiply with
+
+
+
Returns
dot product value
+ +
+
+ +
+
+ + + + + + + +
double vec3d::length () const
+
+ +

length of vector

+
Returns
length of vector
+ +
+
+ +
+
+ + + + + + + +
void vec3d::normalise ()
+
+ +

normalise vector length

+ +
+
+ +
+
+ + + + + + + + +
vec3d vec3d::opMul (double f1)
+
+ +
+
+ +
+
+ + + + + + + + +
vec3d vec3d::opMul_r (double f1)
+
+ +
+
+ +
+
+ + + + + + + +
string vec3d::Type () const
+
+ +

class type string

+
Returns
string containing type name
+ +
+
+ +
+
+ + + + + + + +
double vec3d::x () const
+
+ +

vector x component

+
Returns
vector x component
+ +
+
+ +
+
+ + + + + + + +
double vec3d::y () const
+
+ +

vector y component

+
Returns
vector y component
+ +
+
+ +
+
+ + + + + + + +
double vec3d::z () const
+
+ +

vector z component

+
Returns
vector z component
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/docs/closed.png b/docs/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/docs/doc_8as.html b/docs/doc_8as.html new file mode 100644 index 0000000..2a40a8a --- /dev/null +++ b/docs/doc_8as.html @@ -0,0 +1,83 @@ + + + + + + +AngelCAD: doc.as File Reference + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+ +
+
doc.as File Reference
+
+
+ + + + +

+Functions

void main ()
 
+

Function Documentation

+ +
+
+ + + + + + + +
void main ()
+
+ +
+
+
+ + + + diff --git a/docs/doxygen.css b/docs/doxygen.css new file mode 100644 index 0000000..02e8b01 --- /dev/null +++ b/docs/doxygen.css @@ -0,0 +1,1440 @@ +/* The standard CSS for doxygen 1.8.8 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 4px 6px; + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('ftv2folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('ftv2folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('ftv2doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 20px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + diff --git a/docs/doxygen.png b/docs/doxygen.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff17d807fd8aa003bed8bb2a69e8f0909592fd1 GIT binary patch literal 3779 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 literal 0 HcmV?d00001 diff --git a/docs/dynsections.js b/docs/dynsections.js new file mode 100644 index 0000000..85e1836 --- /dev/null +++ b/docs/dynsections.js @@ -0,0 +1,97 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + +AngelCAD: File List + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+ + + + +
 angelcad.h
 doc.as
 mainpage.h
+
+
+ + + + diff --git a/docs/ftv2blank.png b/docs/ftv2blank.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/docs/ftv2doc.png b/docs/ftv2doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/docs/ftv2folderclosed.png b/docs/ftv2folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/docs/ftv2lastnode.png b/docs/ftv2lastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/docs/ftv2link.png b/docs/ftv2link.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/docs/ftv2mlastnode.png b/docs/ftv2mlastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..0b63f6d38c4b9ec907b820192ebe9724ed6eca22 GIT binary patch literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 literal 0 HcmV?d00001 diff --git a/docs/ftv2mnode.png b/docs/ftv2mnode.png new file mode 100644 index 0000000000000000000000000000000000000000..0b63f6d38c4b9ec907b820192ebe9724ed6eca22 GIT binary patch literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 literal 0 HcmV?d00001 diff --git a/docs/ftv2node.png b/docs/ftv2node.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/docs/ftv2plastnode.png b/docs/ftv2plastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ee22f937a07d1dbfc27c669d11f8ed13e2f152 GIT binary patch literal 229 zcmV^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K literal 0 HcmV?d00001 diff --git a/docs/ftv2pnode.png b/docs/ftv2pnode.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ee22f937a07d1dbfc27c669d11f8ed13e2f152 GIT binary patch literal 229 zcmV^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K literal 0 HcmV?d00001 diff --git a/docs/ftv2splitbar.png b/docs/ftv2splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/docs/ftv2vertline.png b/docs/ftv2vertline.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/docs/functions.html b/docs/functions.html new file mode 100644 index 0000000..0cd9330 --- /dev/null +++ b/docs/functions.html @@ -0,0 +1,100 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- a -

+
+ + + + diff --git a/docs/functions_b.html b/docs/functions_b.html new file mode 100644 index 0000000..561eeac --- /dev/null +++ b/docs/functions_b.html @@ -0,0 +1,127 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- b -

+
+ + + + diff --git a/docs/functions_c.html b/docs/functions_c.html new file mode 100644 index 0000000..294a750 --- /dev/null +++ b/docs/functions_c.html @@ -0,0 +1,115 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- c -

+
+ + + + diff --git a/docs/functions_d.html b/docs/functions_d.html new file mode 100644 index 0000000..923eba9 --- /dev/null +++ b/docs/functions_d.html @@ -0,0 +1,143 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- d -

+
+ + + + diff --git a/docs/functions_e.html b/docs/functions_e.html new file mode 100644 index 0000000..cddce9d --- /dev/null +++ b/docs/functions_e.html @@ -0,0 +1,96 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- e -

+
+ + + + diff --git a/docs/functions_f.html b/docs/functions_f.html new file mode 100644 index 0000000..cd2749f --- /dev/null +++ b/docs/functions_f.html @@ -0,0 +1,108 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- f -

+
+ + + + diff --git a/docs/functions_func.html b/docs/functions_func.html new file mode 100644 index 0000000..bc23569 --- /dev/null +++ b/docs/functions_func.html @@ -0,0 +1,100 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- a -

+
+ + + + diff --git a/docs/functions_func_b.html b/docs/functions_func_b.html new file mode 100644 index 0000000..efa6cca --- /dev/null +++ b/docs/functions_func_b.html @@ -0,0 +1,127 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+ + + + + diff --git a/docs/functions_func_c.html b/docs/functions_func_c.html new file mode 100644 index 0000000..9b3f7dd --- /dev/null +++ b/docs/functions_func_c.html @@ -0,0 +1,115 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- c -

+
+ + + + diff --git a/docs/functions_func_d.html b/docs/functions_func_d.html new file mode 100644 index 0000000..5c84e4e --- /dev/null +++ b/docs/functions_func_d.html @@ -0,0 +1,143 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- d -

+
+ + + + diff --git a/docs/functions_func_e.html b/docs/functions_func_e.html new file mode 100644 index 0000000..d916713 --- /dev/null +++ b/docs/functions_func_e.html @@ -0,0 +1,96 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- e -

+
+ + + + diff --git a/docs/functions_func_f.html b/docs/functions_func_f.html new file mode 100644 index 0000000..668af10 --- /dev/null +++ b/docs/functions_func_f.html @@ -0,0 +1,108 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- f -

+
+ + + + diff --git a/docs/functions_func_g.html b/docs/functions_func_g.html new file mode 100644 index 0000000..de54566 --- /dev/null +++ b/docs/functions_func_g.html @@ -0,0 +1,107 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.0-05 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- g -

+
+ + + + diff --git a/docs/functions_func_h.html b/docs/functions_func_h.html new file mode 100644 index 0000000..bdfc4ae --- /dev/null +++ b/docs/functions_func_h.html @@ -0,0 +1,111 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- h -

+
+ + + + diff --git a/docs/functions_func_i.html b/docs/functions_func_i.html new file mode 100644 index 0000000..a3e4830 --- /dev/null +++ b/docs/functions_func_i.html @@ -0,0 +1,102 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- i -

+
+ + + + diff --git a/docs/functions_func_l.html b/docs/functions_func_l.html new file mode 100644 index 0000000..1f88879 --- /dev/null +++ b/docs/functions_func_l.html @@ -0,0 +1,103 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- l -

+
+ + + + diff --git a/docs/functions_func_m.html b/docs/functions_func_m.html new file mode 100644 index 0000000..7196e51 --- /dev/null +++ b/docs/functions_func_m.html @@ -0,0 +1,102 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- m -

+
+ + + + diff --git a/docs/functions_func_n.html b/docs/functions_func_n.html new file mode 100644 index 0000000..41037a8 --- /dev/null +++ b/docs/functions_func_n.html @@ -0,0 +1,104 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- n -

+
+ + + + diff --git a/docs/functions_func_o.html b/docs/functions_func_o.html new file mode 100644 index 0000000..f1f42fa --- /dev/null +++ b/docs/functions_func_o.html @@ -0,0 +1,138 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- o -

+
+ + + + diff --git a/docs/functions_func_p.html b/docs/functions_func_p.html new file mode 100644 index 0000000..693e9ac --- /dev/null +++ b/docs/functions_func_p.html @@ -0,0 +1,114 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- p -

+
+ + + + diff --git a/docs/functions_func_r.html b/docs/functions_func_r.html new file mode 100644 index 0000000..9a51697 --- /dev/null +++ b/docs/functions_func_r.html @@ -0,0 +1,136 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- r -

+
+ + + + diff --git a/docs/functions_func_s.html b/docs/functions_func_s.html new file mode 100644 index 0000000..1d539d1 --- /dev/null +++ b/docs/functions_func_s.html @@ -0,0 +1,134 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- s -

+
+ + + + diff --git a/docs/functions_func_t.html b/docs/functions_func_t.html new file mode 100644 index 0000000..09687f7 --- /dev/null +++ b/docs/functions_func_t.html @@ -0,0 +1,179 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+ + + + + diff --git a/docs/functions_func_u.html b/docs/functions_func_u.html new file mode 100644 index 0000000..28a6366 --- /dev/null +++ b/docs/functions_func_u.html @@ -0,0 +1,99 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- u -

+
+ + + + diff --git a/docs/functions_func_v.html b/docs/functions_func_v.html new file mode 100644 index 0000000..88c8fe8 --- /dev/null +++ b/docs/functions_func_v.html @@ -0,0 +1,112 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- v -

+
+ + + + diff --git a/docs/functions_func_w.html b/docs/functions_func_w.html new file mode 100644 index 0000000..b9b436e --- /dev/null +++ b/docs/functions_func_w.html @@ -0,0 +1,103 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- w -

+
+ + + + diff --git a/docs/functions_func_x.html b/docs/functions_func_x.html new file mode 100644 index 0000000..1af4e0e --- /dev/null +++ b/docs/functions_func_x.html @@ -0,0 +1,110 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- x -

+
+ + + + diff --git a/docs/functions_func_y.html b/docs/functions_func_y.html new file mode 100644 index 0000000..26d1ba0 --- /dev/null +++ b/docs/functions_func_y.html @@ -0,0 +1,110 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- y -

+
+ + + + diff --git a/docs/functions_func_z.html b/docs/functions_func_z.html new file mode 100644 index 0000000..4522646 --- /dev/null +++ b/docs/functions_func_z.html @@ -0,0 +1,108 @@ + + + + + + +AngelCAD: Class Members - Functions + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+  + +

- z -

+
+ + + + diff --git a/docs/functions_g.html b/docs/functions_g.html new file mode 100644 index 0000000..0347a4f --- /dev/null +++ b/docs/functions_g.html @@ -0,0 +1,107 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.0-05 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- g -

+
+ + + + diff --git a/docs/functions_h.html b/docs/functions_h.html new file mode 100644 index 0000000..9ac5a63 --- /dev/null +++ b/docs/functions_h.html @@ -0,0 +1,111 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- h -

+
+ + + + diff --git a/docs/functions_i.html b/docs/functions_i.html new file mode 100644 index 0000000..8d8acb7 --- /dev/null +++ b/docs/functions_i.html @@ -0,0 +1,102 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- i -

+
+ + + + diff --git a/docs/functions_l.html b/docs/functions_l.html new file mode 100644 index 0000000..64a32b5 --- /dev/null +++ b/docs/functions_l.html @@ -0,0 +1,103 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- l -

+
+ + + + diff --git a/docs/functions_m.html b/docs/functions_m.html new file mode 100644 index 0000000..d60cd45 --- /dev/null +++ b/docs/functions_m.html @@ -0,0 +1,102 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- m -

+
+ + + + diff --git a/docs/functions_n.html b/docs/functions_n.html new file mode 100644 index 0000000..9fb959f --- /dev/null +++ b/docs/functions_n.html @@ -0,0 +1,104 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- n -

+
+ + + + diff --git a/docs/functions_o.html b/docs/functions_o.html new file mode 100644 index 0000000..eeb94fe --- /dev/null +++ b/docs/functions_o.html @@ -0,0 +1,138 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- o -

+
+ + + + diff --git a/docs/functions_p.html b/docs/functions_p.html new file mode 100644 index 0000000..3408d0d --- /dev/null +++ b/docs/functions_p.html @@ -0,0 +1,114 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- p -

+
+ + + + diff --git a/docs/functions_r.html b/docs/functions_r.html new file mode 100644 index 0000000..ed16d8f --- /dev/null +++ b/docs/functions_r.html @@ -0,0 +1,136 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- r -

+
+ + + + diff --git a/docs/functions_s.html b/docs/functions_s.html new file mode 100644 index 0000000..798996a --- /dev/null +++ b/docs/functions_s.html @@ -0,0 +1,134 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- s -

+
+ + + + diff --git a/docs/functions_t.html b/docs/functions_t.html new file mode 100644 index 0000000..5c69715 --- /dev/null +++ b/docs/functions_t.html @@ -0,0 +1,179 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- t -

+
+ + + + diff --git a/docs/functions_u.html b/docs/functions_u.html new file mode 100644 index 0000000..f4f66a6 --- /dev/null +++ b/docs/functions_u.html @@ -0,0 +1,99 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- u -

+
+ + + + diff --git a/docs/functions_v.html b/docs/functions_v.html new file mode 100644 index 0000000..3691371 --- /dev/null +++ b/docs/functions_v.html @@ -0,0 +1,112 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- v -

+
+ + + + diff --git a/docs/functions_vars.html b/docs/functions_vars.html new file mode 100644 index 0000000..ae204dd --- /dev/null +++ b/docs/functions_vars.html @@ -0,0 +1,74 @@ + + + + + + +AngelCAD: Class Members - Variables + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  V3.3-02 +
+
AngelScript based 3d modeller
+
+
+ + + + + +
+
+
+ + + + diff --git a/docs/functions_w.html b/docs/functions_w.html new file mode 100644 index 0000000..b501b00 --- /dev/null +++ b/docs/functions_w.html @@ -0,0 +1,103 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- w -

+
+ + + + diff --git a/docs/functions_x.html b/docs/functions_x.html new file mode 100644 index 0000000..79f17fc --- /dev/null +++ b/docs/functions_x.html @@ -0,0 +1,110 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- x -

+
+ + + + diff --git a/docs/functions_y.html b/docs/functions_y.html new file mode 100644 index 0000000..094d597 --- /dev/null +++ b/docs/functions_y.html @@ -0,0 +1,110 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- y -

+
+ + + + diff --git a/docs/functions_z.html b/docs/functions_z.html new file mode 100644 index 0000000..afeb5d6 --- /dev/null +++ b/docs/functions_z.html @@ -0,0 +1,108 @@ + + + + + + +AngelCAD: Class Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + + +
+
+
Here is a list of all class members with links to the classes they belong to:
+ +

- z -

+
+ + + + diff --git a/docs/globals.html b/docs/globals.html new file mode 100644 index 0000000..323c8a7 --- /dev/null +++ b/docs/globals.html @@ -0,0 +1,66 @@ + + + + + + +AngelCAD: File Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + +
+
+
Here is a list of all file members with links to the files they belong to:
+
+ + + + diff --git a/docs/globals_func.html b/docs/globals_func.html new file mode 100644 index 0000000..a90a156 --- /dev/null +++ b/docs/globals_func.html @@ -0,0 +1,66 @@ + + + + + + +AngelCAD: File Members + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + + +
+
+
+ + + + diff --git a/docs/hierarchy.html b/docs/hierarchy.html new file mode 100644 index 0000000..be529e0 --- /dev/null +++ b/docs/hierarchy.html @@ -0,0 +1,112 @@ + + + + + + +AngelCAD: Class Hierarchy + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 CboundingboxBounding box aligned with system axes
 Clocsys3d3d localsystem
 CpfacePolyhedron face
 Cpos2d2d position coordinates
 Cpos3d3d position coordinates
 CshapeAbstract base for all primitives and booleans
 Cshape2dAbstract base for 2d primitives and booleans
 CcircleCircle, centered at origin
 Cdifference2d2d difference boolean operation
 Cfill2d2d fill operation, filling holes in input shapes
 Chull2d2d hull operation, enclosing the input shapes
 Cintersection2d2d intersection boolean operation
 Cminkowski2d2d Minkowski sum operation
 Coffset2d2d profile offset
 CpolygonPolygon, vertices in CCW order
 CrectangleRectangle, by default located in 1st quadrant touching origin
 CsquareSquare, by default located in 1st quadrant touching origin
 Cunion2d2d union boolean operation
 CsolidAbstract base for 3d primitives and booleans
 CconeCone with axis in z-direction, by default extending from origin
 CcubeCube, by default in 1st octant with one corner toucing origin
 CcuboidCuboid, by default in 1st octant with one corner toucing origin
 CcylinderCylinder with axis in z-direction, by default extending from origin
 Cdifference3d3d difference boolean operation
 Chull3d3d hull operation, enclosing the input solids
 Cintersection3d3d intersection boolean operation
 Clinear_extrudeExtrude 2d shape in z direction into 3d solid
 Cminkowski3d3d Minkowski sum operation
 CpolyhedronClosed polyhedron volume defined by vertices and planar faces
 Crotate_extrudeExtrude 2d shape CCW in XZ plane into 3d solid
 CsphereSphere, centered at origin
 CsweepSweep 2d shape along path curve to create 3d solid
 Ctransform_extrudeExtrude from botton to top shapes using transform
 Cunion3d3d union boolean operation
 Cspline2d2d cubic spline curve
 Cspline3d3d cubic spline curve
 Cspline_pathSpline_path for sweep
 CtmatrixAbstract base matrix for transformations
 ChmatrixHomogeneous transformation matrix
 CmirrorMirror transformation around given point
 Crotate_xRotation around x
 Crotate_yRotation around y
 Crotate_zRotation around z
 CscaleScaling transformation
 CtranslateTranslation in x, y and z
 Cvec2d2d direction vector
 Cvec3d3d direction vector
+
+
+ + + + diff --git a/docs/index.hhc b/docs/index.hhc new file mode 100644 index 0000000..9b4d57a --- /dev/null +++ b/docs/index.hhc @@ -0,0 +1,1187 @@ + + + + + +
    +
      +
    • +
    • +
    • +
    +
  • +
      +
    • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        +
      • +
          +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      +
    • +
    • +
        +
      • +
      • +
      • +
      • +
      • +
      • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        +
      • +
      • +
      • +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
      • +
      +
    • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
      +
    +
  • +
      +
    • +
        +
      • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          +
        • +
            +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        • +
            +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          • +
          +
        +
      • +
          +
        • +
        +
      • +
      +
    • +
        +
      • +
      • +
      +
    +
+ + diff --git a/docs/index.hhk b/docs/index.hhk new file mode 100644 index 0000000..59a6e9a --- /dev/null +++ b/docs/index.hhk @@ -0,0 +1,826 @@ + + + + + +
    +
  • +
      +
    • +
    • +
    +
  • +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
  • +
      +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
  • +
  • +
      +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
  • +
      +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    +
  • +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
  • +
      +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    +
  • +
  • +
      +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
      +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
  • +
      +
    • +
    • +
    +
  • +
  • +
  • +
      +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    +
  • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
+ + diff --git a/docs/index.hhp b/docs/index.hhp new file mode 100644 index 0000000..9eacdc0 --- /dev/null +++ b/docs/index.hhp @@ -0,0 +1,230 @@ +[OPTIONS] +Compiled file=angelcad.chm +Compatibility=1.1 +Full-text search=Yes +Contents file=index.hhc +Default Window=main +Default topic=index.html +Index file=index.hhk +Language=0x409 English (United States) +Title=AngelCAD + +[WINDOWS] +main="AngelCAD","index.hhc","index.hhk","index.html","index.html",,,,,0x23520,,0x10387e,,,,,,,,0 + +[FILES] +angelcad_8h_source.html +mainpage_8h_source.html +angelcad_8h.html +doc_8as.html +mainpage_8h.html +classboundingbox.html +classboundingbox-members.html +classcircle.html +classcircle-members.html +classcone.html +classcone-members.html +classcube.html +classcube-members.html +classcuboid.html +classcuboid-members.html +classcylinder.html +classcylinder-members.html +classdifference2d.html +classdifference2d-members.html +classdifference3d.html +classdifference3d-members.html +classfill2d.html +classfill2d-members.html +classhmatrix.html +classhmatrix-members.html +classhull2d.html +classhull2d-members.html +classhull3d.html +classhull3d-members.html +classintersection2d.html +classintersection2d-members.html +classintersection3d.html +classintersection3d-members.html +classlinear__extrude.html +classlinear__extrude-members.html +classlocsys3d.html +classlocsys3d-members.html +classminkowski2d.html +classminkowski2d-members.html +classminkowski3d.html +classminkowski3d-members.html +classmirror.html +classmirror-members.html +classoffset2d.html +classoffset2d-members.html +classpface.html +classpface-members.html +classpolygon.html +classpolygon-members.html +classpolyhedron.html +classpolyhedron-members.html +classpos2d.html +classpos2d-members.html +classpos3d.html +classpos3d-members.html +classrectangle.html +classrectangle-members.html +classrotate__extrude.html +classrotate__extrude-members.html +classrotate__x.html +classrotate__x-members.html +classrotate__y.html +classrotate__y-members.html +classrotate__z.html +classrotate__z-members.html +classscale.html +classscale-members.html +classshape.html +classshape-members.html +classshape2d.html +classshape2d-members.html +classsolid.html +classsolid-members.html +classsphere.html +classsphere-members.html +classspline2d.html +classspline2d-members.html +classspline3d.html +classspline3d-members.html +classspline__path.html +classspline__path-members.html +classsquare.html +classsquare-members.html +classsweep.html +classsweep-members.html +classtmatrix.html +classtmatrix-members.html +classtransform__extrude.html +classtransform__extrude-members.html +classtranslate.html +classtranslate-members.html +classunion2d.html +classunion2d-members.html +classunion3d.html +classunion3d-members.html +classvec2d.html +classvec2d-members.html +classvec3d.html +classvec3d-members.html +index.html +annotated.html +classes.html +hierarchy.html +functions.html +functions_b.html +functions_c.html +functions_d.html +functions_e.html +functions_f.html +functions_h.html +functions_i.html +functions_l.html +functions_m.html +functions_n.html +functions_o.html +functions_p.html +functions_r.html +functions_s.html +functions_t.html +functions_u.html +functions_v.html +functions_w.html +functions_x.html +functions_y.html +functions_z.html +functions_func.html +functions_func_b.html +functions_func_c.html +functions_func_d.html +functions_func_e.html +functions_func_f.html +functions_func_h.html +functions_func_i.html +functions_func_l.html +functions_func_m.html +functions_func_n.html +functions_func_o.html +functions_func_p.html +functions_func_r.html +functions_func_s.html +functions_func_t.html +functions_func_u.html +functions_func_v.html +functions_func_w.html +functions_func_x.html +functions_func_y.html +functions_func_z.html +files.html +globals.html +globals_func.html +tab_a.png +tab_b.png +tab_h.png +tab_s.png +nav_h.png +nav_f.png +bc_s.png +doxygen.png +closed.png +open.png +bdwn.png +sync_on.png +sync_off.png +angel_48x48.bmp +ftv2blank.png +ftv2doc.png +ftv2folderclosed.png +ftv2folderopen.png +ftv2lastnode.png +ftv2link.png +ftv2mlastnode.png +ftv2mnode.png +ftv2node.png +ftv2plastnode.png +ftv2pnode.png +ftv2vertline.png +ftv2splitbar.png +classcircle.png +classcone.png +classcube.png +classcuboid.png +classcylinder.png +classdifference2d.png +classdifference3d.png +classfill2d.png +classhmatrix.png +classhull2d.png +classhull3d.png +classintersection2d.png +classintersection3d.png +classlinear__extrude.png +classminkowski2d.png +classminkowski3d.png +classmirror.png +classoffset2d.png +classpolygon.png +classpolyhedron.png +classrectangle.png +classrotate__extrude.png +classrotate__x.png +classrotate__y.png +classrotate__z.png +classscale.png +classshape.png +classshape2d.png +classsolid.png +classsphere.png +classsquare.png +classsweep.png +classtmatrix.png +classtransform__extrude.png +classtranslate.png +classunion2d.png +classunion3d.png +angelcad_ide_70pst.png diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..f6edbc9 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,91 @@ + + + + + + +AngelCAD: AngelCAD + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + +
+
+
+
AngelCAD
+
+
+

AngelCAD is an application for creating 3D solid models, employing the Constructive Solid Geometry (CSG) technique using the AngelScript scripting language. The result is STL files or other formats suitable for 3D printing. AngelCAD can also produce 2D models in DXF format.

+

The software is developed by Carsten Arnholm and marketed by abmesh.com.

+
+angelcad_ide_70pst.png +
+

+The AngelCAD language

+

AngelCAD offers the AngelScript language as a means of expressing 3D designs. AngelScript is a powerful, but easy to learn language with syntax similar to many other languages. It allows you to create variables to describe parameters or to hold parts of the design. Standard constructs such as for-loops and if-statements are supported, plus much more. See the AngelScript language description for more information. The use of a scripting language offers many advantages, including easy sharing between people as well as a natural ability to describe parametric designs.

+

The AngelCAD language adds additional solid-modelling features to the general purpose AngelScript language. This includes modelling primitives such as 'cube', 'sphere' and 'polyhedron', and operators such as 'union3d' and 'hull'. For a full overview, see the 'Classes' page of this manual.

+

AngelCAD sample scripts are available from https://github.com/arnholm/angelcad-samples/, demonstrating practical use of the language.

+

+Installing

+

For a first impression without installing locally, try AngelCAD-online. To get the full benefits of AngelCAD-desktop running on your computer, please download and install the most recent version available from abmesh.com. AngelCAD-desktop is available for Windows and Ubuntu Linux.

+

To install the software, extract the downloaded ZIP-file and run the setup.exe (Windows) or setup.sh shell script (Linux).

+

+Getting Started

+

The code below is "basic_cube_sphere.as", a simple AngelCAD source file, also shown in the top image.

shape@ main_shape()
+
{
+
// create cube & sphere in default positions
+
double d = 100;
+
solid@ mycub = cube(size:d);
+
solid@ mysph = sphere(r:d*0.8);
+
+
// move the sphere in z-direction and subtract from cube
+
return mycub - translate(0,0,d)*mysph;
+
}
+
+
void main()
+
{
+
shape@ obj = main_shape();
+
obj.write_xcsg(GetInputFullPath(),secant_tolerance:0.02);
+
}
+

Some rules

    +
  • You must have a "void main()" function.
  • +
  • It is recommended to use a "shape@ main_shape()" function that returns the final object created.
  • +
  • You can use as many additional functions as you need.
  • +
  • Note the use of handles such as shape@, cylinder@ etc. You must use the "@" character with all AngelCAD CSG objects.
  • +
+
+ + + + diff --git a/docs/jquery.js b/docs/jquery.js new file mode 100644 index 0000000..c197801 --- /dev/null +++ b/docs/jquery.js @@ -0,0 +1,31 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType; +if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1 +},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av); +ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length; +if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b +})}})(window); diff --git a/docs/mainpage_8h.html b/docs/mainpage_8h.html new file mode 100644 index 0000000..a1dbf95 --- /dev/null +++ b/docs/mainpage_8h.html @@ -0,0 +1,61 @@ + + + + + + +AngelCAD: mainpage.h File Reference + + + + + + +
+
+
+ + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+ + + + + + +
+
+
mainpage.h File Reference
+
+ + + + + diff --git a/docs/mainpage_8h_source.html b/docs/mainpage_8h_source.html new file mode 100644 index 0000000..2f3a603 --- /dev/null +++ b/docs/mainpage_8h_source.html @@ -0,0 +1,63 @@ + + + + + + +AngelCAD: mainpage.h Source File + + + + + + +
+
+ + + + + + + +
+
AngelCAD +  v1.1-00 +
+
AngelScript based 3d modeller
+
+
+ + + + +
+
+
+
mainpage.h
+
+
+Go to the documentation of this file.
1 #ifndef MAINPAGE_H
+
2 #define MAINPAGE_H
+
3 
+
60 #endif
+
+ + + + diff --git a/docs/nav_f.png b/docs/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/docs/nav_g.png b/docs/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sMoT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/docs/sync_on.png b/docs/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/docs/tab_a.png b/docs/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/docs/tab_b.png b/docs/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/docs/tabs.css b/docs/tabs.css new file mode 100644 index 0000000..9cf578f --- /dev/null +++ b/docs/tabs.css @@ -0,0 +1,60 @@ +.tabs, .tabs2, .tabs3 { + background-image: url('tab_b.png'); + width: 100%; + z-index: 101; + font-size: 13px; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + display: table-cell; + background-image: url('tab_b.png'); + line-height: 36px; + list-style: none; +} + +.tablist a { + display: block; + padding: 0 20px; + font-weight: bold; + background-image:url('tab_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #283A5D; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-image: url('tab_h.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + text-decoration: none; +} + +.tablist li.current a { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} diff --git a/index.md b/index.md new file mode 100644 index 0000000..f6c35c4 --- /dev/null +++ b/index.md @@ -0,0 +1,16 @@ +**AngelCAD - script based 3D Solid Modeller** + +AngelCAD is an open source 3D solid modeller based on the Constructive Solid Geometry [CSG](https://en.wikipedia.org/wiki/Constructive_solid_geometry) modelling technique and using the [AngelScript](http://www.angelcode.com/angelscript/sdk/docs/manual/doc_script.html) scripting language. Builds available for Windows and Linux. + +[AngelCAD language reference](/docs/index.html){:target="_blank"} (link opens in new tab) + +[angelcad-samples](https://github.com/arnholm/angelcad-samples){:target="_blank"} (link opens in new tab) + +![AngelCAD modeller](/docs/angelcad_ide_70pst.png) + +[Software Download page](https://github.com/arnholm/xcsg/releases){:target="_blank"} (link opens in new tab) + +STL file follows + +