Show a progress message when regenerating is slow. And update the
version number to 1.4, don't include force-hidden entities when building the loops, and don't show force-hidden entities when that entity gets copied. [git-p4: depot-paths = "//depot/solvespace/": change = 1983]solver
parent
3b3b7fe680
commit
7eefb79127
50
generate.cpp
50
generate.cpp
|
@ -170,9 +170,59 @@ void SolveSpace::GenerateAll(int first, int last, bool andFindFree) {
|
||||||
SK.param.MoveSelfInto(&prev);
|
SK.param.MoveSelfInto(&prev);
|
||||||
SK.entity.Clear();
|
SK.entity.Clear();
|
||||||
|
|
||||||
|
SDWORD inTime = GetMilliseconds();
|
||||||
|
|
||||||
|
bool displayedStatusMessage = false;
|
||||||
for(i = 0; i < SK.group.n; i++) {
|
for(i = 0; i < SK.group.n; i++) {
|
||||||
Group *g = &(SK.group.elem[i]);
|
Group *g = &(SK.group.elem[i]);
|
||||||
|
|
||||||
|
SDWORD now = GetMilliseconds();
|
||||||
|
// Display the status message if we've taken more than 400 ms, or
|
||||||
|
// if we've taken 200 ms but we're not even halfway done, or if
|
||||||
|
// we've already started displaying the status message.
|
||||||
|
if( (now - inTime > 400) ||
|
||||||
|
((now - inTime > 200) && i < (SK.group.n / 2)) ||
|
||||||
|
displayedStatusMessage)
|
||||||
|
{
|
||||||
|
displayedStatusMessage = true;
|
||||||
|
char msg[1024];
|
||||||
|
sprintf(msg, "generating group %d/%d", i, SK.group.n);
|
||||||
|
|
||||||
|
int w, h;
|
||||||
|
GetGraphicsWindowSize(&w, &h);
|
||||||
|
glDrawBuffer(GL_FRONT);
|
||||||
|
glViewport(0, 0, w, h);
|
||||||
|
glLoadIdentity();
|
||||||
|
glTranslated(-1, 1, 0);
|
||||||
|
glScaled(2.0/w, 2.0/h, 1.0);
|
||||||
|
glDisable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
|
double left = 80, top = -20, width = 240, height = 24;
|
||||||
|
glColor3d(0.9, 0.8, 0.8);
|
||||||
|
glBegin(GL_QUADS);
|
||||||
|
glVertex2d(left, top);
|
||||||
|
glVertex2d(left+width, top);
|
||||||
|
glVertex2d(left+width, top-height);
|
||||||
|
glVertex2d(left, top-height);
|
||||||
|
glEnd();
|
||||||
|
glLineWidth(1);
|
||||||
|
glColor3d(0.0, 0.0, 0.0);
|
||||||
|
glBegin(GL_LINE_LOOP);
|
||||||
|
glVertex2d(left, top);
|
||||||
|
glVertex2d(left+width, top);
|
||||||
|
glVertex2d(left+width, top-height);
|
||||||
|
glVertex2d(left, top-height);
|
||||||
|
glEnd();
|
||||||
|
|
||||||
|
glColor3d(0, 0, 0);
|
||||||
|
glPushMatrix();
|
||||||
|
glRasterPos2d(left+8, top-17);
|
||||||
|
DrawWithBitmapFont(msg);
|
||||||
|
glPopMatrix();
|
||||||
|
glFlush();
|
||||||
|
glDrawBuffer(GL_BACK);
|
||||||
|
}
|
||||||
|
|
||||||
// The group may depend on entities or other groups, to define its
|
// The group may depend on entities or other groups, to define its
|
||||||
// workplane geometry or for its operands. Those must already exist
|
// workplane geometry or for its operands. Those must already exist
|
||||||
// in a previous group, so check them before generating.
|
// in a previous group, so check them before generating.
|
||||||
|
|
|
@ -734,7 +734,12 @@ void Group::CopyEntity(IdList<Entity,hEntity> *el,
|
||||||
default:
|
default:
|
||||||
oops();
|
oops();
|
||||||
}
|
}
|
||||||
en.forceHidden = !ep->actVisible;
|
|
||||||
|
// If the entity came from an imported file where it was invisible then
|
||||||
|
// ep->actiVisble will be false, and we should hide it. Or if the entity
|
||||||
|
// came from a copy (e.g. step and repeat) of a force-hidden imported
|
||||||
|
// entity, then we also want to hide it.
|
||||||
|
en.forceHidden = (!ep->actVisible) || ep->forceHidden;
|
||||||
|
|
||||||
el->Add(&en);
|
el->Add(&en);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ bool Group::AssembleLoops(void) {
|
||||||
Entity *e = &(SK.entity.elem[i]);
|
Entity *e = &(SK.entity.elem[i]);
|
||||||
if(e->group.v != h.v) continue;
|
if(e->group.v != h.v) continue;
|
||||||
if(e->construction) continue;
|
if(e->construction) continue;
|
||||||
|
if(e->forceHidden) continue;
|
||||||
|
|
||||||
e->GenerateBezierCurves(&sbl);
|
e->GenerateBezierCurves(&sbl);
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,7 +65,7 @@ void SolveSpace::Init(char *cmdLine) {
|
||||||
// Camera tangent (determines perspective)
|
// Camera tangent (determines perspective)
|
||||||
cameraTangent = CnfThawFloat(0.0f, "CameraTangent");
|
cameraTangent = CnfThawFloat(0.0f, "CameraTangent");
|
||||||
// Color for edges (drawn as lines for emphasis)
|
// Color for edges (drawn as lines for emphasis)
|
||||||
edgeColor = CnfThawDWORD(RGB(0, 0, 0), "EdgeColor");
|
edgeColor = CnfThawDWORD(RGB(200, 200, 200), "EdgeColor");
|
||||||
// Export scale factor
|
// Export scale factor
|
||||||
exportScale = CnfThawFloat(1.0f, "ExportScale");
|
exportScale = CnfThawFloat(1.0f, "ExportScale");
|
||||||
// Export offset (cutter radius comp)
|
// Export offset (cutter radius comp)
|
||||||
|
@ -715,10 +715,10 @@ void SolveSpace::MenuHelp(int id) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GraphicsWindow::MNU_ABOUT:
|
case GraphicsWindow::MNU_ABOUT:
|
||||||
Message("This is SolveSpace version 1.3.\r\n\r\n"
|
Message("This is SolveSpace version 1.4.\r\n\r\n"
|
||||||
"For more information, see http://www.solvespace.com/\r\n\r\n"
|
"For more information, see http://www.solvespace.com/\r\n\r\n"
|
||||||
"Built " __TIME__ " " __DATE__ ".\r\n\r\n"
|
"Built " __TIME__ " " __DATE__ ".\r\n\r\n"
|
||||||
"Copyright 2008 Jonathan Westhues, All Rights Reserved.");
|
"Copyright 2008-2009 Jonathan Westhues, All Rights Reserved.");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GraphicsWindow::MNU_LICENSE: {
|
case GraphicsWindow::MNU_LICENSE: {
|
||||||
|
|
|
@ -976,7 +976,7 @@ static void CreateMainWindows(void)
|
||||||
|
|
||||||
HMENU top = CreateGraphicsWindowMenus();
|
HMENU top = CreateGraphicsWindowMenus();
|
||||||
GraphicsWnd = CreateWindowEx(0, "GraphicsWnd",
|
GraphicsWnd = CreateWindowEx(0, "GraphicsWnd",
|
||||||
"SolveSpace (Graphics Window)",
|
"SolveSpace (not yet saved)",
|
||||||
WS_OVERLAPPED | WS_THICKFRAME | WS_CLIPCHILDREN | WS_MAXIMIZEBOX |
|
WS_OVERLAPPED | WS_THICKFRAME | WS_CLIPCHILDREN | WS_MAXIMIZEBOX |
|
||||||
WS_MINIMIZEBOX | WS_SYSMENU | WS_SIZEBOX | WS_CLIPSIBLINGS,
|
WS_MINIMIZEBOX | WS_SYSMENU | WS_SIZEBOX | WS_CLIPSIBLINGS,
|
||||||
50, 50, 900, 600, NULL, top, Instance, NULL);
|
50, 50, 900, 600, NULL, top, Instance, NULL);
|
||||||
|
@ -1053,6 +1053,16 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
|
||||||
ThawWindowPos(TextWnd);
|
ThawWindowPos(TextWnd);
|
||||||
ThawWindowPos(GraphicsWnd);
|
ThawWindowPos(GraphicsWnd);
|
||||||
|
|
||||||
|
ShowWindow(TextWnd, SW_SHOWNOACTIVATE);
|
||||||
|
ShowWindow(GraphicsWnd, SW_SHOW);
|
||||||
|
|
||||||
|
glClearColor(0, 0, 0, 1);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
SwapBuffers(GetDC(GraphicsWnd));
|
||||||
|
glClearColor(0, 0, 0, 1);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
SwapBuffers(GetDC(GraphicsWnd));
|
||||||
|
|
||||||
// Create the heaps for all dynamic memory (AllocTemporary, MemAlloc)
|
// Create the heaps for all dynamic memory (AllocTemporary, MemAlloc)
|
||||||
InitHeaps();
|
InitHeaps();
|
||||||
|
|
||||||
|
@ -1073,9 +1083,6 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
|
||||||
// Call in to the platform-independent code, and let them do their init
|
// Call in to the platform-independent code, and let them do their init
|
||||||
SS.Init(file);
|
SS.Init(file);
|
||||||
|
|
||||||
ShowWindow(TextWnd, SW_SHOWNOACTIVATE);
|
|
||||||
ShowWindow(GraphicsWnd, SW_SHOW);
|
|
||||||
|
|
||||||
// And now it's the message loop. All calls in to the rest of the code
|
// And now it's the message loop. All calls in to the rest of the code
|
||||||
// will be from the wndprocs.
|
// will be from the wndprocs.
|
||||||
MSG msg;
|
MSG msg;
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
|
|
||||||
tangent intersections
|
|
||||||
plane detection for solid of revolution
|
|
||||||
|
|
||||||
-----
|
-----
|
||||||
line styles (color, thickness)
|
line styles (color, thickness)
|
||||||
marching algorithm for surface intersection
|
marching algorithm for surface intersection
|
||||||
loop detection
|
loop detection
|
||||||
IGES and STEP export
|
IGES export
|
||||||
incremental regen of entities?
|
incremental regen of entities
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue