├── cython
├── python_solvespace
│ ├── py.typed
│ ├── __init__.pxd
│ └── __init__.py
├── test
│ ├── __init__.py
│ └── __main__.py
├── MANIFEST.in
├── pyproject.toml
├── platform
│ ├── pyconfig.diff
│ ├── set_pycompiler.bat
│ └── cygwinccompiler.diff
├── setup.cfg
├── .gitignore
└── README.md
├── res
├── banner.txt
├── win32
│ ├── icon.ico
│ ├── versioninfo.rc.in
│ └── manifest.xml
├── fonts
│ ├── unicode.lff.gz
│ ├── unifont.hex.gz
│ ├── private
│ │ ├── 1-check-true.png
│ │ ├── 3-radio-true.png
│ │ ├── 0-check-false.png
│ │ ├── 2-radio-false.png
│ │ ├── 4-stipple-dot.png
│ │ ├── 6-stipple-dash.png
│ │ ├── 7-stipple-zigzag.png
│ │ └── 5-stipple-dash-long.png
│ └── BitstreamVeraSans-Roman-builtin.ttf
├── icons
│ ├── text-window
│ │ ├── edges.png
│ │ ├── faces.png
│ │ ├── mesh.png
│ │ ├── point.png
│ │ ├── normal.png
│ │ ├── outlines.png
│ │ ├── shaded.png
│ │ ├── constraint.png
│ │ ├── workplane.png
│ │ ├── construction.png
│ │ ├── occluded-invisible.png
│ │ ├── occluded-stippled.png
│ │ └── occluded-visible.png
│ └── graphics-window
│ │ ├── arc.png
│ │ ├── in3d.png
│ │ ├── line.png
│ │ ├── ref.png
│ │ ├── text.png
│ │ ├── trim.png
│ │ ├── vert.png
│ │ ├── angle.png
│ │ ├── bezier.png
│ │ ├── circle.png
│ │ ├── equal.png
│ │ ├── helix.png
│ │ ├── horiz.png
│ │ ├── image.png
│ │ ├── lathe.png
│ │ ├── length.png
│ │ ├── point.png
│ │ ├── assemble.png
│ │ ├── extrude.png
│ │ ├── parallel.png
│ │ ├── pointonx.png
│ │ ├── rectangle.png
│ │ ├── revolve.png
│ │ ├── symmetric.png
│ │ ├── other-supp.png
│ │ ├── step-rotate.png
│ │ ├── tangent-arc.png
│ │ ├── construction.png
│ │ ├── ontoworkplane.png
│ │ ├── perpendicular.png
│ │ ├── sketch-in-3d.png
│ │ ├── step-translate.png
│ │ ├── same-orientation.png
│ │ └── sketch-in-plane.png
├── threejs
│ ├── hammer-2.0.8.js.gz
│ └── three-r111.min.js.gz
├── freedesktop
│ ├── solvespace-16x16.png
│ ├── solvespace-24x24.png
│ ├── solvespace-32x32.png
│ ├── solvespace-48x48.png
│ ├── solvespace.desktop.in
│ ├── solvespace-flatpak.desktop.in
│ ├── solvespace-snap.desktop
│ ├── solvespace-mime.xml
│ ├── solvespace-flatpak-mime.xml
│ └── solvespace-scalable.svg
├── cocoa
│ └── AppIcon.iconset
│ │ ├── icon_16x16.png
│ │ ├── icon_32x32.png
│ │ ├── icon_128x128.png
│ │ ├── icon_16x16@2x.png
│ │ ├── icon_256x256.png
│ │ ├── icon_32x32@2x.png
│ │ ├── icon_512x512.png
│ │ ├── icon_128x128@2x.png
│ │ ├── icon_256x256@2x.png
│ │ └── icon_512x512@2x.png
├── locales.txt
└── shaders
│ ├── mesh_fill.vert
│ ├── imesh.vert
│ ├── imesh.frag
│ ├── mesh_fill.frag
│ ├── imesh_point.frag
│ ├── imesh_texa.frag
│ ├── imesh_tex.frag
│ ├── imesh_tex.vert
│ ├── mesh.vert
│ ├── mesh.frag
│ ├── imesh_point.vert
│ ├── edge.frag
│ ├── edge.vert
│ └── outline.vert
├── pkg
├── snap
│ ├── .gitignore
│ └── build.sh
└── flatpak
│ ├── .gitignore
│ └── build.sh
├── .github
├── scripts
│ ├── build-snap.sh
│ ├── install-windows.sh
│ ├── install-snap.sh
│ ├── build-ubuntu.sh
│ ├── install-ubuntu.sh
│ ├── install-macos.sh
│ ├── build-windows.sh
│ └── build-macos.sh
├── ISSUE_TEMPLATE.md
└── workflows
│ ├── test.yml
│ ├── source-tarball.yml
│ └── python.yml
├── extlib
└── si
│ ├── siapp.lib
│ ├── spwmacro.h
│ └── spwdata.h
├── test
├── Gentium-R.ttf
├── group
│ ├── link
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── rect_v20.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ ├── translate_nd
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ └── translate_asy
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
├── request
│ ├── cubic
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ ├── image
│ │ ├── linked.png
│ │ ├── normal.png
│ │ ├── drawing.png
│ │ ├── linked.slvs
│ │ ├── normal.slvs
│ │ └── test.cpp
│ ├── circle
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── free_in_3d.png
│ │ ├── normal_dof.png
│ │ ├── free_in_3d.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ ├── free_in_3d_dof.png
│ │ ├── free_in_3d_v20.slvs
│ │ ├── free_in_3d_v22.slvs
│ │ └── test.cpp
│ ├── ttf_text
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ ├── workplane
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ ├── datum_point
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ ├── line_segment
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ ├── arc_of_circle
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ └── cubic_periodic
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
├── constraint
│ ├── angle
│ │ ├── skew.png
│ │ ├── skew.slvs
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── free_in_3d.png
│ │ ├── reference.png
│ │ ├── reference.slvs
│ │ ├── skew_v22.slvs
│ │ ├── free_in_3d.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ ├── free_in_3d_v20.slvs
│ │ ├── free_in_3d_v22.slvs
│ │ ├── reference_v20.slvs
│ │ ├── reference_v22.slvs
│ │ ├── reference_free_in_3d.png
│ │ ├── reference_free_in_3d.slvs
│ │ ├── reference_free_in_3d_v20.slvs
│ │ ├── reference_free_in_3d_v22.slvs
│ │ └── test.cpp
│ ├── comment
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ ├── vertical
│ │ ├── line.png
│ │ ├── line.slvs
│ │ ├── pt_pt.png
│ │ ├── pt_pt.slvs
│ │ ├── line_v20.slvs
│ │ ├── line_v22.slvs
│ │ ├── pt_pt_v20.slvs
│ │ ├── pt_pt_v22.slvs
│ │ └── test.cpp
│ ├── diameter
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── reference.png
│ │ ├── reference.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ ├── reference_v20.slvs
│ │ ├── reference_v22.slvs
│ │ └── test.cpp
│ ├── horizontal
│ │ ├── line.png
│ │ ├── line.slvs
│ │ ├── pt_pt.png
│ │ ├── pt_pt.slvs
│ │ ├── line_v20.slvs
│ │ ├── line_v22.slvs
│ │ ├── pt_pt_v20.slvs
│ │ ├── pt_pt_v22.slvs
│ │ └── test.cpp
│ ├── parallel
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── free_in_3d.png
│ │ ├── free_in_3d.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ ├── free_in_3d_v20.slvs
│ │ ├── free_in_3d_v22.slvs
│ │ └── test.cpp
│ ├── symmetric
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── free_in_3d.png
│ │ ├── free_in_3d.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ ├── free_in_3d_v20.slvs
│ │ ├── free_in_3d_v22.slvs
│ │ └── test.cpp
│ ├── equal_angle
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── other.png
│ │ ├── other.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ ├── other_v20.slvs
│ │ ├── other_v22.slvs
│ │ ├── normal_old_version.slvs
│ │ └── test.cpp
│ ├── equal_radius
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ ├── length_ratio
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ ├── reference.png
│ │ ├── reference.slvs
│ │ ├── reference_v20.slvs
│ │ ├── reference_v22.slvs
│ │ └── test.cpp
│ ├── pt_in_plane
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ ├── pt_on_circle
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ ├── negative_dia.slvs
│ │ └── test.cpp
│ ├── pt_on_face
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ ├── pt_on_line
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ ├── free_in_3d_v20.slvs
│ │ ├── free_in_3d_v22.slvs
│ │ ├── left_free_in_3d.png
│ │ ├── left_free_in_3d.slvs
│ │ ├── right_free_in_3d.png
│ │ ├── right_free_in_3d.slvs
│ │ └── test.cpp
│ ├── equal_line_arc_len
│ │ ├── pi.png
│ │ ├── pi.slvs
│ │ ├── tau.png
│ │ ├── tau.slvs
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ ├── perpendicular
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ ├── pt_pt_distance
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── reference.png
│ │ ├── free_in_3d.png
│ │ ├── free_in_3d.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ ├── reference.slvs
│ │ ├── reference_v20.slvs
│ │ ├── reference_v22.slvs
│ │ ├── free_in_3d_v20.slvs
│ │ ├── free_in_3d_v22.slvs
│ │ └── test.cpp
│ ├── symmetric_line
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ ├── symmetric_vert
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ ├── where_dragged
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── free_in_3d.png
│ │ ├── free_in_3d.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ ├── free_in_3d_v20.slvs
│ │ ├── free_in_3d_v22.slvs
│ │ └── test.cpp
│ ├── arc_line_tangent
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ ├── eq_len_pt_line_d
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ ├── length_difference
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v22.slvs
│ │ ├── reference.png
│ │ ├── reference.slvs
│ │ ├── reference_v22.slvs
│ │ └── test.cpp
│ ├── points_coincident
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── free_in_3d.png
│ │ ├── free_in_3d.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ ├── free_in_3d_v20.slvs
│ │ ├── free_in_3d_v22.slvs
│ │ └── test.cpp
│ ├── proj_pt_distance
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── reference.png
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ ├── reference.slvs
│ │ ├── reference_v20.slvs
│ │ ├── reference_v22.slvs
│ │ └── test.cpp
│ ├── pt_face_distance
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── reference.png
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ ├── reference.slvs
│ │ ├── reference_v20.slvs
│ │ ├── reference_v22.slvs
│ │ └── test.cpp
│ ├── pt_line_distance
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── extended.png
│ │ ├── extended.slvs
│ │ ├── reference.png
│ │ ├── free_in_3d.png
│ │ ├── free_in_3d.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ ├── reference.slvs
│ │ ├── reference_v20.slvs
│ │ ├── reference_v22.slvs
│ │ ├── free_in_3d_v20.slvs
│ │ ├── free_in_3d_v22.slvs
│ │ └── test.cpp
│ ├── pt_plane_distance
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ ├── reference.png
│ │ ├── reference.slvs
│ │ ├── reference_v20.slvs
│ │ ├── reference_v22.slvs
│ │ └── test.cpp
│ ├── same_orientation
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ ├── same_group.png
│ │ ├── same_group.slvs
│ │ └── test.cpp
│ ├── symmetric_horiz
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ ├── at_midpoint
│ │ ├── line_pt_normal.png
│ │ ├── line_plane_normal.png
│ │ ├── line_pt_normal.slvs
│ │ ├── line_plane_normal.slvs
│ │ ├── line_pt_free_in_3d.png
│ │ ├── line_pt_free_in_3d.slvs
│ │ ├── line_pt_normal_v20.slvs
│ │ ├── line_pt_normal_v22.slvs
│ │ ├── line_plane_free_in_3d.png
│ │ ├── line_plane_free_in_3d.slvs
│ │ ├── line_plane_normal_v20.slvs
│ │ ├── line_plane_normal_v22.slvs
│ │ ├── line_pt_free_in_3d_v20.slvs
│ │ ├── line_pt_free_in_3d_v22.slvs
│ │ ├── line_plane_free_in_3d_v20.slvs
│ │ ├── line_plane_free_in_3d_v22.slvs
│ │ └── test.cpp
│ ├── cubic_line_tangent
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── free_in_3d.png
│ │ ├── free_in_3d.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ ├── free_in_3d_v20.slvs
│ │ ├── free_in_3d_v22.slvs
│ │ └── test.cpp
│ ├── eq_pt_ln_distances
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ ├── equal_length_lines
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ ├── normal_v20.slvs
│ │ ├── normal_v22.slvs
│ │ └── test.cpp
│ └── curve_curve_tangent
│ │ ├── arc_arc.png
│ │ ├── arc_arc.slvs
│ │ ├── arc_cubic.png
│ │ ├── arc_cubic.slvs
│ │ ├── arc_arc_v20.slvs
│ │ ├── arc_arc_v22.slvs
│ │ ├── arc_cubic_v20.slvs
│ │ ├── arc_cubic_v22.slvs
│ │ └── test.cpp
├── analysis
│ └── contour_area
│ │ ├── normal.png
│ │ ├── normal.slvs
│ │ └── test.cpp
├── core
│ └── locale
│ │ └── test.cpp
├── commit.sh
└── debugtool.cpp
├── .gitattributes
├── cmake
├── Toolchain-emscripten.cmake
├── AddVendoredSubdirectory.cmake
├── c_flag_overrides.cmake
├── cxx_flag_overrides.cmake
├── Toolchain-mingw32.cmake
├── Toolchain-mingw64.cmake
├── Platform
│ └── Emscripten.cmake
├── DisableWarnings.cmake
├── FindSpaceWare.cmake
├── GetGitCommitHash.cmake
├── FindVendoredPackage.cmake
└── MacOSXBundleInfo.plist.in
├── exposed
└── CMakeLists.txt
├── .gitignore
├── bench
├── CMakeLists.txt
└── harness.cpp
├── wishlist.txt
├── src
├── config.h.in
├── platform
│ └── entrygui.cpp
└── ttf.h
├── .gitmodules
└── .clang-format
/cython/python_solvespace/py.typed:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/cython/test/__init__.py:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/res/banner.txt:
--------------------------------------------------------------------------------
1 | SolveSpace!
2 |
--------------------------------------------------------------------------------
/cython/python_solvespace/__init__.pxd:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/pkg/snap/.gitignore:
--------------------------------------------------------------------------------
1 | *.snap
2 | solvespace-snap-src
3 | squashfs-root
4 |
--------------------------------------------------------------------------------
/pkg/flatpak/.gitignore:
--------------------------------------------------------------------------------
1 | /.flatpak-builder
2 | /build-dir
3 | /repo
4 | *.flatpak
5 |
--------------------------------------------------------------------------------
/.github/scripts/build-snap.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh -xe
2 |
3 | ./pkg/snap/build.sh --use-lxd
4 |
--------------------------------------------------------------------------------
/.github/scripts/install-windows.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh -xe
2 |
3 | git submodule update --init
4 |
--------------------------------------------------------------------------------
/extlib/si/siapp.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/extlib/si/siapp.lib
--------------------------------------------------------------------------------
/res/win32/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/win32/icon.ico
--------------------------------------------------------------------------------
/test/Gentium-R.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/Gentium-R.ttf
--------------------------------------------------------------------------------
/res/fonts/unicode.lff.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/fonts/unicode.lff.gz
--------------------------------------------------------------------------------
/res/fonts/unifont.hex.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/fonts/unifont.hex.gz
--------------------------------------------------------------------------------
/test/group/link/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/group/link/normal.png
--------------------------------------------------------------------------------
/test/group/link/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/group/link/normal.slvs
--------------------------------------------------------------------------------
/test/group/link/rect_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/group/link/rect_v20.slvs
--------------------------------------------------------------------------------
/test/request/cubic/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/cubic/normal.png
--------------------------------------------------------------------------------
/test/request/image/linked.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/image/linked.png
--------------------------------------------------------------------------------
/test/request/image/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/image/normal.png
--------------------------------------------------------------------------------
/res/icons/text-window/edges.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/text-window/edges.png
--------------------------------------------------------------------------------
/res/icons/text-window/faces.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/text-window/faces.png
--------------------------------------------------------------------------------
/res/icons/text-window/mesh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/text-window/mesh.png
--------------------------------------------------------------------------------
/res/icons/text-window/point.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/text-window/point.png
--------------------------------------------------------------------------------
/res/threejs/hammer-2.0.8.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/threejs/hammer-2.0.8.js.gz
--------------------------------------------------------------------------------
/test/constraint/angle/skew.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/angle/skew.png
--------------------------------------------------------------------------------
/test/constraint/angle/skew.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/angle/skew.slvs
--------------------------------------------------------------------------------
/test/group/link/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/group/link/normal_v20.slvs
--------------------------------------------------------------------------------
/test/group/link/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/group/link/normal_v22.slvs
--------------------------------------------------------------------------------
/test/request/circle/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/circle/normal.png
--------------------------------------------------------------------------------
/test/request/circle/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/circle/normal.slvs
--------------------------------------------------------------------------------
/test/request/cubic/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/cubic/normal.slvs
--------------------------------------------------------------------------------
/test/request/image/drawing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/image/drawing.png
--------------------------------------------------------------------------------
/test/request/image/linked.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/image/linked.slvs
--------------------------------------------------------------------------------
/test/request/image/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/image/normal.slvs
--------------------------------------------------------------------------------
/cython/MANIFEST.in:
--------------------------------------------------------------------------------
1 | include pyproject.toml setup.cfg
2 | include README.md
3 | recursive-include . *.h *.c */Eigen/*
4 |
--------------------------------------------------------------------------------
/cython/pyproject.toml:
--------------------------------------------------------------------------------
1 | [build-system]
2 | requires = ["wheel", "setuptools"]
3 | build-backend = "setuptools.build_meta"
4 |
--------------------------------------------------------------------------------
/res/fonts/private/1-check-true.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/fonts/private/1-check-true.png
--------------------------------------------------------------------------------
/res/fonts/private/3-radio-true.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/fonts/private/3-radio-true.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/arc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/arc.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/in3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/in3d.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/line.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/line.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/ref.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/ref.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/text.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/text.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/trim.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/trim.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/vert.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/vert.png
--------------------------------------------------------------------------------
/res/icons/text-window/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/text-window/normal.png
--------------------------------------------------------------------------------
/res/icons/text-window/outlines.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/text-window/outlines.png
--------------------------------------------------------------------------------
/res/icons/text-window/shaded.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/text-window/shaded.png
--------------------------------------------------------------------------------
/res/threejs/three-r111.min.js.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/threejs/three-r111.min.js.gz
--------------------------------------------------------------------------------
/test/constraint/angle/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/angle/normal.png
--------------------------------------------------------------------------------
/test/constraint/angle/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/angle/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/comment/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/comment/normal.png
--------------------------------------------------------------------------------
/test/constraint/vertical/line.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/vertical/line.png
--------------------------------------------------------------------------------
/test/constraint/vertical/line.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/vertical/line.slvs
--------------------------------------------------------------------------------
/test/constraint/vertical/pt_pt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/vertical/pt_pt.png
--------------------------------------------------------------------------------
/test/group/translate_nd/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/group/translate_nd/normal.png
--------------------------------------------------------------------------------
/test/request/circle/free_in_3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/circle/free_in_3d.png
--------------------------------------------------------------------------------
/test/request/circle/normal_dof.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/circle/normal_dof.png
--------------------------------------------------------------------------------
/test/request/cubic/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/cubic/normal_v20.slvs
--------------------------------------------------------------------------------
/test/request/cubic/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/cubic/normal_v22.slvs
--------------------------------------------------------------------------------
/test/request/ttf_text/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/ttf_text/normal.png
--------------------------------------------------------------------------------
/test/request/ttf_text/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/ttf_text/normal.slvs
--------------------------------------------------------------------------------
/test/request/workplane/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/workplane/normal.png
--------------------------------------------------------------------------------
/test/request/workplane/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/workplane/normal.slvs
--------------------------------------------------------------------------------
/res/fonts/private/0-check-false.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/fonts/private/0-check-false.png
--------------------------------------------------------------------------------
/res/fonts/private/2-radio-false.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/fonts/private/2-radio-false.png
--------------------------------------------------------------------------------
/res/fonts/private/4-stipple-dot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/fonts/private/4-stipple-dot.png
--------------------------------------------------------------------------------
/res/fonts/private/6-stipple-dash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/fonts/private/6-stipple-dash.png
--------------------------------------------------------------------------------
/res/freedesktop/solvespace-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/freedesktop/solvespace-16x16.png
--------------------------------------------------------------------------------
/res/freedesktop/solvespace-24x24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/freedesktop/solvespace-24x24.png
--------------------------------------------------------------------------------
/res/freedesktop/solvespace-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/freedesktop/solvespace-32x32.png
--------------------------------------------------------------------------------
/res/freedesktop/solvespace-48x48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/freedesktop/solvespace-48x48.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/angle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/angle.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/bezier.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/bezier.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/circle.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/equal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/equal.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/helix.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/helix.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/horiz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/horiz.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/image.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/lathe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/lathe.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/length.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/length.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/point.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/point.png
--------------------------------------------------------------------------------
/res/icons/text-window/constraint.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/text-window/constraint.png
--------------------------------------------------------------------------------
/res/icons/text-window/workplane.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/text-window/workplane.png
--------------------------------------------------------------------------------
/test/constraint/angle/free_in_3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/angle/free_in_3d.png
--------------------------------------------------------------------------------
/test/constraint/angle/reference.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/angle/reference.png
--------------------------------------------------------------------------------
/test/constraint/angle/reference.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/angle/reference.slvs
--------------------------------------------------------------------------------
/test/constraint/angle/skew_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/angle/skew_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/comment/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/comment/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/diameter/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/diameter/normal.png
--------------------------------------------------------------------------------
/test/constraint/diameter/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/diameter/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/horizontal/line.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/horizontal/line.png
--------------------------------------------------------------------------------
/test/constraint/horizontal/line.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/horizontal/line.slvs
--------------------------------------------------------------------------------
/test/constraint/horizontal/pt_pt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/horizontal/pt_pt.png
--------------------------------------------------------------------------------
/test/constraint/parallel/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/parallel/normal.png
--------------------------------------------------------------------------------
/test/constraint/parallel/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/parallel/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/symmetric/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric/normal.png
--------------------------------------------------------------------------------
/test/constraint/vertical/pt_pt.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/vertical/pt_pt.slvs
--------------------------------------------------------------------------------
/test/group/translate_asy/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/group/translate_asy/normal.png
--------------------------------------------------------------------------------
/test/group/translate_asy/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/group/translate_asy/normal.slvs
--------------------------------------------------------------------------------
/test/group/translate_nd/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/group/translate_nd/normal.slvs
--------------------------------------------------------------------------------
/test/request/circle/free_in_3d.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/circle/free_in_3d.slvs
--------------------------------------------------------------------------------
/test/request/circle/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/circle/normal_v20.slvs
--------------------------------------------------------------------------------
/test/request/circle/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/circle/normal_v22.slvs
--------------------------------------------------------------------------------
/test/request/datum_point/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/datum_point/normal.png
--------------------------------------------------------------------------------
/test/request/datum_point/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/datum_point/normal.slvs
--------------------------------------------------------------------------------
/test/request/line_segment/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/line_segment/normal.png
--------------------------------------------------------------------------------
/res/fonts/private/7-stipple-zigzag.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/fonts/private/7-stipple-zigzag.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/assemble.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/assemble.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/extrude.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/extrude.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/parallel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/parallel.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/pointonx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/pointonx.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/rectangle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/rectangle.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/revolve.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/revolve.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/symmetric.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/symmetric.png
--------------------------------------------------------------------------------
/res/icons/text-window/construction.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/text-window/construction.png
--------------------------------------------------------------------------------
/test/analysis/contour_area/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/analysis/contour_area/normal.png
--------------------------------------------------------------------------------
/test/analysis/contour_area/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/analysis/contour_area/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/angle/free_in_3d.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/angle/free_in_3d.slvs
--------------------------------------------------------------------------------
/test/constraint/angle/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/angle/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/angle/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/angle/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/comment/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/comment/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/comment/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/comment/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/diameter/reference.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/diameter/reference.png
--------------------------------------------------------------------------------
/test/constraint/diameter/reference.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/diameter/reference.slvs
--------------------------------------------------------------------------------
/test/constraint/equal_angle/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_angle/normal.png
--------------------------------------------------------------------------------
/test/constraint/equal_angle/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_angle/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/equal_angle/other.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_angle/other.png
--------------------------------------------------------------------------------
/test/constraint/equal_angle/other.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_angle/other.slvs
--------------------------------------------------------------------------------
/test/constraint/equal_radius/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_radius/normal.png
--------------------------------------------------------------------------------
/test/constraint/horizontal/pt_pt.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/horizontal/pt_pt.slvs
--------------------------------------------------------------------------------
/test/constraint/length_ratio/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/length_ratio/normal.png
--------------------------------------------------------------------------------
/test/constraint/parallel/free_in_3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/parallel/free_in_3d.png
--------------------------------------------------------------------------------
/test/constraint/pt_in_plane/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_in_plane/normal.png
--------------------------------------------------------------------------------
/test/constraint/pt_in_plane/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_in_plane/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_on_circle/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_on_circle/normal.png
--------------------------------------------------------------------------------
/test/constraint/pt_on_face/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_on_face/normal.png
--------------------------------------------------------------------------------
/test/constraint/pt_on_face/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_on_face/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_on_line/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_on_line/normal.png
--------------------------------------------------------------------------------
/test/constraint/pt_on_line/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_on_line/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/symmetric/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/vertical/line_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/vertical/line_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/vertical/line_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/vertical/line_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/vertical/pt_pt_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/vertical/pt_pt_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/vertical/pt_pt_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/vertical/pt_pt_v22.slvs
--------------------------------------------------------------------------------
/test/group/translate_nd/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/group/translate_nd/normal_v22.slvs
--------------------------------------------------------------------------------
/test/request/arc_of_circle/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/arc_of_circle/normal.png
--------------------------------------------------------------------------------
/test/request/arc_of_circle/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/arc_of_circle/normal.slvs
--------------------------------------------------------------------------------
/test/request/circle/free_in_3d_dof.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/circle/free_in_3d_dof.png
--------------------------------------------------------------------------------
/test/request/circle/free_in_3d_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/circle/free_in_3d_v20.slvs
--------------------------------------------------------------------------------
/test/request/circle/free_in_3d_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/circle/free_in_3d_v22.slvs
--------------------------------------------------------------------------------
/test/request/cubic_periodic/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/cubic_periodic/normal.png
--------------------------------------------------------------------------------
/test/request/cubic_periodic/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/cubic_periodic/normal.slvs
--------------------------------------------------------------------------------
/test/request/line_segment/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/line_segment/normal.slvs
--------------------------------------------------------------------------------
/test/request/ttf_text/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/ttf_text/normal_v20.slvs
--------------------------------------------------------------------------------
/test/request/ttf_text/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/ttf_text/normal_v22.slvs
--------------------------------------------------------------------------------
/test/request/workplane/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/workplane/normal_v20.slvs
--------------------------------------------------------------------------------
/test/request/workplane/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/workplane/normal_v22.slvs
--------------------------------------------------------------------------------
/res/cocoa/AppIcon.iconset/icon_16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/cocoa/AppIcon.iconset/icon_16x16.png
--------------------------------------------------------------------------------
/res/cocoa/AppIcon.iconset/icon_32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/cocoa/AppIcon.iconset/icon_32x32.png
--------------------------------------------------------------------------------
/res/fonts/private/5-stipple-dash-long.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/fonts/private/5-stipple-dash-long.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/other-supp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/other-supp.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/step-rotate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/step-rotate.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/tangent-arc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/tangent-arc.png
--------------------------------------------------------------------------------
/test/constraint/angle/free_in_3d_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/angle/free_in_3d_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/angle/free_in_3d_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/angle/free_in_3d_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/angle/reference_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/angle/reference_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/angle/reference_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/angle/reference_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/diameter/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/diameter/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/diameter/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/diameter/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/equal_line_arc_len/pi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_line_arc_len/pi.png
--------------------------------------------------------------------------------
/test/constraint/equal_radius/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_radius/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/horizontal/line_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/horizontal/line_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/horizontal/line_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/horizontal/line_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/horizontal/pt_pt_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/horizontal/pt_pt_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/horizontal/pt_pt_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/horizontal/pt_pt_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/length_ratio/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/length_ratio/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/parallel/free_in_3d.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/parallel/free_in_3d.slvs
--------------------------------------------------------------------------------
/test/constraint/parallel/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/parallel/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/parallel/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/parallel/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/perpendicular/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/perpendicular/normal.png
--------------------------------------------------------------------------------
/test/constraint/perpendicular/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/perpendicular/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_on_circle/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_on_circle/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_pt_distance/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_pt_distance/normal.png
--------------------------------------------------------------------------------
/test/constraint/symmetric/free_in_3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric/free_in_3d.png
--------------------------------------------------------------------------------
/test/constraint/symmetric/free_in_3d.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric/free_in_3d.slvs
--------------------------------------------------------------------------------
/test/constraint/symmetric/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/symmetric/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/symmetric_line/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric_line/normal.png
--------------------------------------------------------------------------------
/test/constraint/symmetric_vert/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric_vert/normal.png
--------------------------------------------------------------------------------
/test/constraint/where_dragged/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/where_dragged/normal.png
--------------------------------------------------------------------------------
/test/constraint/where_dragged/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/where_dragged/normal.slvs
--------------------------------------------------------------------------------
/test/group/translate_asy/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/group/translate_asy/normal_v22.slvs
--------------------------------------------------------------------------------
/test/request/datum_point/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/datum_point/normal_v20.slvs
--------------------------------------------------------------------------------
/test/request/datum_point/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/datum_point/normal_v22.slvs
--------------------------------------------------------------------------------
/test/request/line_segment/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/line_segment/normal_v20.slvs
--------------------------------------------------------------------------------
/test/request/line_segment/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/line_segment/normal_v22.slvs
--------------------------------------------------------------------------------
/res/cocoa/AppIcon.iconset/icon_128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/cocoa/AppIcon.iconset/icon_128x128.png
--------------------------------------------------------------------------------
/res/cocoa/AppIcon.iconset/icon_16x16@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/cocoa/AppIcon.iconset/icon_16x16@2x.png
--------------------------------------------------------------------------------
/res/cocoa/AppIcon.iconset/icon_256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/cocoa/AppIcon.iconset/icon_256x256.png
--------------------------------------------------------------------------------
/res/cocoa/AppIcon.iconset/icon_32x32@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/cocoa/AppIcon.iconset/icon_32x32@2x.png
--------------------------------------------------------------------------------
/res/cocoa/AppIcon.iconset/icon_512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/cocoa/AppIcon.iconset/icon_512x512.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/construction.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/construction.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/ontoworkplane.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/ontoworkplane.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/perpendicular.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/perpendicular.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/sketch-in-3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/sketch-in-3d.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/step-translate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/step-translate.png
--------------------------------------------------------------------------------
/res/icons/text-window/occluded-invisible.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/text-window/occluded-invisible.png
--------------------------------------------------------------------------------
/res/icons/text-window/occluded-stippled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/text-window/occluded-stippled.png
--------------------------------------------------------------------------------
/res/icons/text-window/occluded-visible.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/text-window/occluded-visible.png
--------------------------------------------------------------------------------
/test/constraint/arc_line_tangent/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/arc_line_tangent/normal.png
--------------------------------------------------------------------------------
/test/constraint/arc_line_tangent/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/arc_line_tangent/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/diameter/reference_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/diameter/reference_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/diameter/reference_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/diameter/reference_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/eq_len_pt_line_d/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/eq_len_pt_line_d/normal.png
--------------------------------------------------------------------------------
/test/constraint/eq_len_pt_line_d/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/eq_len_pt_line_d/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/equal_angle/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_angle/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/equal_angle/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_angle/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/equal_angle/other_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_angle/other_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/equal_angle/other_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_angle/other_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/equal_line_arc_len/pi.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_line_arc_len/pi.slvs
--------------------------------------------------------------------------------
/test/constraint/equal_line_arc_len/tau.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_line_arc_len/tau.png
--------------------------------------------------------------------------------
/test/constraint/equal_line_arc_len/tau.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_line_arc_len/tau.slvs
--------------------------------------------------------------------------------
/test/constraint/equal_radius/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_radius/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/equal_radius/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_radius/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/length_difference/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/length_difference/normal.png
--------------------------------------------------------------------------------
/test/constraint/length_ratio/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/length_ratio/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/length_ratio/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/length_ratio/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/length_ratio/reference.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/length_ratio/reference.png
--------------------------------------------------------------------------------
/test/constraint/length_ratio/reference.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/length_ratio/reference.slvs
--------------------------------------------------------------------------------
/test/constraint/parallel/free_in_3d_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/parallel/free_in_3d_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/parallel/free_in_3d_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/parallel/free_in_3d_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/points_coincident/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/points_coincident/normal.png
--------------------------------------------------------------------------------
/test/constraint/proj_pt_distance/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/proj_pt_distance/normal.png
--------------------------------------------------------------------------------
/test/constraint/proj_pt_distance/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/proj_pt_distance/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_face_distance/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_face_distance/normal.png
--------------------------------------------------------------------------------
/test/constraint/pt_face_distance/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_face_distance/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_in_plane/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_in_plane/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_in_plane/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_in_plane/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_line_distance/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_line_distance/normal.png
--------------------------------------------------------------------------------
/test/constraint/pt_line_distance/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_line_distance/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_on_circle/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_on_circle/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_on_circle/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_on_circle/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_on_face/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_on_face/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_on_face/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_on_face/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_on_line/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_on_line/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_on_line/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_on_line/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_plane_distance/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_plane_distance/normal.png
--------------------------------------------------------------------------------
/test/constraint/pt_pt_distance/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_pt_distance/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_pt_distance/reference.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_pt_distance/reference.png
--------------------------------------------------------------------------------
/test/constraint/same_orientation/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/same_orientation/normal.png
--------------------------------------------------------------------------------
/test/constraint/same_orientation/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/same_orientation/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/symmetric_horiz/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric_horiz/normal.png
--------------------------------------------------------------------------------
/test/constraint/symmetric_horiz/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric_horiz/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/symmetric_line/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric_line/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/symmetric_vert/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric_vert/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/where_dragged/free_in_3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/where_dragged/free_in_3d.png
--------------------------------------------------------------------------------
/test/request/arc_of_circle/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/arc_of_circle/normal_v20.slvs
--------------------------------------------------------------------------------
/test/request/arc_of_circle/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/arc_of_circle/normal_v22.slvs
--------------------------------------------------------------------------------
/test/request/cubic_periodic/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/cubic_periodic/normal_v20.slvs
--------------------------------------------------------------------------------
/test/request/cubic_periodic/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/request/cubic_periodic/normal_v22.slvs
--------------------------------------------------------------------------------
/res/cocoa/AppIcon.iconset/icon_128x128@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/cocoa/AppIcon.iconset/icon_128x128@2x.png
--------------------------------------------------------------------------------
/res/cocoa/AppIcon.iconset/icon_256x256@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/cocoa/AppIcon.iconset/icon_256x256@2x.png
--------------------------------------------------------------------------------
/res/cocoa/AppIcon.iconset/icon_512x512@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/cocoa/AppIcon.iconset/icon_512x512@2x.png
--------------------------------------------------------------------------------
/res/fonts/BitstreamVeraSans-Roman-builtin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/fonts/BitstreamVeraSans-Roman-builtin.ttf
--------------------------------------------------------------------------------
/res/icons/graphics-window/same-orientation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/same-orientation.png
--------------------------------------------------------------------------------
/res/icons/graphics-window/sketch-in-plane.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/res/icons/graphics-window/sketch-in-plane.png
--------------------------------------------------------------------------------
/test/constraint/angle/reference_free_in_3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/angle/reference_free_in_3d.png
--------------------------------------------------------------------------------
/test/constraint/at_midpoint/line_pt_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/at_midpoint/line_pt_normal.png
--------------------------------------------------------------------------------
/test/constraint/cubic_line_tangent/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/cubic_line_tangent/normal.png
--------------------------------------------------------------------------------
/test/constraint/cubic_line_tangent/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/cubic_line_tangent/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/eq_pt_ln_distances/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/eq_pt_ln_distances/normal.png
--------------------------------------------------------------------------------
/test/constraint/eq_pt_ln_distances/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/eq_pt_ln_distances/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/equal_length_lines/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_length_lines/normal.png
--------------------------------------------------------------------------------
/test/constraint/equal_length_lines/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_length_lines/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/equal_line_arc_len/normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_line_arc_len/normal.png
--------------------------------------------------------------------------------
/test/constraint/equal_line_arc_len/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_line_arc_len/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/length_difference/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/length_difference/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/perpendicular/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/perpendicular/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/perpendicular/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/perpendicular/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/points_coincident/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/points_coincident/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/proj_pt_distance/reference.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/proj_pt_distance/reference.png
--------------------------------------------------------------------------------
/test/constraint/pt_face_distance/reference.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_face_distance/reference.png
--------------------------------------------------------------------------------
/test/constraint/pt_line_distance/extended.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_line_distance/extended.png
--------------------------------------------------------------------------------
/test/constraint/pt_line_distance/extended.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_line_distance/extended.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_line_distance/reference.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_line_distance/reference.png
--------------------------------------------------------------------------------
/test/constraint/pt_on_circle/negative_dia.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_on_circle/negative_dia.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_on_line/free_in_3d_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_on_line/free_in_3d_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_on_line/free_in_3d_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_on_line/free_in_3d_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_on_line/left_free_in_3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_on_line/left_free_in_3d.png
--------------------------------------------------------------------------------
/test/constraint/pt_plane_distance/normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_plane_distance/normal.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_pt_distance/free_in_3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_pt_distance/free_in_3d.png
--------------------------------------------------------------------------------
/test/constraint/pt_pt_distance/free_in_3d.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_pt_distance/free_in_3d.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_pt_distance/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_pt_distance/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_pt_distance/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_pt_distance/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_pt_distance/reference.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_pt_distance/reference.slvs
--------------------------------------------------------------------------------
/test/constraint/symmetric/free_in_3d_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric/free_in_3d_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/symmetric/free_in_3d_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric/free_in_3d_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/symmetric_line/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric_line/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/symmetric_line/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric_line/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/symmetric_vert/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric_vert/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/symmetric_vert/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric_vert/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/where_dragged/free_in_3d.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/where_dragged/free_in_3d.slvs
--------------------------------------------------------------------------------
/test/constraint/where_dragged/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/where_dragged/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/where_dragged/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/where_dragged/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/angle/reference_free_in_3d.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/angle/reference_free_in_3d.slvs
--------------------------------------------------------------------------------
/test/constraint/arc_line_tangent/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/arc_line_tangent/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/arc_line_tangent/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/arc_line_tangent/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/at_midpoint/line_plane_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/at_midpoint/line_plane_normal.png
--------------------------------------------------------------------------------
/test/constraint/at_midpoint/line_pt_normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/at_midpoint/line_pt_normal.slvs
--------------------------------------------------------------------------------
/test/constraint/cubic_line_tangent/free_in_3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/cubic_line_tangent/free_in_3d.png
--------------------------------------------------------------------------------
/test/constraint/curve_curve_tangent/arc_arc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/curve_curve_tangent/arc_arc.png
--------------------------------------------------------------------------------
/test/constraint/curve_curve_tangent/arc_arc.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/curve_curve_tangent/arc_arc.slvs
--------------------------------------------------------------------------------
/test/constraint/curve_curve_tangent/arc_cubic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/curve_curve_tangent/arc_cubic.png
--------------------------------------------------------------------------------
/test/constraint/eq_len_pt_line_d/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/eq_len_pt_line_d/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/eq_len_pt_line_d/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/eq_len_pt_line_d/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/length_difference/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/length_difference/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/length_difference/reference.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/length_difference/reference.png
--------------------------------------------------------------------------------
/test/constraint/length_difference/reference.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/length_difference/reference.slvs
--------------------------------------------------------------------------------
/test/constraint/length_ratio/reference_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/length_ratio/reference_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/length_ratio/reference_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/length_ratio/reference_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/points_coincident/free_in_3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/points_coincident/free_in_3d.png
--------------------------------------------------------------------------------
/test/constraint/points_coincident/free_in_3d.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/points_coincident/free_in_3d.slvs
--------------------------------------------------------------------------------
/test/constraint/points_coincident/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/points_coincident/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/points_coincident/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/points_coincident/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/proj_pt_distance/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/proj_pt_distance/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/proj_pt_distance/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/proj_pt_distance/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/proj_pt_distance/reference.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/proj_pt_distance/reference.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_face_distance/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_face_distance/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_face_distance/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_face_distance/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_face_distance/reference.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_face_distance/reference.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_line_distance/free_in_3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_line_distance/free_in_3d.png
--------------------------------------------------------------------------------
/test/constraint/pt_line_distance/free_in_3d.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_line_distance/free_in_3d.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_line_distance/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_line_distance/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_line_distance/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_line_distance/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_line_distance/reference.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_line_distance/reference.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_on_line/left_free_in_3d.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_on_line/left_free_in_3d.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_on_line/right_free_in_3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_on_line/right_free_in_3d.png
--------------------------------------------------------------------------------
/test/constraint/pt_on_line/right_free_in_3d.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_on_line/right_free_in_3d.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_plane_distance/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_plane_distance/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_plane_distance/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_plane_distance/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_plane_distance/reference.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_plane_distance/reference.png
--------------------------------------------------------------------------------
/test/constraint/pt_plane_distance/reference.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_plane_distance/reference.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_pt_distance/reference_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_pt_distance/reference_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_pt_distance/reference_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_pt_distance/reference_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/same_orientation/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/same_orientation/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/same_orientation/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/same_orientation/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/same_orientation/same_group.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/same_orientation/same_group.png
--------------------------------------------------------------------------------
/test/constraint/same_orientation/same_group.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/same_orientation/same_group.slvs
--------------------------------------------------------------------------------
/test/constraint/symmetric_horiz/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric_horiz/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/symmetric_horiz/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/symmetric_horiz/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/where_dragged/free_in_3d_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/where_dragged/free_in_3d_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/where_dragged/free_in_3d_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/where_dragged/free_in_3d_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/angle/reference_free_in_3d_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/angle/reference_free_in_3d_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/angle/reference_free_in_3d_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/angle/reference_free_in_3d_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/at_midpoint/line_plane_normal.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/at_midpoint/line_plane_normal.slvs
--------------------------------------------------------------------------------
/test/constraint/at_midpoint/line_pt_free_in_3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/at_midpoint/line_pt_free_in_3d.png
--------------------------------------------------------------------------------
/test/constraint/at_midpoint/line_pt_free_in_3d.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/at_midpoint/line_pt_free_in_3d.slvs
--------------------------------------------------------------------------------
/test/constraint/at_midpoint/line_pt_normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/at_midpoint/line_pt_normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/at_midpoint/line_pt_normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/at_midpoint/line_pt_normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/cubic_line_tangent/free_in_3d.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/cubic_line_tangent/free_in_3d.slvs
--------------------------------------------------------------------------------
/test/constraint/cubic_line_tangent/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/cubic_line_tangent/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/cubic_line_tangent/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/cubic_line_tangent/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/curve_curve_tangent/arc_cubic.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/curve_curve_tangent/arc_cubic.slvs
--------------------------------------------------------------------------------
/test/constraint/eq_pt_ln_distances/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/eq_pt_ln_distances/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/eq_pt_ln_distances/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/eq_pt_ln_distances/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/equal_angle/normal_old_version.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_angle/normal_old_version.slvs
--------------------------------------------------------------------------------
/test/constraint/equal_length_lines/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_length_lines/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/equal_length_lines/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_length_lines/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/equal_line_arc_len/normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_line_arc_len/normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/equal_line_arc_len/normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/equal_line_arc_len/normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/proj_pt_distance/reference_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/proj_pt_distance/reference_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/proj_pt_distance/reference_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/proj_pt_distance/reference_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_face_distance/reference_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_face_distance/reference_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_face_distance/reference_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_face_distance/reference_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_line_distance/reference_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_line_distance/reference_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_line_distance/reference_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_line_distance/reference_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_pt_distance/free_in_3d_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_pt_distance/free_in_3d_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_pt_distance/free_in_3d_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_pt_distance/free_in_3d_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/at_midpoint/line_plane_free_in_3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/at_midpoint/line_plane_free_in_3d.png
--------------------------------------------------------------------------------
/test/constraint/at_midpoint/line_plane_free_in_3d.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/at_midpoint/line_plane_free_in_3d.slvs
--------------------------------------------------------------------------------
/test/constraint/at_midpoint/line_plane_normal_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/at_midpoint/line_plane_normal_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/at_midpoint/line_plane_normal_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/at_midpoint/line_plane_normal_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/cubic_line_tangent/free_in_3d_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/cubic_line_tangent/free_in_3d_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/cubic_line_tangent/free_in_3d_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/cubic_line_tangent/free_in_3d_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/curve_curve_tangent/arc_arc_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/curve_curve_tangent/arc_arc_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/curve_curve_tangent/arc_arc_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/curve_curve_tangent/arc_arc_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/curve_curve_tangent/arc_cubic_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/curve_curve_tangent/arc_cubic_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/curve_curve_tangent/arc_cubic_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/curve_curve_tangent/arc_cubic_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/length_difference/reference_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/length_difference/reference_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/points_coincident/free_in_3d_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/points_coincident/free_in_3d_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/points_coincident/free_in_3d_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/points_coincident/free_in_3d_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_line_distance/free_in_3d_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_line_distance/free_in_3d_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_line_distance/free_in_3d_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_line_distance/free_in_3d_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_plane_distance/reference_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_plane_distance/reference_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/pt_plane_distance/reference_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/pt_plane_distance/reference_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/at_midpoint/line_pt_free_in_3d_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/at_midpoint/line_pt_free_in_3d_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/at_midpoint/line_pt_free_in_3d_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/at_midpoint/line_pt_free_in_3d_v22.slvs
--------------------------------------------------------------------------------
/test/constraint/at_midpoint/line_plane_free_in_3d_v20.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/at_midpoint/line_plane_free_in_3d_v20.slvs
--------------------------------------------------------------------------------
/test/constraint/at_midpoint/line_plane_free_in_3d_v22.slvs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KmolYuan/solvespace/HEAD/test/constraint/at_midpoint/line_plane_free_in_3d_v22.slvs
--------------------------------------------------------------------------------
/cython/test/__main__.py:
--------------------------------------------------------------------------------
1 | from unittest import defaultTestLoader, TextTestRunner
2 |
3 | if __name__ == '__main__':
4 | TextTestRunner().run(defaultTestLoader.discover('test'))
5 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
2 | *.cpp text
3 | *.h text
4 | *.txt text
5 | *.gz binary
6 | *.ico binary
7 | *.jpg binary
8 | *.lib binary
9 | *.png binary
10 | *.slvs binary
11 |
--------------------------------------------------------------------------------
/cmake/Toolchain-emscripten.cmake:
--------------------------------------------------------------------------------
1 | set(CMAKE_SYSTEM_NAME Emscripten)
2 |
3 | set(TRIPLE asmjs-unknown-emscripten)
4 |
5 | set(CMAKE_C_COMPILER emcc)
6 | set(CMAKE_CXX_COMPILER em++)
7 |
8 | set(M_LIBRARY m)
9 |
--------------------------------------------------------------------------------
/test/analysis/contour_area/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | SS.showContourAreas = true;
5 | CHECK_LOAD("normal.slvs");
6 | CHECK_RENDER("normal.png");
7 | }
8 |
--------------------------------------------------------------------------------
/test/core/locale/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(parseable) {
4 | for(auto locale : Locales()) {
5 | SetLocale(locale.Culture());
6 | }
7 | CHECK_TRUE(true); // didn't crash
8 | }
9 |
--------------------------------------------------------------------------------
/.github/scripts/install-snap.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh -xe
2 |
3 | sudo /snap/bin/lxd waitready
4 | sudo /snap/bin/lxd init --auto
5 | sudo chgrp travis /var/snap/lxd/common/lxd/unix.socket
6 | mkdir -p "$TRAVIS_BUILD_DIR/snaps-cache"
7 |
--------------------------------------------------------------------------------
/pkg/flatpak/build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh -ex
2 | cd $(dirname $0)
3 | flatpak-builder "$@" --force-clean --repo repo build-dir com.solvespace.SolveSpace.json
4 | flatpak build-bundle repo solvespace.flatpak com.solvespace.SolveSpace
5 |
--------------------------------------------------------------------------------
/.github/scripts/build-ubuntu.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh -xe
2 |
3 | mkdir build
4 | cd build
5 | cmake \
6 | -DCMAKE_BUILD_TYPE="Debug" \
7 | -DENABLE_OPENMP="ON" \
8 | -DENABLE_SANITIZERS="ON" \
9 | ..
10 | make -j$(nproc) VERBOSE=1
11 | make test_solvespace
12 |
--------------------------------------------------------------------------------
/test/commit.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh -ex
2 |
3 | make -C build solvespace-testsuite
4 | ./build/test/solvespace-testsuite $* || true
5 | for e in slvs png; do
6 | for i in `find . -name *.out.$e`; do
7 | mv $i `dirname $i`/`basename $i .out.$e`.$e;
8 | done;
9 | done
10 |
--------------------------------------------------------------------------------
/cmake/AddVendoredSubdirectory.cmake:
--------------------------------------------------------------------------------
1 | # Equivalent to add_subdirectory(... EXCLUDE_FROM_ALL), but also disables
2 | # all warnings.
3 |
4 | include(DisableWarnings)
5 |
6 | function(add_vendored_subdirectory PATH)
7 | disable_warnings()
8 |
9 | add_subdirectory(${PATH} EXCLUDE_FROM_ALL)
10 | endfunction()
11 |
--------------------------------------------------------------------------------
/exposed/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | include_directories(
2 | ${CMAKE_SOURCE_DIR}/include)
3 |
4 | add_executable(CDemo
5 | CDemo.c)
6 |
7 | target_link_libraries(CDemo
8 | slvs)
9 |
10 | if(EMSCRIPTEN)
11 | set_target_properties(CDemo PROPERTIES
12 | LINK_FLAGS "-s TOTAL_MEMORY=134217728")
13 | endif()
14 |
--------------------------------------------------------------------------------
/test/group/translate_nd/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v22) {
10 | CHECK_LOAD("normal_v22.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
--------------------------------------------------------------------------------
/res/freedesktop/solvespace.desktop.in:
--------------------------------------------------------------------------------
1 | [Desktop Entry]
2 | Version=1.0
3 | Name=SolveSpace
4 | Comment=A parametric 2d/3d CAD
5 | Exec=${CMAKE_INSTALL_FULL_BINDIR}/solvespace %f
6 | MimeType=application/x-solvespace
7 | Icon=solvespace
8 | Type=Application
9 | Categories=Graphics;3DGraphics;Engineering;
10 | Keywords=parametric;cad;2d;3d;
11 |
--------------------------------------------------------------------------------
/pkg/snap/build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh -xe
2 |
3 | dir="$(dirname "$(readlink -f "$0")")"
4 | solvespace_snap_src="$dir/solvespace-snap-src"
5 | trap "rm -rf $solvespace_snap_src" EXIT
6 |
7 | cd "$dir"
8 |
9 | git_root="$(git rev-parse --show-toplevel)"
10 | rsync --filter=":- .gitignore" -r "$git_root"/ "$solvespace_snap_src"
11 |
12 | snapcraft "$@"
13 |
--------------------------------------------------------------------------------
/test/request/image/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(linked_roundtrip) {
10 | CHECK_LOAD("linked.slvs");
11 | CHECK_RENDER("linked.png");
12 | CHECK_SAVE("linked.slvs");
13 | }
14 |
--------------------------------------------------------------------------------
/res/freedesktop/solvespace-flatpak.desktop.in:
--------------------------------------------------------------------------------
1 | [Desktop Entry]
2 | Version=1.0
3 | Name=SolveSpace
4 | Comment=A parametric 2d/3d CAD
5 | Exec=${CMAKE_INSTALL_FULL_BINDIR}/solvespace %f
6 | MimeType=application/x-solvespace
7 | Icon=com.solvespace.SolveSpace
8 | Type=Application
9 | Categories=Graphics;3DGraphics;Engineering;
10 | Keywords=parametric;cad;2d;3d;
11 |
--------------------------------------------------------------------------------
/res/freedesktop/solvespace-snap.desktop:
--------------------------------------------------------------------------------
1 | [Desktop Entry]
2 | Version=1.0
3 | Name=SolveSpace
4 | Comment=A parametric 2d/3d CAD
5 | Exec=solvespace %f
6 | MimeType=application/x-solvespace
7 | Icon=${SNAP}/meta/icons/hicolor/scalable/apps/snap.solvespace.svg
8 | Type=Application
9 | Categories=Graphics;3DGraphics;Engineering;
10 | Keywords=parametric;cad;2d;3d;
11 |
--------------------------------------------------------------------------------
/res/freedesktop/solvespace-mime.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | SolveSpace model
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.github/scripts/install-ubuntu.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh -xe
2 |
3 | sudo apt-get update -qq
4 |
5 | sudo apt-get install -q -y \
6 | zlib1g-dev libpng-dev libcairo2-dev libfreetype6-dev libjson-c-dev \
7 | libfontconfig1-dev libgtkmm-3.0-dev libpangomm-1.4-dev libgl-dev \
8 | libgl-dev libglu-dev libspnav-dev
9 |
10 | git submodule update --init extlib/libdxfrw extlib/mimalloc extlib/eigen
11 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /CMakeCache.txt
2 | /build*/
3 | /test/**/*.diff.*
4 | /test/**/*.curr.*
5 | *.trace
6 | /debian/tmp/
7 | /debian/*.log
8 | /debian/*.substvars
9 | /debian/*.debhelper
10 | /debian/files
11 | /debian/solvespace/
12 | /debian/libslvs1/
13 | /debian/libslvs1-dev/
14 | /obj-*/
15 | /*.slvs
16 | .vscode/
17 | .idea/
18 |
19 | # Visual Studio
20 | out/
21 | .vs/
22 | CMakeSettings.json
23 |
--------------------------------------------------------------------------------
/res/freedesktop/solvespace-flatpak-mime.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | SolveSpace model
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/res/locales.txt:
--------------------------------------------------------------------------------
1 | # This file lists the ISO locale codes (ISO 639-1/ISO 3166-1), Windows LCIDs,
2 | # and human-readable names for every culture supported by SolveSpace.
3 | cs-CZ,1029,Česky
4 | de-DE,0407,Deutsch
5 | en-US,0409,English (US)
6 | fr-FR,040C,Français
7 | es-AR,2C0A,español (AR)
8 | ru-RU,0419,Русский
9 | tr-TR,041F,Türkçe
10 | uk-UA,0422,Українська
11 | zh-CN,0804,简体中文
12 | ja-JP,0411,日本語
13 |
--------------------------------------------------------------------------------
/cmake/c_flag_overrides.cmake:
--------------------------------------------------------------------------------
1 | if(MSVC)
2 | set(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1")
3 | set(CMAKE_C_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG")
4 | set(CMAKE_C_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG")
5 | set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG")
6 | endif()
7 |
8 | if(EMSCRIPTEN)
9 | set(CMAKE_C_FLAGS_DEBUG_INIT "-g4")
10 | endif()
11 |
--------------------------------------------------------------------------------
/cmake/cxx_flag_overrides.cmake:
--------------------------------------------------------------------------------
1 | if(MSVC)
2 | set(CMAKE_CXX_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1")
3 | set(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG")
4 | set(CMAKE_CXX_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG")
5 | set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG")
6 | endif()
7 |
8 | if(EMSCRIPTEN)
9 | set(CMAKE_CXX_FLAGS_DEBUG_INIT "-g4")
10 | endif()
11 |
--------------------------------------------------------------------------------
/res/shaders/mesh_fill.vert:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Mesh rendering shader
3 | //
4 | // Copyright 2016 Aleksey Egorov
5 | //-----------------------------------------------------------------------------
6 | attribute vec3 pos;
7 |
8 | uniform mat4 modelview;
9 | uniform mat4 projection;
10 |
11 | void main() {
12 | gl_Position = projection * modelview * vec4(pos, 1.0);
13 | }
14 |
--------------------------------------------------------------------------------
/cython/platform/pyconfig.diff:
--------------------------------------------------------------------------------
1 | --- pyconfig.h 2016-01-27 10:54:56.000000000 +0300
2 | +++ pyconfig.h 2016-03-28 11:46:48.000000000 +0300
3 | @@ -100,6 +100,12 @@
4 |
5 | /* Compiler specific defines */
6 |
7 | +#ifdef __MINGW32__
8 | +#ifdef _WIN64
9 | +#define MS_WIN64
10 | +#endif
11 | +#endif
12 | +
13 | /* ------------------------------------------------------------------------*/
14 | /* Microsoft C defines _MSC_VER */
15 | #ifdef _MSC_VER
16 |
--------------------------------------------------------------------------------
/res/shaders/imesh.vert:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Indexed Mesh rendering shader
3 | //
4 | // Copyright 2016 Aleksey Egorov
5 | //-----------------------------------------------------------------------------
6 | attribute vec3 pos;
7 |
8 | uniform mat4 modelview;
9 | uniform mat4 projection;
10 |
11 | void main() {
12 | gl_Position = projection * modelview * vec4(pos, 1.0);
13 | }
14 |
--------------------------------------------------------------------------------
/res/shaders/imesh.frag:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Indexed Mesh rendering shader
3 | //
4 | // Copyright 2016 Aleksey Egorov
5 | //-----------------------------------------------------------------------------
6 | uniform vec4 color;
7 | uniform sampler2D texture_;
8 |
9 | void main() {
10 | if(texture2D(texture_, gl_FragCoord.xy / 32.0).a < 0.5) discard;
11 | gl_FragColor = color;
12 | }
13 |
--------------------------------------------------------------------------------
/test/group/link/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/test/request/cubic/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/res/shaders/mesh_fill.frag:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Mesh rendering shader
3 | //
4 | // Copyright 2016 Aleksey Egorov
5 | //-----------------------------------------------------------------------------
6 | uniform vec4 color;
7 | uniform sampler2D texture_;
8 |
9 | void main() {
10 | if(texture2D(texture_, gl_FragCoord.xy / 32.0).TEX_ALPHA < 0.5) discard;
11 | gl_FragColor = color;
12 | }
13 |
--------------------------------------------------------------------------------
/test/constraint/comment/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/test/request/ttf_text/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/test/request/workplane/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/test/constraint/equal_radius/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/test/constraint/pt_in_plane/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/test/constraint/pt_on_face/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/test/request/arc_of_circle/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/test/request/cubic_periodic/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/test/request/datum_point/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/test/request/line_segment/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/res/shaders/imesh_point.frag:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Point rendering shader
3 | //
4 | // Copyright 2016 Aleksey Egorov
5 | //-----------------------------------------------------------------------------
6 | const float feather = 0.5;
7 |
8 | uniform vec4 color;
9 | uniform float pixel;
10 | uniform float width;
11 |
12 | void main() {
13 | // Rectangular points
14 | gl_FragColor = color;
15 | }
16 |
--------------------------------------------------------------------------------
/test/constraint/arc_line_tangent/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/test/constraint/eq_len_pt_line_d/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/test/constraint/perpendicular/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/test/constraint/symmetric_horiz/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/test/constraint/symmetric_line/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/test/constraint/symmetric_vert/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/test/constraint/eq_pt_ln_distances/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/test/constraint/equal_length_lines/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
--------------------------------------------------------------------------------
/res/shaders/imesh_texa.frag:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Indexed Mesh rendering shader
3 | //
4 | // Copyright 2016 Aleksey Egorov
5 | //-----------------------------------------------------------------------------
6 | uniform vec4 color;
7 | uniform sampler2D texture_;
8 |
9 | varying vec2 fragTex;
10 |
11 | void main() {
12 | gl_FragColor = vec4(color.rgb, color.a * texture2D(texture_, fragTex).TEX_ALPHA);
13 | }
14 |
--------------------------------------------------------------------------------
/cmake/Toolchain-mingw32.cmake:
--------------------------------------------------------------------------------
1 | set(CMAKE_SYSTEM_NAME Windows)
2 |
3 | set(TRIPLE i686-w64-mingw32)
4 |
5 | set(CMAKE_C_COMPILER ${TRIPLE}-gcc)
6 | set(CMAKE_CXX_COMPILER ${TRIPLE}-g++)
7 | set(CMAKE_RC_COMPILER ${TRIPLE}-windres)
8 |
9 | set(CMAKE_FIND_ROOT_PATH /usr/${TRIPLE})
10 |
11 | set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
12 | set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
13 | set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
14 |
15 | set(ENV{PKG_CONFIG_LIBDIR} /usr/${TRIPLE}/lib/pkgconfig)
16 |
--------------------------------------------------------------------------------
/cmake/Toolchain-mingw64.cmake:
--------------------------------------------------------------------------------
1 | set(CMAKE_SYSTEM_NAME Windows)
2 |
3 | set(TRIPLE x86_64-w64-mingw32)
4 |
5 | set(CMAKE_C_COMPILER ${TRIPLE}-gcc)
6 | set(CMAKE_CXX_COMPILER ${TRIPLE}-g++)
7 | set(CMAKE_RC_COMPILER ${TRIPLE}-windres)
8 |
9 | set(CMAKE_FIND_ROOT_PATH /usr/${TRIPLE})
10 |
11 | set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
12 | set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
13 | set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
14 |
15 | set(ENV{PKG_CONFIG_LIBDIR} /usr/${TRIPLE}/lib/pkgconfig)
16 |
--------------------------------------------------------------------------------
/bench/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | # benchmark runner
2 |
3 | foreach(pkg_config_lib CAIRO)
4 | include_directories(${${pkg_config_lib}_INCLUDE_DIRS})
5 | link_directories(${${pkg_config_lib}_LIBRARY_DIRS})
6 | endforeach()
7 |
8 | add_executable(solvespace-benchmark
9 | harness.cpp
10 | $)
11 |
12 | target_link_libraries(solvespace-benchmark
13 | solvespace-core
14 | solvespace-headless)
15 |
16 | add_dependencies(solvespace-benchmark
17 | resources)
18 |
--------------------------------------------------------------------------------
/res/shaders/imesh_tex.frag:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Indexed Mesh rendering shader
3 | //
4 | // Copyright 2016 Aleksey Egorov
5 | //-----------------------------------------------------------------------------
6 | uniform vec4 color;
7 | uniform sampler2D texture_;
8 |
9 | varying vec2 fragTex;
10 |
11 | void main() {
12 | vec4 texColor = texture2D(texture_, fragTex);
13 | if(texColor.a == 0.0) discard;
14 | gl_FragColor = texColor * color;
15 | }
16 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | ### System information
2 |
3 | - **SolveSpace version:**
4 | - **Operating system:**
5 |
6 | ### Expected behavior
7 |
8 |
9 |
10 | ### Actual behavior
11 |
12 |
13 |
14 | ### Additional information
15 |
16 |
18 |
--------------------------------------------------------------------------------
/res/freedesktop/solvespace-scalable.svg:
--------------------------------------------------------------------------------
1 |
2 |
13 |
--------------------------------------------------------------------------------
/res/shaders/imesh_tex.vert:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Indexed Mesh rendering shader
3 | //
4 | // Copyright 2016 Aleksey Egorov
5 | //-----------------------------------------------------------------------------
6 | attribute vec3 pos;
7 | attribute vec2 tex;
8 |
9 | uniform mat4 modelview;
10 | uniform mat4 projection;
11 |
12 | varying vec2 fragTex;
13 |
14 | void main() {
15 | fragTex = tex;
16 | gl_Position = projection * modelview * vec4(pos, 1.0);
17 | }
18 |
--------------------------------------------------------------------------------
/wishlist.txt:
--------------------------------------------------------------------------------
1 | O(n*log(n)) assembly of edges into contours
2 | fix anti-aliased edge bug with filled contours
3 | crude DXF, HPGL import
4 | a request to import a plane thing
5 | make export assemble only contours in same group
6 | rotation of model view works about z of first point under cursor
7 | a way to kill a slow operation
8 |
9 | -----
10 | rounding, as a special group
11 | associative entities from solid model, as a special group
12 | better level of detail
13 | some kind of import
14 | faster triangulation
15 | loop detection
16 | IGES export
17 | incremental regen of entities
18 |
19 |
20 |
--------------------------------------------------------------------------------
/res/shaders/mesh.vert:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Mesh rendering shader
3 | //
4 | // Copyright 2016 Aleksey Egorov
5 | //-----------------------------------------------------------------------------
6 | attribute vec3 pos;
7 | attribute vec3 nor;
8 | attribute vec4 col;
9 |
10 | uniform mat4 modelview;
11 | uniform mat4 projection;
12 |
13 | varying vec3 fragNormal;
14 | varying vec4 fragColor;
15 |
16 | void main() {
17 | fragNormal = vec3(modelview * vec4(nor, 0.0));
18 | fragColor = col;
19 |
20 | gl_Position = projection * modelview * vec4(pos, 1.0);
21 | }
22 |
--------------------------------------------------------------------------------
/test/constraint/same_orientation/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
19 | TEST_CASE(same_group_roundtrip) {
20 | CHECK_LOAD("same_group.slvs");
21 | CHECK_RENDER("same_group.png");
22 | CHECK_SAVE("same_group.slvs");
23 | }
24 |
--------------------------------------------------------------------------------
/test/constraint/length_difference/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v22) {
10 | CHECK_LOAD("normal_v22.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(reference_roundtrip) {
15 | CHECK_LOAD("reference.slvs");
16 | CHECK_RENDER("reference.png");
17 | CHECK_SAVE("reference.slvs");
18 | }
19 |
20 | TEST_CASE(reference_migrate_from_v22) {
21 | CHECK_LOAD("reference_v22.slvs");
22 | CHECK_SAVE("reference.slvs");
23 | }
24 |
--------------------------------------------------------------------------------
/test/constraint/pt_on_circle/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
19 | TEST_CASE(negative_dia) {
20 | CHECK_LOAD("negative_dia.slvs");
21 | Entity *e = SK.GetEntity(hRequest { 4 }.entity(0));
22 | CHECK_TRUE(e->CircleGetRadiusNum() > 0);
23 | }
24 |
--------------------------------------------------------------------------------
/cmake/Platform/Emscripten.cmake:
--------------------------------------------------------------------------------
1 | set(EMSCRIPTEN 1)
2 |
3 | set(CMAKE_C_OUTPUT_EXTENSION ".o")
4 | set(CMAKE_CXX_OUTPUT_EXTENSION ".o")
5 | set(CMAKE_EXECUTABLE_SUFFIX ".html")
6 |
7 | set(CMAKE_SIZEOF_VOID_P 4)
8 |
9 | set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE)
10 |
11 | # FIXME(emscripten): Suppress non-c-typedef-for-linkage warnings in solvespace.h
12 | add_compile_options(-Wno-non-c-typedef-for-linkage)
13 |
14 |
15 | # Enable optimization. Workaround for "too many locals" error when runs on browser.
16 | if(CMAKE_BUILD_TYPE STREQUAL Release)
17 | add_compile_options(-O2)
18 | else()
19 | add_compile_options(-O1)
20 | endif()
21 |
--------------------------------------------------------------------------------
/test/constraint/equal_line_arc_len/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
19 | TEST_CASE(pi) {
20 | CHECK_LOAD("pi.slvs");
21 | CHECK_RENDER("pi.png");
22 | }
23 |
24 | TEST_CASE(tau) {
25 | CHECK_LOAD("tau.slvs");
26 | CHECK_RENDER("tau.png");
27 | }
28 |
--------------------------------------------------------------------------------
/src/config.h.in:
--------------------------------------------------------------------------------
1 | #ifndef SOLVESPACE_CONFIG_H
2 | #define SOLVESPACE_CONFIG_H
3 |
4 | #define PACKAGE_VERSION "@PROJECT_VERSION@~@solvespace_GIT_HASH@"
5 | #define GIT_HASH_URL "https://github.com/solvespace/solvespace/commit/@solvespace_GIT_HASH@"
6 |
7 | /* Non-OS X *nix only */
8 | #define UNIX_DATADIR "@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_DATAROOTDIR@/solvespace"
9 |
10 | /* Do we have the si library on win32, or libspnav on *nix? */
11 | #cmakedefine HAVE_SPACEWARE
12 |
13 | /* What OpenGL version do we use? */
14 | #define HAVE_OPENGL @OPENGL@
15 |
16 | /* If we use GTK, can we use the native file chooser? */
17 | #cmakedefine HAVE_GTK_FILECHOOSERNATIVE
18 |
19 | #endif
20 |
--------------------------------------------------------------------------------
/cmake/DisableWarnings.cmake:
--------------------------------------------------------------------------------
1 | # Disables all warnings on MSVC and GNU-compatible compilers.
2 |
3 | function(disable_warnings)
4 | if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
5 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w" PARENT_SCOPE)
6 | elseif(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
7 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W0 /MP" PARENT_SCOPE)
8 | endif()
9 |
10 | if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
11 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w" PARENT_SCOPE)
12 | elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
13 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W0 /MP" PARENT_SCOPE)
14 | endif()
15 | endfunction()
16 |
--------------------------------------------------------------------------------
/.github/scripts/install-macos.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh -xe
2 |
3 | if [ "$1" = "ci" ]; then
4 | armloc=$(brew fetch --bottle-tag=arm64_big_sur libomp | grep -i downloaded | grep tar.gz | cut -f2 -d:)
5 | x64loc=$(brew fetch --bottle-tag=big_sur libomp | grep -i downloaded | grep tar.gz | cut -f2 -d:)
6 | cp $armloc /tmp/libomp-arm64.tar.gz
7 | mkdir /tmp/libomp-arm64 || true
8 | tar -xzvf /tmp/libomp-arm64.tar.gz -C /tmp/libomp-arm64
9 | cp $x64loc /tmp/libomp-x86_64.tar.gz
10 | mkdir /tmp/libomp-x86_64 || true
11 | tar -xzvf /tmp/libomp-x86_64.tar.gz -C /tmp/libomp-x86_64
12 | else
13 | brew install libomp
14 | fi
15 |
16 | git submodule update --init extlib/cairo extlib/freetype extlib/libdxfrw extlib/libpng extlib/mimalloc extlib/pixman extlib/zlib extlib/eigen
17 |
--------------------------------------------------------------------------------
/cython/python_solvespace/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | """'python_solvespace' module is a wrapper of
4 | Python binding Solvespace solver libraries.
5 | """
6 |
7 | __author__ = "Yuan Chang"
8 | __copyright__ = "Copyright (C) 2016-2019"
9 | __license__ = "GPLv3+"
10 | __email__ = "pyslvs@gmail.com"
11 | __version__ = "3.0.8"
12 |
13 | from .slvs import (
14 | quaternion_u,
15 | quaternion_v,
16 | quaternion_n,
17 | make_quaternion,
18 | Constraint,
19 | ResultFlag,
20 | Params,
21 | Entity,
22 | SolverSystem,
23 | )
24 |
25 | __all__ = [
26 | 'quaternion_u',
27 | 'quaternion_v',
28 | 'quaternion_n',
29 | 'make_quaternion',
30 | 'Constraint',
31 | 'ResultFlag',
32 | 'Params',
33 | 'Entity',
34 | 'SolverSystem',
35 | ]
36 |
--------------------------------------------------------------------------------
/test/constraint/vertical/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(line_roundtrip) {
4 | CHECK_LOAD("line.slvs");
5 | CHECK_RENDER("line.png");
6 | CHECK_SAVE("line.slvs");
7 | }
8 |
9 | TEST_CASE(line_migrate_from_v20) {
10 | CHECK_LOAD("line_v20.slvs");
11 | CHECK_SAVE("line.slvs");
12 | }
13 |
14 | TEST_CASE(line_migrate_from_v22) {
15 | CHECK_LOAD("line_v22.slvs");
16 | CHECK_SAVE("line.slvs");
17 | }
18 |
19 | TEST_CASE(pt_pt_roundtrip) {
20 | CHECK_LOAD("pt_pt.slvs");
21 | CHECK_RENDER("pt_pt.png");
22 | CHECK_SAVE("pt_pt.slvs");
23 | }
24 |
25 | TEST_CASE(pt_pt_migrate_from_v20) {
26 | CHECK_LOAD("pt_pt_v20.slvs");
27 | CHECK_SAVE("pt_pt.slvs");
28 | }
29 |
30 | TEST_CASE(pt_pt_migrate_from_v22) {
31 | CHECK_LOAD("pt_pt_v22.slvs");
32 | CHECK_SAVE("pt_pt.slvs");
33 | }
34 |
--------------------------------------------------------------------------------
/test/group/translate_asy/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER_ISO("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v22) {
10 | CHECK_LOAD("normal_v22.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_inters) {
15 | CHECK_LOAD("normal.slvs");
16 |
17 | Group *g = SK.GetGroup(SS.GW.activeGroup);
18 | g->GenerateDisplayItems();
19 | SMesh *m = &g->displayMesh;
20 |
21 | SEdgeList el = {};
22 | bool inters, leaks;
23 | SKdNode::From(m)->MakeCertainEdgesInto(&el,
24 | EdgeKind::SELF_INTER, /*coplanarIsInter=*/false, &inters, &leaks);
25 | el.Clear();
26 |
27 | // The assembly is supposed to interfere.
28 | CHECK_TRUE(inters);
29 | }
30 |
--------------------------------------------------------------------------------
/test/constraint/horizontal/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(line_roundtrip) {
4 | CHECK_LOAD("line.slvs");
5 | CHECK_RENDER("line.png");
6 | CHECK_SAVE("line.slvs");
7 | }
8 |
9 | TEST_CASE(line_migrate_from_v20) {
10 | CHECK_LOAD("line_v20.slvs");
11 | CHECK_SAVE("line.slvs");
12 | }
13 |
14 | TEST_CASE(line_migrate_from_v22) {
15 | CHECK_LOAD("line_v22.slvs");
16 | CHECK_SAVE("line.slvs");
17 | }
18 |
19 | TEST_CASE(pt_pt_roundtrip) {
20 | CHECK_LOAD("pt_pt.slvs");
21 | CHECK_RENDER("pt_pt.png");
22 | CHECK_SAVE("pt_pt.slvs");
23 | }
24 |
25 | TEST_CASE(pt_pt_migrate_from_v20) {
26 | CHECK_LOAD("pt_pt_v20.slvs");
27 | CHECK_SAVE("pt_pt.slvs");
28 | }
29 |
30 | TEST_CASE(pt_pt_migrate_from_v22) {
31 | CHECK_LOAD("pt_pt_v22.slvs");
32 | CHECK_SAVE("pt_pt.slvs");
33 | }
34 |
--------------------------------------------------------------------------------
/test/constraint/equal_angle/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal_old_version.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal_old_version.slvs");
17 | }
18 |
19 | TEST_CASE(other_roundtrip) {
20 | CHECK_LOAD("other.slvs");
21 | CHECK_RENDER("other.png");
22 | CHECK_SAVE("other.slvs");
23 | }
24 |
25 | TEST_CASE(other_migrate_from_v20) {
26 | CHECK_LOAD("other_v20.slvs");
27 | CHECK_SAVE("other.slvs");
28 | }
29 |
30 | TEST_CASE(other_migrate_from_v22) {
31 | CHECK_LOAD("other_v22.slvs");
32 | CHECK_SAVE("other.slvs");
33 | }
34 |
--------------------------------------------------------------------------------
/test/constraint/diameter/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
19 | TEST_CASE(reference_roundtrip) {
20 | CHECK_LOAD("reference.slvs");
21 | CHECK_RENDER("reference.png");
22 | CHECK_SAVE("reference.slvs");
23 | }
24 |
25 | TEST_CASE(reference_migrate_from_v20) {
26 | CHECK_LOAD("reference_v20.slvs");
27 | CHECK_SAVE("reference.slvs");
28 | }
29 |
30 | TEST_CASE(reference_migrate_from_v22) {
31 | CHECK_LOAD("reference_v22.slvs");
32 | CHECK_SAVE("reference.slvs");
33 | }
34 |
--------------------------------------------------------------------------------
/test/constraint/length_ratio/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
19 | TEST_CASE(reference_roundtrip) {
20 | CHECK_LOAD("reference.slvs");
21 | CHECK_RENDER("reference.png");
22 | CHECK_SAVE("reference.slvs");
23 | }
24 |
25 | TEST_CASE(reference_migrate_from_v20) {
26 | CHECK_LOAD("reference_v20.slvs");
27 | CHECK_SAVE("reference.slvs");
28 | }
29 |
30 | TEST_CASE(reference_migrate_from_v22) {
31 | CHECK_LOAD("reference_v22.slvs");
32 | CHECK_SAVE("reference.slvs");
33 | }
34 |
--------------------------------------------------------------------------------
/cmake/FindSpaceWare.cmake:
--------------------------------------------------------------------------------
1 | # Find the libspnav library and header.
2 | #
3 | # Sets the usual variables expected for find_package scripts:
4 | #
5 | # SPACEWARE_INCLUDE_DIR - header location
6 | # SPACEWARE_LIBRARIES - library to link against
7 | # SPACEWARE_FOUND - true if libspnav was found.
8 |
9 | if(UNIX)
10 |
11 | find_path(SPACEWARE_INCLUDE_DIR
12 | spnav.h)
13 |
14 | find_library(SPACEWARE_LIBRARY
15 | NAMES spnav libspnav)
16 |
17 | # Support the REQUIRED and QUIET arguments, and set SPACEWARE_FOUND if found.
18 | include(FindPackageHandleStandardArgs)
19 | find_package_handle_standard_args(SpaceWare DEFAULT_MSG
20 | SPACEWARE_LIBRARY SPACEWARE_INCLUDE_DIR)
21 |
22 | if(SPACEWARE_FOUND)
23 | set(SPACEWARE_LIBRARIES ${SPACEWARE_LIBRARY})
24 | endif()
25 |
26 | mark_as_advanced(SPACEWARE_LIBRARY SPACEWARE_INCLUDE_DIR)
27 |
28 | endif()
29 |
--------------------------------------------------------------------------------
/test/constraint/parallel/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
19 | TEST_CASE(free_in_3d_roundtrip) {
20 | CHECK_LOAD("free_in_3d.slvs");
21 | CHECK_RENDER("free_in_3d.png");
22 | CHECK_SAVE("free_in_3d.slvs");
23 | }
24 |
25 | TEST_CASE(free_in_3d_migrate_from_v20) {
26 | CHECK_LOAD("free_in_3d_v20.slvs");
27 | CHECK_SAVE("free_in_3d.slvs");
28 | }
29 |
30 | TEST_CASE(free_in_3d_migrate_from_v22) {
31 | CHECK_LOAD("free_in_3d_v22.slvs");
32 | CHECK_SAVE("free_in_3d.slvs");
33 | }
34 |
--------------------------------------------------------------------------------
/test/constraint/proj_pt_distance/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
19 | TEST_CASE(reference_roundtrip) {
20 | CHECK_LOAD("reference.slvs");
21 | CHECK_RENDER("reference.png");
22 | CHECK_SAVE("reference.slvs");
23 | }
24 |
25 | TEST_CASE(reference_migrate_from_v20) {
26 | CHECK_LOAD("reference_v20.slvs");
27 | CHECK_SAVE("reference.slvs");
28 | }
29 |
30 | TEST_CASE(reference_migrate_from_v22) {
31 | CHECK_LOAD("reference_v22.slvs");
32 | CHECK_SAVE("reference.slvs");
33 | }
34 |
--------------------------------------------------------------------------------
/test/constraint/pt_face_distance/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
19 | TEST_CASE(reference_roundtrip) {
20 | CHECK_LOAD("reference.slvs");
21 | CHECK_RENDER("reference.png");
22 | CHECK_SAVE("reference.slvs");
23 | }
24 |
25 | TEST_CASE(reference_migrate_from_v20) {
26 | CHECK_LOAD("reference_v20.slvs");
27 | CHECK_SAVE("reference.slvs");
28 | }
29 |
30 | TEST_CASE(reference_migrate_from_v22) {
31 | CHECK_LOAD("reference_v22.slvs");
32 | CHECK_SAVE("reference.slvs");
33 | }
34 |
--------------------------------------------------------------------------------
/test/constraint/pt_plane_distance/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
19 | TEST_CASE(reference_roundtrip) {
20 | CHECK_LOAD("reference.slvs");
21 | CHECK_RENDER("reference.png");
22 | CHECK_SAVE("reference.slvs");
23 | }
24 |
25 | TEST_CASE(reference_migrate_from_v20) {
26 | CHECK_LOAD("reference_v20.slvs");
27 | CHECK_SAVE("reference.slvs");
28 | }
29 |
30 | TEST_CASE(reference_migrate_from_v22) {
31 | CHECK_LOAD("reference_v22.slvs");
32 | CHECK_SAVE("reference.slvs");
33 | }
34 |
--------------------------------------------------------------------------------
/test/constraint/symmetric/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
19 | TEST_CASE(free_in_3d_roundtrip) {
20 | CHECK_LOAD("free_in_3d.slvs");
21 | CHECK_RENDER("free_in_3d.png");
22 | CHECK_SAVE("free_in_3d.slvs");
23 | }
24 |
25 | TEST_CASE(free_in_3d_migrate_from_v20) {
26 | CHECK_LOAD("free_in_3d_v20.slvs");
27 | CHECK_SAVE("free_in_3d.slvs");
28 | }
29 |
30 | TEST_CASE(free_in_3d_migrate_from_v22) {
31 | CHECK_LOAD("free_in_3d_v22.slvs");
32 | CHECK_SAVE("free_in_3d.slvs");
33 | }
34 |
--------------------------------------------------------------------------------
/test/constraint/where_dragged/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
19 | TEST_CASE(free_in_3d_roundtrip) {
20 | CHECK_LOAD("free_in_3d.slvs");
21 | CHECK_RENDER("free_in_3d.png");
22 | CHECK_SAVE("free_in_3d.slvs");
23 | }
24 |
25 | TEST_CASE(free_in_3d_migrate_from_v20) {
26 | CHECK_LOAD("free_in_3d_v20.slvs");
27 | CHECK_SAVE("free_in_3d.slvs");
28 | }
29 |
30 | TEST_CASE(free_in_3d_migrate_from_v22) {
31 | CHECK_LOAD("free_in_3d_v22.slvs");
32 | CHECK_SAVE("free_in_3d.slvs");
33 | }
34 |
--------------------------------------------------------------------------------
/test/constraint/cubic_line_tangent/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
19 | TEST_CASE(free_in_3d_roundtrip) {
20 | CHECK_LOAD("free_in_3d.slvs");
21 | CHECK_RENDER("free_in_3d.png");
22 | CHECK_SAVE("free_in_3d.slvs");
23 | }
24 |
25 | TEST_CASE(free_in_3d_migrate_from_v20) {
26 | CHECK_LOAD("free_in_3d_v20.slvs");
27 | CHECK_SAVE("free_in_3d.slvs");
28 | }
29 |
30 | TEST_CASE(free_in_3d_migrate_from_v22) {
31 | CHECK_LOAD("free_in_3d_v22.slvs");
32 | CHECK_SAVE("free_in_3d.slvs");
33 | }
34 |
--------------------------------------------------------------------------------
/test/constraint/points_coincident/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
19 | TEST_CASE(free_in_3d_roundtrip) {
20 | CHECK_LOAD("free_in_3d.slvs");
21 | CHECK_RENDER("free_in_3d.png");
22 | CHECK_SAVE("free_in_3d.slvs");
23 | }
24 |
25 | TEST_CASE(free_in_3d_migrate_from_v20) {
26 | CHECK_LOAD("free_in_3d_v20.slvs");
27 | CHECK_SAVE("free_in_3d.slvs");
28 | }
29 |
30 | TEST_CASE(free_in_3d_migrate_from_v22) {
31 | CHECK_LOAD("free_in_3d_v22.slvs");
32 | CHECK_SAVE("free_in_3d.slvs");
33 | }
34 |
--------------------------------------------------------------------------------
/res/shaders/mesh.frag:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Mesh rendering shader
3 | //
4 | // Copyright 2016 Aleksey Egorov
5 | //-----------------------------------------------------------------------------
6 | uniform vec3 lightDir0;
7 | uniform vec3 lightDir1;
8 | uniform float lightInt0;
9 | uniform float lightInt1;
10 | uniform float ambient;
11 |
12 | varying vec3 fragNormal;
13 | varying vec4 fragColor;
14 |
15 | void main() {
16 | vec3 result = fragColor.xyz * ambient;
17 | vec3 normal = normalize(fragNormal);
18 |
19 | float light0 = clamp(dot(lightDir0, normal), 0.0, 1.0) * lightInt0 * (1.0 - ambient);
20 | result += fragColor.rgb * light0;
21 |
22 | float light1 = clamp(dot(lightDir1, normal), 0.0, 1.0) * lightInt1 * (1.0 - ambient);
23 | result += fragColor.rgb * light1;
24 |
25 | gl_FragColor = vec4(result, fragColor.a);
26 | }
27 |
--------------------------------------------------------------------------------
/test/constraint/curve_curve_tangent/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(arc_arc_roundtrip) {
4 | CHECK_LOAD("arc_arc.slvs");
5 | CHECK_RENDER("arc_arc.png");
6 | CHECK_SAVE("arc_arc.slvs");
7 | }
8 |
9 | TEST_CASE(arc_arc_migrate_from_v20) {
10 | CHECK_LOAD("arc_arc_v20.slvs");
11 | CHECK_SAVE("arc_arc.slvs");
12 | }
13 |
14 | TEST_CASE(arc_arc_migrate_from_v22) {
15 | CHECK_LOAD("arc_arc_v22.slvs");
16 | CHECK_SAVE("arc_arc.slvs");
17 | }
18 |
19 | TEST_CASE(arc_cubic_roundtrip) {
20 | CHECK_LOAD("arc_cubic.slvs");
21 | CHECK_RENDER("arc_cubic.png");
22 | CHECK_SAVE("arc_cubic.slvs");
23 | }
24 |
25 | TEST_CASE(arc_cubic_migrate_from_v20) {
26 | CHECK_LOAD("arc_cubic_v20.slvs");
27 | CHECK_SAVE("arc_cubic.slvs");
28 | }
29 |
30 | TEST_CASE(arc_cubic_migrate_from_v22) {
31 | CHECK_LOAD("arc_cubic_v22.slvs");
32 | CHECK_SAVE("arc_cubic.slvs");
33 | }
34 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "extlib/zlib"]
2 | path = extlib/zlib
3 | url = https://github.com/madler/zlib
4 | ignore = dirty
5 | [submodule "extlib/libpng"]
6 | path = extlib/libpng
7 | url = https://github.com/glennrp/libpng
8 | [submodule "extlib/freetype"]
9 | path = extlib/freetype
10 | url = https://git.savannah.nongnu.org/r/freetype/freetype2.git/
11 | [submodule "extlib/libdxfrw"]
12 | path = extlib/libdxfrw
13 | url = https://github.com/solvespace/libdxfrw.git
14 | [submodule "extlib/pixman"]
15 | path = extlib/pixman
16 | url = https://github.com/solvespace/pixman
17 | [submodule "extlib/cairo"]
18 | path = extlib/cairo
19 | url = https://github.com/solvespace/cairo
20 | [submodule "extlib/angle"]
21 | path = extlib/angle
22 | url = https://github.com/solvespace/angle
23 | [submodule "extlib/mimalloc"]
24 | path = extlib/mimalloc
25 | url = https://github.com/microsoft/mimalloc
26 | [submodule "extlib/eigen"]
27 | path = extlib/eigen
28 | url = https://gitlab.com/libeigen/eigen.git
29 |
--------------------------------------------------------------------------------
/cython/platform/set_pycompiler.bat:
--------------------------------------------------------------------------------
1 | echo off
2 |
3 | REM Usage: set_pycompiler C:\Python37 mingw32
4 | REM Where %PYTHON_DIR% is the directory of your Python installation.
5 | REM Compiler option can be "mingw32" or "msvc".
6 | REM In Pyslvs project.
7 | set HERE=%~dp0
8 | set PYTHON_DIR=%1
9 | set COMPILER=%2
10 |
11 | REM Create "distutils.cfg"
12 | set DISTUTILS=%PYTHON_DIR%\Lib\distutils\distutils.cfg
13 | if exist "%DISTUTILS%" del "%DISTUTILS%" /Q /S
14 | echo [build]>> "%DISTUTILS%"
15 | echo compiler=%COMPILER%>> "%DISTUTILS%"
16 | echo patched file "%DISTUTILS%"
17 | REM Apply the patch of "cygwinccompiler.py".
18 | REM Unix "patch" command of Msys.
19 | set patch="C:\Program Files\Git\usr\bin\patch.exe"
20 | %patch% -N "%PYTHON_DIR%\lib\distutils\cygwinccompiler.py" "%HERE%\cygwinccompiler.diff"
21 | %patch% -N "%PYTHON_DIR%\include\pyconfig.h" "%HERE%\pyconfig.diff"
22 |
23 | REM Copy "vcruntime140.dll" to "libs".
24 | copy "%PYTHON_DIR%\vcruntime140.dll" "%PYTHON_DIR%\libs"
25 | echo copied "vcruntime140.dll".
26 |
--------------------------------------------------------------------------------
/.github/scripts/build-windows.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh -xe
2 |
3 | mkdir build
4 | cd build
5 |
6 | if [ "$1" = "release" ]; then
7 | if [ "$2" = "openmp" ]; then
8 | ENABLE_OPENMP="ON"
9 | else
10 | ENABLE_OPENMP="OFF"
11 | fi
12 | BUILD_TYPE=RelWithDebInfo
13 | cmake \
14 | -G "Visual Studio 16 2019" \
15 | -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \
16 | -DENABLE_OPENMP="${ENABLE_OPENMP}" \
17 | -DENABLE_LTO=ON \
18 | -DCMAKE_GENERATOR_PLATFORM="Win32" \
19 | ..
20 | else
21 | BUILD_TYPE=Debug
22 | cmake \
23 | -G "Visual Studio 16 2019" \
24 | -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \
25 | -DENABLE_OPENMP="ON" \
26 | -DCMAKE_GENERATOR_PLATFORM="Win32" \
27 | ..
28 | fi
29 |
30 | cmake --build . --config "${BUILD_TYPE}" -- -maxcpucount
31 |
32 | bin/$BUILD_TYPE/solvespace-testsuite.exe
33 |
34 | if [ "$2" = "openmp" ]; then
35 | mv bin/$BUILD_TYPE/solvespace.exe bin/$BUILD_TYPE/solvespace-openmp.exe
36 | fi
37 |
--------------------------------------------------------------------------------
/cython/platform/cygwinccompiler.diff:
--------------------------------------------------------------------------------
1 | --- cygwinccompiler.py
2 | +++ cygwinccompiler.py
3 | @@ -84,7 +84,21 @@ def get_msvcr():
4 | elif msc_ver == '1600':
5 | # VS2010 / MSVC 10.0
6 | return ['msvcr100']
7 | + elif msc_ver == '1700':
8 | + # Visual Studio 2012 / Visual C++ 11.0
9 | + return ['msvcr110']
10 | + elif msc_ver == '1800':
11 | + # Visual Studio 2013 / Visual C++ 12.0
12 | + return ['msvcr120']
13 | + elif msc_ver == '1900':
14 | + # Visual Studio 2015 / Visual C++ 14.0
15 | + # "msvcr140.dll no longer exists" http://blogs.msdn.com/b/vcblog/archive/2014/06/03/visual-studio-14-ctp.aspx
16 | + return ['vcruntime140']
17 | + elif 1910 <= int(msc_ver) <= 1916:
18 | + return ['vcruntime140']
19 | + elif 1920 <= int(msc_ver) <= 1928:
20 | + return ['vcruntime140']
21 | else:
22 | raise ValueError("Unknown MS Compiler version %s " % msc_ver)
23 |
--------------------------------------------------------------------------------
/test/constraint/pt_on_line/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
19 | TEST_CASE(left_free_in_3d_roundtrip) {
20 | CHECK_LOAD("left_free_in_3d.slvs");
21 | CHECK_RENDER("left_free_in_3d.png");
22 | CHECK_SAVE("left_free_in_3d.slvs");
23 | }
24 |
25 | TEST_CASE(right_free_in_3d_roundtrip) {
26 | CHECK_LOAD("right_free_in_3d.slvs");
27 | CHECK_RENDER("right_free_in_3d.png");
28 | CHECK_SAVE("right_free_in_3d.slvs");
29 | }
30 |
31 | TEST_CASE(free_in_3d_migrate_from_v20) {
32 | CHECK_LOAD("free_in_3d_v20.slvs");
33 | CHECK_SAVE("left_free_in_3d.slvs");
34 | }
35 |
36 | TEST_CASE(free_in_3d_migrate_from_v22) {
37 | CHECK_LOAD("free_in_3d_v22.slvs");
38 | CHECK_SAVE("left_free_in_3d.slvs");
39 | }
40 |
--------------------------------------------------------------------------------
/res/win32/versioninfo.rc.in:
--------------------------------------------------------------------------------
1 | 1 VERSIONINFO
2 | FILEVERSION ${PROJECT_VERSION_MAJOR},${PROJECT_VERSION_MINOR},0,0
3 | PRODUCTVERSION ${PROJECT_VERSION_MAJOR},${PROJECT_VERSION_MINOR},0,0
4 | FILEFLAGSMASK 0
5 | FILEFLAGS 0
6 | FILEOS VOS_NT_WINDOWS32
7 | FILETYPE VFT_APP
8 | FILESUBTYPE 0
9 | BEGIN
10 | BLOCK "StringFileInfo"
11 | BEGIN
12 | BLOCK "04090000"
13 | BEGIN
14 | VALUE "CompanyName", "The SolveSpace authors"
15 | VALUE "ProductName", "SolveSpace"
16 | VALUE "ProductVersion", "${PROJECT_VERSION}~${solvespace_GIT_HASH}"
17 | VALUE "FileDescription", "SolveSpace, a parametric 2d/3d CAD"
18 | VALUE "FileVersion", "${PROJECT_VERSION}~${solvespace_GIT_HASH}"
19 | VALUE "OriginalFilename", "solvespace.exe"
20 | VALUE "InternalName", "solvespace"
21 | VALUE "LegalCopyright", "(c) 2008-2022 Jonathan Westhues and other authors"
22 | END
23 | END
24 |
25 | BLOCK "VarFileInfo"
26 | BEGIN
27 | VALUE "Translation", 0x409, 0
28 | END
29 | END
30 |
--------------------------------------------------------------------------------
/test/debugtool.cpp:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Our entry point for exposing various internal mechanisms.
3 | //
4 | // Copyright 2017 whitequark
5 | //-----------------------------------------------------------------------------
6 | #include "solvespace.h"
7 |
8 | int main(int argc, char **argv) {
9 | std::vector args = Platform::InitCli(argc, argv);
10 |
11 | if(args.size() == 3 && args[1] == "expr") {
12 | std::string expr = args[2], err;
13 | Expr *e = Expr::Parse(expr.c_str(), &err);
14 | if(e == NULL) {
15 | fprintf(stderr, "cannot parse: %s\n", err.c_str());
16 | } else {
17 | fprintf(stderr, "%g\n", e->Eval());
18 | }
19 | FreeAllTemporary();
20 | } else {
21 | fprintf(stderr, "Usage: %s \n", args[0].c_str());
22 | //-----------------------------------------------------------------------------> 80 col */
23 | fprintf(stderr, R"(
24 | Commands:
25 | expr [expr]
26 | Evaluate an expression.
27 | )");
28 | }
29 |
30 | return 0;
31 | }
32 |
--------------------------------------------------------------------------------
/res/win32/manifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 | Parametric 3d CAD tool.
10 |
11 |
12 | PerMonitorV2, PerMonitor
13 | true
14 |
15 |
16 |
17 |
18 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/res/shaders/imesh_point.vert:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Point rendering shader
3 | //
4 | // Copyright 2016 Aleksey Egorov
5 | //-----------------------------------------------------------------------------
6 | const float feather = 0.5;
7 |
8 | attribute vec3 pos;
9 | attribute vec2 loc;
10 |
11 | uniform mat4 modelview;
12 | uniform mat4 projection;
13 | uniform float width;
14 | uniform float pixel;
15 |
16 | void main() {
17 | // get camera vectors from modelview matrix
18 | vec3 u = vec3(modelview[0].x, modelview[1].x, modelview[2].x);
19 | vec3 v = vec3(modelview[0].y, modelview[1].y, modelview[2].y);
20 |
21 | // calculate point contour extension basis for constant width and caps
22 |
23 | // calculate point extension width considering antialiasing
24 | float ext = width + feather * pixel;
25 |
26 | // extend point contour
27 | vec3 vertex = pos;
28 | vertex += ext * loc.x * normalize(u);
29 | vertex += ext * loc.y * normalize(v);
30 |
31 | // transform resulting vertex with modelview and projection matrices
32 | gl_Position = projection * modelview * vec4(vertex, 1.0);
33 | }
34 |
--------------------------------------------------------------------------------
/res/shaders/edge.frag:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Edge rendering shader
3 | //
4 | // Copyright 2016 Aleksey Egorov
5 | //-----------------------------------------------------------------------------
6 | const float feather = 0.5;
7 |
8 | uniform vec4 color;
9 | uniform float pixel;
10 | uniform float width;
11 | uniform float patternLen;
12 | uniform float patternScale;
13 | uniform sampler2D pattern;
14 |
15 | varying vec3 fragLoc;
16 |
17 | void main() {
18 | // lookup distance texture
19 | vec4 v = texture2D(pattern, vec2(fragLoc.z / patternScale, 0.0));
20 |
21 | // decode distance value
22 | float val = dot(v, vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 160581375.0));
23 |
24 | // calculate cap
25 | float dist = length(vec2(val * patternScale / (patternLen * width) + abs(fragLoc.x), fragLoc.y));
26 |
27 | // perform antialiasing
28 | float k = smoothstep(1.0 - 2.0 * feather * pixel / (width + feather * pixel), 1.0, abs(dist));
29 |
30 | // perform alpha-test
31 | if(k == 1.0) discard;
32 |
33 | // write resulting color
34 | gl_FragColor = vec4(color.rgb, color.a * (1.0 - k));
35 | }
36 |
--------------------------------------------------------------------------------
/src/platform/entrygui.cpp:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Our main() function for the graphical interface.
3 | //
4 | // Copyright 2018
5 | //-----------------------------------------------------------------------------
6 | #include "solvespace.h"
7 | #if defined(WIN32)
8 | # include
9 | #endif
10 |
11 | using namespace SolveSpace;
12 |
13 | int main(int argc, char** argv) {
14 | std::vector args = Platform::InitGui(argc, argv);
15 |
16 | Platform::Open3DConnexion();
17 | SS.Init();
18 |
19 | if(args.size() >= 2) {
20 | if(args.size() > 2) {
21 | dbp("Only the first file passed on command line will be opened.");
22 | }
23 |
24 | SS.Load(Platform::Path::From(args.back()));
25 | }
26 |
27 | Platform::RunGui();
28 |
29 | Platform::Close3DConnexion();
30 | SS.Clear();
31 | SK.Clear();
32 | Platform::ClearGui();
33 |
34 | return 0;
35 | }
36 |
37 | #if defined(WIN32)
38 | int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
39 | LPSTR lpCmdLine, INT nCmdShow) {
40 | return main(0, NULL);
41 | }
42 | #endif
43 |
--------------------------------------------------------------------------------
/test/request/circle/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
19 | TEST_CASE(free_in_3d_roundtrip) {
20 | CHECK_LOAD("free_in_3d.slvs");
21 | CHECK_RENDER("free_in_3d.png");
22 | CHECK_SAVE("free_in_3d.slvs");
23 | }
24 |
25 | TEST_CASE(free_in_3d_migrate_from_v20) {
26 | CHECK_LOAD("free_in_3d_v20.slvs");
27 | CHECK_SAVE("free_in_3d.slvs");
28 | }
29 |
30 | TEST_CASE(free_in_3d_migrate_from_v22) {
31 | CHECK_LOAD("free_in_3d_v22.slvs");
32 | CHECK_SAVE("free_in_3d.slvs");
33 | }
34 |
35 | TEST_CASE(normal_dof) {
36 | CHECK_LOAD("normal.slvs");
37 | SS.GenerateAll(SolveSpaceUI::Generate::ALL, /*andFindFree=*/true);
38 | CHECK_RENDER("normal_dof.png");
39 | }
40 |
41 | TEST_CASE(free_in_3d_dof) {
42 | CHECK_LOAD("free_in_3d.slvs");
43 | SS.GenerateAll(SolveSpaceUI::Generate::ALL, /*andFindFree=*/true);
44 | CHECK_RENDER_ISO("free_in_3d_dof.png");
45 | }
46 |
--------------------------------------------------------------------------------
/test/constraint/pt_pt_distance/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
19 | TEST_CASE(free_in_3d_roundtrip) {
20 | CHECK_LOAD("free_in_3d.slvs");
21 | CHECK_RENDER("free_in_3d.png");
22 | CHECK_SAVE("free_in_3d.slvs");
23 | }
24 |
25 | TEST_CASE(free_in_3d_migrate_from_v20) {
26 | CHECK_LOAD("free_in_3d_v20.slvs");
27 | CHECK_SAVE("free_in_3d.slvs");
28 | }
29 |
30 | TEST_CASE(free_in_3d_migrate_from_v22) {
31 | CHECK_LOAD("free_in_3d_v22.slvs");
32 | CHECK_SAVE("free_in_3d.slvs");
33 | }
34 |
35 | TEST_CASE(reference_roundtrip) {
36 | CHECK_LOAD("reference.slvs");
37 | CHECK_RENDER("reference.png");
38 | CHECK_SAVE("reference.slvs");
39 | }
40 |
41 | TEST_CASE(reference_migrate_from_v20) {
42 | CHECK_LOAD("reference_v20.slvs");
43 | CHECK_SAVE("reference.slvs");
44 | }
45 |
46 | TEST_CASE(reference_migrate_from_v22) {
47 | CHECK_LOAD("reference_v22.slvs");
48 | CHECK_SAVE("reference.slvs");
49 | }
50 |
--------------------------------------------------------------------------------
/extlib/si/spwmacro.h:
--------------------------------------------------------------------------------
1 | /*----------------------------------------------------------------------
2 | * spwmacro.h -- cpp macros we ALWAYS use.
3 | *
4 | <<<<<<< spwmacro.h
5 | * $Id: spwmacro.h,v 1.3 2001/01/16 01:18:40 HJin Exp $
6 | =======
7 | * $Id: spwmacro.h,v 1.3 2001/01/16 01:18:40 HJin Exp $
8 | >>>>>>> 1.1.1.1.4.1
9 | *
10 | * We always seem to use the same macros.
11 | * This is the place we define them.
12 | *
13 | *----------------------------------------------------------------------
14 | */
15 |
16 | #ifndef SPWMACRO_H
17 | #define SPWMACRO_H
18 |
19 |
20 | #define SPW_FALSE (0)
21 | #define SPW_TRUE (!SPW_FALSE)
22 |
23 | #define SPW_MAX(a,b) (((a)>(b))?(a):(b))
24 | #define SPW_MIN(a,b) (((a)<(b))?(a):(b))
25 |
26 | #define SPW_ABS(a) (((a)<0)?(-(a)):(a))
27 |
28 | #define SPW_SIGN(a) ((a)>=0?1:-1)
29 |
30 | #define SPW_BIND(min,n,max) (SPW_MIN((max),SPW_MAX((min),(n))))
31 |
32 | #define SPW_NUM_ELEMENTS_IN(a) (sizeof(a)/sizeof((a)[0]))
33 |
34 | #define SPW_PI 3.14159265358979324f
35 |
36 | #define SPW_DEG_TO_RAD(d) ((d)*SPW_PI/180.0f)
37 | #define SPW_RAD_TO_DEG(r) ((r)*180.0f/SPW_PI)
38 |
39 | #define SPW_LENGTH_OF(a) (sizeof(a)/sizeof((a)[0]))
40 |
41 | #define SPW_END_OF(a) (&(a)[SPW_LENGTH_OF(a)-1])
42 |
43 | #define SPW_SQ(a) ((a)*(a))
44 |
45 | #define SPW_ABSDIFF(a, b) (fabs((double) (a) - (b)))
46 |
47 |
48 | #endif
49 |
--------------------------------------------------------------------------------
/.clang-format:
--------------------------------------------------------------------------------
1 | ---
2 | # Things explicitly enumerated in CONTRIBUTING.md
3 | IndentWidth: 4
4 | UseTab: Never
5 | SpaceBeforeParens: Never
6 | BreakBeforeBraces: Attach
7 | ColumnLimit: 100
8 | # Docs say 100, but some places look more like 80.
9 | #ColumnLimit: 80
10 |
11 | # Based on minimizing diff when applying clang-format
12 | AccessModifierOffset: -4
13 | AlignConsecutiveAssignments: true
14 | AlignEscapedNewlines: DontAlign
15 | AllowShortBlocksOnASingleLine: false
16 | AllowShortCaseLabelsOnASingleLine: true
17 | AllowShortLoopsOnASingleLine: false
18 | AlwaysBreakTemplateDeclarations: Yes # MultiLine
19 | BreakConstructorInitializers: BeforeColon
20 | DerivePointerAlignment: true
21 | FixNamespaceComments: true
22 | IndentPPDirectives: AfterHash
23 | MaxEmptyLinesToKeep: 2
24 | NamespaceIndentation: Inner
25 | SpaceAfterTemplateKeyword: false
26 |
27 | # No way to remove all space around operators as seen in much of the code I looked at.
28 | #SpaceBeforeAssignmentOperators: false
29 |
30 | # Only seen some of the time (mostly just variables, not functions)
31 | # but clang-format only has a true/false
32 | #AlignConsecutiveDeclarations: true
33 |
34 |
35 | # Would be nice to turn on eventually, maybe?
36 | SortIncludes: false
37 | SortUsingDeclarations: false
38 |
39 | # Hard to tell what the desired config here was.
40 | # AllowShortFunctionsOnASingleLine: Inline
41 | AllowShortFunctionsOnASingleLine: None
42 |
--------------------------------------------------------------------------------
/res/shaders/edge.vert:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Edge rendering shader
3 | //
4 | // Copyright 2016 Aleksey Egorov
5 | //-----------------------------------------------------------------------------
6 | const float feather = 0.5;
7 |
8 | attribute vec3 pos;
9 | attribute vec3 loc;
10 | attribute vec3 tgt;
11 |
12 | uniform mat4 modelview;
13 | uniform mat4 projection;
14 | uniform float width;
15 | uniform float pixel;
16 |
17 | varying vec3 fragLoc;
18 |
19 | void main() {
20 | // get camera direction from modelview matrix
21 | vec3 dir = vec3(modelview[0].z, modelview[1].z, modelview[2].z);
22 |
23 | // calculate line contour extension basis for constant width and caps
24 | vec3 norm = normalize(cross(tgt, dir));
25 | norm = normalize(norm - dir * dot(dir, norm));
26 | vec3 perp = normalize(cross(dir, norm));
27 |
28 | // calculate line extension width considering antialiasing
29 | float ext = width + feather * pixel;
30 |
31 | // extend line contour
32 | vec3 vertex = pos;
33 | vertex += ext * loc.x * normalize(perp);
34 | vertex += ext * loc.y * normalize(norm);
35 |
36 | // write fragment location for calculating caps and antialiasing
37 | fragLoc = loc;
38 |
39 | // transform resulting vertex with modelview and projection matrices
40 | gl_Position = projection * modelview * vec4(vertex, 1.0);
41 | }
42 |
--------------------------------------------------------------------------------
/cython/setup.cfg:
--------------------------------------------------------------------------------
1 | [metadata]
2 | name = python_solvespace
3 | version = attr: python_solvespace.__version__
4 | description = Python library of Solvespace.
5 | long_description = file: README.md
6 | long_description_content_type = text/markdown
7 | keywords = cad,mechanical-engineering,2d,3d
8 | license = GPLv3+
9 | author = Yuan Chang
10 | author_email = pyslvs@gmail.com
11 | url = https://github.com/KmolYuan/solvespace
12 | classifiers =
13 | Programming Language :: Python :: 3.6
14 | Programming Language :: Python :: 3.7
15 | Programming Language :: Python :: 3.8
16 | Programming Language :: Python :: 3.9
17 | Programming Language :: Python :: 3.10
18 | Programming Language :: Python :: 3.11
19 | Programming Language :: Cython
20 | Topic :: Scientific/Engineering
21 | License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
22 | Operating System :: OS Independent
23 | Typing :: Typed
24 |
25 | [options]
26 | zip_safe = False
27 | packages = find:
28 | python_requires = >=3.6
29 | setup_requires =
30 | cython
31 |
32 | [options.package_data]
33 | * = *.pyi, *.pxd, *.pyx
34 | python_solvespace = py.typed
35 |
36 | [options.packages.find]
37 | exclude =
38 | test
39 |
40 | [mypy]
41 | pretty = True
42 | show_error_codes = True
43 | show_column_numbers = True
44 | ignore_missing_imports = True
45 | allow_redefinition = True
46 | warn_redundant_casts = True
47 | warn_unreachable = True
48 | strict_equality = True
49 |
--------------------------------------------------------------------------------
/test/constraint/pt_line_distance/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
19 | TEST_CASE(free_in_3d_roundtrip) {
20 | CHECK_LOAD("free_in_3d.slvs");
21 | CHECK_RENDER("free_in_3d.png");
22 | CHECK_SAVE("free_in_3d.slvs");
23 | }
24 |
25 | TEST_CASE(free_in_3d_migrate_from_v20) {
26 | CHECK_LOAD("free_in_3d_v20.slvs");
27 | CHECK_SAVE("free_in_3d.slvs");
28 | }
29 |
30 | TEST_CASE(free_in_3d_migrate_from_v22) {
31 | CHECK_LOAD("free_in_3d_v22.slvs");
32 | CHECK_SAVE("free_in_3d.slvs");
33 | }
34 |
35 | TEST_CASE(reference_roundtrip) {
36 | CHECK_LOAD("reference.slvs");
37 | CHECK_RENDER("reference.png");
38 | CHECK_SAVE("reference.slvs");
39 | }
40 |
41 | TEST_CASE(reference_migrate_from_v20) {
42 | CHECK_LOAD("reference_v20.slvs");
43 | CHECK_SAVE("reference.slvs");
44 | }
45 |
46 | TEST_CASE(reference_migrate_from_v22) {
47 | CHECK_LOAD("reference_v22.slvs");
48 | CHECK_SAVE("reference.slvs");
49 | }
50 |
51 | TEST_CASE(extended_render) {
52 | CHECK_LOAD("extended.slvs");
53 | CHECK_RENDER("extended.png");
54 | }
55 |
--------------------------------------------------------------------------------
/cmake/GetGitCommitHash.cmake:
--------------------------------------------------------------------------------
1 | function(get_git_commit_hash)
2 | get_filename_component(GIT_DESCRIBE_CMAKE_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
3 | get_filename_component(GIT_ROOT ${GIT_DESCRIBE_CMAKE_DIR} PATH)
4 | set(GIT_DIR "${GIT_ROOT}/.git")
5 |
6 | # Add a CMake configure dependency to the currently checked out revision.
7 | set(GIT_DEPENDS ${GIT_DIR}/HEAD)
8 | file(READ ${GIT_DIR}/HEAD HEAD_REF)
9 | if(HEAD_REF MATCHES "ref: (.+)\n")
10 | set(HEAD_REF ${CMAKE_MATCH_1})
11 | if(EXISTS "${GIT_DIR}/${HEAD_REF}")
12 | list(APPEND GIT_DEPENDS ${GIT_DIR}/${HEAD_REF})
13 | file(READ ${GIT_DIR}/${HEAD_REF} HEAD_REF)
14 | elseif(EXISTS "${GIT_DIR}/packed-refs")
15 | list(APPEND GIT_DEPENDS ${GIT_DIR}/packed-refs)
16 | file(READ "${GIT_DIR}/packed-refs" PACKED_REFS)
17 | if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
18 | set(HEAD_REF ${CMAKE_MATCH_1})
19 | else()
20 | set(HEAD_REF "")
21 | endif()
22 | else()
23 | set(HEAD_REF "")
24 | endif()
25 | endif()
26 | set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${GIT_DEPENDS})
27 |
28 | string(STRIP ${HEAD_REF} HEAD_REF)
29 | if(HEAD_REF STREQUAL "")
30 | message(WARNING "Cannot determine git HEAD")
31 | else()
32 | set(GIT_COMMIT_HASH ${HEAD_REF} PARENT_SCOPE)
33 | endif()
34 | endfunction()
35 | get_git_commit_hash()
36 |
--------------------------------------------------------------------------------
/.github/scripts/build-macos.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh -xe
2 |
3 | ENABLE_SANITIZERS="OFF"
4 | if [ "$1" = "release" ]; then
5 | BUILD_TYPE="RelWithDebInfo"
6 | ENABLE_LTO="ON"
7 | else
8 | BUILD_TYPE="Debug"
9 | ENABLE_LTO="OFF"
10 | fi
11 |
12 | # this is an option for our Github CI only, since it doesn't have a macos arm64 image yet
13 | CMAKE_GENERATOR="Unix Makefiles"
14 | CMAKE_PREFIX_PATH=""
15 | if [ "$2" = "arm64" ]; then
16 | OSX_ARCHITECTURE="arm64"
17 | CMAKE_PREFIX_PATH=$(find /tmp/libomp-arm64/libomp -depth 1)
18 | git apply cmake/libpng-macos-arm64.patch || echo "Could not apply patch, probably already patched..."
19 | mkdir build-arm64 || true
20 | cd build-arm64
21 | elif [ "$2" = "x86_64" ]; then
22 | OSX_ARCHITECTURE="x86_64"
23 | CMAKE_PREFIX_PATH=$(find /tmp/libomp-x86_64/libomp -depth 1)
24 | mkdir build || true
25 | cd build
26 | else
27 | mkdir build || true
28 | cd build
29 | fi
30 |
31 | if [ "$3" = "xcode" ]; then
32 | CMAKE_GENERATOR="Xcode"
33 | fi
34 |
35 | cmake \
36 | -G "${CMAKE_GENERATOR}" \
37 | -D CMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}" \
38 | -D CMAKE_OSX_ARCHITECTURES="${OSX_ARCHITECTURE}" \
39 | -D CMAKE_BUILD_TYPE="${BUILD_TYPE}" \
40 | -D ENABLE_OPENMP="ON" \
41 | -D ENABLE_SANITIZERS="${ENABLE_SANITIZERS}" \
42 | -D ENABLE_LTO="${ENABLE_LTO}" \
43 | ..
44 |
45 | if [ "$3" = "xcode" ]; then
46 | open solvespace.xcodeproj
47 | else
48 | cmake --build . --config "${BUILD_TYPE}" -j$(sysctl -n hw.logicalcpu)
49 | if [ $(uname -m) = "$2" ]; then
50 | make -j$(sysctl -n hw.logicalcpu) test_solvespace
51 | fi
52 | fi
53 |
--------------------------------------------------------------------------------
/src/ttf.h:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Routines to read a TrueType font as vector outlines, and generate them
3 | // as entities, since they're always representable as either lines or
4 | // quadratic Bezier curves.
5 | //
6 | // Copyright 2016 whitequark, Peter Barfuss.
7 | //-----------------------------------------------------------------------------
8 |
9 | #ifndef SOLVESPACE_TTF_H
10 | #define SOLVESPACE_TTF_H
11 |
12 | class TtfFont {
13 | public:
14 | Platform::Path fontFile; // or resource path/name as res://
15 | std::string name;
16 | FT_FaceRec_ *fontFace;
17 | double capHeight;
18 |
19 | void SetResourceID(const std::string &resource);
20 | bool IsResource() const;
21 |
22 | std::string FontFileBaseName() const;
23 | bool LoadFromFile(FT_LibraryRec_ *fontLibrary, bool keepOpen = false);
24 | bool LoadFromResource(FT_LibraryRec_ *fontLibrary, bool keepOpen = false);
25 |
26 | void PlotString(const std::string &str,
27 | SBezierList *sbl, Vector origin, Vector u, Vector v);
28 | double AspectRatio(const std::string &str);
29 |
30 | bool ExtractTTFData(bool keepOpen);
31 | };
32 |
33 | class TtfFontList {
34 | public:
35 | FT_LibraryRec_ *fontLibrary;
36 | bool loaded;
37 | List l;
38 |
39 | TtfFontList();
40 | ~TtfFontList();
41 |
42 | void LoadAll();
43 | TtfFont *LoadFont(const std::string &font);
44 |
45 | void PlotString(const std::string &font, const std::string &str,
46 | SBezierList *sbl, Vector origin, Vector u, Vector v);
47 | double AspectRatio(const std::string &font, const std::string &str);
48 | };
49 |
50 | #endif
51 |
--------------------------------------------------------------------------------
/.github/workflows/test.yml:
--------------------------------------------------------------------------------
1 | name: Test
2 |
3 | on:
4 | pull_request:
5 | branches:
6 | - master
7 | push:
8 | branches-ignore:
9 | - master
10 | tags-ignore:
11 | - v*
12 |
13 | jobs:
14 | test_ubuntu:
15 | runs-on: ubuntu-18.04
16 | name: Test Ubuntu
17 | steps:
18 | - uses: actions/checkout@v2
19 | - name: Install Dependencies
20 | run: .github/scripts/install-ubuntu.sh
21 | - name: Build & Test
22 | run: .github/scripts/build-ubuntu.sh
23 |
24 | test_windows:
25 | runs-on: windows-2019
26 | name: Test Windows
27 | steps:
28 | - uses: actions/checkout@v2
29 | - name: Install Dependencies
30 | run: .github/scripts/install-windows.sh
31 | shell: bash
32 | - name: Build & Test
33 | run: .github/scripts/build-windows.sh
34 | shell: bash
35 |
36 | test_macos:
37 | runs-on: macos-10.15
38 | name: Test macOS
39 | steps:
40 | - uses: actions/checkout@v2
41 | - name: Install Dependencies
42 | run: .github/scripts/install-macos.sh ci
43 | - name: Build & Test
44 | run: .github/scripts/build-macos.sh debug arm64 && .github/scripts/build-macos.sh debug x86_64
45 |
46 | test_flatpak:
47 | name: Test Flatpak x86_64
48 | runs-on: ubuntu-latest
49 | container:
50 | image: bilelmoussaoui/flatpak-github-actions:freedesktop-21.08
51 | options: --privileged
52 | steps:
53 | - uses: actions/checkout@v3
54 | with:
55 | submodules: true
56 | fetch-depth: 0
57 | - uses: bilelmoussaoui/flatpak-github-actions/flatpak-builder@v4
58 | with:
59 | bundle: "solvespace.flatpak"
60 | manifest-path: "pkg/flatpak/com.solvespace.SolveSpace.json"
61 | cache-key: flatpak-builder-${{ github.sha }}
62 |
--------------------------------------------------------------------------------
/.github/workflows/source-tarball.yml:
--------------------------------------------------------------------------------
1 | name: Source Tarball
2 |
3 | on:
4 | release:
5 | types:
6 | - created
7 |
8 | jobs:
9 | create_tarball:
10 | name: Create & Upload Tarball
11 | runs-on: ubuntu-latest
12 | steps:
13 | - uses: actions/checkout@v2
14 | with:
15 | submodules: true
16 | fetch-depth: 0
17 | - name: Pack Tarball
18 | id: pack_tarball
19 | run: |
20 | version="${GITHUB_REF#refs/tags/v}"
21 | dir_name="solvespace-${version}"
22 | archive_name="${dir_name}.tar.xz"
23 | archive_path="${HOME}/${archive_name}"
24 | commit_sha="$GITHUB_SHA"
25 |
26 | sed -e 's/^\(include(GetGitCommitHash)\)/#\1/' \
27 | -e 's/^# \(set(GIT_COMMIT_HASH\).*/\1 '"$commit_sha"')/' \
28 | -i CMakeLists.txt
29 |
30 | echo "::set-output name=archive_name::${archive_name}"
31 | echo "::set-output name=archive_path::${archive_path}"
32 |
33 | cd ..
34 | tar \
35 | --exclude-vcs \
36 | --transform "s:^solvespace:${dir_name}:" \
37 | -cvaf \
38 | ${archive_path} \
39 | solvespace
40 | - name: Get Release Upload URL
41 | id: get_upload_url
42 | env:
43 | event: ${{ toJson(github.event) }}
44 | run: |
45 | upload_url=$(echo "$event" | jq -r ".release.upload_url")
46 | echo "::set-output name=upload_url::$upload_url"
47 | echo "Upload URL: $upload_url"
48 | - name: Upload Tarball
49 | uses: actions/upload-release-asset@v1
50 | env:
51 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
52 | with:
53 | upload_url: ${{ steps.get_upload_url.outputs.upload_url }}
54 | asset_path: ${{ steps.pack_tarball.outputs.archive_path }}
55 | asset_name: ${{ steps.pack_tarball.outputs.archive_name }}
56 | asset_content_type: binary/octet-stream
57 |
--------------------------------------------------------------------------------
/test/constraint/angle/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(normal_roundtrip) {
4 | CHECK_LOAD("normal.slvs");
5 | CHECK_RENDER("normal.png");
6 | CHECK_SAVE("normal.slvs");
7 | }
8 |
9 | TEST_CASE(normal_migrate_from_v20) {
10 | CHECK_LOAD("normal_v20.slvs");
11 | CHECK_SAVE("normal.slvs");
12 | }
13 |
14 | TEST_CASE(normal_migrate_from_v22) {
15 | CHECK_LOAD("normal_v22.slvs");
16 | CHECK_SAVE("normal.slvs");
17 | }
18 |
19 | TEST_CASE(free_in_3d_roundtrip) {
20 | CHECK_LOAD("free_in_3d.slvs");
21 | CHECK_RENDER("free_in_3d.png");
22 | CHECK_SAVE("free_in_3d.slvs");
23 | }
24 |
25 | TEST_CASE(free_in_3d_migrate_from_v20) {
26 | CHECK_LOAD("free_in_3d_v20.slvs");
27 | CHECK_SAVE("free_in_3d.slvs");
28 | }
29 |
30 | TEST_CASE(free_in_3d_migrate_from_v22) {
31 | CHECK_LOAD("free_in_3d_v22.slvs");
32 | CHECK_SAVE("free_in_3d.slvs");
33 | }
34 |
35 | TEST_CASE(reference_roundtrip) {
36 | CHECK_LOAD("reference.slvs");
37 | CHECK_RENDER("reference.png");
38 | CHECK_SAVE("reference.slvs");
39 | }
40 |
41 | TEST_CASE(reference_migrate_from_v20) {
42 | CHECK_LOAD("reference_v20.slvs");
43 | CHECK_SAVE("reference.slvs");
44 | }
45 |
46 | TEST_CASE(reference_migrate_from_v22) {
47 | CHECK_LOAD("reference_v22.slvs");
48 | CHECK_SAVE("reference.slvs");
49 | }
50 |
51 | TEST_CASE(reference_free_in_3d_roundtrip) {
52 | CHECK_LOAD("reference_free_in_3d.slvs");
53 | CHECK_RENDER("reference_free_in_3d.png");
54 | CHECK_SAVE("reference_free_in_3d.slvs");
55 | }
56 |
57 | TEST_CASE(reference_free_in_3d_migrate_from_v20) {
58 | CHECK_LOAD("reference_free_in_3d_v20.slvs");
59 | CHECK_SAVE("reference_free_in_3d.slvs");
60 | }
61 |
62 | TEST_CASE(reference_free_in_3d_migrate_from_v22) {
63 | CHECK_LOAD("reference_free_in_3d_v22.slvs");
64 | CHECK_SAVE("reference_free_in_3d.slvs");
65 | }
66 |
67 | TEST_CASE(skew_render) {
68 | CHECK_LOAD("skew.slvs");
69 | CHECK_RENDER("skew.png");
70 | }
71 |
--------------------------------------------------------------------------------
/cmake/FindVendoredPackage.cmake:
--------------------------------------------------------------------------------
1 | # Find the given library in the system locations, or build in-tree if not found.
2 | #
3 | # Arguments:
4 | # PKG_NAME - name of the package as passed to find_package
5 | # PKG_PATH - name of the source tree relative to extlib/
6 | #
7 | # The rest of the arguments are VARIABLE VALUE pairs. If the library is not found,
8 | # every VARIABLE will be set to VALUE and find_package will be rerun with the REQUIRED flag.
9 | # Regardless of where the library was found, only the specified VARIABLEs that start with
10 | # ${PKG_NAME} will be set in the parent scope.
11 | #
12 | # All warnings in the in-tree package are disabled.
13 |
14 | include(DisableWarnings)
15 |
16 | function(find_vendored_package PKG_NAME PKG_PATH)
17 | if(NOT FORCE_VENDORED_${PKG_NAME})
18 | find_package(${PKG_NAME})
19 | endif()
20 |
21 | set(cfg_name)
22 | foreach(item ${ARGN})
23 | if(NOT cfg_name)
24 | set(cfg_name ${item})
25 | else()
26 | set(${cfg_name} ${item} CACHE INTERNAL "")
27 | set(cfg_name)
28 | endif()
29 | endforeach()
30 |
31 | disable_warnings()
32 |
33 | string(TOUPPER ${PKG_NAME} VAR_NAME)
34 | if(NOT ${VAR_NAME}_FOUND)
35 | message(STATUS "Using in-tree ${PKG_PATH}")
36 | set(${VAR_NAME}_IN_TREE YES CACHE INTERNAL "")
37 |
38 | add_subdirectory(extlib/${PKG_PATH} EXCLUDE_FROM_ALL)
39 | find_package(${PKG_NAME} REQUIRED)
40 | elseif(${VAR_NAME}_IN_TREE)
41 | add_subdirectory(extlib/${PKG_PATH} EXCLUDE_FROM_ALL)
42 | endif()
43 |
44 | # Now put everything we just discovered into the cache.
45 | set(cfg_name)
46 | foreach(item ${ARGN} ${VAR_NAME}_FOUND)
47 | if(NOT cfg_name)
48 | set(cfg_name ${item})
49 | else()
50 | if(cfg_name MATCHES "^${VAR_NAME}")
51 | set(${cfg_name} "${${cfg_name}}" CACHE INTERNAL "")
52 | endif()
53 | set(cfg_name)
54 | endif()
55 | endforeach()
56 | endfunction()
57 |
--------------------------------------------------------------------------------
/test/constraint/at_midpoint/test.cpp:
--------------------------------------------------------------------------------
1 | #include "harness.h"
2 |
3 | TEST_CASE(line_pt_normal_roundtrip) {
4 | CHECK_LOAD("line_pt_normal.slvs");
5 | CHECK_RENDER("line_pt_normal.png");
6 | CHECK_SAVE("line_pt_normal.slvs");
7 | }
8 |
9 | TEST_CASE(line_pt_normal_migrate_from_v20) {
10 | CHECK_LOAD("line_pt_normal_v20.slvs");
11 | CHECK_SAVE("line_pt_normal.slvs");
12 | }
13 |
14 | TEST_CASE(line_pt_normal_migrate_from_v22) {
15 | CHECK_LOAD("line_pt_normal_v22.slvs");
16 | CHECK_SAVE("line_pt_normal.slvs");
17 | }
18 |
19 | TEST_CASE(line_pt_free_in_3d_roundtrip) {
20 | CHECK_LOAD("line_pt_free_in_3d.slvs");
21 | CHECK_RENDER("line_pt_free_in_3d.png");
22 | CHECK_SAVE("line_pt_free_in_3d.slvs");
23 | }
24 |
25 | TEST_CASE(line_pt_free_in_3d_migrate_from_v20) {
26 | CHECK_LOAD("line_pt_free_in_3d_v20.slvs");
27 | CHECK_SAVE("line_pt_free_in_3d.slvs");
28 | }
29 |
30 | TEST_CASE(line_pt_free_in_3d_migrate_from_v22) {
31 | CHECK_LOAD("line_pt_free_in_3d_v22.slvs");
32 | CHECK_SAVE("line_pt_free_in_3d.slvs");
33 | }
34 |
35 | TEST_CASE(line_plane_normal_roundtrip) {
36 | CHECK_LOAD("line_plane_normal.slvs");
37 | CHECK_RENDER("line_plane_normal.png");
38 | CHECK_SAVE("line_plane_normal.slvs");
39 | }
40 |
41 | TEST_CASE(line_plane_normal_migrate_from_v20) {
42 | CHECK_LOAD("line_plane_normal_v20.slvs");
43 | CHECK_SAVE("line_plane_normal.slvs");
44 | }
45 |
46 | TEST_CASE(line_plane_normal_migrate_from_v22) {
47 | CHECK_LOAD("line_plane_normal_v22.slvs");
48 | CHECK_SAVE("line_plane_normal.slvs");
49 | }
50 |
51 | TEST_CASE(line_plane_free_in_3d_roundtrip) {
52 | CHECK_LOAD("line_plane_free_in_3d.slvs");
53 | CHECK_RENDER("line_plane_free_in_3d.png");
54 | CHECK_SAVE("line_plane_free_in_3d.slvs");
55 | }
56 |
57 | TEST_CASE(line_plane_free_in_3d_migrate_from_v20) {
58 | CHECK_LOAD("line_plane_free_in_3d_v20.slvs");
59 | CHECK_SAVE("line_plane_free_in_3d.slvs");
60 | }
61 |
62 | TEST_CASE(line_plane_free_in_3d_migrate_from_v22) {
63 | CHECK_LOAD("line_plane_free_in_3d_v22.slvs");
64 | CHECK_SAVE("line_plane_free_in_3d.slvs");
65 | }
66 |
--------------------------------------------------------------------------------
/cmake/MacOSXBundleInfo.plist.in:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleIdentifier
6 | com.solvespace
7 | CFBundleDevelopmentRegion
8 | English
9 | CFBundleExecutable
10 | SolveSpace
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | SolveSpace
15 | CFBundlePackageType
16 | APPL
17 | CFBundleVersion
18 | ${PROJECT_VERSION}~${solvespace_GIT_HASH}
19 | CFBundleShortVersionString
20 | ${PROJECT_VERSION}
21 | NSHumanReadableCopyright
22 | © 2008-2022 Jonathan Westhues and other authors
23 | NSPrincipalClass
24 | NSApplication
25 | NSMainNibFile
26 | MainMenu
27 | CFBundleIconFile
28 | AppIcon
29 | CFBundleDocumentTypes
30 |
31 |
32 | CFBundleTypeExtensions
33 |
34 | slvs
35 |
36 | CFBundleTypeIconFile
37 | AppIcon.icns
38 | CFBundleTypeName
39 | SolveSpace sketch
40 | CFBundleTypeOSTypes
41 |
42 | slvs
43 |
44 | CFBundleTypeRole
45 | Editor
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/.github/workflows/python.yml:
--------------------------------------------------------------------------------
1 | name: Python
2 |
3 | on:
4 | push:
5 | branches: [ python ]
6 | tags: [ py* ]
7 |
8 | jobs:
9 | python-build:
10 | strategy:
11 | matrix:
12 | pyver:
13 | - "3.6"
14 | - "3.7"
15 | - "3.8"
16 | - "3.9"
17 | - "3.10"
18 | - "3.11"
19 | os:
20 | - ubuntu-latest
21 | - macos-latest
22 | - windows-latest
23 | runs-on: ${{ matrix.os }}
24 | env:
25 | TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }}
26 | TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }}
27 | steps:
28 | - uses: actions/checkout@v2
29 | - run: git submodule update --init extlib/mimalloc extlib/eigen
30 | - uses: actions/setup-python@v2
31 | with:
32 | python-version: ${{ matrix.pyver }}
33 | - name: Build and test
34 | working-directory: cython
35 | run: |
36 | python -m pip install -U pip setuptools wheel build
37 | python -m pip install -e .
38 | python -m unittest
39 | - name: Pack
40 | working-directory: cython
41 | run: python -m build
42 | - if: matrix.os == 'ubuntu-latest'
43 | name: Upload artifact
44 | uses: actions/upload-artifact@v2
45 | with:
46 | name: ${{ matrix.os }}-py${{ matrix.pyver }}
47 | path: cython/dist/*.tar.gz
48 | - if: matrix.os != 'ubuntu-latest'
49 | name: Upload artifact
50 | uses: actions/upload-artifact@v2
51 | with:
52 | name: ${{ matrix.os }}-py${{ matrix.pyver }}
53 | path: cython/dist/*.whl
54 | - if: startsWith(github.ref, 'refs/tags/py')
55 | run: python -m pip install twine
56 | - if: startsWith(github.ref, 'refs/tags/py') && matrix.os == 'ubuntu-latest'
57 | name: release
58 | working-directory: cython
59 | run: python -m twine upload "dist/*.tar.gz" --skip-existing
60 | - if: startsWith(github.ref, 'refs/tags/py') && matrix.os != 'ubuntu-latest'
61 | name: release
62 | working-directory: cython
63 | run: python -m twine upload "dist/*.whl" --skip-existing
64 |
--------------------------------------------------------------------------------
/res/shaders/outline.vert:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Outline rendering shader
3 | //
4 | // Copyright 2016 Aleksey Egorov
5 | //-----------------------------------------------------------------------------
6 | const int EMPHASIZED_AND_CONTOUR = 0;
7 | const int EMPHASIZED_WITHOUT_CONTOUR = 1;
8 | const int CONTOUR_ONLY = 2;
9 |
10 | const float feather = 0.5;
11 |
12 | attribute vec3 pos;
13 | attribute vec4 loc;
14 | attribute vec3 tgt;
15 | attribute vec3 nol;
16 | attribute vec3 nor;
17 |
18 | uniform mat4 modelview;
19 | uniform mat4 projection;
20 | uniform float width;
21 | uniform float pixel;
22 | uniform int mode;
23 |
24 | varying vec3 fragLoc;
25 |
26 | void main() {
27 | // get camera direction from modelview matrix
28 | vec3 dir = vec3(modelview[0].z, modelview[1].z, modelview[2].z);
29 |
30 | // perform outline visibility test
31 | float ldot = dot(nol, dir);
32 | float rdot = dot(nor, dir);
33 |
34 | bool isOutline = (ldot > -1e-6) == (rdot < 1e-6) ||
35 | (rdot > -1e-6) == (ldot < 1e-6);
36 | bool isTagged = loc.w > 0.5;
37 |
38 | float visible = float((mode == CONTOUR_ONLY && isOutline) ||
39 | (mode == EMPHASIZED_AND_CONTOUR && (isOutline || isTagged)) ||
40 | (mode == EMPHASIZED_WITHOUT_CONTOUR && isTagged && !isOutline));
41 |
42 | // calculate line contour extension basis for constant width and caps
43 | vec3 norm = normalize(cross(tgt, dir));
44 | norm = normalize(norm - dir * dot(dir, norm));
45 | vec3 perp = normalize(cross(dir, norm));
46 |
47 | // calculate line extension width considering antialiasing
48 | float ext = (width + feather * pixel) * visible;
49 |
50 | // extend line contour
51 | vec3 vertex = pos;
52 | vertex += ext * loc.x * normalize(perp);
53 | vertex += ext * loc.y * normalize(norm);
54 |
55 | // write fragment location for calculating caps and antialiasing
56 | fragLoc = vec3(loc);
57 |
58 | // transform resulting vertex with modelview and projection matrices
59 | gl_Position = projection * modelview * vec4(vertex, 1.0);
60 | }
61 |
--------------------------------------------------------------------------------
/cython/.gitignore:
--------------------------------------------------------------------------------
1 | /CMakeCache.txt
2 | /build*/
3 | /test/**/*.diff.*
4 | /test/**/*.curr.*
5 | *.trace
6 | /debian/tmp/
7 | /debian/*.log
8 | /debian/*.substvars
9 | /debian/*.debhelper
10 | /debian/files
11 | /debian/solvespace/
12 | /debian/libslvs1/
13 | /debian/libslvs1-dev/
14 | /obj-*/
15 | /*.slvs
16 | python_solvespace/*.cpp
17 | python_solvespace/src/
18 | python_solvespace/include/
19 | python_solvespace/extlib/
20 |
21 | # Byte-compiled / optimized / DLL files
22 | __pycache__/
23 | *.py[cod]
24 | *$py.class
25 |
26 | # C extensions
27 | *.so
28 | *.o*
29 | *.cxx
30 | *.def
31 | *.lib
32 |
33 | # Distribution / packaging
34 | .Python
35 | env/
36 | build/
37 | develop-eggs/
38 | dist/
39 | downloads/
40 | eggs/
41 | .eggs/
42 | lib/
43 | lib64/
44 | parts/
45 | sdist/
46 | var/
47 | wheels/
48 | *.egg-info/
49 | .installed.cfg
50 | *.egg
51 | AppImageAssistant
52 |
53 | # PyInstaller
54 | # Usually these files are written by a python script from a template
55 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
56 | *.manifest
57 | *.spec
58 |
59 | # Installer logs
60 | pip-log.txt
61 | pip-delete-this-directory.txt
62 |
63 | # Unit test / coverage reports
64 | htmlcov/
65 | .tox/
66 | .coverage
67 | .coverage.*
68 | .cache
69 | nosetests.xml
70 | coverage.xml
71 | *.cover
72 | .hypothesis/
73 |
74 | # Translations
75 | *.mo
76 | *.pot
77 |
78 | # Django stuff:
79 | *.log
80 | local_settings.py
81 |
82 | # Flask stuff:
83 | instance/
84 | .webassets-cache
85 |
86 | # Scrapy stuff:
87 | .scrapy
88 |
89 | # Sphinx documentation
90 | docs/_build/
91 |
92 | # PyBuilder
93 | target/
94 |
95 | # Jupyter Notebook
96 | .ipynb_checkpoints
97 |
98 | # pyenv
99 | .python-version
100 |
101 | # celery beat schedule file
102 | celerybeat-schedule
103 |
104 | # SageMath parsed files
105 | *.sage.py
106 |
107 | # dotenv
108 | .env
109 |
110 | # virtualenv
111 | .venv
112 | venv/
113 | ENV/
114 | out/
115 |
116 | # Spyder project settings
117 | .spyderproject
118 | .spyproject
119 |
120 | # Rope project settings
121 | .ropeproject
122 |
123 | # mkdocs documentation
124 | /site
125 |
126 | # mypy
127 | .mypy_cache/
128 |
129 | #PyCharm cache
130 | .idea/
131 |
132 | # Others
133 | .DS_Store
134 | */.DS_Store
135 |
--------------------------------------------------------------------------------
/cython/README.md:
--------------------------------------------------------------------------------
1 | [](https://pypi.org/project/python-solvespace/)
2 | [](https://raw.githubusercontent.com/KmolYuan/solvespace/master/LICENSE)
3 |
4 | # python-solvespace
5 |
6 | Python library from the solver of SolveSpace, an open source CAD software.
7 |
8 | + [Python API](https://pyslvs-ui.readthedocs.io/en/stable/python-solvespace-api/)
9 | + [C API](https://github.com/solvespace/solvespace/blob/master/exposed/DOC.txt)
10 |
11 | The example extracted from unit test:
12 |
13 | ```python
14 | from python_solvespace import SolverSystem, ResultFlag
15 |
16 | sys = SolverSystem()
17 | wp = sys.create_2d_base() # Workplane (Entity)
18 | p0 = sys.add_point_2d(0, 0, wp) # Entity
19 | sys.dragged(p0, wp) # Make a constraint with the entity
20 | ...
21 | line0 = sys.add_line_2d(p0, p1, wp) # Create entity with others
22 | ...
23 | line1 = sys.add_line_2d(p0, p3, wp)
24 | sys.angle(line0, line1, 45, wp) # Constrain two entities
25 | line1 = sys.entity(-1) # Entity handle can be re-generated and negatively indexed
26 | ...
27 | if sys.solve() == ResultFlag.OKAY:
28 | # Get the result (unpack from the entity or parameters)
29 | # x and y are actually float type
30 | dof = sys.dof()
31 | x, y = sys.params(p2.params)
32 | ...
33 | else:
34 | # Error!
35 | # Get the list of all constraints
36 | failures = sys.failures()
37 | ...
38 | ```
39 |
40 | Solver can also be serialized and copied, but can not modify or undo last step.
41 |
42 | ```python
43 | import pickle
44 | print(pickle.dumps(sys))
45 |
46 | sys_new = sys.copy()
47 | ```
48 |
49 | The entity and parameter handles should have the same lifetime to the solver.
50 |
51 | # Install
52 |
53 | ```bash
54 | pip install python-solvespace
55 | ```
56 |
57 | # Build and Test (Repository)
58 |
59 | First build and install the module from the repo:
60 |
61 | ```bash
62 | git submodule update --init extlib/mimalloc extlib/eigen
63 | cd cython
64 | pip install -e .
65 | ```
66 |
67 | Rebuild the module:
68 |
69 | ```bash
70 | pip install -e . --no-deps
71 | ```
72 |
73 | Run the unit tests:
74 |
75 | ```bash
76 | python -m unittest
77 | ```
78 |
79 | Uninstall the module:
80 |
81 | ```bash
82 | pip uninstall python-solvespace
83 | ```
84 |
--------------------------------------------------------------------------------
/extlib/si/spwdata.h:
--------------------------------------------------------------------------------
1 | /*----------------------------------------------------------------------
2 | * spwdata.h -- datatypes
3 | *
4 | *
5 | * $Id: spwdata.h,v 1.4 1996/10/08 23:01:39 chris Exp $
6 | *
7 | * This contains the only acceptable type definitions for 3Dconnexion
8 | * products. Needs more work.
9 | *
10 | *----------------------------------------------------------------------
11 | *
12 | * (c) 1996-2005 3Dconnexion. All rights reserved.
13 | *
14 | * The computer codes included in this file, including source code and
15 | * object code, constitutes the proprietary and confidential information of
16 | * 3Dconnexion, and are provided pursuant to a license
17 | * agreement. These computer codes are protected by international, federal
18 | * and state law, including United States Copyright Law and international
19 | * treaty provisions. Except as expressly authorized by the license
20 | * agreement, or as expressly permitted under applicable laws of member
21 | * states of the European Union and then only to the extent so permitted,
22 | * no part of these computer codes may be reproduced or transmitted in any
23 | * form or by any means, electronic or mechanical, modified, decompiled,
24 | * disassembled, reverse engineered, sold, transferred, rented or utilized
25 | * for any unauthorized purpose without the express written permission of
26 | * 3Dconnexion.
27 | *
28 | *----------------------------------------------------------------------
29 | *
30 | */
31 |
32 | #ifndef SPWDATA_H
33 | #define SPWDATA_H
34 |
35 | static char spwdataCvsId[]="(C) 1996-2005 3Dconnexion: $Id: spwdata.h,v 1.4 1996/10/08 23:01:39 chris Exp $";
36 |
37 | #include
38 |
39 | #define tchar_t _TCHAR
40 | #define char_t char
41 | #define uint32_t unsigned long
42 | #define sint32_t long
43 | #define boolean_t unsigned char
44 | #define void_t void
45 | #define window_handle_t HWND
46 |
47 |
48 | typedef long SPWint32;
49 | typedef short SPWint16;
50 | typedef char SPWint8;
51 | typedef int SPWbool;
52 | typedef unsigned long SPWuint32;
53 | typedef unsigned short SPWuint16;
54 | typedef unsigned char SPWuint8;
55 | typedef _TCHAR SPWchar;
56 | typedef _TCHAR* SPWstring;
57 | typedef float SPWfloat32;
58 | typedef double SPWfloat64;
59 |
60 |
61 |
62 | #endif /* SPWDATA_H */
63 |
64 |
--------------------------------------------------------------------------------
/bench/harness.cpp:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Our harness for running benchmarks.
3 | //
4 | // Copyright 2016 whitequark
5 | //-----------------------------------------------------------------------------
6 | #include "solvespace.h"
7 |
8 | static bool RunBenchmark(std::function setupFn,
9 | std::function benchFn,
10 | std::function teardownFn,
11 | size_t minIter = 5, double minTime = 5.0) {
12 | // Warmup
13 | setupFn();
14 | if(!benchFn()) {
15 | fprintf(stderr, "Benchmark failed\n");
16 | return false;
17 | }
18 | teardownFn();
19 |
20 | // Benchmark
21 | size_t iter = 0;
22 | double time = 0.0;
23 | while(iter < minIter || time < minTime) {
24 | setupFn();
25 | auto testStartTime = std::chrono::steady_clock::now();
26 | benchFn();
27 | auto testEndTime = std::chrono::steady_clock::now();
28 | teardownFn();
29 |
30 | std::chrono::duration testTime = testEndTime - testStartTime;
31 | time += testTime.count();
32 | iter += 1;
33 | }
34 |
35 | // Report
36 | fprintf(stdout, "Iterations: %zd\n", iter);
37 | fprintf(stdout, "Time: %.3f s\n", time);
38 | fprintf(stdout, "Per iter.: %.3f s\n", time / (double)iter);
39 |
40 | return true;
41 | }
42 |
43 | int main(int argc, char **argv) {
44 | std::vector args = Platform::InitCli(argc, argv);
45 |
46 | std::string mode;
47 | Platform::Path filename;
48 | if(args.size() == 3) {
49 | mode = args[1];
50 | filename = Platform::Path::From(args[2]);
51 | } else {
52 | fprintf(stderr, "Usage: %s [mode] [filename]\n", args[0].c_str());
53 | fprintf(stderr, "Mode can be one of: load.\n");
54 | return 1;
55 | }
56 |
57 | bool result = false;
58 | if(mode == "load") {
59 | result = RunBenchmark(
60 | [] {
61 | SS.Init();
62 | },
63 | [&] {
64 | if(!SS.LoadFromFile(filename))
65 | return false;
66 | SS.AfterNewFile();
67 | return true;
68 | },
69 | [] {
70 | SK.Clear();
71 | SS.Clear();
72 | });
73 | } else {
74 | fprintf(stderr, "Unknown mode \"%s\"\n", mode.c_str());
75 | }
76 |
77 | return (result == true ? 0 : 1);
78 | }
79 |
--------------------------------------------------------------------------------