Merge branch 'solvespace:master' into master
commit
1398f74289
249
README.md
249
README.md
|
@ -1,7 +1,7 @@
|
||||||
|
# SolveSpace
|
||||||
|
|
||||||
<img src="res/freedesktop/solvespace-scalable.svg" width="70" height="70" alt="SolveSpace Logo" align="left">
|
<img src="res/freedesktop/solvespace-scalable.svg" width="70" height="70" alt="SolveSpace Logo" align="left">
|
||||||
|
|
||||||
SolveSpace
|
|
||||||
==========
|
|
||||||
[![Build Status](https://github.com/solvespace/solvespace/workflows/CD/badge.svg)](https://github.com/solvespace/solvespace/actions)
|
[![Build Status](https://github.com/solvespace/solvespace/workflows/CD/badge.svg)](https://github.com/solvespace/solvespace/actions)
|
||||||
[![solvespace](https://snapcraft.io/solvespace/badge.svg)](https://snapcraft.io/solvespace)
|
[![solvespace](https://snapcraft.io/solvespace/badge.svg)](https://snapcraft.io/solvespace)
|
||||||
[![solvespace](https://snapcraft.io/solvespace/trending.svg?name=0)](https://snapcraft.io/solvespace)
|
[![solvespace](https://snapcraft.io/solvespace/trending.svg?name=0)](https://snapcraft.io/solvespace)
|
||||||
|
@ -9,29 +9,27 @@ SolveSpace
|
||||||
This repository contains the source code of [SolveSpace][], a parametric
|
This repository contains the source code of [SolveSpace][], a parametric
|
||||||
2d/3d CAD.
|
2d/3d CAD.
|
||||||
|
|
||||||
[solvespace]: http://solvespace.com
|
[solvespace]: https://solvespace.com
|
||||||
|
|
||||||
Community
|
## Community
|
||||||
---------
|
|
||||||
|
|
||||||
The official SolveSpace [website][sswebsite] has [tutorials][sstutorial],
|
The official SolveSpace [website][sswebsite] has [tutorials][sstutorial],
|
||||||
[reference manual][ssref] and a [forum][ssforum]; there is also an official
|
[reference manual][ssref] and a [forum][ssforum]; there is also an official
|
||||||
IRC channel [#solvespace at irc.freenode.net][ssirc].
|
IRC channel [#solvespace at web.libera.chat][ssirc].
|
||||||
|
|
||||||
[sswebsite]: http://solvespace.com/
|
[sswebsite]: http://solvespace.com/
|
||||||
[ssref]: http://solvespace.com/ref.pl
|
[ssref]: http://solvespace.com/ref.pl
|
||||||
[sstutorial]: http://solvespace.com/tutorial.pl
|
[sstutorial]: http://solvespace.com/tutorial.pl
|
||||||
[ssforum]: http://solvespace.com/forum.pl
|
[ssforum]: http://solvespace.com/forum.pl
|
||||||
[ssirc]: https://webchat.freenode.net/?channels=solvespace
|
[ssirc]: https://web.libera.chat/#solvespace
|
||||||
|
|
||||||
Installation
|
## Installation
|
||||||
------------
|
|
||||||
|
|
||||||
### Via official binary packages
|
### Via official binary packages
|
||||||
|
|
||||||
_Official_ release binary packages for macOS (>=10.6 64-bit) and Windows (>=Vista 32-bit) are
|
_Official_ release binary packages for macOS (>=10.6 64-bit) and Windows
|
||||||
available via [GitHub releases][rel]. These packages are automatically built by
|
(>=Vista 32-bit) are available via [GitHub releases][rel]. These packages are
|
||||||
the SolveSpace maintainers for each stable release.
|
automatically built by the SolveSpace maintainers for each stable release.
|
||||||
|
|
||||||
[rel]: https://github.com/solvespace/solvespace/releases
|
[rel]: https://github.com/solvespace/solvespace/releases
|
||||||
|
|
||||||
|
@ -39,25 +37,28 @@ the SolveSpace maintainers for each stable release.
|
||||||
|
|
||||||
Official releases can be installed from the `stable` channel.
|
Official releases can be installed from the `stable` channel.
|
||||||
|
|
||||||
Builds from master are automatically released to the `edge` channel in the Snap Store. Those packages contain the latest improvements, but receive less testing than release builds.
|
Builds from master are automatically released to the `edge` channel in the Snap
|
||||||
|
Store. Those packages contain the latest improvements, but receive less testing
|
||||||
|
than release builds.
|
||||||
|
|
||||||
[![Get it from the Snap Store](https://snapcraft.io/static/images/badges/en/snap-store-black.svg)](https://snapcraft.io/solvespace)
|
[![Get it from the Snap Store](https://snapcraft.io/static/images/badges/en/snap-store-black.svg)](https://snapcraft.io/solvespace)
|
||||||
|
|
||||||
Or install from a terminal:
|
Or install from a terminal:
|
||||||
|
|
||||||
```
|
```sh
|
||||||
# for the latest stable release:
|
# for the latest stable release:
|
||||||
snap install solvespace
|
snap install solvespace
|
||||||
|
|
||||||
# for the bleeding edge builds from master:
|
# for the bleeding edge builds from master:
|
||||||
snap install solvespace --edge
|
snap install solvespace --edge
|
||||||
```
|
```
|
||||||
|
|
||||||
### Via third-party binary packages
|
### Via third-party binary packages
|
||||||
|
|
||||||
_Third-party_ nightly binary packages for Debian and Ubuntu are available
|
_Third-party_ nightly binary packages for Debian and Ubuntu are available via
|
||||||
via [notesalexp.org][notesalexp]. These packages are automatically built from non-released
|
[notesalexp.org][notesalexp]. These packages are automatically built from
|
||||||
source code. The SolveSpace maintainers do not control the contents of these packages
|
non-released source code. The SolveSpace maintainers do not control the contents
|
||||||
and cannot guarantee their functionality.
|
of these packages and cannot guarantee their functionality.
|
||||||
|
|
||||||
[notesalexp]: https://notesalexp.org/packages/en/source/solvespace/
|
[notesalexp]: https://notesalexp.org/packages/en/source/solvespace/
|
||||||
|
|
||||||
|
@ -66,124 +67,147 @@ and cannot guarantee their functionality.
|
||||||
> :warning: **Edge builds might be unstable or contain severe bugs!**
|
> :warning: **Edge builds might be unstable or contain severe bugs!**
|
||||||
> They are intended for experienced users to test new features or verify bugfixes.
|
> They are intended for experienced users to test new features or verify bugfixes.
|
||||||
|
|
||||||
Cutting edge builds from the latest master commit are available as zip archives from the
|
Cutting edge builds from the latest master commit are available as zip archives
|
||||||
following links:
|
from the following links:
|
||||||
|
|
||||||
- [macOS](https://nightly.link/solvespace/solvespace/workflows/cd/master/macos.zip)
|
- [macOS](https://nightly.link/solvespace/solvespace/workflows/cd/master/macos.zip)
|
||||||
- [Windows](https://nightly.link/solvespace/solvespace/workflows/cd/master/windows.zip)
|
- [Windows](https://nightly.link/solvespace/solvespace/workflows/cd/master/windows.zip)
|
||||||
- [Windows with OpenMP enabled](https://nightly.link/solvespace/solvespace/workflows/cd/master/windows-openmp.zip)
|
- [Windows with OpenMP enabled](https://nightly.link/solvespace/solvespace/workflows/cd/master/windows-openmp.zip)
|
||||||
|
|
||||||
Extract the downloaded archive and install or execute the contained file as is appropriate for your platform.
|
Extract the downloaded archive and install or execute the contained file as is
|
||||||
|
appropriate for your platform.
|
||||||
|
|
||||||
### Via source code
|
### Via source code
|
||||||
|
|
||||||
See below.
|
See below.
|
||||||
|
|
||||||
Building on Linux
|
## Building on Linux
|
||||||
-----------------
|
|
||||||
|
|
||||||
### Building for Linux
|
### Building for Linux
|
||||||
|
|
||||||
You will need the usual build tools, CMake, zlib, libpng, cairo, freetype.
|
You will need the usual build tools, CMake, zlib, libpng, cairo, freetype. To
|
||||||
To build the GUI, you will need fontconfig, gtkmm 3.0 (version 3.16 or later), pangomm 1.4,
|
build the GUI, you will need fontconfig, gtkmm 3.0 (version 3.16 or later),
|
||||||
OpenGL and OpenGL GLU, and optionally, the Space Navigator client library.
|
pangomm 1.4, OpenGL and OpenGL GLU, and optionally, the Space Navigator client
|
||||||
On a Debian derivative (e.g. Ubuntu) these can be installed with:
|
library. On a Debian derivative (e.g. Ubuntu) these can be installed with:
|
||||||
|
|
||||||
sudo apt install git build-essential cmake zlib1g-dev libpng-dev \
|
```sh
|
||||||
libcairo2-dev libfreetype6-dev libjson-c-dev \
|
sudo apt install git build-essential cmake zlib1g-dev libpng-dev \
|
||||||
libfontconfig1-dev libgtkmm-3.0-dev libpangomm-1.4-dev \
|
libcairo2-dev libfreetype6-dev libjson-c-dev \
|
||||||
libgl-dev libglu-dev libspnav-dev
|
libfontconfig1-dev libgtkmm-3.0-dev libpangomm-1.4-dev \
|
||||||
|
libgl-dev libglu-dev libspnav-dev
|
||||||
|
```
|
||||||
|
|
||||||
On a Redhat derivative (e.g. Fedora) the dependencies can be installed with:
|
On a RedHat derivative (e.g. Fedora) the dependencies can be installed with:
|
||||||
|
|
||||||
sudo dnf install git gcc-c++ cmake zlib-devel libpng-devel \
|
```sh
|
||||||
cairo-devel freetype-devel json-c-devel \
|
sudo dnf install git gcc-c++ cmake zlib-devel libpng-devel \
|
||||||
fontconfig-devel gtkmm30-devel pangomm-devel \
|
cairo-devel freetype-devel json-c-devel \
|
||||||
mesa-libGL-devel mesa-libGLU-devel libspnav-devel
|
fontconfig-devel gtkmm30-devel pangomm-devel \
|
||||||
|
mesa-libGL-devel mesa-libGLU-devel libspnav-devel
|
||||||
|
```
|
||||||
|
|
||||||
Before building, check out the project and the necessary submodules:
|
Before building, check out the project and the necessary submodules:
|
||||||
|
|
||||||
git clone https://github.com/solvespace/solvespace
|
```sh
|
||||||
cd solvespace
|
git clone https://github.com/solvespace/solvespace
|
||||||
git submodule update --init extlib/libdxfrw extlib/mimalloc
|
cd solvespace
|
||||||
|
git submodule update --init extlib/libdxfrw extlib/mimalloc
|
||||||
|
```
|
||||||
|
|
||||||
After that, build SolveSpace as following:
|
After that, build SolveSpace as following:
|
||||||
|
|
||||||
mkdir build
|
```sh
|
||||||
cd build
|
mkdir build
|
||||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DENABLE_OPENMP=ON
|
cd build
|
||||||
make
|
cmake .. -DCMAKE_BUILD_TYPE=Release -DENABLE_OPENMP=ON
|
||||||
sudo make install
|
make
|
||||||
|
|
||||||
Link Time Optimization is supported by adding -DENABLE_LTO=ON to cmake at the
|
# Optionally
|
||||||
|
sudo make install
|
||||||
|
```
|
||||||
|
|
||||||
|
Link Time Optimization is supported by adding `-DENABLE_LTO=ON` to cmake at the
|
||||||
expense of longer build time.
|
expense of longer build time.
|
||||||
|
|
||||||
The graphical interface is built as `build/bin/solvespace`, and the command-line interface
|
The graphical interface is built as `build/bin/solvespace`, and the command-line
|
||||||
is built as `build/bin/solvespace-cli`. It is possible to build only the command-line interface by passing the `-DENABLE_GUI=OFF` flag to the cmake invocation.
|
interface is built as `build/bin/solvespace-cli`. It is possible to build only
|
||||||
|
the command-line interface by passing the `-DENABLE_GUI=OFF` flag to the cmake
|
||||||
|
invocation.
|
||||||
|
|
||||||
### Building for Windows
|
### Building for Windows
|
||||||
|
|
||||||
Ubuntu will require 20.04 or above. Cross-compiling with WSL is also confirmed to work.
|
Ubuntu will require 20.04 or above. Cross-compiling with WSL is also confirmed
|
||||||
|
to work.
|
||||||
|
|
||||||
You will need the usual build tools, CMake, a Windows cross-compiler, and flatc. On a Debian derivative (e.g. Ubuntu) these can be installed with:
|
You will need the usual build tools, CMake, and a Windows cross-compiler. On a
|
||||||
|
Debian derivative (e.g. Ubuntu) these can be installed with:
|
||||||
|
|
||||||
apt-get install git build-essential cmake mingw-w64
|
```sh
|
||||||
|
apt-get install git build-essential cmake mingw-w64
|
||||||
|
```
|
||||||
|
|
||||||
Before building, check out the project and the necessary submodules:
|
Before building, check out the project and the necessary submodules:
|
||||||
|
|
||||||
git clone https://github.com/solvespace/solvespace
|
```sh
|
||||||
cd solvespace
|
git clone https://github.com/solvespace/solvespace
|
||||||
git submodule update --init
|
cd solvespace
|
||||||
|
git submodule update --init
|
||||||
|
```
|
||||||
|
|
||||||
Build 64-bit SolveSpace with the following:
|
Build 64-bit SolveSpace with the following:
|
||||||
|
|
||||||
mkdir build
|
```sh
|
||||||
cd build
|
mkdir build
|
||||||
cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw64.cmake \
|
cd build
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw64.cmake \
|
||||||
-DFLATC=$(which flatc)
|
-DCMAKE_BUILD_TYPE=Release
|
||||||
make
|
make
|
||||||
|
```
|
||||||
|
|
||||||
The graphical interface is built as `build/bin/solvespace.exe`, and the command-line interface
|
The graphical interface is built as `build/bin/solvespace.exe`, and the
|
||||||
is built as `build/bin/solvespace-cli.exe`.
|
command-line interface is built as `build/bin/solvespace-cli.exe`.
|
||||||
|
|
||||||
Space Navigator support will not be available.
|
Space Navigator support will not be available.
|
||||||
|
|
||||||
If using Ubuntu to cross-compile, Ubuntu 17.10 or newer (or, alternatively, MinGW from the Ubuntu
|
## Building on macOS
|
||||||
17.10 repositories) is required.
|
|
||||||
|
|
||||||
Building on macOS
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
You will need git, XCode tools and CMake. Git and CMake can be installed
|
You will need git, XCode tools and CMake. Git and CMake can be installed
|
||||||
via [Homebrew][]:
|
via [Homebrew][]:
|
||||||
|
|
||||||
brew install git cmake
|
```sh
|
||||||
|
brew install git cmake
|
||||||
|
```
|
||||||
|
|
||||||
XCode has to be installed via AppStore or [the Apple website][appledeveloper];
|
XCode has to be installed via AppStore or [the Apple website][appledeveloper];
|
||||||
it requires a free Apple ID.
|
it requires a free Apple ID.
|
||||||
|
|
||||||
Before building, check out the project and the necessary submodules:
|
Before building, check out the project and the necessary submodules:
|
||||||
|
|
||||||
git clone https://github.com/solvespace/solvespace
|
```sh
|
||||||
cd solvespace
|
git clone https://github.com/solvespace/solvespace
|
||||||
git submodule update --init
|
cd solvespace
|
||||||
|
git submodule update --init
|
||||||
|
```
|
||||||
|
|
||||||
After that, build SolveSpace as following:
|
After that, build SolveSpace as following:
|
||||||
|
|
||||||
mkdir build
|
```sh
|
||||||
cd build
|
mkdir build
|
||||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DENABLE_OPENMP=ON
|
cd build
|
||||||
make
|
cmake .. -DCMAKE_BUILD_TYPE=Release -DENABLE_OPENMP=ON
|
||||||
|
make
|
||||||
|
```
|
||||||
|
|
||||||
Link Time Optimization is supported by adding -DENABLE_LTO=ON to cmake at the
|
Link Time Optimization is supported by adding `-DENABLE_LTO=ON` to cmake at the
|
||||||
expense of longer build time.
|
expense of longer build time.
|
||||||
|
|
||||||
Alternatively, generate an XCode project, open it, and build the "Release" scheme:
|
Alternatively, generate an XCode project, open it, and build the "Release" scheme:
|
||||||
|
|
||||||
mkdir build
|
```sh
|
||||||
cd build
|
mkdir build
|
||||||
cmake .. -G Xcode
|
cd build
|
||||||
|
cmake .. -G Xcode
|
||||||
|
```
|
||||||
|
|
||||||
The application is built in `build/bin/SolveSpace.app`, the graphical interface executable
|
The application is built in `build/bin/SolveSpace.app`, the graphical interface executable
|
||||||
is `build/bin/SolveSpace.app/Contents/MacOS/SolveSpace`, and the command-line interface executable
|
is `build/bin/SolveSpace.app/Contents/MacOS/SolveSpace`, and the command-line interface executable
|
||||||
|
@ -192,26 +216,32 @@ is `build/bin/SolveSpace.app/Contents/MacOS/solvespace-cli`.
|
||||||
[homebrew]: https://brew.sh/
|
[homebrew]: https://brew.sh/
|
||||||
[appledeveloper]: https://developer.apple.com/download/
|
[appledeveloper]: https://developer.apple.com/download/
|
||||||
|
|
||||||
Building on OpenBSD
|
## Building on OpenBSD
|
||||||
-------------------
|
|
||||||
|
|
||||||
You will need git, cmake, libexecinfo, libpng, gtk3mm and pangomm.
|
You will need git, cmake, libexecinfo, libpng, gtk3mm and pangomm.
|
||||||
These can be installed from the ports tree:
|
These can be installed from the ports tree:
|
||||||
|
|
||||||
pkg_add -U git cmake libexecinfo png json-c gtk3mm pangomm
|
```sh
|
||||||
|
pkg_add -U git cmake libexecinfo png json-c gtk3mm pangomm
|
||||||
|
```
|
||||||
|
|
||||||
Before building, check out the project and the necessary submodules:
|
Before building, check out the project and the necessary submodules:
|
||||||
|
|
||||||
git clone https://github.com/solvespace/solvespace
|
```sh
|
||||||
cd solvespace
|
git clone https://github.com/solvespace/solvespace
|
||||||
git submodule update --init extlib/libdxfrw extlib/mimalloc
|
cd solvespace
|
||||||
|
git submodule update --init extlib/libdxfrw extlib/mimalloc
|
||||||
|
```
|
||||||
|
|
||||||
After that, build SolveSpace as following:
|
After that, build SolveSpace as following:
|
||||||
|
|
||||||
mkdir build
|
```sh
|
||||||
cd build
|
mkdir build
|
||||||
cmake .. -DCMAKE_BUILD_TYPE=Release
|
cd build
|
||||||
make
|
cmake .. -DCMAKE_BUILD_TYPE=Release
|
||||||
|
make
|
||||||
|
sudo make install
|
||||||
|
```
|
||||||
|
|
||||||
Unfortunately, on OpenBSD, the produced executables are not filesystem location independent
|
Unfortunately, on OpenBSD, the produced executables are not filesystem location independent
|
||||||
and must be installed before use. By default, the graphical interface is installed to
|
and must be installed before use. By default, the graphical interface is installed to
|
||||||
|
@ -219,8 +249,7 @@ and must be installed before use. By default, the graphical interface is install
|
||||||
`/usr/local/bin/solvespace-cli`. It is possible to build only the command-line interface
|
`/usr/local/bin/solvespace-cli`. It is possible to build only the command-line interface
|
||||||
by passing the `-DENABLE_GUI=OFF` flag to the cmake invocation.
|
by passing the `-DENABLE_GUI=OFF` flag to the cmake invocation.
|
||||||
|
|
||||||
Building on Windows
|
## Building on Windows
|
||||||
-------------------
|
|
||||||
|
|
||||||
You will need [git][gitwin], [cmake][cmakewin] and a C++ compiler
|
You will need [git][gitwin], [cmake][cmakewin] and a C++ compiler
|
||||||
(either Visual C++ or MinGW). If using Visual C++, Visual Studio 2015
|
(either Visual C++ or MinGW). If using Visual C++, Visual Studio 2015
|
||||||
|
@ -235,17 +264,19 @@ Visual C++ and build it.
|
||||||
|
|
||||||
### Building with Visual Studio in a command prompt
|
### Building with Visual Studio in a command prompt
|
||||||
|
|
||||||
First, ensure that git and cl (the Visual C++ compiler driver) are in your
|
First, ensure that `git` and `cl` (the Visual C++ compiler driver) are in your
|
||||||
`%PATH%`; the latter is usually done by invoking `vcvarsall.bat` from your
|
`%PATH%`; the latter is usually done by invoking `vcvarsall.bat` from your
|
||||||
Visual Studio install. Then, run the following in cmd or PowerShell:
|
Visual Studio install. Then, run the following in cmd or PowerShell:
|
||||||
|
|
||||||
git clone https://github.com/solvespace/solvespace
|
```bat
|
||||||
cd solvespace
|
git clone https://github.com/solvespace/solvespace
|
||||||
git submodule update --init
|
cd solvespace
|
||||||
mkdir build
|
git submodule update --init
|
||||||
cd build
|
mkdir build
|
||||||
cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release
|
cd build
|
||||||
nmake
|
cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release
|
||||||
|
nmake
|
||||||
|
```
|
||||||
|
|
||||||
### Building with MinGW
|
### Building with MinGW
|
||||||
|
|
||||||
|
@ -255,25 +286,25 @@ Space Navigator support will be disabled.
|
||||||
First, ensure that git and gcc are in your `$PATH`. Then, run the following
|
First, ensure that git and gcc are in your `$PATH`. Then, run the following
|
||||||
in bash:
|
in bash:
|
||||||
|
|
||||||
git clone https://github.com/solvespace/solvespace
|
```sh
|
||||||
cd solvespace
|
git clone https://github.com/solvespace/solvespace
|
||||||
git submodule update --init
|
cd solvespace
|
||||||
mkdir build
|
git submodule update --init
|
||||||
cd build
|
mkdir build
|
||||||
cmake .. -DCMAKE_BUILD_TYPE=Release
|
cd build
|
||||||
make
|
cmake .. -DCMAKE_BUILD_TYPE=Release
|
||||||
|
make
|
||||||
|
```
|
||||||
|
|
||||||
[gitwin]: https://git-scm.com/download/win
|
[gitwin]: https://git-scm.com/download/win
|
||||||
[cmakewin]: http://www.cmake.org/download/#latest
|
[cmakewin]: http://www.cmake.org/download/#latest
|
||||||
[mingw]: http://www.mingw.org/
|
[mingw]: http://www.mingw.org/
|
||||||
|
|
||||||
Contributing
|
## Contributing
|
||||||
------------
|
|
||||||
|
|
||||||
See the [guide for contributors](CONTRIBUTING.md) for the best way to file issues, contribute code,
|
See the [guide for contributors](CONTRIBUTING.md) for the best way to file issues, contribute code,
|
||||||
and debug SolveSpace.
|
and debug SolveSpace.
|
||||||
|
|
||||||
License
|
## License
|
||||||
-------
|
|
||||||
|
|
||||||
SolveSpace is distributed under the terms of the [GPL v3](COPYING.txt) or later.
|
SolveSpace is distributed under the terms of the [GPL v3](COPYING.txt) or later.
|
||||||
|
|
|
@ -332,7 +332,8 @@ bool LinkIDF(const Platform::Path &filename, EntityList *el, SMesh *m, SShell *s
|
||||||
|
|
||||||
double board_thickness = 10.0;
|
double board_thickness = 10.0;
|
||||||
double scale = 1.0; //mm
|
double scale = 1.0; //mm
|
||||||
bool topEntities, bottomEntities;
|
bool topEntities = false;
|
||||||
|
bool bottomEntities = false;
|
||||||
|
|
||||||
Quaternion normal = Quaternion::From(Vector::From(1,0,0), Vector::From(0,1,0));
|
Quaternion normal = Quaternion::From(Vector::From(1,0,0), Vector::From(0,1,0));
|
||||||
hEntity hnorm = newNormal(el, &entityCount, normal);
|
hEntity hnorm = newNormal(el, &entityCount, normal);
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#ifndef SOLVESPACE_GUI_H
|
#ifndef SOLVESPACE_GUI_H
|
||||||
#define SOLVESPACE_GUI_H
|
#define SOLVESPACE_GUI_H
|
||||||
|
|
||||||
|
namespace SolveSpace {
|
||||||
class RgbaColor;
|
class RgbaColor;
|
||||||
|
|
||||||
namespace Platform {
|
namespace Platform {
|
||||||
|
@ -386,5 +387,6 @@ void ExitGui();
|
||||||
void ClearGui();
|
void ClearGui();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
} // namespace SolveSpace
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -372,6 +372,7 @@ MenuBarRef GetOrCreateMainMenu(bool *unique) {
|
||||||
double rotationGestureCurrent;
|
double rotationGestureCurrent;
|
||||||
Point2d trackpadPositionShift;
|
Point2d trackpadPositionShift;
|
||||||
bool inTrackpadScrollGesture;
|
bool inTrackpadScrollGesture;
|
||||||
|
int numTouches;
|
||||||
Platform::Window::Kind kind;
|
Platform::Window::Kind kind;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -397,6 +398,8 @@ MenuBarRef GetOrCreateMainMenu(bool *unique) {
|
||||||
editor.action = @selector(didEdit:);
|
editor.action = @selector(didEdit:);
|
||||||
|
|
||||||
inTrackpadScrollGesture = false;
|
inTrackpadScrollGesture = false;
|
||||||
|
numTouches = 0;
|
||||||
|
self.acceptsTouchEvents = YES;
|
||||||
kind = aKind;
|
kind = aKind;
|
||||||
if(kind == Platform::Window::Kind::TOPLEVEL) {
|
if(kind == Platform::Window::Kind::TOPLEVEL) {
|
||||||
NSGestureRecognizer *mag = [[NSMagnificationGestureRecognizer alloc] initWithTarget:self
|
NSGestureRecognizer *mag = [[NSMagnificationGestureRecognizer alloc] initWithTarget:self
|
||||||
|
@ -573,7 +576,9 @@ MenuBarRef GetOrCreateMainMenu(bool *unique) {
|
||||||
using Platform::MouseEvent;
|
using Platform::MouseEvent;
|
||||||
|
|
||||||
MouseEvent event = [self convertMouseEvent:nsEvent];
|
MouseEvent event = [self convertMouseEvent:nsEvent];
|
||||||
if(nsEvent.subtype == NSEventSubtypeTabletPoint && kind == Platform::Window::Kind::TOPLEVEL) {
|
// Check for number of touches to exclude single-finger scrolling on Magic Mouse
|
||||||
|
bool isTrackpadEvent = numTouches >= 2 && nsEvent.subtype == NSEventSubtypeTabletPoint;
|
||||||
|
if(isTrackpadEvent && kind == Platform::Window::Kind::TOPLEVEL) {
|
||||||
// This is how Cocoa represents 2 finger trackpad drag gestures, rather than going via
|
// This is how Cocoa represents 2 finger trackpad drag gestures, rather than going via
|
||||||
// NSPanGestureRecognizer which is how you might expect this to work... We complicate this
|
// NSPanGestureRecognizer which is how you might expect this to work... We complicate this
|
||||||
// further by also handling shift-two-finger-drag to mean rotate. Fortunately we're using
|
// further by also handling shift-two-finger-drag to mean rotate. Fortunately we're using
|
||||||
|
@ -626,6 +631,23 @@ MenuBarRef GetOrCreateMainMenu(bool *unique) {
|
||||||
receiver->onMouseEvent(event);
|
receiver->onMouseEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)touchesBeganWithEvent:(NSEvent *)event {
|
||||||
|
numTouches = [event touchesMatchingPhase:NSTouchPhaseTouching inView:self].count;
|
||||||
|
[super touchesBeganWithEvent:event];
|
||||||
|
}
|
||||||
|
- (void)touchesMovedWithEvent:(NSEvent *)event {
|
||||||
|
numTouches = [event touchesMatchingPhase:NSTouchPhaseTouching inView:self].count;
|
||||||
|
[super touchesMovedWithEvent:event];
|
||||||
|
}
|
||||||
|
- (void)touchesEndedWithEvent:(NSEvent *)event {
|
||||||
|
numTouches = [event touchesMatchingPhase:NSTouchPhaseTouching inView:self].count;
|
||||||
|
[super touchesEndedWithEvent:event];
|
||||||
|
}
|
||||||
|
- (void)touchesCancelledWithEvent:(NSEvent *)event {
|
||||||
|
numTouches = 0;
|
||||||
|
[super touchesCancelledWithEvent:event];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)mouseExited:(NSEvent *)nsEvent {
|
- (void)mouseExited:(NSEvent *)nsEvent {
|
||||||
using Platform::MouseEvent;
|
using Platform::MouseEvent;
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#ifndef SOLVESPACE_PLATFORM_H
|
#ifndef SOLVESPACE_PLATFORM_H
|
||||||
#define SOLVESPACE_PLATFORM_H
|
#define SOLVESPACE_PLATFORM_H
|
||||||
|
|
||||||
|
namespace SolveSpace {
|
||||||
namespace Platform {
|
namespace Platform {
|
||||||
|
|
||||||
// UTF-8 ⟷ UTF-16 conversion, for Windows.
|
// UTF-8 ⟷ UTF-16 conversion, for Windows.
|
||||||
|
@ -80,6 +81,7 @@ void DebugPrint(const char *fmt, ...);
|
||||||
void *AllocTemporary(size_t size);
|
void *AllocTemporary(size_t size);
|
||||||
void FreeAllTemporary();
|
void FreeAllTemporary();
|
||||||
|
|
||||||
}
|
} // namespace Platform
|
||||||
|
} // namespace SolveSpace
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -564,7 +564,7 @@ const BitmapFont::Glyph &BitmapFont::GetGlyph(char32_t codepoint) {
|
||||||
// Find the hex representation in the (sorted) Unifont file.
|
// Find the hex representation in the (sorted) Unifont file.
|
||||||
auto first = unifontData.cbegin(),
|
auto first = unifontData.cbegin(),
|
||||||
last = unifontData.cend();
|
last = unifontData.cend();
|
||||||
while(first <= last) {
|
while(first < last) {
|
||||||
auto mid = first + (last - first) / 2;
|
auto mid = first + (last - first) / 2;
|
||||||
while(mid != unifontData.cbegin()) {
|
while(mid != unifontData.cbegin()) {
|
||||||
if(*mid == '\n') {
|
if(*mid == '\n') {
|
||||||
|
@ -588,7 +588,10 @@ const BitmapFont::Glyph &BitmapFont::GetGlyph(char32_t codepoint) {
|
||||||
if(foundCodepoint < codepoint) {
|
if(foundCodepoint < codepoint) {
|
||||||
first = mid + 1;
|
first = mid + 1;
|
||||||
while(first != unifontData.cend()) {
|
while(first != unifontData.cend()) {
|
||||||
if(*first == '\n') break;
|
if(*first == '\n') {
|
||||||
|
first++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
first++;
|
first++;
|
||||||
}
|
}
|
||||||
continue; // and last stays the same
|
continue; // and last stays the same
|
||||||
|
|
|
@ -7,11 +7,23 @@
|
||||||
#ifndef SOLVESPACE_RESOURCE_H
|
#ifndef SOLVESPACE_RESOURCE_H
|
||||||
#define SOLVESPACE_RESOURCE_H
|
#define SOLVESPACE_RESOURCE_H
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
|
#include <map>
|
||||||
|
#include <memory>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace SolveSpace {
|
||||||
|
|
||||||
class Camera;
|
class Camera;
|
||||||
class Point2d;
|
class Point2d;
|
||||||
class Pixmap;
|
class Pixmap;
|
||||||
class Vector;
|
class Vector;
|
||||||
class RgbaColor;
|
class RgbaColor;
|
||||||
|
namespace Platform {
|
||||||
|
class Path;
|
||||||
|
} // namespace Platform
|
||||||
|
|
||||||
std::string LoadString(const std::string &name);
|
std::string LoadString(const std::string &name);
|
||||||
std::string LoadStringFromGzip(const std::string &name);
|
std::string LoadStringFromGzip(const std::string &name);
|
||||||
|
@ -109,4 +121,5 @@ public:
|
||||||
const std::function<void(Vector, Vector)> &traceEdge, const Camera &camera);
|
const std::function<void(Vector, Vector)> &traceEdge, const Camera &camera);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -7,6 +7,10 @@
|
||||||
#ifndef SOLVESPACE_H
|
#ifndef SOLVESPACE_H
|
||||||
#define SOLVESPACE_H
|
#define SOLVESPACE_H
|
||||||
|
|
||||||
|
#include "resource.h"
|
||||||
|
#include "platform/platform.h"
|
||||||
|
#include "platform/gui.h"
|
||||||
|
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
#include <climits>
|
#include <climits>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
@ -122,9 +126,6 @@ static constexpr double LENGTH_EPS = 1e-6;
|
||||||
static constexpr double VERY_POSITIVE = 1e10;
|
static constexpr double VERY_POSITIVE = 1e10;
|
||||||
static constexpr double VERY_NEGATIVE = -1e10;
|
static constexpr double VERY_NEGATIVE = -1e10;
|
||||||
|
|
||||||
#include "platform/platform.h"
|
|
||||||
#include "platform/gui.h"
|
|
||||||
#include "resource.h"
|
|
||||||
|
|
||||||
using Platform::AllocTemporary;
|
using Platform::AllocTemporary;
|
||||||
using Platform::FreeAllTemporary;
|
using Platform::FreeAllTemporary;
|
||||||
|
|
Loading…
Reference in New Issue