diff --git a/exposed/DOC.txt b/exposed/DOC.txt index e0f6035e..0e70b12f 100644 --- a/exposed/DOC.txt +++ b/exposed/DOC.txt @@ -422,6 +422,14 @@ SLVS_C_EQUAL_RADIUS The circles or arcs entityA and entityB have equal radius. +SLVS_C_WHERE_DRAGGED* + + The point ptA is locked at its initial numerical guess, and cannot + be moved. This constrains two degrees of freedom in a workplane, + and three in free space. It's therefore possible for this constraint + to overconstrain the sketch, for example if it's applied to a point + with one remaining degree of freedom. + USING THE SOLVER ================ @@ -429,5 +437,5 @@ USING THE SOLVER See the enclosed sample code, example.c. -Copyright 2009 Useful Subset, LLC +Copyright 2009-2010 Useful Subset, LLC diff --git a/exposed/example.c b/exposed/example.c index 69058e4b..5bf197d2 100644 --- a/exposed/example.c +++ b/exposed/example.c @@ -8,7 +8,7 @@ // // http://solvespace.com/ // -// Copyright 2009 Useful Subset, LLC +// Copyright 2009-2010 Useful Subset, LLC //----------------------------------------------------------------------------- #include #include @@ -28,7 +28,8 @@ void *CheckMalloc(size_t n) } //----------------------------------------------------------------------------- -// An example of a constraint in 3d. We create +// An example of a constraint in 3d. We create a single group, with some +// entities and constraints. //----------------------------------------------------------------------------- void Example3d(void) { diff --git a/exposed/lib.cpp b/exposed/lib.cpp index 44ac9143..f0e25a12 100644 --- a/exposed/lib.cpp +++ b/exposed/lib.cpp @@ -65,12 +65,12 @@ void Slvs_Solve(Slvs_System *ssys, Slvs_hGroup shg) #if 1 dbp("SolveSpace library initialized (evaluation version only)."); dbp("Built " __DATE__ " " __TIME__ - ". Copyright 2009 Useful Subset, LLC."); + ". Copyright 2009-2010 Useful Subset, LLC."); HWND h = GetForegroundWindow(); MessageBox(h, "This is an evaluation copy of SolveSpace. To purchase a license, please " "contact info@solvespace.com.\r\n\r\n" -"Copyright 2009 Useful Subset, LLC.", +"Copyright 2009-2010 Useful Subset, LLC.", "SolveSpace", MB_OK); #endif InitHeaps(); @@ -97,18 +97,18 @@ void Slvs_Solve(Slvs_System *ssys, Slvs_hGroup shg) ZERO(&e); switch(se->type) { - case SLVS_E_POINT_IN_3D: e.type = Entity::POINT_IN_3D; break; - case SLVS_E_POINT_IN_2D: e.type = Entity::POINT_IN_2D; break; - case SLVS_E_NORMAL_IN_3D: e.type = Entity::NORMAL_IN_3D; break; - case SLVS_E_NORMAL_IN_2D: e.type = Entity::NORMAL_IN_2D; break; - case SLVS_E_DISTANCE: e.type = Entity::DISTANCE; break; - case SLVS_E_WORKPLANE: e.type = Entity::WORKPLANE; break; - case SLVS_E_LINE_SEGMENT: e.type = Entity::LINE_SEGMENT; break; - case SLVS_E_CUBIC: e.type = Entity::CUBIC; break; - case SLVS_E_CIRCLE: e.type = Entity::CIRCLE; break; - case SLVS_E_ARC_OF_CIRCLE: e.type = Entity::ARC_OF_CIRCLE; break; +case SLVS_E_POINT_IN_3D: e.type = Entity::POINT_IN_3D; break; +case SLVS_E_POINT_IN_2D: e.type = Entity::POINT_IN_2D; break; +case SLVS_E_NORMAL_IN_3D: e.type = Entity::NORMAL_IN_3D; break; +case SLVS_E_NORMAL_IN_2D: e.type = Entity::NORMAL_IN_2D; break; +case SLVS_E_DISTANCE: e.type = Entity::DISTANCE; break; +case SLVS_E_WORKPLANE: e.type = Entity::WORKPLANE; break; +case SLVS_E_LINE_SEGMENT: e.type = Entity::LINE_SEGMENT; break; +case SLVS_E_CUBIC: e.type = Entity::CUBIC; break; +case SLVS_E_CIRCLE: e.type = Entity::CIRCLE; break; +case SLVS_E_ARC_OF_CIRCLE: e.type = Entity::ARC_OF_CIRCLE; break; - default: dbp("bad entity type %d", se->type); return; +default: dbp("bad entity type %d", se->type); return; } e.h.v = se->h; e.group.v = se->group; @@ -165,6 +165,7 @@ case SLVS_C_ARC_LINE_TANGENT: t = Constraint::ARC_LINE_TANGENT; break; case SLVS_C_CUBIC_LINE_TANGENT: t = Constraint::CUBIC_LINE_TANGENT; break; case SLVS_C_EQUAL_RADIUS: t = Constraint::EQUAL_RADIUS; break; case SLVS_C_PROJ_PT_DISTANCE: t = Constraint::PROJ_PT_DISTANCE; break; +case SLVS_C_WHERE_DRAGGED: t = Constraint::WHERE_DRAGGED; break; default: dbp("bad constraint type %d", sc->type); return; } diff --git a/exposed/slvs.h b/exposed/slvs.h index 5c09004c..d1916300 100644 --- a/exposed/slvs.h +++ b/exposed/slvs.h @@ -9,7 +9,7 @@ // // http://solvespace.com/ // -// Copyright 2009 Useful Subset, LLC +// Copyright 2009-2010 Useful Subset, LLC //----------------------------------------------------------------------------- #ifndef __SLVS_H @@ -36,23 +36,23 @@ typedef struct { } Slvs_Param; -#define SLVS_E_POINT_IN_3D 50000 -#define SLVS_E_POINT_IN_2D 50001 +#define SLVS_E_POINT_IN_3D 50000 +#define SLVS_E_POINT_IN_2D 50001 -#define SLVS_E_NORMAL_IN_3D 60000 -#define SLVS_E_NORMAL_IN_2D 60001 +#define SLVS_E_NORMAL_IN_3D 60000 +#define SLVS_E_NORMAL_IN_2D 60001 -#define SLVS_E_DISTANCE 70000 +#define SLVS_E_DISTANCE 70000 // The special point, normal, and distance types used for parametric step // and repeat, extrude, and assembly are currently not exposed. Please // contact us if you are interested in using these. -#define SLVS_E_WORKPLANE 80000 -#define SLVS_E_LINE_SEGMENT 80001 -#define SLVS_E_CUBIC 80002 -#define SLVS_E_CIRCLE 80003 -#define SLVS_E_ARC_OF_CIRCLE 80004 +#define SLVS_E_WORKPLANE 80000 +#define SLVS_E_LINE_SEGMENT 80001 +#define SLVS_E_CUBIC 80002 +#define SLVS_E_CIRCLE 80003 +#define SLVS_E_ARC_OF_CIRCLE 80004 typedef struct { Slvs_hEntity h; @@ -99,6 +99,7 @@ typedef struct { #define SLVS_C_CUBIC_LINE_TANGENT 100028 #define SLVS_C_EQUAL_RADIUS 100029 #define SLVS_C_PROJ_PT_DISTANCE 100030 +#define SLVS_C_WHERE_DRAGGED 100031 typedef struct { Slvs_hConstraint h; @@ -115,7 +116,7 @@ typedef struct { Slvs_hEntity entityB; Slvs_hEntity entityC; Slvs_hEntity entityD; - + int other; } Slvs_Constraint; @@ -141,7 +142,7 @@ typedef struct { // If a parameter corresponds to a point (distance, normal, etc.) being // dragged, then specify it here. This will cause the solver to favor // that parameter, and attempt to change it as little as possible even - // if that require it to change other parameters more. + // if that requires it to change other parameters more. // // Unused members of this array should be set to zero. Slvs_hParam dragged[4]; @@ -149,7 +150,7 @@ typedef struct { // If the solver fails, then it can determine which constraints are // causing the problem. But this is a relatively slow process (for // a system with n constraints, about n times as long as just solving). - // If calculateFaileds is set, then the solver will do so, otherwise + // If calculateFaileds is true, then the solver will do so, otherwise // not. int calculateFaileds; diff --git a/wishlist.txt b/wishlist.txt index 58ecfe86..a7a3416b 100644 --- a/wishlist.txt +++ b/wishlist.txt @@ -1,6 +1,8 @@ add checked/unchecked checkbox and radio button fix bug with rotation in plane where green line stays displayed expose transformed point stuff in library +group option to make dimensions always reference? +more tangencies ----- rounding, as a special group