GHL 3.4.1 Release Note

3D: Another version of Sweeping (When Profile and Sweep path intersect each other)

Another functions
to create a swept surface that is a locus of a curve (profile) swept along another curve (sweep path).
Where, the given curves are polynomial/rational Bspline curve,
and generated surface is a correspoinding polynomial/rational Bspline surface.

The new functions create a surface directly from given curves.
And the generated surface passes given profile and sweep path, completely.

example: ghlv3/examples/sweep_skin/sweeping2.c

3D : Some geometric operations with a set of triangles

Some operations for a set of triangles are added.

Offsetting

A function
to create a offsetted set of triangles.
For all of vertices of a set of triangles, offsets towards direction of normal vector at each vertex,
and returns a new set of triangles.

2D: Another versions of Offsetting

Type 3 functions
are added for offsetting a curve with a Bspline curve or a set of Bezier curves.
New functions approximate sample points with a Bspline curve
by calling the latest approximation function, not by using own logic.

Type 2 functions
are added for offsetting a composite curve.
New functions inspect whether neighbor segments in the offsetted curve intersect each other,
and eliminate such simple self-interferences.

3D: Some optional setting for surface-surface intersections

Facilities to alter
specific function's behavior dynamically are added.
In this version, following things are controllable.

Utility

gh_pcnfGetDouble returns a real value to control specific function's behavior
gh_pcnfSetDouble set a real value to control specific function's behavior
gh_pcnfGetInteger returns an integer value to control specific function's behavior
gh_pcnfSetInteger set an integer value to control specific function's behavior
gh_pcnfGetLogical returns a logical value to control specific function's behavior
gh_pcnfSetLogical set a logical value to control specific function's behavior

2D

gh2ofstCmcCmcByBsc2 finds a composite curve which approximates an offset of a composite curve (official, type 2)
gh2ofstCmcCmcByBzc2 finds a composite curve which approximates an offset of a composite curve (official, type 2)
gh2ofstBscBsc3 finds a Bspline curve which approximates an offset of a Bspline curve (type 3)
gh2ofstBzcBsc3 finds a Bspline curve which approximates an offset of a bezier curve (type 3)
gh2ofstCirBsc3 finds a Bspline curve which approximates an offset of a circle (type 3)
gh2ofstEllBsc3 finds a Bspline curve which approximates an offset of a ellipse (type 3)
gh2ofstHypBsc3 finds a Bspline curve which approximates an offset of a hyperbola (type 3)
gh2ofstLinBsc3 finds a Bspline curve which approximates an offset of a line (type 3)
gh2ofstParBsc3 finds a Bspline curve which approximates an offset of a parabola (type 3)
gh2ofstRBscBsc3 finds a Bspline curve which approximates an offset of a rational Bspline curve (type 3)
gh2ofstRBzcBsc3 finds a Bspline curve which approximates an offset of a rational bezier curve (type 3)
gh2ofstTrcBsc3 finds a Bspline curve which approximates an offset of a trimmed curve (type 3)
gh2ofstBscBzc3 finds a bezier curve which approximates an offset of a Bspline curve (type 3)
gh2ofstBzcBzc3 finds a bezier curve which approximates an offset of a bezier curve (type 3)
gh2ofstCirBzc3 finds a bezier curve which approximates an offset of a circle (type 3)
gh2ofstEllBzc3 finds a bezier curve which approximates an offset of a ellipse (type 3)
gh2ofstHypBzc3 finds a bezier curve which approximates an offset of a hyperbola (type 3)
gh2ofstLinBzc3 finds a bezier curve which approximates an offset of a line (type 3)
gh2ofstParBzc3 finds a bezier curve which approximates an offset of a parabola (type 3)
gh2ofstRBscBzc3 finds a bezier curve which approximates an offset of a rational Bspline curve (type 3)
gh2ofstRBzcBzc3 finds a bezier curve which approximates an offset of a rational bezier curve (type 3)
gh2ofstTrcBzc3 finds a bezier curve which approximates an offset of a trimmed curve (type 3)

There was a bug, that given tangent vectors are not always guaranteed,
abount fucntions of Bspline interpolation/approximation,
such as gh2intpBscC2, gh3intpBssC2 (see also List of fixed bugs).

This bug had been fixed in this version, but according to this modification,
gh[23]bsslePnt, the function which returns "Bessel's end condition",
will return different length of generated vertors.
Until now,

The length of tangent vectors as a Bezier curve

But now,

The length of tangent vectors of a Bspline curve that will interpolate given points with given parameters

will be returned.
That is, until now, parameter(knot) interval of both end segments of interpolated Bspline curve
was supposed as always 1.
But now, will be supposed as given parameter interval.
More concretely, the returned vectors will be subtracted by (param[1] - param[0]) at start point,
and (param[1] - param[0]) at end point.

If you have used gh[23]bsslePnt with gh[23]intpBscC2, gh3intpBssC2, etc...,
you have nothing to modify.
But if you have used gh[23]bsslePnt individually, and the length of returned vector
has an influence about result, you should revise it.

did not returned correct parameter section, when there were 2 or more sections.

gh2evalTrc, gh3evalTrc, gh3cotacutoTrc

returned wrong derivatives (reversed direction).

gh2intsLinLsg

did not returned some intersection points in very short segments.
Also wrong judgement of indentification about two intersection points.

gh[23]intsLsgLsg

did not returned some intersection points,
that were on an end point, and this end point is indentical with adjacent vertex.
Also did not returned end point as intersection point,
when two line segments overlapped at this end point.

gh3intsBzsBzs etc

returned disarranged intersection curve at reduced point of surface.

gh3iflt{Pnt,Crv,Srf}Srf etc

returned GH__OPE_GEOMERR

gh3ofstBssBss etc

Offsetted surface had undulations, when a given surface had warped parameter space.

gh3swepBscRBscCPY2

did not copy at correct point.

gh3ofstCbsCbs

now can treat open boundary.

gh3intsBssBss etc

was too slow.

gh3icboCbs

did not return some intersection points on an open boundary.

gh3ifltSrfSrf

dit not project a center of fillet to a valid point of an original surface.
Also fixed crash problem.

gh3isinCbs, gh3dvdbCbs

did not treat a situation when a end of open boundary overlaps
with natual boundary of another surface.