From dea573e15695fbd610fe059de199d4f7512d3610 Mon Sep 17 00:00:00 2001 From: whitequark Date: Fri, 17 Feb 2017 03:18:34 +0000 Subject: [PATCH] Highlight normals and circle radii that have a degree of freedom. --- .gitignore | 2 +- src/drawentity.cpp | 28 ++++++++++++++++++++++++ src/graphicswin.cpp | 1 + src/style.cpp | 2 +- test/request/circle/free_in_3d.png | Bin 0 -> 4806 bytes test/request/circle/free_in_3d.slvs | Bin 0 -> 4983 bytes test/request/circle/free_in_3d_dof.png | Bin 0 -> 7197 bytes test/request/circle/free_in_3d_v20.slvs | Bin 0 -> 4891 bytes test/request/circle/free_in_3d_v22.slvs | Bin 0 -> 4983 bytes test/request/circle/normal_dof.png | Bin 0 -> 4820 bytes test/request/circle/test.cpp | 28 ++++++++++++++++++++++++ 11 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 test/request/circle/free_in_3d.png create mode 100644 test/request/circle/free_in_3d.slvs create mode 100644 test/request/circle/free_in_3d_dof.png create mode 100644 test/request/circle/free_in_3d_v20.slvs create mode 100644 test/request/circle/free_in_3d_v22.slvs create mode 100644 test/request/circle/normal_dof.png diff --git a/.gitignore b/.gitignore index a85e90e..5301e14 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,4 @@ /debian/libslvs1/ /debian/libslvs1-dev/ /obj-*/ -*.slvs +/*.slvs diff --git a/src/drawentity.cpp b/src/drawentity.cpp index 7f534ef..1e5a31e 100644 --- a/src/drawentity.cpp +++ b/src/drawentity.cpp @@ -601,6 +601,20 @@ void Entity::Draw(DrawAs how, Canvas *canvas) { Vector axis = q.RotationV(); canvas->DrawLine(tip, tip.Minus(v.RotatedAbout(axis, 0.6)), hcs); canvas->DrawLine(tip, tip.Minus(v.RotatedAbout(axis, -0.6)), hcs); + + if(type == Type::NORMAL_IN_3D) { + Param *nw = SK.GetParam(param[0]), + *nx = SK.GetParam(param[1]), + *ny = SK.GetParam(param[2]), + *nz = SK.GetParam(param[3]); + + if(nw->free || nx->free || ny->free || nz->free) { + Canvas::Stroke analyzeStroke = Style::Stroke(Style::ANALYZE); + analyzeStroke.layer = Canvas::Layer::FRONT; + Canvas::hStroke hcsAnalyze = canvas->GetStroke(analyzeStroke); + canvas->DrawLine(tail, tip, hcsAnalyze); + } + } } return; } @@ -665,6 +679,20 @@ void Entity::Draw(DrawAs how, Canvas *canvas) { if(!canvas->DrawBeziers(*GetOrGenerateBezierCurves(), hcs)) { canvas->DrawEdges(*GetOrGenerateEdges(), hcs); } + if(type == Type::CIRCLE) { + Entity *dist = SK.GetEntity(distance); + if(dist->type == Type::DISTANCE) { + Param *p = SK.GetParam(dist->param[0]); + if(p->free) { + Canvas::Stroke analyzeStroke = Style::Stroke(Style::ANALYZE); + analyzeStroke.layer = Canvas::Layer::FRONT; + Canvas::hStroke hcsAnalyze = canvas->GetStroke(analyzeStroke); + if(!canvas->DrawBeziers(*GetOrGenerateBezierCurves(), hcsAnalyze)) { + canvas->DrawEdges(*GetOrGenerateEdges(), hcsAnalyze); + } + } + } + } return; } diff --git a/src/graphicswin.cpp b/src/graphicswin.cpp index 076c5d3..4413bb6 100644 --- a/src/graphicswin.cpp +++ b/src/graphicswin.cpp @@ -789,6 +789,7 @@ void GraphicsWindow::MenuEdit(Command id) { SS.exportMode = false; SS.GenerateAll(SolveSpaceUI::Generate::ALL); } + SS.GW.persistentDirty = true; break; case Command::SELECT_ALL: { diff --git a/src/style.cpp b/src/style.cpp index 0653472..4af11c8 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -18,7 +18,7 @@ const Style::Default Style::Defaults[] = { { { HOVERED }, "Hovered", RGBf(1.0, 1.0, 0.0), 1.5, 0 }, { { CONTOUR_FILL }, "ContourFill", RGBf(0.0, 0.1, 0.1), 1.0, 0 }, { { NORMALS }, "Normals", RGBf(0.0, 0.4, 0.4), 1.0, 0 }, - { { ANALYZE }, "Analyze", RGBf(0.0, 1.0, 1.0), 1.0, 0 }, + { { ANALYZE }, "Analyze", RGBf(0.0, 1.0, 1.0), 3.0, 0 }, { { DRAW_ERROR }, "DrawError", RGBf(1.0, 0.0, 0.0), 8.0, 0 }, { { DIM_SOLID }, "DimSolid", RGBf(0.1, 0.1, 0.1), 1.0, 0 }, { { HIDDEN_EDGE }, "HiddenEdge", RGBf(0.8, 0.8, 0.8), 1.0, 1 }, diff --git a/test/request/circle/free_in_3d.png b/test/request/circle/free_in_3d.png new file mode 100644 index 0000000000000000000000000000000000000000..c735d860f5b99e73b06ee72763c0cf927cb7eaf2 GIT binary patch literal 4806 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 Y;0?!2ukJTS=2KvkgX_i;dveOZ0F?gcXaE2J literal 0 HcmV?d00001 diff --git a/test/request/circle/free_in_3d.slvs b/test/request/circle/free_in_3d.slvs new file mode 100644 index 0000000000000000000000000000000000000000..41287aa13040a28ee025d22fb2251d1406513568 GIT binary patch literal 4983 zcmd^DOH{;0Npuq#Cm& zC|+TTNsgH$=XF)nY_;l?C6V2i&F7M`HdERS#RXo)>=89r*L^C%x2VNe!(=19Em?U} z;Y=Z9n+D7>ru8VU(9@@yu$H2dw1$DIs(xJJVnYf<3@9L=Q{w!Q zAyT|XP4+YT6@4rUk;H*qrczktQX#KtfvJu|WR~6IHou#dWY$!OV5x}mw%p=xHN6*9 zsM3cdNjV-VFr5C)jqv#1$ayRB5I=?km6fY$d0UdMP3B-%h4Nn%_5x9~=8q)iuLQ!M zC%o)}97Qj=^B^}3annTF+oH->n1Jgv=sFF%UU-2)%LPK_T)$t=_4@^`6LJ#snbZG- zfI-Mz1$f3LsHexNFQ%(6f?4HUe^xoypH<)>S_Wj7y_4^Nb6enNver&3j0SUhtAdYPv?1Wv8~WzD){ zL8=HiF!Hqx2hCimj<#&T2+J^chAnGqAWm@lwF}jI5gimb4^#V{RtIiEC&jKqw>1xj zqiwxv9UL%|>fpp_*TJ)QOyII&+b7@Ve<`{fFZ#S+bi@nbU3p|9a1*+Cb|dgjt8I^a zHjb@VZ3G9*q(*SCO>6|;u`tvL<7J<-{jwu^0Y-hl7kJES@Hyj9Q{AD(O$_z|FibBL zC2J9UPw(b7uwb>D42(po-Gtl3wtT@CN&J-gPA-F?liX#VGs6gu18YK`)Ok);?auR@ zXNSTw=@;<0J5`V2q63CAS;ON~q<=M#umuL^P#6Ybb)GblD%5%kNrvu~5mTtIA}a=8 ZF(tl((Y$KK`k@MVDgVAT1aEKP{{Yjn>W=^b literal 0 HcmV?d00001 diff --git a/test/request/circle/free_in_3d_dof.png b/test/request/circle/free_in_3d_dof.png new file mode 100644 index 0000000000000000000000000000000000000000..010296d21b404a589db045806d1f754a4182e85b GIT binary patch literal 7197 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 CH`18^ literal 0 HcmV?d00001 diff --git a/test/request/circle/free_in_3d_v22.slvs b/test/request/circle/free_in_3d_v22.slvs new file mode 100644 index 0000000000000000000000000000000000000000..ff356982a17854933b0980c966318791f346955d GIT binary patch literal 4983 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 literal 0 HcmV?d00001 diff --git a/test/request/circle/test.cpp b/test/request/circle/test.cpp index 5e9db1b..82cd878 100644 --- a/test/request/circle/test.cpp +++ b/test/request/circle/test.cpp @@ -15,3 +15,31 @@ TEST_CASE(normal_migrate_from_v22) { CHECK_LOAD("normal_v22.slvs"); CHECK_SAVE("normal.slvs"); } + +TEST_CASE(free_in_3d_roundtrip) { + CHECK_LOAD("free_in_3d.slvs"); + CHECK_RENDER("free_in_3d.png"); + CHECK_SAVE("free_in_3d.slvs"); +} + +TEST_CASE(free_in_3d_migrate_from_v20) { + CHECK_LOAD("free_in_3d_v20.slvs"); + CHECK_SAVE("free_in_3d.slvs"); +} + +TEST_CASE(free_in_3d_migrate_from_v22) { + CHECK_LOAD("free_in_3d_v22.slvs"); + CHECK_SAVE("free_in_3d.slvs"); +} + +TEST_CASE(normal_dof) { + CHECK_LOAD("normal.slvs"); + SS.GenerateAll(SolveSpaceUI::Generate::ALL, /*andFindFree=*/true); + CHECK_RENDER("normal_dof.png"); +} + +TEST_CASE(free_in_3d_dof) { + CHECK_LOAD("free_in_3d.slvs"); + SS.GenerateAll(SolveSpaceUI::Generate::ALL, /*andFindFree=*/true); + CHECK_RENDER_ISO("free_in_3d_dof.png"); +}