stage changes
This commit is contained in:
parent
38d628d4ef
commit
39b2063889
66
.clang-format
Normal file
66
.clang-format
Normal file
@ -0,0 +1,66 @@
|
||||
# Generated from CLion C/C++ Code Style settings
|
||||
BasedOnStyle: LLVM
|
||||
AccessModifierOffset: -4
|
||||
AlignAfterOpenBracket: Align
|
||||
AlignConsecutiveAssignments: None
|
||||
AlignOperands: Align
|
||||
AllowAllArgumentsOnNextLine: false
|
||||
AllowAllConstructorInitializersOnNextLine: false
|
||||
AllowAllParametersOfDeclarationOnNextLine: false
|
||||
AllowShortBlocksOnASingleLine: Always
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: All
|
||||
AllowShortIfStatementsOnASingleLine: Always
|
||||
AllowShortLambdasOnASingleLine: All
|
||||
AllowShortLoopsOnASingleLine: true
|
||||
AlwaysBreakAfterReturnType: None
|
||||
AlwaysBreakTemplateDeclarations: Yes
|
||||
BreakBeforeBraces: Custom
|
||||
BraceWrapping:
|
||||
AfterCaseLabel: false
|
||||
AfterClass: false
|
||||
AfterControlStatement: Never
|
||||
AfterEnum: false
|
||||
AfterFunction: false
|
||||
AfterNamespace: false
|
||||
AfterUnion: false
|
||||
BeforeCatch: false
|
||||
BeforeElse: false
|
||||
IndentBraces: false
|
||||
SplitEmptyFunction: false
|
||||
SplitEmptyRecord: true
|
||||
BreakBeforeBinaryOperators: None
|
||||
BreakBeforeTernaryOperators: true
|
||||
BreakConstructorInitializers: BeforeColon
|
||||
BreakInheritanceList: BeforeColon
|
||||
ColumnLimit: 0
|
||||
CompactNamespaces: false
|
||||
ContinuationIndentWidth: 8
|
||||
IndentCaseLabels: true
|
||||
IndentPPDirectives: None
|
||||
IndentWidth: 4
|
||||
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||
MaxEmptyLinesToKeep: 2
|
||||
NamespaceIndentation: All
|
||||
ObjCSpaceAfterProperty: false
|
||||
ObjCSpaceBeforeProtocolList: true
|
||||
PointerAlignment: Right
|
||||
ReflowComments: false
|
||||
SpaceAfterCStyleCast: true
|
||||
SpaceAfterLogicalNot: false
|
||||
SpaceAfterTemplateKeyword: false
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceBeforeCpp11BracedList: false
|
||||
SpaceBeforeCtorInitializerColon: true
|
||||
SpaceBeforeInheritanceColon: true
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpaceBeforeRangeBasedForLoopColon: false
|
||||
SpaceInEmptyParentheses: false
|
||||
SpacesBeforeTrailingComments: 0
|
||||
SpacesInAngles: false
|
||||
SpacesInCStyleCastParentheses: false
|
||||
SpacesInContainerLiterals: false
|
||||
SpacesInParentheses: false
|
||||
SpacesInSquareBrackets: false
|
||||
TabWidth: 4
|
||||
UseTab: Never
|
15
.vscode/c_cpp_properties.json
vendored
Normal file
15
.vscode/c_cpp_properties.json
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "windows-gcc",
|
||||
"compileCommands": ".vscode/compile_commands.json",
|
||||
"intelliSenseMode": "windows-gcc-x64",
|
||||
"compilerPath": "C:/Users/Administrator/scoop/apps/msys2/current/mingw64/bin/gcc.exe",
|
||||
"includePath": [
|
||||
"${workspaceFolder}/source"
|
||||
],
|
||||
"cppStandard": "gnu++20"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
26
.vscode/compile_commands.json
vendored
Normal file
26
.vscode/compile_commands.json
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
[
|
||||
{
|
||||
"directory": "c:\\Users\\Administrator\\Projects\\hpr",
|
||||
"arguments": ["C:\\Users\\Administrator\\scoop\\apps\\msys2\\current\\mingw64\\bin\\x86_64-w64-mingw32-g++.exe", "-c", "-m64", "-O3", "-std=c++20", "-Isource", "-IC:\\Users\\Administrator\\AppData\\Local\\.xmake\\packages\\i\\imgui\\v1.90-docking\\600835732f214b96b5dbfaccf42f7a60\\include", "-IC:\\Users\\Administrator\\AppData\\Local\\.xmake\\packages\\i\\imgui\\v1.90-docking\\600835732f214b96b5dbfaccf42f7a60\\include\\imgui", "-IC:\\Users\\Administrator\\AppData\\Local\\.xmake\\packages\\i\\imgui\\v1.90-docking\\600835732f214b96b5dbfaccf42f7a60\\include\\backends", "-IC:\\Users\\Administrator\\AppData\\Local\\.xmake\\packages\\i\\imgui\\v1.90-docking\\600835732f214b96b5dbfaccf42f7a60\\include\\misc\\cpp", "-IC:\\Users\\Administrator\\AppData\\Local\\.xmake\\packages\\i\\implot\\v0.15\\6861f774eb2844d6a543372e119845e3\\include", "-IC:\\Users\\Administrator\\AppData\\Local\\.xmake\\packages\\i\\imgui\\v1.90\\853d785fcf03454094beebf60559d12f\\include", "-IC:\\Users\\Administrator\\AppData\\Local\\.xmake\\packages\\i\\imgui\\v1.90\\853d785fcf03454094beebf60559d12f\\include\\imgui", "-IC:\\Users\\Administrator\\AppData\\Local\\.xmake\\packages\\i\\imgui\\v1.90\\853d785fcf03454094beebf60559d12f\\include\\backends", "-IC:\\Users\\Administrator\\AppData\\Local\\.xmake\\packages\\i\\imgui\\v1.90\\853d785fcf03454094beebf60559d12f\\include\\misc\\cpp", "-IC:\\Users\\Administrator\\AppData\\Local\\.xmake\\packages\\g\\glfw\\3.3.8\\d31abc5641874d8fbdc13f33b5569420\\include", "-IC:\\Users\\Administrator\\scoop\\apps\\msys2\\2023-10-26\\mingw64\\include", "-IC:\\Users\\Administrator\\scoop\\apps\\msys2\\2023-10-26\\mingw64\\include\\opencascade", "-DHPR_SCALAR=float", "-DGLFW_INCLUDE_NONE", "-DNDEBUG", "-o", "build\\.objs\\hpr\\mingw\\x86_64\\release\\source\\hpr\\hpr.cpp.obj", "source\\hpr\\hpr.cpp"],
|
||||
"file": "source\\hpr\\hpr.cpp"
|
||||
},
|
||||
{
|
||||
"directory": "c:\\Users\\Administrator\\Projects\\hpr",
|
||||
"arguments": ["C:\\Users\\Administrator\\scoop\\apps\\msys2\\current\\mingw64\\bin\\x86_64-w64-mingw32-g++.exe", "-c", "-m64", "-fvisibility=hidden", "-fvisibility-inlines-hidden", "-O3", "-std=c++20", "-Isource", "-IC:\\Users\\Administrator\\AppData\\Local\\.xmake\\packages\\g\\gtest\\1.12.1\\40112995bdf04048acde0ee5a34578c3\\include", "-DHPR_SCALAR=float", "-DNDEBUG", "-o", "build\\.objs\\tests\\mingw\\x86_64\\release\\source\\hpr\\tests\\main.cpp.obj", "source\\hpr\\tests\\main.cpp"],
|
||||
"file": "source\\hpr\\tests\\main.cpp"
|
||||
},
|
||||
{
|
||||
"directory": "c:\\Users\\Administrator\\Projects\\hpr",
|
||||
"arguments": ["C:\\Users\\Administrator\\scoop\\apps\\msys2\\current\\mingw64\\bin\\x86_64-w64-mingw32-g++.exe", "-c", "-m64", "-fvisibility=hidden", "-fvisibility-inlines-hidden", "-O3", "-std=c++20", "-Isource", "-IC:\\Users\\Administrator\\AppData\\Local\\.xmake\\packages\\g\\gtest\\1.12.1\\40112995bdf04048acde0ee5a34578c3\\include", "-DHPR_SCALAR=float", "-DNDEBUG", "-o", "build\\.objs\\tests\\mingw\\x86_64\\release\\source\\hpr\\tests\\test_container.cpp.obj", "source\\hpr\\tests\\test_container.cpp"],
|
||||
"file": "source\\hpr\\tests\\test_container.cpp"
|
||||
},
|
||||
{
|
||||
"directory": "c:\\Users\\Administrator\\Projects\\hpr",
|
||||
"arguments": ["C:\\Users\\Administrator\\scoop\\apps\\msys2\\current\\mingw64\\bin\\x86_64-w64-mingw32-g++.exe", "-c", "-m64", "-fvisibility=hidden", "-fvisibility-inlines-hidden", "-O3", "-std=c++20", "-Isource", "-IC:\\Users\\Administrator\\AppData\\Local\\.xmake\\packages\\g\\gtest\\1.12.1\\40112995bdf04048acde0ee5a34578c3\\include", "-DHPR_SCALAR=float", "-DNDEBUG", "-o", "build\\.objs\\tests\\mingw\\x86_64\\release\\source\\hpr\\tests\\test_math.cpp.obj", "source\\hpr\\tests\\test_math.cpp"],
|
||||
"file": "source\\hpr\\tests\\test_math.cpp"
|
||||
},
|
||||
{
|
||||
"directory": "c:\\Users\\Administrator\\Projects\\hpr",
|
||||
"arguments": ["C:\\Users\\Administrator\\scoop\\apps\\msys2\\current\\mingw64\\bin\\x86_64-w64-mingw32-g++.exe", "-c", "-m64", "-fvisibility=hidden", "-fvisibility-inlines-hidden", "-O3", "-std=c++20", "-Isource", "-IC:\\Users\\Administrator\\AppData\\Local\\.xmake\\packages\\g\\gtest\\1.12.1\\40112995bdf04048acde0ee5a34578c3\\include", "-DHPR_SCALAR=float", "-DNDEBUG", "-o", "build\\.objs\\tests\\mingw\\x86_64\\release\\source\\hpr\\tests\\test_numeric.cpp.obj", "source\\hpr\\tests\\test_numeric.cpp"],
|
||||
"file": "source\\hpr\\tests\\test_numeric.cpp"
|
||||
}]
|
@ -3,3 +3,4 @@
|
||||
#include <hpr/numeric.hpp>
|
||||
#include <hpr/container.hpp>
|
||||
#include <hpr/math.hpp>
|
||||
#include <hpr/shape.hpp>
|
||||
|
3
source/hpr/shape.hpp
Normal file
3
source/hpr/shape.hpp
Normal file
@ -0,0 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
#include <hpr/shape/shape.hpp>
|
360
source/hpr/shape/shape.hpp
Normal file
360
source/hpr/shape/shape.hpp
Normal file
@ -0,0 +1,360 @@
|
||||
#pragma once
|
||||
|
||||
#include <hpr/numeric.hpp>
|
||||
#include <hpr/container/dynamic_array.hpp>
|
||||
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
#include <Geom_Surface.hxx>
|
||||
#include <GeomLProp_SLProps.hxx>
|
||||
#include <Poly_Triangle.hxx>
|
||||
|
||||
#include <TopoDS.hxx>
|
||||
#include <TopoDS_Vertex.hxx>
|
||||
#include <TopoDS_Edge.hxx>
|
||||
#include <TopoDS_Wire.hxx>
|
||||
#include <TopoDS_Face.hxx>
|
||||
#include <TopoDS_Compound.hxx>
|
||||
#include <TopoDS_CompSolid.hxx>
|
||||
#include <TopoDS_Shell.hxx>
|
||||
#include <TopoDS_Solid.hxx>
|
||||
#include <TopExp_Explorer.hxx>
|
||||
|
||||
#include <BRepBuilderAPI_MakeVertex.hxx>
|
||||
#include <BRepBuilderAPI_MakeEdge.hxx>
|
||||
#include <BRepBuilderAPI_MakeWire.hxx>
|
||||
#include <BRepBuilderAPI_MakeFace.hxx>
|
||||
#include <BRepBuilderAPI_MakeShell.hxx>
|
||||
#include <BRepBuilderAPI_MakeSolid.hxx>
|
||||
#include <BRepBuilderAPI_Sewing.hxx>
|
||||
#include <BRep_Builder.hxx>
|
||||
|
||||
#include <BRepBndLib.hxx>
|
||||
|
||||
#include <BRep_Tool.hxx>
|
||||
#include <BRepTools.hxx>
|
||||
#include <BRepGProp.hxx>
|
||||
#include <GProp_GProps.hxx>
|
||||
#include <ShapeUpgrade_UnifySameDomain.hxx>
|
||||
#include <BRepExtrema_DistShapeShape.hxx>
|
||||
|
||||
#include <BRepBuilderAPI_Transform.hxx>
|
||||
#include <BRepBuilderAPI_GTransform.hxx>
|
||||
#include <BRepFilletAPI_MakeFillet.hxx>
|
||||
|
||||
#include <BRepAlgoAPI_Fuse.hxx>
|
||||
#include <BRepAlgoAPI_Common.hxx>
|
||||
#include <BRepAlgoAPI_Cut.hxx>
|
||||
|
||||
#include <BRepPrimAPI_MakeSphere.hxx>
|
||||
#include <BRepPrimAPI_MakeBox.hxx>
|
||||
#include <BRepPrimAPI_MakePrism.hxx>
|
||||
|
||||
#include <STEPControl_Writer.hxx>
|
||||
#include <Interface_Static.hxx>
|
||||
|
||||
#include <BRepMesh_IncrementalMesh.hxx>
|
||||
#include <Poly_PolygonOnTriangulation.hxx>
|
||||
#include <Poly_Triangulation.hxx>
|
||||
|
||||
#include <TopAbs_ShapeEnum.hxx>
|
||||
#include <TopLoc_Location.hxx>
|
||||
|
||||
#include <NCollection_List.hxx>
|
||||
|
||||
#include <ShapeFix_Solid.hxx>
|
||||
#include <ShapeFix_Shell.hxx>
|
||||
#include <ShapeFix_Face.hxx>
|
||||
|
||||
|
||||
|
||||
namespace hpr::csg
|
||||
{
|
||||
class Shape;
|
||||
}
|
||||
|
||||
namespace std
|
||||
{
|
||||
template<>
|
||||
struct less<hpr::csg::Shape>
|
||||
{
|
||||
bool operator() (const hpr::csg::Shape& s1, const hpr::csg::Shape& s2) const;
|
||||
};
|
||||
}
|
||||
|
||||
namespace hpr::csg
|
||||
{
|
||||
|
||||
// Class declaration
|
||||
|
||||
class Shape
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
enum class Type
|
||||
{
|
||||
Compound,
|
||||
Compsolid,
|
||||
Solid,
|
||||
Shell,
|
||||
Face,
|
||||
Wire,
|
||||
Edge,
|
||||
Vertex,
|
||||
Shape,
|
||||
Unknown
|
||||
};
|
||||
|
||||
enum class Format
|
||||
{
|
||||
Unknown,
|
||||
STEP
|
||||
};
|
||||
|
||||
class Metadata
|
||||
{
|
||||
public:
|
||||
std::string label;
|
||||
public:
|
||||
Metadata() :
|
||||
label {"default"}
|
||||
{}
|
||||
void merge(const Metadata& data)
|
||||
{
|
||||
if (label == "default" && data.label != "default")
|
||||
label = data.label;
|
||||
}
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
// TODO: clean up map
|
||||
static
|
||||
std::map<Shape, Shape::Metadata> metadata;
|
||||
|
||||
protected:
|
||||
|
||||
TopoDS_Shape p_shape;
|
||||
|
||||
public:
|
||||
|
||||
[[nodiscard]]
|
||||
TopoDS_Shape tshape() const { return p_shape; }
|
||||
|
||||
Shape(const TopoDS_Shape& s) :
|
||||
p_shape {s}
|
||||
{}
|
||||
|
||||
Shape(TopoDS_Shape&& s) noexcept:
|
||||
p_shape {std::forward<TopoDS_Shape>(s)}
|
||||
{}
|
||||
|
||||
public:
|
||||
|
||||
Shape() :
|
||||
p_shape {}
|
||||
{}
|
||||
|
||||
virtual
|
||||
~Shape() = default;
|
||||
//{
|
||||
//if (metadata.contains(*this))
|
||||
// metadata.erase(*this);
|
||||
//}
|
||||
|
||||
[[nodiscard]]
|
||||
Type type() const
|
||||
{
|
||||
switch (p_shape.ShapeType())
|
||||
{
|
||||
case TopAbs_VERTEX:
|
||||
return Type::Vertex;
|
||||
case TopAbs_EDGE:
|
||||
return Type::Edge;
|
||||
case TopAbs_FACE:
|
||||
return Type::Face;
|
||||
case TopAbs_WIRE:
|
||||
return Type::Wire;
|
||||
case TopAbs_SHELL:
|
||||
return Type::Shell;
|
||||
case TopAbs_SOLID:
|
||||
return Type::Solid;
|
||||
case TopAbs_COMPOUND:
|
||||
return Type::Compound;
|
||||
case TopAbs_COMPSOLID:
|
||||
return Type::Compsolid;
|
||||
case TopAbs_SHAPE:
|
||||
return Type::Shape;
|
||||
default:
|
||||
return Type::Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
[[nodiscard]]
|
||||
vec3 center() const
|
||||
{
|
||||
GProp_GProps props;
|
||||
|
||||
switch (type())
|
||||
{
|
||||
case Type::Solid:
|
||||
case Type::Compsolid:
|
||||
case Type::Compound:
|
||||
BRepGProp::VolumeProperties(p_shape, props);
|
||||
case Type::Shell:
|
||||
case Type::Face:
|
||||
BRepGProp::SurfaceProperties(p_shape, props);
|
||||
default:
|
||||
BRepGProp::LinearProperties(p_shape, props);
|
||||
}
|
||||
|
||||
gp_Pnt center {props.CentreOfMass()};
|
||||
|
||||
return vec3 {static_cast<scalar>(center.X()), static_cast<scalar>(center.Y()), static_cast<scalar>(center.Z())};
|
||||
}
|
||||
|
||||
[[nodiscard]]
|
||||
double length() const
|
||||
{
|
||||
GProp_GProps props;
|
||||
|
||||
switch (type())
|
||||
{
|
||||
case Type::Vertex:
|
||||
return 0;
|
||||
default:
|
||||
BRepGProp::LinearProperties(p_shape, props);
|
||||
return props.Mass();
|
||||
}
|
||||
}
|
||||
|
||||
[[nodiscard]]
|
||||
double area() const
|
||||
{
|
||||
GProp_GProps props;
|
||||
|
||||
switch (type())
|
||||
{
|
||||
case Type::Vertex:
|
||||
case Type::Edge:
|
||||
case Type::Wire:
|
||||
return 0;
|
||||
default:
|
||||
BRepGProp::SurfaceProperties(p_shape, props);
|
||||
return props.Mass();
|
||||
}
|
||||
}
|
||||
|
||||
[[nodiscard]]
|
||||
double volume() const
|
||||
{
|
||||
GProp_GProps props;
|
||||
|
||||
switch (type())
|
||||
{
|
||||
case Type::Compsolid:
|
||||
case Type::Solid:
|
||||
BRepGProp::VolumeProperties(p_shape, props);
|
||||
return props.Mass();
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void label(const std::string& label) const
|
||||
{
|
||||
metadata[*this].label = label;
|
||||
}
|
||||
|
||||
[[nodiscard]]
|
||||
std::string label() const
|
||||
{
|
||||
return metadata[*this].label;
|
||||
}
|
||||
|
||||
void dump(const std::string& filename, Format format) const
|
||||
{
|
||||
if (p_shape.IsNull())
|
||||
throw std::runtime_error("Trying to export null shape");
|
||||
|
||||
switch (format)
|
||||
{
|
||||
case Format::STEP:
|
||||
{
|
||||
STEPControl_Writer writer;
|
||||
Interface_Static::SetCVal("xstep.cascade.unit", "MM");
|
||||
Interface_Static::SetCVal("write.step.unit", "MM");
|
||||
Interface_Static::SetIVal("write.step.nonmanifold", 1);
|
||||
|
||||
writer.Transfer(p_shape, STEPControl_AsIs);
|
||||
writer.Write(filename.c_str());
|
||||
break;
|
||||
}
|
||||
case Format::Unknown:
|
||||
default:
|
||||
throw std::invalid_argument("Unknown export format");
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
[[nodiscard]]
|
||||
sarray<vec3, 2> boundingBox() const
|
||||
{
|
||||
Bnd_Box bbox;
|
||||
BRepBndLib::Add(p_shape, bbox, true);
|
||||
gp_Pnt p1 {bbox.CornerMin()};
|
||||
gp_Pnt p2 {bbox.CornerMax()};
|
||||
|
||||
return sarray<vec3, 2> {
|
||||
{static_cast<scalar>(p1.X()), static_cast<scalar>(p1.Y()), static_cast<scalar>(p1.Z())},
|
||||
{static_cast<scalar>(p2.X()), static_cast<scalar>(p2.Y()), static_cast<scalar>(p2.Z())}
|
||||
};
|
||||
}
|
||||
|
||||
void incrementalMesh(double deflection)
|
||||
{
|
||||
BRepTools::Clean(p_shape);
|
||||
BRepMesh_IncrementalMesh(p_shape, deflection, true);
|
||||
}
|
||||
|
||||
darray<Shape> subShapes(Type type) const
|
||||
{
|
||||
darray<Shape> shapes;
|
||||
for (TopExp_Explorer exp(p_shape, static_cast<TopAbs_ShapeEnum>(type)); exp.More(); exp.Next())
|
||||
shapes.push(Shape(exp.Current()));
|
||||
return shapes;
|
||||
}
|
||||
|
||||
darray<Shape> edges() const
|
||||
{
|
||||
return subShapes(Type::Edge);
|
||||
}
|
||||
|
||||
darray<Shape> faces() const
|
||||
{
|
||||
return subShapes(Type::Face);
|
||||
}
|
||||
|
||||
darray<Shape> shells() const
|
||||
{
|
||||
return subShapes(Type::Shell);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
double distance(const Shape& lhs, const Shape& rhs)
|
||||
{
|
||||
return BRepExtrema_DistShapeShape(lhs.tshape(), rhs.tshape()).Value();
|
||||
}
|
||||
|
||||
}
|
||||
|
5
source/hpr/shape/shape_impl_occ.cpp
Normal file
5
source/hpr/shape/shape_impl_occ.cpp
Normal file
@ -0,0 +1,5 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -31,7 +31,7 @@ add_requires("implot v0.15")
|
||||
add_requires("glfw 3.3.8")
|
||||
|
||||
if has_config("csg") then
|
||||
add_requires("conan::opencascade/7.6.2")
|
||||
add_requires("pacman::opencascade 7.7.2", {alias = "opencascade"})
|
||||
end
|
||||
|
||||
if has_config("tests") then
|
||||
|
Loading…
Reference in New Issue
Block a user