This document describes contents of version up from GHL 3.4 patch 01 to GHL 3.4.1.

**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.- Intersections of freeform surface: precision of dividing freeform surface (= precision of dividing intersection)
- Intersections of freeform surface: tolerance to judge whether two surfaces overlap
- Intersections of freeform surface: whether remove incomplete intersections
- Intersections between two quadlic surfaces: precision of dividing freeform intersection

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

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)

gh3ofstSTri offset a set of triangles gh3swepBscBss1 copys profile with parallel translation(Bspline curve)(type 2) gh3swepBscBss2 copys profile according to variation of Frenet frame of sweep path(Bspline curve)(type 2) gh3swepBscBss3 copys profile according to variation of tangent vector(Bspline curve)(type 2) gh3swepRBscRBss1 copys profile with parallel translation(rational Bspline curve)(type 2) gh3swepRBscRBss2 copys profile according to variation of Frenet frame of sweep path(rational Bspline curve)(type 2) gh3swepRBscRBss3 copys profile according to variation of tangent vector(rational Bspline curve)(type 2)

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.

- gh[23]gtpvOPrmRCrv
- fixed Floating point exception. Aso wrong judgement at upper limit of paremeter.
- gh2ofstBscBsc, gh3ofstBscBss, etc
- returned error when a singular point was at end of curves.
- gh_polyJdgd
- did not obtain solutions.
- gh[23]{tng0,crv0}{Bsc,RBsc}2
- 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.
- gh3intsSphCon
- Second cirlcle was not setted, when solutions were two circles.
- gh[23]intpBscC2, gh[23]aprxBsc4, gh3intpBssC2
- Given tangent vectors were not guaranteed.

Naotake KAKISHITA naokak@pml.co.jp Toru HASEGAWA hasegawa@sra.co.jp Zitao XU zitao@pml.co.jp Nobuyuki SHIKANO shikano@pml.co.jp Hideaki ITO hideit@pml.co.jp

Thank you for your continued support!

Copyright (c) 1999 Precision Modeling Laboratory,Inc., Tokyo, Japan. All Rights Reserved.