From 5a2803617ba919af568f4805b7d12ff7e2a48639 Mon Sep 17 00:00:00 2001 From: Jonathan Westhues Date: Thu, 7 Feb 2008 09:44:27 -0800 Subject: [PATCH] Previous speedup for regenerating vertex-to-vertex mesh was broken; it did nothing when GenerateAll got called with an explicit range (vs. with no args, to run on the dirty groups), so the emphasized edges ended up out of date. I think this is better. Also check in latest updates to manual. [git-p4: depot-paths = "//depot/solvespace/": change = 1852] --- doc/reference.txt | 436 ++++++++++++++++++++++++++++++++++++---------- generate.cpp | 25 ++- 2 files changed, 353 insertions(+), 108 deletions(-) diff --git a/doc/reference.txt b/doc/reference.txt index 9f8db150..8acf2b11 100644 --- a/doc/reference.txt +++ b/doc/reference.txt @@ -4,11 +4,11 @@ for new users; to learn about this program, see the video tutorials.

General Navigation

- Two windows appear on the screen: a larger window that contains - graphics, and a smaller window that contains text. The graphics - window is used to draw the geometry, and to view the 3d model. The - text window provides information about the model, and may also be - used to modify settings and numerical parameters. + The user interface consists of two windows: a larger window that + contains mostly graphics, and a smaller window that contains mostly + text. The graphics window is used to draw the geometry, and to view + the 3d model. The text window provides information about the model, + and may also be used to modify settings and numerical parameters.

Graphics Window and Model View

@@ -24,9 +24,11 @@ for new users; to learn about this program, see the video tutorials. It is also possible to pan by Shift+center-dragging, or to rotate by Shift+right-dragging. - To zoom in or out, rotate the scroll wheel. It is also possible to - zoom by using the View menu, or the associated keyboard shortcuts - (+ and -). + To zoom in or out, rotate the scroll wheel. It is also possible + to zoom by using the View menu, or the associated keyboard + shortcuts (+ and -). Some features, including the planes, are + always drawn the same size on-screen, and are therefore not + affected by zooming. To zoom to the extent of the part, choose View -> Zoom To Fit. This adjusts the zoom level so that the part fits exactly @@ -35,11 +37,13 @@ for new users; to learn about this program, see the video tutorials. If a workplane is active, then choose Sketch -> In Workplane (or press W) to align the view to the workplane. After doing this, - the plane of the screen is coincident with the workplane. + the plane of the screen is coincident with the workplane, and + the center of the workplane is at the center of the screen. The + zoom level is not affected. The x, y, and z coordinate axes are always drawn at the bottom left of the graphics window, in red, green, and blue. These axes - are live. They can be highlighted and selected with the mouse, in + are live: they can be highlighted and selected with the mouse, in the same way as any other normals. (This means that the coordinate axes are always conveniently available on-screen, which is useful e.g. when constraining a line parallel to the x-axis.) @@ -51,10 +55,10 @@ for new users; to learn about this program, see the video tutorials. after the decimal point (45.23), and inch dimensions are always displayed with three (1.781). - Choose View -> Dimensions in ... to change the current display - units. This does not change the model; if the user changes from - inches to millimeters, then a dimension that was entered as 1.0 - is now displayed as 25.40. + Choose View -> Dimensions in Inches/Mm to change the current + display units. This does not change the model; if the user + changes from inches to millimeters, then a dimension that was + entered as 1.0 is now displayed as 25.40. All dimensions are entered in the current display units. In most places where a dimension is expected, it's possible to enter an @@ -66,17 +70,17 @@ for new users; to learn about this program, see the video tutorials. be shown or hidden by pressing Tab, or by choosing View -> Show Text Window. - The text window works like a web browser. Any underlined text - is a link. To activate a link, click it with the mouse. The links + The text window works like a web browser. Any underlined text is + a link. To activate a link, click it with the mouse. The links may be used to navigate to other pages in the text window. For example, the "home" screen is a list of groups in the sketch: To navigate to a group's page, click on that group's name (e.g., - "g002-sketch-in-plane". The links may also taken actions in the - sketch. For example, in the above screenshot, all of the groups - are shown. To hide a group, click on the word "yes" in the + "g002-sketch-in-plane"). The links may also trigger actions in + the sketch. For example, in the above screenshot, all of the + groups are shown. To hide a group, click on the word "yes" in the "show" column. As a convenience, the text window will sometimes automatically @@ -86,6 +90,26 @@ for new users; to learn about this program, see the video tutorials. page, by clicking the "home" link at the top left corner (or pressing Esc), and following the links from there. + When sketch entities are selected (e.g., the user has clicked + on them with the mouse), information about those entities is + displayed in the text window. If a single entity is selected, + then information about that entity is displayed. For example, + the window display's a circle's center and radius. + + If multiple entities are selected, then the text window can + sometimes display information about all of them. These cases + include: + + two points: the distance between the points + + a point and a plane face: the distance from the point to the + plane + + two points, and a vector: the distance between the points, + projected along the vector + + two plane faces: the angle between the plane faces +

Show / Hide Entities

@@ -144,25 +168,26 @@ for new users; to learn about this program, see the video tutorials. with this link. mesh -- The 3d model of the part consists of many - triangles; for example, a flat polygon with - n sides is broken down into n - 2 triangles. - Use this link to show the triangles on the - model. In general, this is useful only for - debugging, or to see how fine the mesh is + triangles; for example, a rectangular face is + represented by two triangles. Use this link to + show the triangles on the model. This is a good + way to see how fine or coarse the mesh is before exporting it. hidden-lines - With the part in a given orientation, some of the lines in the part will be invisible, because they are buried inside the solid part. To show those lines anyways, as if the part - were transparent, use this link. This may be - useful when drawing a sketch that lies within - the volume of the part. + were transparent, use this link. This is useful + when drawing a sketch that lies within the + volume of the part. In addition to the above options, it is possible to hide and show entire groups. If a group is hidden, then all of the entities (line segments, circles, arcs, points, etc.) from that group - are hidden. + are hidden. The solid model is not affected; if a hidden group + contains a circle that is extruded to form a cylinder, then the + cylinder will remain visible. To hide a group, go to the home screen in the text window, by pressing Esc or choosing the link at the top left. A list of @@ -227,18 +252,17 @@ for new users; to learn about this program, see the video tutorials. ultimately, the endmill or the laser or some other tool will cut along those curves. - In some cases, it is useful to draw a line that should not appear - on the final part. For example, the user may wish to draw a center - line for a symmetric part; but that center line only exists as + In some cases, it is useful to draw a line that should not + appear on the final part. For example, the user may wish to draw + a center line for a symmetric part; but that center line is only a guide, and should not actually get exported with the CAM data. - Or the user may wish to draw the axis of revolution for a lathe - group. These lines are called construction lines. + These lines are called construction lines. To mark an entity as construction-only, choose Sketch -> Toggle Construction. A construction entity will behave just like any other entity, except that it is drawn in green, and does not - contribute to the geometry for export (or for extrusion or - lathing or sweeping). + contribute to the geometry for export (or to the section that + will be extruded or lathed or swept).

Datum Point

@@ -282,7 +306,7 @@ for new users; to learn about this program, see the video tutorials. To stop drawing line segments, press Escape, or right- or center-click the mouse. MechSketch will also stop drawing new line segments if an automatic constraint is inserted. (For - example, draw a closed polygon by left-clicking continuously, and + example, draw a closed polygon by left-clicking repeatedly, and then hovering over the starting point before left-clicking the last time. The endpoint of the polyline will be constrained to lie on the starting point, and since a constraint was inserted, @@ -290,7 +314,7 @@ for new users; to learn about this program, see the video tutorials.

Rectangle

- A rectangle consists of two vertical line segments, and two + This entity consists of two vertical line segments, and two horizontal line segments, arranged to form a closed curve. Initially, the rectangle is specified with the mouse by two diagonally opposite corners. The line segments (and points) @@ -402,12 +426,84 @@ for new users; to learn about this program, see the video tutorials. then MechSketch will display an error message, and a list of available constraints. + Most constraints are available in both 3d and projected versions. + If a workplane is active, then the constraint applies on the + projection of the geometry into that workplane. If no workplane + is active, then the constraint applies to the actually geometry + in free space. + + For example, consider the line shown below: + + + + The line's length is constrained in two different ways. The upper + constraint, for 50 mm, applies to its actual length. The lower + constraint, for 40 mm, applies to the length of its projection + into the xy plane. (The xy plane is highlighted in yellow.) The + dotted purple lines are drawn to indicate the locations of the + line segment's projected endpoints. + + In normal operation, the user activates a workplane (or a + workplane is activated automatically, for example by creating a + "Sketch in New Workplane" group). The user then draws an entity, + for example a line. Since a workplane is active, the line is + created in that workplane. The user then constrains that line, + for example by specifying its length. Since the workplane is + still active, the constraint actually applies to the projection + of the line segment into the workplane. + + In this case, the projected distance is equivalent to the + 3d distance. If the line segment lies in the workplane, then + the projection of that line segment into the workplane is just + that line segment. This means that when drawing in a workplane, + most of this can be ignored. + + It's possible to use projected constraints in more complex ways, + though. For example, the user might create a line segment in + workplane A, and constrain its projection into workplane B. + Constraints are drawn in purple on the sketch. If a constraint - has a label associated with it (e.g. a distance or an angle), - then that label may be repositioned by dragging it with the - mouse. To modify the dimension, double-click the label; a text - box will appear on the screen, where the new dimension can be - entered. Then press enter. + has a label associated with it (e.g. a distance or an angle), then + that label may be repositioned by dragging it with the mouse. To + modify the dimension, double-click the label; a text box will + appear on the screen, where the new value can be entered. Press + enter to commit the change, or Esc to cancel. + +

Failure to Solve

+ + In some cases, the solver will fail. This is usually because the + specified constraints are inconsistent or redundant. For example, + a triangle with internal angles of 30, 50, and 90 degrees is + inconsistent--the angles don't sum to 180, so the triangle could + never be assembled. This is an error. + + A triangle with internal angles constrained to 30, 50, and 100 + degrees is also an error. This is not inconsistent, because the + angles do sum to 180 degrees; but it's redundant, because only + two of those angles need to be specified. + + If the sketch is inconsistent or redundant, then the background + of the graphics window is drawn in red (instead of the usual + black), and an error is displayed in the text window: + + + + As a convenience, MechSketch calculates a list of constraints + that could be removed to make the sketch consistent again. To + see which constraints those are, hover the mouse over the links + in the text window; the constraint will appear highlighted in + the graphics window. By deleting one or more of the constraints + in that list, the user can make the sketch consistent again. + + A different type of error occurs when the solver fails to + converge. This may be a defect in the solver, or it may occur + because impossible geometry was specified (for example, a + triangle with side lengths 3, 4, and 10; 3 + 4 = 7 < 10), In + that case, a similar error message is displayed, but without a + list of constraints to remove to fix things. The problem can be + resolved by removing or editing the constraints, or by choosing + Edit -> Undo. +

Reference Dimensions

@@ -421,12 +517,24 @@ for new users; to learn about this program, see the video tutorials. and the dimension displays whatever that length happens to be. A reference dimension does not constrain the geometry. - To change a dimension into a reference dimension, choose Constrain - -> Toggle Reference Dimension. A reference dimension is drawn with - "REF" appended to the displayed length or angle. Double-clicking - a reference dimension does nothing; the dimension is specified - by the geometry, not the user, so it is not meaningful to type - in a new value for the reference dimension. + To convert a dimension into a reference dimension, choose + Constrain -> Toggle Reference Dimension. A reference dimension + is drawn with "REF" appended to the displayed length or angle. + Double-clicking a reference dimension does nothing; the + dimension is specified by the geometry, not the user, so it is + not meaningful to type in a new value for the reference dimension. + +

Specific Constraints

+ + To get help on a specific constraint, choose its menu item without + first selecting any entities. An error message will be displayed, + listing all of the possibilities. + + In general, the order in which the entities are selected doesn't + matter. For example, if the user is constraining point-line + distance, then they might select the point and then the line, or + the line and then the point, and the result would be identical. + Some exceptions exists, and are noted below.

Distance / Diameter

@@ -434,14 +542,32 @@ for new users; to learn about this program, see the video tutorials. length of a line segment, or the distance between a point and some other entity. + When constraining the distance between a point and a plane, or + a point and a plane face, or a point and a line in a workplane, + the distance is signed. The distance may be positive or negative, + depending on whether the point is above or below the plane. The + distance is always shown positive on the sketch; to flip to the + other side, enter a negative value. +

Angle

- + + This constraint sets the angle between two vectors. A vector + is anything with a direction; in MechSketch, line segments and + normals are both vectors. (So the constraint could apply to + two line segments, or to a line segment and a normal, or to two + normals.) The angle constraint is available in both projected + and 3d versions. + + The angle must always lie between 0 and 180 degrees. Larger or + smaller angles may be entered, but they will be taken modulo + 180 degrees. The sign of the angle is ignored. + When two lines intersect, four angles are formed. These angles form two equal pairs. For example, the pictured lines interesect at 30 degrees and 150 degrees. These two angles (30 and 150) are known as supplementary angles, and they always sum to 180 degrees. - + (Notice that in the sketch, three of the angle constraints are reference dimensions. Given any one of the angles, we could @@ -475,12 +601,56 @@ for new users; to learn about this program, see the video tutorials.

On Point / Curve / Plane

+ This constraint forces two points to be coincident, or a point + to lie on a curve, or a point to lie on a plane. + + The point-coincident constraint is available in both 3d and + projected versions. The 3d point-coincident constraint restricts + three degrees of freedom; the projected version restricts only + two. If two points are drawn in a workplane, and then constrained + coincident in 3d, then an error will result--they are already + coincident in one dimension (the dimension normal to the plane), + so the third constraint equation is redundant. + + When a point is constrained to lie on a circle (or an arc of + a circle), the actual constraint forces the point to lie on + the cylindrical surface through that circle. If the point and + the circle are already coplanar (e.g., if they are both drawn + in the same workplane), then the point will lie on the curve, + but otherwise it will not. +

Equal Length / Radius

+ This constraint forces two lengths, angles, or radiuses to + be equal. + + The equal-angle constraint requires four vectors as input: + the two equal angles are the angle between each pair of inputs. + For example, select line segments A, B, C, and D. The constraint + forces the angle between lines A and B to be equal to the angle + between lines C and D. If the wrong supplementary angle is chosen, + then choose Constrain -> Other Supplementary Angle, as for the + angle constraint. +

Length Ratio

+ This constraint sets the ratio between the lengths of two line + segments. For example, if line A and line B have length ratio + 2:1, then the constraint is satisfied if A is 50 mm long and B + is 25 mm long. + + The order in which the lines are selected matters; if line A is + selected before line B, then the ratio is length of A:length of B. +

At Midpoint

+ This constraint forces a point to lie on the midpoint of a line. + + The at-midpoint constraint can also force the midpoint of a line + to lie on a plane; this is equivalent to creating a datum point, + constraining it at the midpoint of the line, and then constraining + that midpoint to lie on the plane. +

Symmetric

This constraint forces two points to be symmetric about some @@ -492,13 +662,20 @@ for new users; to learn about this program, see the video tutorials. workplane. Or, the symmetry plane may be specified as a line in a workplane; the symmetry plane is then through that line, and normal to the workplane. Or, the symmetry plane may be omitted; - in that case, it is inferred to be either parallel to the active + in that case, it is inferred to be parallel to either the active workplane's vertical axis or its horizontal axis. The horizontal or vertical axis is chosen, depending which is closer to the configuration in which the points were initially drawn. +

Perpendicular

+ + This constraint is exactly equivalent to an angle constraint + for ninety degrees. +

Parallel / Tangent

+ This constraint forces two vectors to be parallel. + In 2d (i.e., when a workplane is active), a zero-degree angle constraint is equivalent to a parallel constraint. In 3d, it is not. @@ -514,8 +691,16 @@ for new users; to learn about this program, see the video tutorials. only one degree of freedom, a 3d parallel constraint restricts two degrees of freedom. + This constraint can also force a line to be tangent to a curve. + In order to do this, the line must already share an endpoint with + the curve; this would usually be achieved with a point-coincident + constraint. The constraint will force them to also be tangent + at that point. +

Same Orientation

+ This constraint forces two normals to have the same orientation. + A normal has a direction; it is drawn as an arrow in that direction. The direction of that arrow could be specified by two angles. The normal specifies those two angles, plus one @@ -528,7 +713,7 @@ for new users; to learn about this program, see the video tutorials. For example, the picture below shows two workplanes, whose normals are constrained to be parallel: - + Because the normals are parallel, the planes are parallel. But one plane is twisted with respect to the other, so the planes are not @@ -591,21 +776,31 @@ for new users; to learn about this program, see the video tutorials. This creates a new empty group, in which the user may draw lines, circles, arcs, and other curves. + The ultimate goal is usually to draw closed sections (like + a triangle, or a square with a circular cutout, or some more + complicated shape). These sections are the input for later groups. + For example, an extrude group takes a flat section, and uses it + to form a solid. + + If all of the entities in the group can be assembled into closed + loops, then the area that the loops enclose is shaded in very + dark blue. This is the area that would be swept or extruded or + lathed by a subsequent group. +

Sketch in New Workplane

This creates a new empty group, similar to a new "Sketch in 3d". The difference is that a "Sketch in New Workplane" also creates a workplane. The workplane is created based on the entities that - are selected when the sketch is created. + are selected when the sketch is created. These may be: A point and two line segments The new workplane has its origin at the specified point. The - workplane is parallel to the two lines. If the point and - two are two edges on a plane face of the part, and a vertex - on that plane face, then the resulting workplane will be - coincident with that face (i.e., the user will be drawing - on that face). + workplane is parallel to the two lines. If the point is a + vertex on a face of the part, and the two lines are two edges + of that face, then the resulting workplane will be coincident + with that face (i.e., the user will be drawing on that face). A point @@ -625,6 +820,11 @@ for new users; to learn about this program, see the video tutorials. The new group's associated workplane is automatically set to be the active workplane. + If the entities in this group do not form closed curves, then + an error message is displayed on the screen, and a red line is + drawn across the gap. An error is also displayed if the curves + are not all coplanar. +

Step Translating

This group takes geometry in the active group, and copies it @@ -647,12 +847,12 @@ for new users; to learn about this program, see the video tutorials. The copies may be translated starting from the original, or starting from copy #1. If the translation starts from the - original, then the translation will contain the original. (So a - 1-element step will always produce the input geometry exactly.) - If the translation starts from copy #1, then the original is - not included in the output. (So a 1-element step makes a single - copy of the input geometry, and allows the user to translate it - anywhere in space.) + original, then the translation will contain the original. (So + a 1-element step will always produce the input geometry in its + original location.) If the translation starts from copy #1, then + the original is not included in the output. (So a 1-element step + makes a single copy of the input geometry, and allows the user + to translate it anywhere in space.) If the active group is a sketch (sketch in 3d, sketch in new workplane), the the sketch is stepped and repeated. In that case @@ -679,14 +879,19 @@ for new users; to learn about this program, see the video tutorials. a line segment or a normal; the axis of rotation goes through the point, and is parallel to the line segment or normal. - If a workplane is active, then it's also possible to select just - a point; in that case, the axis of rotation goes through that - point, and is normal to the workplane. + If a workplane is active, then it's also possible to select + just a point; in that case, the axis of rotation goes through + that point, and is normal to the workplane. This means that the + rotation remains within the plane of the workplane. - By default, three copies are created. If a different number is - typed in (to the group's page in the text window, as for Step - Translating), then the copies will be spaced evenly along a - complete circle. + The step and repeat options (one side / two sides, with original / + with copy #1) are the same as for step translating groups. + + The numer of copies is specified in the same way as for step + translating. If the rotated geometry has not yet been constrained, + then the copies will be spaced evenly around a circle; for + example, if 5 copies are requested, then the spacing will be + 360/5 = 72 degrees. To place the copies along less than (or more than) a complete circle, drag a point on one of the copies with the mouse; all @@ -694,23 +899,22 @@ for new users; to learn about this program, see the video tutorials. Constraints (for example an angle constraint, or a point-on-lie constraint) may be used to specify the angle of rotation exactly. - THe step and repeat options (one side / two sides, with original / - with copy #1) are the same as for step translating groups. -

Extrude

- Before creating a new extrusion, the active group should contain - a sketch that consists entirely of closed curves. The extrude - group takes that flat sketch, and extrudes it to form a solid. + This group takes a flat section, and extrudes it to form a solid. + The flat section is taken from the section of the group that + is active when the extrude group is created. (This is usually + a sketch in workplane, or a sketch in 3d, but could also be a + step and repeat.) The sketch may be extruded on one side, or on two sides. If the sketch is extruded on one side, then the new solid is either - entirely above or entirely below the original sketch. (Drag a + entirely above or entirely below the original sketch. Drag a point on the new surface to determine the extrude direction, and also to determine the extrude depth. Once the extrusion depth looks approximately correct, it may be specified exactly - by using constraints. For example, select a line on the side of - the extrusion, and constrain its length.) + by using constraints. For example, the user might constrain the + length of one of the newly extruded edges. If the sketch is extruded on two sides, then the original sketch lies at the exact midpoint of the new solid. This means that @@ -739,10 +943,10 @@ for new users; to learn about this program, see the video tutorials.

Lathe

- Before creating a new lathe group, the active group should contain - a sketch that consists entirely of closed curves. The lathe group - takes that flat sketch, and sweeps it around a specified axis, - to form a solid of revolution. + This group takes a flat sketch, and sweeps it around a + specified axis, to form a solid of revolution. The section + is taken from the group that is active when the lathe group + is created. To create a lathe group, first select a line segment. Then choose New Group -> Lathe. The line segment is the axis of revolution. @@ -753,13 +957,32 @@ for new users; to learn about this program, see the video tutorials.

Sweep

+ This group takes a flat sketch, and sweeps it along an arbitrary + trajectory. The section is taken from the group that is active + when the sweep group is created. The path is taken from the + group that precedes the active group. + + The section to sweep should be drawn approximately normal + (perpendicular) to the trajectory. As the section is swept, + it is maintained normal to the trajectory. +

Helical Sweep

- This group sweeps a section along a helix. It might be used to - draw a screw thread, or a coil spring. + This group takes a flat sketch, and sweeps it along a helix. The + section is taken from the group that is active when the helical + sweep is created. - To create a helical sweep, first draw the section to be swept - along the helix. + To create a helical sweep, first select a line segment and a + point. Then choose New Group -> Helical Sweep. The line segment + is the axis of the helix, and the point determines the radius + of the helix. + + To change the parameters of the helix, enter new values in the + helical sweep's page in the text window. For example, a 1/2"-10 + screw thread has axial pitch 0.100" per turn (since ten turns + of 0.100" make an inch), and dRadius = 0. A flat coil has axial + pitch zero, but some dRadius. A sweep with nonzero pitch and + dRadius produces a conical helix.

Import / Assemble

@@ -881,7 +1104,7 @@ for new users; to learn about this program, see the video tutorials. This option will export a bitmap image of whatever is displayed on-screen. It is equivalent to taking a screenshot. This option - is useful for producing human-readable drawings. + is useful for producing human-readable output. Choose File -> Export Image. The file is exported as a PNG, which most graphics software can open. @@ -889,9 +1112,9 @@ for new users; to learn about this program, see the video tutorials.

2d Vector (DXF)

This option will generate a 2d vector file that represents a - specified plane in the part. Most 2d CAM software, including the - software that ships with laser or waterjet cutters, will accept - a DXF file. + specified plane in the part. Most 2d CAM software, including + the software that ships with most laser or waterjet cutters, + will accept a DXF file. Before exporting a DXF, it is necessary to specify which plane of the part should be exported. This may be specified by: @@ -927,6 +1150,9 @@ for new users; to learn about this program, see the video tutorials. The units of the DXF file are determined by the export scale factor, which may be specified in the configuration screen. + The exported DXF contains only line segments; all curves are + broken down into lines, with the specified chord tolerance. +

3d Mesh (STL)

This option will generate a 3d triangle mesh that represents @@ -1019,6 +1245,20 @@ for new users; to learn about this program, see the video tutorials. means that some lines that are parallel in real life will not be parallel in the drawing; they will converge at a vanishing point. + The image below is a perspective projection. All of the square + cutouts are the same size, but the ones at the front (closer to + the viewer) are drawn larger, and the ones at the back are drawn + smaller. + + + + The next image is a parallel projection. All of the square + cutouts are the same size on the drawing. (The cutouts at the + top might look slightly larger, but that is an optical illusion, + because the eye is accustomed to seeing images with perspective.) + + + A perspective projection will often look more realistic, and gives a better impression of depth. The disadvantage is that the perspective distorts the image, and may cause confusion. @@ -1063,7 +1303,7 @@ for new users; to learn about this program, see the video tutorials.

Licensing

- As downloaded, MechSketch does not include a license file. This means + As downloaded, MechSketch does not include a license key. This means that it cannot create files with more than seven groups. Larger files may be opened, but not modified. This light version of MechSketch is intended for evaluation, but non-commercial / personal use is @@ -1072,7 +1312,7 @@ for new users; to learn about this program, see the video tutorials. The licensed version of MechSketch can create files with an unlimited number of groups. - When a license is purchased, a license file ("mechsketch.license") + When a license is purchased, a license file ("mechsketch.key") will be sent via email. To activate the license, save this file somewhere on your computer. In MechSketch, choose Help -> Load License... A file dialog box will appear; select the license file. @@ -1080,3 +1320,11 @@ for new users; to learn about this program, see the video tutorials. No license server or dongle is required, and licenses do not expire. + +angle bracket with gusset +t slot table +slotted box +linkage +inconsistent constraints + + diff --git a/generate.cpp b/generate.cpp index 20d6b0f3..7e0a0fa1 100644 --- a/generate.cpp +++ b/generate.cpp @@ -127,7 +127,6 @@ bool SolveSpace::PruneConstraints(hGroup hg) { void SolveSpace::GenerateAll(void) { int i; int firstDirty = INT_MAX, lastVisible = 0; - bool markVvMeshDirty = false; // Start from the first dirty group, and solve until the active group, // since all groups after the active group are hidden. for(i = 0; i < group.n; i++) { @@ -135,23 +134,10 @@ void SolveSpace::GenerateAll(void) { g->order = i; if((!g->clean) || (g->solved.how != Group::SOLVED_OKAY)) { firstDirty = min(firstDirty, i); - markVvMeshDirty = true; } if(g->h.v == SS.GW.activeGroup.v) { lastVisible = i; } - if(markVvMeshDirty) { - if(firstDirty == i && - (g->type == Group::DRAWING_3D || - g->type == Group::DRAWING_WORKPLANE)) - { - // These groups don't change the mesh, so there's no need - // to regenerate the vertex-to-vertex mesh if they're the - // first dirty one. - } else { - g->vvMeshClean = false; - } - } } if(firstDirty == INT_MAX || lastVisible == 0) { // All clean; so just regenerate the entities, and don't solve anything. @@ -213,6 +199,17 @@ void SolveSpace::GenerateAll(int first, int last) { g->clean = true; } else { if(i >= first && i <= last) { + // See if we have to do the vertex-to-vertex mesh, that + // we used for emphasized edges. + if(first == i && + (g->type == Group::DRAWING_3D || + g->type == Group::DRAWING_WORKPLANE)) + { + // Special case--if the first dirty group doesn't change + // the mesh, then no need to regen edges for it. + } else { + g->vvMeshClean = false; // so we'll regen it + } // The group falls inside the range, so really solve it, // and then regenerate the mesh based on the solved stuff. SolveGroup(g->h);