Add an option to display areas of closed contours.
This is useful e.g. for architectural work.pull/238/head
parent
c0b6eaa935
commit
99f6ea34f1
|
@ -49,6 +49,7 @@ New measurement/analysis features:
|
||||||
"Analyze → Measure Perimeter".
|
"Analyze → Measure Perimeter".
|
||||||
* New command for measuring center of mass, with live updates as the sketch
|
* New command for measuring center of mass, with live updates as the sketch
|
||||||
changes, "Analyze → Center of Mass".
|
changes, "Analyze → Center of Mass".
|
||||||
|
* New option for displaying areas of closed contours.
|
||||||
* When selecting a point and a line, projected distance to to current
|
* When selecting a point and a line, projected distance to to current
|
||||||
workplane is displayed.
|
workplane is displayed.
|
||||||
|
|
||||||
|
|
|
@ -84,6 +84,11 @@ void TextWindow::ScreenChangeBackFaces(int link, uint32_t v) {
|
||||||
InvalidateGraphics();
|
InvalidateGraphics();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TextWindow::ScreenChangeShowContourAreas(int link, uint32_t v) {
|
||||||
|
SS.showContourAreas = !SS.showContourAreas;
|
||||||
|
InvalidateGraphics();
|
||||||
|
}
|
||||||
|
|
||||||
void TextWindow::ScreenChangeCheckClosedContour(int link, uint32_t v) {
|
void TextWindow::ScreenChangeCheckClosedContour(int link, uint32_t v) {
|
||||||
SS.checkClosedContour = !SS.checkClosedContour;
|
SS.checkClosedContour = !SS.checkClosedContour;
|
||||||
InvalidateGraphics();
|
InvalidateGraphics();
|
||||||
|
@ -297,6 +302,9 @@ void TextWindow::ShowConfiguration() {
|
||||||
Printf(false, " %Fd%f%Ll%s check sketch for closed contour%E",
|
Printf(false, " %Fd%f%Ll%s check sketch for closed contour%E",
|
||||||
&ScreenChangeCheckClosedContour,
|
&ScreenChangeCheckClosedContour,
|
||||||
SS.checkClosedContour ? CHECK_TRUE : CHECK_FALSE);
|
SS.checkClosedContour ? CHECK_TRUE : CHECK_FALSE);
|
||||||
|
Printf(false, " %Fd%f%Ll%s show areas of closed contours%E",
|
||||||
|
&ScreenChangeShowContourAreas,
|
||||||
|
SS.showContourAreas ? CHECK_TRUE : CHECK_FALSE);
|
||||||
|
|
||||||
Printf(false, "");
|
Printf(false, "");
|
||||||
Printf(false, "%Ft autosave interval (in minutes)%E");
|
Printf(false, "%Ft autosave interval (in minutes)%E");
|
||||||
|
|
10
src/draw.cpp
10
src/draw.cpp
|
@ -693,6 +693,16 @@ void GraphicsWindow::Draw(Canvas *canvas) {
|
||||||
c.Draw(Constraint::DrawAs::DEFAULT, canvas);
|
c.Draw(Constraint::DrawAs::DEFAULT, canvas);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Draw areas
|
||||||
|
if(SS.showContourAreas) {
|
||||||
|
for(hGroup hg : SK.groupOrder) {
|
||||||
|
Group *g = SK.GetGroup(hg);
|
||||||
|
if(g->h.v != activeGroup.v) continue;
|
||||||
|
if(!(g->IsVisible())) continue;
|
||||||
|
g->DrawContourAreaLabels(canvas);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Draw the "pending" constraint, i.e. a constraint that would be
|
// Draw the "pending" constraint, i.e. a constraint that would be
|
||||||
// placed on a line that is almost horizontal or vertical.
|
// placed on a line that is almost horizontal or vertical.
|
||||||
if(SS.GW.pending.operation == Pending::DRAGGING_NEW_LINE_POINT &&
|
if(SS.GW.pending.operation == Pending::DRAGGING_NEW_LINE_POINT &&
|
||||||
|
|
|
@ -677,3 +677,38 @@ void Group::DrawFilledPaths(Canvas *canvas) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Group::DrawContourAreaLabels(Canvas *canvas) {
|
||||||
|
const Camera &camera = canvas->GetCamera();
|
||||||
|
Vector gr = camera.projRight.ScaledBy(1 / camera.scale);
|
||||||
|
Vector gu = camera.projUp.ScaledBy(1 / camera.scale);
|
||||||
|
|
||||||
|
for(SBezierLoopSet &sbls : bezierLoops.l) {
|
||||||
|
if(sbls.l.n == 0 || sbls.l.elem[0].l.n == 0) continue;
|
||||||
|
|
||||||
|
Vector min = sbls.l.elem[0].l.elem[0].ctrl[0];
|
||||||
|
Vector max = min;
|
||||||
|
Vector zero = Vector::From(0.0, 0.0, 0.0);
|
||||||
|
sbls.GetBoundingProjd(Vector::From(1.0, 0.0, 0.0), zero, &min.x, &max.x);
|
||||||
|
sbls.GetBoundingProjd(Vector::From(0.0, 1.0, 0.0), zero, &min.y, &max.y);
|
||||||
|
sbls.GetBoundingProjd(Vector::From(0.0, 0.0, 1.0), zero, &min.z, &max.z);
|
||||||
|
|
||||||
|
Vector mid = min.Plus(max).ScaledBy(0.5);
|
||||||
|
|
||||||
|
hStyle hs = { Style::CONSTRAINT };
|
||||||
|
Canvas::Stroke stroke = Style::Stroke(hs);
|
||||||
|
stroke.layer = Canvas::Layer::FRONT;
|
||||||
|
|
||||||
|
double scale = SS.MmPerUnit();
|
||||||
|
std::string label = ssprintf("%.3f %s²",
|
||||||
|
fabs(sbls.SignedArea() / (scale * scale)),
|
||||||
|
SS.UnitName());
|
||||||
|
|
||||||
|
double fontHeight = Style::TextHeight(hs);
|
||||||
|
double textWidth = VectorFont::Builtin()->GetWidth(fontHeight, label),
|
||||||
|
textHeight = VectorFont::Builtin()->GetCapHeight(fontHeight);
|
||||||
|
Vector pos = mid.Minus(gr.ScaledBy(textWidth / 2.0))
|
||||||
|
.Minus(gu.ScaledBy(textHeight / 2.0));
|
||||||
|
canvas->DrawVectorText(label, fontHeight, pos, gr, gu, canvas->GetStroke(stroke));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -287,6 +287,7 @@ public:
|
||||||
void Draw(Canvas *canvas);
|
void Draw(Canvas *canvas);
|
||||||
void DrawPolyError(Canvas *canvas);
|
void DrawPolyError(Canvas *canvas);
|
||||||
void DrawFilledPaths(Canvas *canvas);
|
void DrawFilledPaths(Canvas *canvas);
|
||||||
|
void DrawContourAreaLabels(Canvas *canvas);
|
||||||
|
|
||||||
SPolygon GetPolygon();
|
SPolygon GetPolygon();
|
||||||
|
|
||||||
|
|
|
@ -70,6 +70,8 @@ void SolveSpaceUI::Init() {
|
||||||
drawBackFaces = CnfThawBool(true, "DrawBackFaces");
|
drawBackFaces = CnfThawBool(true, "DrawBackFaces");
|
||||||
// Check that contours are closed and not self-intersecting
|
// Check that contours are closed and not self-intersecting
|
||||||
checkClosedContour = CnfThawBool(true, "CheckClosedContour");
|
checkClosedContour = CnfThawBool(true, "CheckClosedContour");
|
||||||
|
// Draw closed polygons areas
|
||||||
|
showContourAreas = CnfThawBool(false, "ShowContourAreas");
|
||||||
// Export shaded triangles in a 2d view
|
// Export shaded triangles in a 2d view
|
||||||
exportShadedTriangles = CnfThawBool(true, "ExportShadedTriangles");
|
exportShadedTriangles = CnfThawBool(true, "ExportShadedTriangles");
|
||||||
// Export pwl curves (instead of exact) always
|
// Export pwl curves (instead of exact) always
|
||||||
|
@ -191,6 +193,8 @@ void SolveSpaceUI::Exit() {
|
||||||
CnfFreezeBool(fixExportColors, "FixExportColors");
|
CnfFreezeBool(fixExportColors, "FixExportColors");
|
||||||
// Draw back faces of triangles (when mesh is leaky/self-intersecting)
|
// Draw back faces of triangles (when mesh is leaky/self-intersecting)
|
||||||
CnfFreezeBool(drawBackFaces, "DrawBackFaces");
|
CnfFreezeBool(drawBackFaces, "DrawBackFaces");
|
||||||
|
// Draw closed polygons areas
|
||||||
|
CnfFreezeBool(showContourAreas, "ShowContourAreas");
|
||||||
// Check that contours are closed and not self-intersecting
|
// Check that contours are closed and not self-intersecting
|
||||||
CnfFreezeBool(checkClosedContour, "CheckClosedContour");
|
CnfFreezeBool(checkClosedContour, "CheckClosedContour");
|
||||||
// Export shaded triangles in a 2d view
|
// Export shaded triangles in a 2d view
|
||||||
|
|
|
@ -651,6 +651,7 @@ public:
|
||||||
float exportOffset;
|
float exportOffset;
|
||||||
bool fixExportColors;
|
bool fixExportColors;
|
||||||
bool drawBackFaces;
|
bool drawBackFaces;
|
||||||
|
bool showContourAreas;
|
||||||
bool checkClosedContour;
|
bool checkClosedContour;
|
||||||
bool showToolbar;
|
bool showToolbar;
|
||||||
Platform::Path screenshotFile;
|
Platform::Path screenshotFile;
|
||||||
|
|
|
@ -536,6 +536,17 @@ void SBezierLoopSet::GetBoundingProjd(Vector u, Vector orig,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double SBezierLoopSet::SignedArea() {
|
||||||
|
if(EXACT(area == 0.0)) {
|
||||||
|
SPolygon sp = {};
|
||||||
|
MakePwlInto(&sp);
|
||||||
|
sp.normal = sp.ComputeNormal();
|
||||||
|
area = sp.SignedArea();
|
||||||
|
sp.Clear();
|
||||||
|
}
|
||||||
|
return area;
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Convert all the Beziers into piecewise linear form, and assemble that into
|
// Convert all the Beziers into piecewise linear form, and assemble that into
|
||||||
// a polygon, one contour per loop.
|
// a polygon, one contour per loop.
|
||||||
|
|
|
@ -151,6 +151,7 @@ public:
|
||||||
List<SBezierLoop> l;
|
List<SBezierLoop> l;
|
||||||
Vector normal;
|
Vector normal;
|
||||||
Vector point;
|
Vector point;
|
||||||
|
double area;
|
||||||
|
|
||||||
static SBezierLoopSet From(SBezierList *spcl, SPolygon *poly,
|
static SBezierLoopSet From(SBezierList *spcl, SPolygon *poly,
|
||||||
double chordTol,
|
double chordTol,
|
||||||
|
@ -158,6 +159,7 @@ public:
|
||||||
SBezierList *openContours);
|
SBezierList *openContours);
|
||||||
|
|
||||||
void GetBoundingProjd(Vector u, Vector orig, double *umin, double *umax) const;
|
void GetBoundingProjd(Vector u, Vector orig, double *umin, double *umax) const;
|
||||||
|
double SignedArea();
|
||||||
void MakePwlInto(SPolygon *sp) const;
|
void MakePwlInto(SPolygon *sp) const;
|
||||||
void Clear();
|
void Clear();
|
||||||
};
|
};
|
||||||
|
|
1
src/ui.h
1
src/ui.h
|
@ -517,6 +517,7 @@ public:
|
||||||
|
|
||||||
static void ScreenChangeFixExportColors(int link, uint32_t v);
|
static void ScreenChangeFixExportColors(int link, uint32_t v);
|
||||||
static void ScreenChangeBackFaces(int link, uint32_t v);
|
static void ScreenChangeBackFaces(int link, uint32_t v);
|
||||||
|
static void ScreenChangeShowContourAreas(int link, uint32_t v);
|
||||||
static void ScreenChangeCheckClosedContour(int link, uint32_t v);
|
static void ScreenChangeCheckClosedContour(int link, uint32_t v);
|
||||||
static void ScreenChangePwlCurves(int link, uint32_t v);
|
static void ScreenChangePwlCurves(int link, uint32_t v);
|
||||||
static void ScreenChangeCanvasSizeAuto(int link, uint32_t v);
|
static void ScreenChangeCanvasSizeAuto(int link, uint32_t v);
|
||||||
|
|
|
@ -11,6 +11,7 @@ endforeach()
|
||||||
|
|
||||||
set(testsuite_SOURCES
|
set(testsuite_SOURCES
|
||||||
harness.cpp
|
harness.cpp
|
||||||
|
analysis/contour_area/test.cpp
|
||||||
core/expr/test.cpp
|
core/expr/test.cpp
|
||||||
core/locale/test.cpp
|
core/locale/test.cpp
|
||||||
core/path/test.cpp
|
core/path/test.cpp
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 4.8 KiB |
|
@ -0,0 +1,512 @@
|
||||||
|
±²³SolveSpaceREVa
|
||||||
|
|
||||||
|
|
||||||
|
Group.h.v=00000001
|
||||||
|
Group.type=5000
|
||||||
|
Group.name=#references
|
||||||
|
Group.color=ff000000
|
||||||
|
Group.skipFirst=0
|
||||||
|
Group.predef.swapUV=0
|
||||||
|
Group.predef.negateU=0
|
||||||
|
Group.predef.negateV=0
|
||||||
|
Group.visible=1
|
||||||
|
Group.suppress=0
|
||||||
|
Group.relaxConstraints=0
|
||||||
|
Group.allowRedundant=0
|
||||||
|
Group.allDimsReference=0
|
||||||
|
Group.scale=1.00000000000000000000
|
||||||
|
Group.remap={
|
||||||
|
}
|
||||||
|
AddGroup
|
||||||
|
|
||||||
|
Group.h.v=00000002
|
||||||
|
Group.type=5001
|
||||||
|
Group.order=1
|
||||||
|
Group.name=sketch-in-plane
|
||||||
|
Group.activeWorkplane.v=80020000
|
||||||
|
Group.color=ff000000
|
||||||
|
Group.subtype=6000
|
||||||
|
Group.skipFirst=0
|
||||||
|
Group.predef.q.w=1.00000000000000000000
|
||||||
|
Group.predef.origin.v=00010001
|
||||||
|
Group.predef.swapUV=0
|
||||||
|
Group.predef.negateU=0
|
||||||
|
Group.predef.negateV=0
|
||||||
|
Group.visible=1
|
||||||
|
Group.suppress=0
|
||||||
|
Group.relaxConstraints=0
|
||||||
|
Group.allowRedundant=0
|
||||||
|
Group.allDimsReference=0
|
||||||
|
Group.scale=1.00000000000000000000
|
||||||
|
Group.remap={
|
||||||
|
}
|
||||||
|
AddGroup
|
||||||
|
|
||||||
|
Param.h.v.=00010010
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00010011
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00010012
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00010020
|
||||||
|
Param.val=1.00000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00010021
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00010022
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00010023
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00020010
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00020011
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00020012
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00020020
|
||||||
|
Param.val=0.50000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00020021
|
||||||
|
Param.val=0.50000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00020022
|
||||||
|
Param.val=0.50000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00020023
|
||||||
|
Param.val=0.50000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00030010
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00030011
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00030012
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00030020
|
||||||
|
Param.val=0.50000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00030021
|
||||||
|
Param.val=-0.50000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00030022
|
||||||
|
Param.val=-0.50000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00030023
|
||||||
|
Param.val=-0.50000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00040010
|
||||||
|
Param.val=10.00000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00040011
|
||||||
|
Param.val=-10.00000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00040013
|
||||||
|
Param.val=10.00000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00040014
|
||||||
|
Param.val=10.00000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00050010
|
||||||
|
Param.val=-10.00000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00050011
|
||||||
|
Param.val=-10.00000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00050013
|
||||||
|
Param.val=10.00000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00050014
|
||||||
|
Param.val=-10.00000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00060010
|
||||||
|
Param.val=-10.00000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00060011
|
||||||
|
Param.val=10.00000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00060013
|
||||||
|
Param.val=-10.00000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00060014
|
||||||
|
Param.val=-10.00000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00070010
|
||||||
|
Param.val=10.00000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00070011
|
||||||
|
Param.val=10.00000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00070013
|
||||||
|
Param.val=-10.00000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Param.h.v.=00070014
|
||||||
|
Param.val=10.00000000000000000000
|
||||||
|
AddParam
|
||||||
|
|
||||||
|
Request.h.v=00000001
|
||||||
|
Request.type=100
|
||||||
|
Request.group.v=00000001
|
||||||
|
Request.construction=0
|
||||||
|
AddRequest
|
||||||
|
|
||||||
|
Request.h.v=00000002
|
||||||
|
Request.type=100
|
||||||
|
Request.group.v=00000001
|
||||||
|
Request.construction=0
|
||||||
|
AddRequest
|
||||||
|
|
||||||
|
Request.h.v=00000003
|
||||||
|
Request.type=100
|
||||||
|
Request.group.v=00000001
|
||||||
|
Request.construction=0
|
||||||
|
AddRequest
|
||||||
|
|
||||||
|
Request.h.v=00000004
|
||||||
|
Request.type=200
|
||||||
|
Request.workplane.v=80020000
|
||||||
|
Request.group.v=00000002
|
||||||
|
Request.construction=0
|
||||||
|
AddRequest
|
||||||
|
|
||||||
|
Request.h.v=00000005
|
||||||
|
Request.type=200
|
||||||
|
Request.workplane.v=80020000
|
||||||
|
Request.group.v=00000002
|
||||||
|
Request.construction=0
|
||||||
|
AddRequest
|
||||||
|
|
||||||
|
Request.h.v=00000006
|
||||||
|
Request.type=200
|
||||||
|
Request.workplane.v=80020000
|
||||||
|
Request.group.v=00000002
|
||||||
|
Request.construction=0
|
||||||
|
AddRequest
|
||||||
|
|
||||||
|
Request.h.v=00000007
|
||||||
|
Request.type=200
|
||||||
|
Request.workplane.v=80020000
|
||||||
|
Request.group.v=00000002
|
||||||
|
Request.construction=0
|
||||||
|
AddRequest
|
||||||
|
|
||||||
|
Entity.h.v=00010000
|
||||||
|
Entity.type=10000
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.point[0].v=00010001
|
||||||
|
Entity.normal.v=00010020
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00010001
|
||||||
|
Entity.type=2000
|
||||||
|
Entity.construction=1
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00010020
|
||||||
|
Entity.type=3000
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.point[0].v=00010001
|
||||||
|
Entity.actNormal.w=1.00000000000000000000
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00020000
|
||||||
|
Entity.type=10000
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.point[0].v=00020001
|
||||||
|
Entity.normal.v=00020020
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00020001
|
||||||
|
Entity.type=2000
|
||||||
|
Entity.construction=1
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00020020
|
||||||
|
Entity.type=3000
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.point[0].v=00020001
|
||||||
|
Entity.actNormal.w=0.50000000000000000000
|
||||||
|
Entity.actNormal.vx=0.50000000000000000000
|
||||||
|
Entity.actNormal.vy=0.50000000000000000000
|
||||||
|
Entity.actNormal.vz=0.50000000000000000000
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00030000
|
||||||
|
Entity.type=10000
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.point[0].v=00030001
|
||||||
|
Entity.normal.v=00030020
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00030001
|
||||||
|
Entity.type=2000
|
||||||
|
Entity.construction=1
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00030020
|
||||||
|
Entity.type=3000
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.point[0].v=00030001
|
||||||
|
Entity.actNormal.w=0.50000000000000000000
|
||||||
|
Entity.actNormal.vx=-0.50000000000000000000
|
||||||
|
Entity.actNormal.vy=-0.50000000000000000000
|
||||||
|
Entity.actNormal.vz=-0.50000000000000000000
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00040000
|
||||||
|
Entity.type=11000
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.point[0].v=00040001
|
||||||
|
Entity.point[1].v=00040002
|
||||||
|
Entity.workplane.v=80020000
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00040001
|
||||||
|
Entity.type=2001
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.workplane.v=80020000
|
||||||
|
Entity.actPoint.x=10.00000000000000000000
|
||||||
|
Entity.actPoint.y=-10.00000000000000000000
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00040002
|
||||||
|
Entity.type=2001
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.workplane.v=80020000
|
||||||
|
Entity.actPoint.x=10.00000000000000000000
|
||||||
|
Entity.actPoint.y=10.00000000000000000000
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00050000
|
||||||
|
Entity.type=11000
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.point[0].v=00050001
|
||||||
|
Entity.point[1].v=00050002
|
||||||
|
Entity.workplane.v=80020000
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00050001
|
||||||
|
Entity.type=2001
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.workplane.v=80020000
|
||||||
|
Entity.actPoint.x=-10.00000000000000000000
|
||||||
|
Entity.actPoint.y=-10.00000000000000000000
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00050002
|
||||||
|
Entity.type=2001
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.workplane.v=80020000
|
||||||
|
Entity.actPoint.x=10.00000000000000000000
|
||||||
|
Entity.actPoint.y=-10.00000000000000000000
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00060000
|
||||||
|
Entity.type=11000
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.point[0].v=00060001
|
||||||
|
Entity.point[1].v=00060002
|
||||||
|
Entity.workplane.v=80020000
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00060001
|
||||||
|
Entity.type=2001
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.workplane.v=80020000
|
||||||
|
Entity.actPoint.x=-10.00000000000000000000
|
||||||
|
Entity.actPoint.y=10.00000000000000000000
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00060002
|
||||||
|
Entity.type=2001
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.workplane.v=80020000
|
||||||
|
Entity.actPoint.x=-10.00000000000000000000
|
||||||
|
Entity.actPoint.y=-10.00000000000000000000
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00070000
|
||||||
|
Entity.type=11000
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.point[0].v=00070001
|
||||||
|
Entity.point[1].v=00070002
|
||||||
|
Entity.workplane.v=80020000
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00070001
|
||||||
|
Entity.type=2001
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.workplane.v=80020000
|
||||||
|
Entity.actPoint.x=10.00000000000000000000
|
||||||
|
Entity.actPoint.y=10.00000000000000000000
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=00070002
|
||||||
|
Entity.type=2001
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.workplane.v=80020000
|
||||||
|
Entity.actPoint.x=-10.00000000000000000000
|
||||||
|
Entity.actPoint.y=10.00000000000000000000
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=80020000
|
||||||
|
Entity.type=10000
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.point[0].v=80020002
|
||||||
|
Entity.normal.v=80020001
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=80020001
|
||||||
|
Entity.type=3010
|
||||||
|
Entity.construction=0
|
||||||
|
Entity.point[0].v=80020002
|
||||||
|
Entity.actNormal.w=1.00000000000000000000
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Entity.h.v=80020002
|
||||||
|
Entity.type=2012
|
||||||
|
Entity.construction=1
|
||||||
|
Entity.actVisible=1
|
||||||
|
AddEntity
|
||||||
|
|
||||||
|
Constraint.h.v=00000001
|
||||||
|
Constraint.type=20
|
||||||
|
Constraint.group.v=00000002
|
||||||
|
Constraint.workplane.v=80020000
|
||||||
|
Constraint.ptA.v=00040001
|
||||||
|
Constraint.ptB.v=00050002
|
||||||
|
Constraint.other=0
|
||||||
|
Constraint.other2=0
|
||||||
|
Constraint.reference=0
|
||||||
|
AddConstraint
|
||||||
|
|
||||||
|
Constraint.h.v=00000002
|
||||||
|
Constraint.type=20
|
||||||
|
Constraint.group.v=00000002
|
||||||
|
Constraint.workplane.v=80020000
|
||||||
|
Constraint.ptA.v=00050001
|
||||||
|
Constraint.ptB.v=00060002
|
||||||
|
Constraint.other=0
|
||||||
|
Constraint.other2=0
|
||||||
|
Constraint.reference=0
|
||||||
|
AddConstraint
|
||||||
|
|
||||||
|
Constraint.h.v=00000003
|
||||||
|
Constraint.type=20
|
||||||
|
Constraint.group.v=00000002
|
||||||
|
Constraint.workplane.v=80020000
|
||||||
|
Constraint.ptA.v=00060001
|
||||||
|
Constraint.ptB.v=00070002
|
||||||
|
Constraint.other=0
|
||||||
|
Constraint.other2=0
|
||||||
|
Constraint.reference=0
|
||||||
|
AddConstraint
|
||||||
|
|
||||||
|
Constraint.h.v=00000004
|
||||||
|
Constraint.type=20
|
||||||
|
Constraint.group.v=00000002
|
||||||
|
Constraint.workplane.v=80020000
|
||||||
|
Constraint.ptA.v=00070001
|
||||||
|
Constraint.ptB.v=00040002
|
||||||
|
Constraint.other=0
|
||||||
|
Constraint.other2=0
|
||||||
|
Constraint.reference=0
|
||||||
|
AddConstraint
|
||||||
|
|
||||||
|
Constraint.h.v=00000005
|
||||||
|
Constraint.type=81
|
||||||
|
Constraint.group.v=00000002
|
||||||
|
Constraint.workplane.v=80020000
|
||||||
|
Constraint.entityA.v=00040000
|
||||||
|
Constraint.other=0
|
||||||
|
Constraint.other2=0
|
||||||
|
Constraint.reference=0
|
||||||
|
AddConstraint
|
||||||
|
|
||||||
|
Constraint.h.v=00000006
|
||||||
|
Constraint.type=80
|
||||||
|
Constraint.group.v=00000002
|
||||||
|
Constraint.workplane.v=80020000
|
||||||
|
Constraint.entityA.v=00050000
|
||||||
|
Constraint.other=0
|
||||||
|
Constraint.other2=0
|
||||||
|
Constraint.reference=0
|
||||||
|
AddConstraint
|
||||||
|
|
||||||
|
Constraint.h.v=00000007
|
||||||
|
Constraint.type=81
|
||||||
|
Constraint.group.v=00000002
|
||||||
|
Constraint.workplane.v=80020000
|
||||||
|
Constraint.entityA.v=00060000
|
||||||
|
Constraint.other=0
|
||||||
|
Constraint.other2=0
|
||||||
|
Constraint.reference=0
|
||||||
|
AddConstraint
|
||||||
|
|
||||||
|
Constraint.h.v=00000008
|
||||||
|
Constraint.type=80
|
||||||
|
Constraint.group.v=00000002
|
||||||
|
Constraint.workplane.v=80020000
|
||||||
|
Constraint.entityA.v=00070000
|
||||||
|
Constraint.other=0
|
||||||
|
Constraint.other2=0
|
||||||
|
Constraint.reference=0
|
||||||
|
AddConstraint
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
#include "harness.h"
|
||||||
|
|
||||||
|
TEST_CASE(normal_roundtrip) {
|
||||||
|
SS.showContourAreas = true;
|
||||||
|
CHECK_LOAD("normal.slvs");
|
||||||
|
CHECK_RENDER("normal.png");
|
||||||
|
}
|
Loading…
Reference in New Issue