Skip to content

Serpentine3D 0.7.0

Choose a tag to compare

@chisomobanzi chisomobanzi released this 17 Aug 17:12
· 70 commits to main since this release

Changed

  • curve draws by control points now, and interpcrv is its own
    command.
    These are Rhino's names, and they finally mean what Rhino
    means by them: curve (alias cv, for control vertex) pulls a NURBS
    curve toward the points you pick, and interpcrv runs one through them.
    Serpentine's curve used to be the interpolating one, so a Rhino user
    typing the command they use most got the other tool with no sign that
    anything was wrong: both make a smooth curve through roughly the right
    place, and only the control points give it away. A script, alias or habit
    that relied on curve interpolating should say interpcrv.

Added

  • You can see the curve while you are drawing it. Both curve commands
    now ghost the curve the next click would make, instead of showing only
    the points already picked and the straight chain between them. That chain
    is the one shape the curve is not: an interpolated curve bulges away from
    it, and a control point curve does not go through the middle of it at
    all. So interpcrv drops the chain entirely, while curve keeps it,
    because there the chain is the control polygon and part of what you are
    drawing rather than a stand-in for it.

  • dir and flip, Rhino's pair for direction. Which way a curve runs
    and which way a surface faces are invisible until something draws them,
    and then they decide what happens next: which end an offset comes out on,
    which way a sweep travels, which side a shell thickens. dir stands green
    arrows on what you picked, along a curve or off a surface, and stays up
    with Flip on the prompt so you can turn a face round and watch the arrows
    come back the other way. flip is the same edit without the looking.
    Reversing works on the geometry rather than the topology, so a circle
    turned round is still a circle rather than the b-spline a conversion would
    leave behind. The arrows are a fixed size on screen and they belong to the
    command: they go when it ends, including on Escape.

  • undoview and redoview, a history for the camera. An orbit that
    went too far leaves the drawing exactly as it was, so the general undo is
    no help at all: there is nothing about the model to take back, and what
    you want is the view you had a second ago. A whole gesture is one step, so
    a drag that turns the model right round comes back in one, and so does a
    burst of wheel clicks. Typing top or running zoomextents is a step
    like any other. Each pane keeps its own history, because where the Top
    view has been says nothing about where Perspective has been.

  • lockother, the other half of isolate. Isolate takes the rest of the
    drawing off the screen; this leaves it up to line the new work against and
    only stops you picking it, which is what you actually wanted when the
    thing you keep catching is a background curve you have no intention of
    moving. What you picked stays picked, and unlockall releases the rest.
    The scripting API reports locked on every object now, so a script can
    see why a pick found nothing.

  • insertknot, insertcontrolpoint, removeknot and
    removecontrolpoint
    , under Rhino's names. Inserting a knot is the one
    edit that hands you a control point without moving the curve by so much
    as a tolerance, so you can get a handle where you want to pull from
    rather than making do with the ones the curve was built with; Automatic
    puts one in the middle of every span. Removing a knot goes the other way
    and does move the curve, so the command says by how far. With several
    curves picked, the point you click says which one you meant and which
    knot you meant. Both commands turn the control points on for what you
    picked, and both preview under the cursor: the control polygon you would
    get for an insertion, the curve you would be left with for a removal.

Fixed

  • A closed control point curve is now closed all the way round.
    make_control_curve(..., closed=True) took the argument and ignored it,
    and built an open curve. It builds a periodic one, so the poles are a
    ring with no first or last and the curve runs through the seam as
    smoothly as it runs anywhere else, rather than meeting itself at a
    corner.