Allow displaying outlines without any other edges.
As usual, what's displayed is what's exported.pull/36/head
parent
4c30c09792
commit
f998293760
|
@ -8,15 +8,18 @@ New export/import features:
|
||||||
* Three.js: allow configuring projection for exported model, and initially
|
* Three.js: allow configuring projection for exported model, and initially
|
||||||
use the current viewport projection.
|
use the current viewport projection.
|
||||||
|
|
||||||
|
New rendering features:
|
||||||
|
* The "Show/hide hidden lines" button is now a tri-state button that allows
|
||||||
|
showing all lines (on top of shaded mesh), stippling occluded lines
|
||||||
|
or not drawing them at all.
|
||||||
|
* The "Show/hide outlines" button is now independent from "Show/hide edges".
|
||||||
|
|
||||||
Other new features:
|
Other new features:
|
||||||
* New command for measuring total length of selected entities,
|
* New command for measuring total length of selected entities,
|
||||||
"Analyze → Measure Perimeter".
|
"Analyze → Measure Perimeter".
|
||||||
* New link to match the on-screen size of the sketch with its actual size,
|
* New link to match the on-screen size of the sketch with its actual size,
|
||||||
"view → set to full scale".
|
"view → set to full scale".
|
||||||
* When zooming to fit, constraints are also considered.
|
* When zooming to fit, constraints are also considered.
|
||||||
* The "Show/hide hidden lines" button is now a tri-state button that allows
|
|
||||||
showing all lines (on top of shaded mesh), stippling occluded lines
|
|
||||||
or not drawing them at all.
|
|
||||||
|
|
||||||
2.2
|
2.2
|
||||||
---
|
---
|
||||||
|
|
|
@ -203,11 +203,13 @@ void SolveSpaceUI::ExportViewOrWireframeTo(const std::string &filename, bool exp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(SS.GW.showEdges) {
|
if(SS.GW.showEdges || SS.GW.showOutlines) {
|
||||||
Group *g = SK.GetGroup(SS.GW.activeGroup);
|
Group *g = SK.GetGroup(SS.GW.activeGroup);
|
||||||
g->GenerateDisplayItems();
|
g->GenerateDisplayItems();
|
||||||
|
if(SS.GW.showEdges) {
|
||||||
g->displayOutlines.ListTaggedInto(&edges, Style::SOLID_EDGE);
|
g->displayOutlines.ListTaggedInto(&edges, Style::SOLID_EDGE);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(SS.GW.showConstraints) {
|
if(SS.GW.showConstraints) {
|
||||||
if(!out->OutputConstraints(&SK.constraint)) {
|
if(!out->OutputConstraints(&SK.constraint)) {
|
||||||
|
@ -388,7 +390,7 @@ void SolveSpaceUI::ExportLinesAndMesh(SEdgeList *sel, SBezierList *sbl, SMesh *s
|
||||||
|
|
||||||
// Generate the edges where a curved surface turns from front-facing
|
// Generate the edges where a curved surface turns from front-facing
|
||||||
// to back-facing.
|
// to back-facing.
|
||||||
if(SS.GW.showEdges) {
|
if(SS.GW.showEdges || SS.GW.showOutlines) {
|
||||||
root->MakeCertainEdgesInto(sel, EdgeKind::TURNING,
|
root->MakeCertainEdgesInto(sel, EdgeKind::TURNING,
|
||||||
/*coplanarIsInter=*/false, NULL, NULL,
|
/*coplanarIsInter=*/false, NULL, NULL,
|
||||||
GW.showOutlines ? Style::OUTLINE : Style::SOLID_EDGE);
|
GW.showOutlines ? Style::OUTLINE : Style::SOLID_EDGE);
|
||||||
|
|
|
@ -1076,7 +1076,9 @@ void GraphicsWindow::ToggleBool(bool *v) {
|
||||||
|
|
||||||
// We might need to regenerate the mesh and edge list, since the edges
|
// We might need to regenerate the mesh and edge list, since the edges
|
||||||
// wouldn't have been generated if they were previously hidden.
|
// wouldn't have been generated if they were previously hidden.
|
||||||
if(showEdges) (SK.GetGroup(activeGroup))->displayDirty = true;
|
if(showEdges || showOutlines) {
|
||||||
|
SK.GetGroup(activeGroup)->displayDirty = true;
|
||||||
|
}
|
||||||
|
|
||||||
SS.GenerateAll();
|
SS.GenerateAll();
|
||||||
InvalidateGraphics();
|
InvalidateGraphics();
|
||||||
|
|
|
@ -378,7 +378,7 @@ void Group::GenerateDisplayItems() {
|
||||||
displayMesh.MakeFromCopyOf(&(pg->displayMesh));
|
displayMesh.MakeFromCopyOf(&(pg->displayMesh));
|
||||||
|
|
||||||
displayOutlines.Clear();
|
displayOutlines.Clear();
|
||||||
if(SS.GW.showEdges) {
|
if(SS.GW.showEdges || SS.GW.showOutlines) {
|
||||||
displayOutlines.MakeFromCopyOf(&pg->displayOutlines);
|
displayOutlines.MakeFromCopyOf(&pg->displayOutlines);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -398,7 +398,7 @@ void Group::GenerateDisplayItems() {
|
||||||
|
|
||||||
displayOutlines.Clear();
|
displayOutlines.Clear();
|
||||||
|
|
||||||
if(SS.GW.showEdges) {
|
if(SS.GW.showEdges || SS.GW.showOutlines) {
|
||||||
if(runningMesh.l.n > 0) {
|
if(runningMesh.l.n > 0) {
|
||||||
// Triangle mesh only; no shell or emphasized edges.
|
// Triangle mesh only; no shell or emphasized edges.
|
||||||
runningMesh.MakeOutlinesInto(&displayOutlines, EdgeKind::EMPHASIZED);
|
runningMesh.MakeOutlinesInto(&displayOutlines, EdgeKind::EMPHASIZED);
|
||||||
|
@ -528,17 +528,6 @@ void Group::Draw(Canvas *canvas) {
|
||||||
DrawMesh(DrawMeshAs::DEFAULT, canvas);
|
DrawMesh(DrawMeshAs::DEFAULT, canvas);
|
||||||
|
|
||||||
if(SS.GW.showEdges) {
|
if(SS.GW.showEdges) {
|
||||||
if(SS.GW.showOutlines) {
|
|
||||||
Canvas::Stroke strokeOutline = {};
|
|
||||||
strokeOutline.zIndex = 1;
|
|
||||||
strokeOutline.color = Style::Color(Style::OUTLINE);
|
|
||||||
strokeOutline.width = Style::Width(Style::OUTLINE);
|
|
||||||
Canvas::hStroke hcsOutline = canvas->GetStroke(strokeOutline);
|
|
||||||
|
|
||||||
canvas->DrawOutlines(displayOutlines, hcsOutline,
|
|
||||||
Canvas::DrawOutlinesAs::CONTOUR_ONLY);
|
|
||||||
}
|
|
||||||
|
|
||||||
Canvas::Stroke strokeEdge = {};
|
Canvas::Stroke strokeEdge = {};
|
||||||
strokeEdge.zIndex = 1;
|
strokeEdge.zIndex = 1;
|
||||||
strokeEdge.color = Style::Color(Style::SOLID_EDGE);
|
strokeEdge.color = Style::Color(Style::SOLID_EDGE);
|
||||||
|
@ -562,6 +551,17 @@ void Group::Draw(Canvas *canvas) {
|
||||||
Canvas::DrawOutlinesAs::EMPHASIZED_AND_CONTOUR);
|
Canvas::DrawOutlinesAs::EMPHASIZED_AND_CONTOUR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(SS.GW.showOutlines) {
|
||||||
|
Canvas::Stroke strokeOutline = {};
|
||||||
|
strokeOutline.zIndex = 1;
|
||||||
|
strokeOutline.color = Style::Color(Style::OUTLINE);
|
||||||
|
strokeOutline.width = Style::Width(Style::OUTLINE);
|
||||||
|
Canvas::hStroke hcsOutline = canvas->GetStroke(strokeOutline);
|
||||||
|
|
||||||
|
canvas->DrawOutlines(displayOutlines, hcsOutline,
|
||||||
|
Canvas::DrawOutlinesAs::CONTOUR_ONLY);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Group::DrawPolyError(Canvas *canvas) {
|
void Group::DrawPolyError(Canvas *canvas) {
|
||||||
|
|
Loading…
Reference in New Issue