#r "nuget: Euclid, 0.30.0"
open Euclid
open Euclid.EuclidErrors
// Quick Start
let point1 = Pnt(1.0, 2.0, 3.0)
let point2 = Pnt(4.0, 5.0, 6.0)
let vector = Vec(1.0, 1.0, 0.0)
let distance = point1.DistanceTo point2
let unitVec = vector.Unitized
let matrix =
Matrix.createShear(3.0, 0, 0, 0, 0, 0)
***
Matrix.createRotationZ 45
let _quickStartResult =
point1
|> Pnt.translate vector
|> Pnt.scale 3.0
|> Pnt.transform matrix
// Points and Vectors (2D)
let a = Pt(1.0, 2.0)
let b = Pt(4.0, 6.0)
let dist = a.DistanceTo b
let mid = Pt.midPt a b
let v = Vc(3.0, 4.0)
let len = v.Length
let half = v.Half
let perp = v.Rotate90CCW
let moved = a + v
let diff = b - a
let dir = v.Unitized
let angle = v.Direction360
let dot = v.Dot(Vc(1.0, 0.0))
let cross = v.Cross(Vc(1.0, 0.0))
// Points and Vectors (3D)
let p1 = Pnt(1.0, 2.0, 3.0)
let p2 = Pnt(4.0, 6.0, 3.0)
let dist3d = p1.DistanceTo p2
let mid3d = Pnt.midPt p1 p2
let lerp = Pnt.divPt(p1, p2, 0.25)
let v1 = Vec(1.0, 0.0, 0.0)
let v2 = Vec(0.0, 1.0, 0.0)
let normal = v1.Cross v2
let dot3d = v1.Dot v2
let angle3d = Vec.angle180 v1 v2
let dir3d = Vec(3.0, 4.0, 0.0).Unitized
let isPerp = dir3d.IsPerpendicularTo UnitVec.Zaxis
let pt2d = p1.AsPt
let pt3d = Pt(1.0, 2.0).WithZ 5.0
// Lines
let ln2d = Line2D(Pt(0, 0), Pt(10, 0))
let ln3d = Line3D(Pnt(0, 0, 0), Pnt(10, 5, 3))
let ln = Line2D(0.0, 0.0, 10.0, 5.0)
let lenLn = ln2d.Length
let midPt = ln2d.Mid
let dirLn = ln3d.Direction
let tang = ln3d.Tangent
let quarterPt = ln2d.EvaluateAt 0.25
let longer = ln2d.Extend(2.0, 3.0)
let shorter = ln2d.Shrink(1.0, 1.0)
let flipped = ln2d.Reversed
let testPt = Pt(5.0, 3.0)
let closest = ln2d.ClosestPoint testPt
let param = ln2d.ClosestParameter testPt
let other = Line2D(Pt(5, -5), Pt(5, 5))
let isParallel = ln2d.IsParallelTo other
let isPerpLn = ln2d.IsPerpendicularTo other
let hit = Line2D.tryIntersect ln2d other
let offsetLn = Line2D.offset 2.0 ln2d
let movedLn = ln2d.Move(Vc(0.0, 5.0))
// Line Intersections (Discriminated Unions)
let lineA = Line2D(Pt(0, 0), Pt(10, 0))
let lineB = Line2D(Pt(5, -5), Pt(5, 5))
match XLine2D.getIntersection(lineA, lineB) with
| XLine2D.XPt.Intersect pt -> printfn $"Lines cross at {pt}"
| XLine2D.XPt.Apart -> printfn "Segments don't reach each other"
| XLine2D.XPt.Parallel -> printfn "Lines are parallel"
| XLine2D.XPt.TooShortA -> printfn "Line A is too short"
| XLine2D.XPt.TooShortB -> printfn "Line B is too short"
| XLine2D.XPt.TooShortBoth -> printfn "Both lines are too short"
match XLine2D.getRayIntersection(lineA, lineB) with
| XLine2D.XRay.Intersect pt -> printfn $"Rays meet at {pt}"
| XLine2D.XRay.Parallel -> printfn "Rays are parallel"
| _ -> ()
let ln3A = Line3D(Pnt(0, 0, 0), Pnt(10, 0, 0))
let ln3B = Line3D(Pnt(5, 0, 5), Pnt(5, 10, 5))
match XLine3D.getIntersection(ln3A, ln3B) with
| XLine3D.XPnt.Intersect pt -> printfn $"Lines intersect at {pt}"
| XLine3D.XPnt.Skew (ptA, ptB, d) -> printfn $"Closest approach: {d} between {ptA} and {ptB}"
| XLine3D.XPnt.Apart -> printfn "Segments don't reach each other"
| XLine3D.XPnt.Parallel -> printfn "Lines are parallel"
| _ -> ()
// Planes
let npl = NPlane(Pnt(0, 0, 5), UnitVec.Zaxis)
let d = npl.DistanceToPt (Pnt(3, 4, 8))
let d2 = npl.DistanceToPt (Pnt(3, 4, 2))
let proj = npl.ClosestPoint (Pnt(3, 4, 8))
let ang = npl.Angle90ToVec (Vec(1, 0, 0))
let ppl =
PPlane.createThreePoints
(Pnt(0, 0, 0))
(Pnt(10, 0, 0))
(Pnt(0, 10, 0))
// Rectangles
let rect = Rect2D.createFromXVectorAndWidth(Pt(0, 0), Vc(10, 0), 5.0)
let dirRect = UnitVc.rotate 45.0 UnitVc.Xaxis
let rotRect = Rect2D.createFromDirectionAndSizes(Pt(0, 0), dirRect, 10.0, 5.0)
let area = rect.Area
let cx = rect.SizeX
let cy = rect.SizeY
let center = rect.Center
let c0 = rect.Origin
let c2 = rect.FarCorner
let midPoint = rect.EvaluateAt(0.5, 0.5)
// Bounding Boxes
let points = [ Pnt(0, 0, 0); Pnt(10, 5, 3); Pnt(-2, 8, 1) ]
let bbox = BBox.createFromSeq points
let size = bbox.SizeX, bbox.SizeY, bbox.SizeZ
let minPt = bbox.MinPnt
let maxPt = bbox.MaxPnt
let centerBbox = bbox.Center
let vol = bbox.Volume
let box2 = BBox.createFromCenter(Pnt(0, 0, 0), 10.0, 10.0, 10.0)
let bigger = bbox.Expand 1.0
let inside = bbox.Contains(Pnt(5, 4, 2))
let combined = bbox.Union box2
// Polylines
let pl2d = Polyline2D(ResizeArray [ Pt(0, 0); Pt(10, 0); Pt(10, 5); Pt(0, 5) ])
let lenPolyline = pl2d.Length
let count = pl2d.PointCount
let segs = pl2d.SegmentCount
let firstSeg = pl2d.FirstSegment
let seg = pl2d.GetSegment(1)
pl2d.SetPoint (2, Pt(12, 5))
let copy = pl2d.Duplicate()
let pl3d = Polyline3D.create [ Pnt(0, 0, 0); Pnt(10, 0, 0); Pnt(10, 5, 3) ]
let totalLen = pl3d.Length
// Transformations with Matrices
let pt = Pnt(5.0, 0.0, 0.0)
let m1 = Matrix.createTranslation(10.0, 0.0, 0.0)
let m2 = Matrix.createRotationZ 90.0
let m3 = Matrix.createRotationX 45.0
let m4 = Matrix.createRotationAxis(UnitVec.Zaxis, 30.0)
let m5 = Matrix.createRotationAxisCenter(Vec(0, 0, 1), Pnt(5, 5, 0), 45.0)
let m6 = Matrix.createScale(2.0, 2.0, 1.0)
let m7 = Matrix.createShear(0.5, 0, 0, 0, 0, 0)
let combinedTransform = m1 *** m2 *** m6
let pt2 = pt.Transform combinedTransform
let result =
pt
|> Pnt.translate (Vec(10, 0, 0))
|> Pnt.rotateOnZDeg 90.0
|> Pnt.scale 2.0
|> Pnt.transform combinedTransform
let fromPlane = PPlane.createThreePoints (Pnt(0,0,0)) (Pnt(1,0,0)) (Pnt(0,1,0))
let toPlane = PPlane.createThreePoints (Pnt(5,5,0)) (Pnt(6,5,0)) (Pnt(5,6,0))
let planeXform = Matrix.createPlaneToPlane(fromPlane, toPlane)
let mirror = Matrix.createMirror fromPlane
let rigid = RigidMatrix.createRotationZ 90.0
let vTransform = Vec(1, 0, 0)
let v2Transform = vTransform.TransformRigid rigid
// Quaternion Rotations
let q1 = Quaternion.createFromDegree(Vec(0, 0, 1), 90.0)
let q2 = Quaternion.createFromRadians(UnitVec.Xaxis, 1.5708)
let q3 = Quaternion.createVecToVec(UnitVec.Xaxis, UnitVec.Yaxis)
let angleQ = q1.AngleInDegrees
let axis = q1.Axis
let inv = q1.Inverse
let q4 = q1 *** q2
let rotated = Pnt.rotate q1 (Pnt(1, 0, 0))
let mat = Matrix.createFromQuaternion q1
// Point Cloud Operations
let cloud = ResizeArray [ Pnt(0,0,0); Pnt(1,0,0); Pnt(5,5,5); Pnt(10,10,10) ]
let nearest = Points3D.closestPoint(cloud, Pnt(1.1, 0.1, 0.0))
let idx = Points3D.closestPointIdx(cloud, Pnt(1.1, 0.1, 0.0))
let setA = ResizeArray [ Pnt(0,0,0); Pnt(10,10,10) ]
let setB = ResizeArray [ Pnt(1,0,0); Pnt(20,20,20) ]
let iA, iB = Points3D.closestPointsIdx(setA, setB)
let farthest = Points3D.mostDistantPoint(cloud, setB)
let centerPoints = Points3D.center cloud
let culled = Points3D.cullDuplicatePointsInSeq(cloud, 0.01)
// Error Handling
try
let bad = Vec(0, 0, 0).Unitized
()
with :? EuclidUnitizingException as e ->
printfn $"Caught: {e.Message}"
namespace Euclid
module EuclidErrors
from Euclid
<summary> An internal module for Euclid specific exceptions and failure functions. </summary>
<summary> An internal module for Euclid specific exceptions and failure functions. </summary>
val point1: Pnt
Multiple items
type Pnt = new: x: float * y: float * z: float -> Pnt val X: float val Y: float val Z: float override ToString: unit -> string static member ( * ) : a: Pnt * f: float -> Pnt + 1 overload static member (+) : a: Pnt * b: Pnt -> Pnt + 2 overloads static member (-) : a: Pnt * b: Pnt -> Vec + 2 overloads static member (/) : p: Pnt * f: float -> Pnt static member DivideByInt: pt: Pnt * i: int -> Pnt ...
<summary> A struct containing 3 floats, representing an immutable 3D point. X, Y, and Z. A 3D point represents a location in space, but not direction. (use Vec for that.) (2D Points are called 'Pt' ) </summary>
--------------------
Pnt ()
new: x: float * y: float * z: float -> Pnt
type Pnt = new: x: float * y: float * z: float -> Pnt val X: float val Y: float val Z: float override ToString: unit -> string static member ( * ) : a: Pnt * f: float -> Pnt + 1 overload static member (+) : a: Pnt * b: Pnt -> Pnt + 2 overloads static member (-) : a: Pnt * b: Pnt -> Vec + 2 overloads static member (/) : p: Pnt * f: float -> Pnt static member DivideByInt: pt: Pnt * i: int -> Pnt ...
<summary> A struct containing 3 floats, representing an immutable 3D point. X, Y, and Z. A 3D point represents a location in space, but not direction. (use Vec for that.) (2D Points are called 'Pt' ) </summary>
--------------------
Pnt ()
new: x: float * y: float * z: float -> Pnt
val point2: Pnt
val vector: Vec
Multiple items
type Vec = new: x: float * y: float * z: float -> Vec val X: float val Y: float val Z: float override ToString: unit -> string static member ( * ) : a: Vec * f: float -> Vec + 1 overload static member ( *** ) : a: Vec * b: Vec -> float static member (+) : a: Vec * b: Vec -> Vec static member (-) : a: Vec * b: Vec -> Vec static member (/) : v: Vec * f: float -> Vec ...
<summary> An immutable 3D vector of any length. Made up from 3 floats: X, Y, and Z. A 3D vector represents a direction or translation in space, but not a location. A 4x4 transformation matrix applied to a vector will only rotate and scale the vector but not translate it. (3D unit-vectors of length 1.0 are called 'UnitVec' ) (2D vectors are called 'Vc' ) </summary>
--------------------
Vec ()
new: x: float * y: float * z: float -> Vec
type Vec = new: x: float * y: float * z: float -> Vec val X: float val Y: float val Z: float override ToString: unit -> string static member ( * ) : a: Vec * f: float -> Vec + 1 overload static member ( *** ) : a: Vec * b: Vec -> float static member (+) : a: Vec * b: Vec -> Vec static member (-) : a: Vec * b: Vec -> Vec static member (/) : v: Vec * f: float -> Vec ...
<summary> An immutable 3D vector of any length. Made up from 3 floats: X, Y, and Z. A 3D vector represents a direction or translation in space, but not a location. A 4x4 transformation matrix applied to a vector will only rotate and scale the vector but not translate it. (3D unit-vectors of length 1.0 are called 'UnitVec' ) (2D vectors are called 'Vc' ) </summary>
--------------------
Vec ()
new: x: float * y: float * z: float -> Vec
val distance: float
member Pnt.DistanceTo: b: Pnt -> float
val unitVec: UnitVec
property Vec.Unitized: UnitVec with get
<summary> Returns the 3D vector unitized. Fails with EuclidDivByZeroException if the length of the vector is too small (1e-16) to unitize. </summary>
<summary> Returns the 3D vector unitized. Fails with EuclidDivByZeroException if the length of the vector is too small (1e-16) to unitize. </summary>
val matrix: Matrix
Multiple items
type Matrix = new: m11: float * m21: float * m31: float * x41: float * m12: float * m22: float * m32: float * y42: float * m13: float * m23: float * m33: float * z43: float * m14: float * m24: float * m34: float * m44: float -> Matrix val M11: float val M21: float val M31: float val X41: float val M12: float val M22: float val M32: float val Y42: float val M13: float ...
<summary>A struct containing 16 floats, representing an immutable 4x4 transformation matrix. The matrix is represented in the following column-vector syntax form: <code> M11 M21 M31 X41 M12 M22 M32 Y42 M13 M23 M33 Z43 M14 M24 M34 M44 </code> Where X41, Y42 and Z43 refer to the translation part of the matrix. Note: Never use the struct default constructor Matrix() as it will create an invalid zero Matrix. Use Matrix.create or Matrix.createUnchecked instead.</summary>
--------------------
Matrix ()
new: m11: float * m21: float * m31: float * x41: float * m12: float * m22: float * m32: float * y42: float * m13: float * m23: float * m33: float * z43: float * m14: float * m24: float * m34: float * m44: float -> Matrix
type Matrix = new: m11: float * m21: float * m31: float * x41: float * m12: float * m22: float * m32: float * y42: float * m13: float * m23: float * m33: float * z43: float * m14: float * m24: float * m34: float * m44: float -> Matrix val M11: float val M21: float val M31: float val X41: float val M12: float val M22: float val M32: float val Y42: float val M13: float ...
<summary>A struct containing 16 floats, representing an immutable 4x4 transformation matrix. The matrix is represented in the following column-vector syntax form: <code> M11 M21 M31 X41 M12 M22 M32 Y42 M13 M23 M33 Z43 M14 M24 M34 M44 </code> Where X41, Y42 and Z43 refer to the translation part of the matrix. Note: Never use the struct default constructor Matrix() as it will create an invalid zero Matrix. Use Matrix.create or Matrix.createUnchecked instead.</summary>
--------------------
Matrix ()
new: m11: float * m21: float * m31: float * x41: float * m12: float * m22: float * m32: float * y42: float * m13: float * m23: float * m33: float * z43: float * m14: float * m24: float * m34: float * m44: float -> Matrix
static member Matrix.createShear: xy: float * xz: float * yx: float * yz: float * zx: float * zy: float -> Matrix
static member Matrix.createRotationZ: angleDegrees: float -> Matrix
val _quickStartResult: Pnt
static member Pnt.translate: shift: Vec -> pt: Pnt -> Pnt
static member Pnt.scale: f: float -> pt: Pnt -> Pnt
static member Pnt.transform: m: Matrix -> p: Pnt -> Pnt
val a: Pt
Multiple items
type Pt = new: x: float * y: float -> Pt val X: float val Y: float override ToString: unit -> string static member ( * ) : a: Pt * f: float -> Pt + 1 overload static member (+) : p: Pt * v: Vc -> Pt + 2 overloads static member (-) : a: Pt * b: Pt -> Vc + 2 overloads static member (/) : p: Pt * f: float -> Pt static member DivideByInt: pt: Pt * i: int -> Pt member AsFSharpCode: string ...
<summary> Pt is an immutable 2D point. Made up from 2 floats: X and Y.</summary>
<remarks> 3D Points are called 'Pnt' </remarks>
--------------------
Pt ()
new: x: float * y: float -> Pt
type Pt = new: x: float * y: float -> Pt val X: float val Y: float override ToString: unit -> string static member ( * ) : a: Pt * f: float -> Pt + 1 overload static member (+) : p: Pt * v: Vc -> Pt + 2 overloads static member (-) : a: Pt * b: Pt -> Vc + 2 overloads static member (/) : p: Pt * f: float -> Pt static member DivideByInt: pt: Pt * i: int -> Pt member AsFSharpCode: string ...
<summary> Pt is an immutable 2D point. Made up from 2 floats: X and Y.</summary>
<remarks> 3D Points are called 'Pnt' </remarks>
--------------------
Pt ()
new: x: float * y: float -> Pt
val b: Pt
val dist: float
member Pt.DistanceTo: b: Pt -> float
val mid: Pt
static member Pt.midPt: a: Pt -> b: Pt -> Pt
val v: Vc
Multiple items
type Vc = new: x: float * y: float -> Vc val X: float val Y: float override ToString: unit -> string static member ( * ) : v: Vc * f: float -> Vc + 1 overload static member ( *** ) : a: Vc * b: Vc -> float static member (+) : a: Vc * b: Vc -> Vc static member (-) : a: Vc * b: Vc -> Vc static member (/) : v: Vc * f: float -> Vc static member DivideByInt: v: Vc * i: int -> Vc ...
<summary>Vc is an immutable 2D vector with any length. Made up from 2 floats: X and Y.</summary>
<remarks>2D unit-vectors with length 1.0 are called 'UnitVc'. 3D vectors are called 'Vec'.</remarks>
--------------------
Vc ()
new: x: float * y: float -> Vc
type Vc = new: x: float * y: float -> Vc val X: float val Y: float override ToString: unit -> string static member ( * ) : v: Vc * f: float -> Vc + 1 overload static member ( *** ) : a: Vc * b: Vc -> float static member (+) : a: Vc * b: Vc -> Vc static member (-) : a: Vc * b: Vc -> Vc static member (/) : v: Vc * f: float -> Vc static member DivideByInt: v: Vc * i: int -> Vc ...
<summary>Vc is an immutable 2D vector with any length. Made up from 2 floats: X and Y.</summary>
<remarks>2D unit-vectors with length 1.0 are called 'UnitVc'. 3D vectors are called 'Vec'.</remarks>
--------------------
Vc ()
new: x: float * y: float -> Vc
val len: float
property Vc.Length: float with get
<summary> Returns the length of the 2D vector. </summary>
<summary> Returns the length of the 2D vector. </summary>
val half: Vc
property Vc.Half: Vc with get
<summary> Returns a new 2D vector with half the length. </summary>
<summary> Returns a new 2D vector with half the length. </summary>
val perp: Vc
property Vc.Rotate90CCW: Vc with get
<summary> 90 Degree rotation Counter-Clockwise. </summary>
<summary> 90 Degree rotation Counter-Clockwise. </summary>
val moved: Pt
val diff: Vc
val dir: UnitVc
property Vc.Unitized: UnitVc with get
<summary> Returns the 2D vector unitized. Fails with EuclidDivByZeroException if the length of the vector is less than 1e-12 (UtilEuclid.zeroLengthTolerance). </summary>
<summary> Returns the 2D vector unitized. Fails with EuclidDivByZeroException if the length of the vector is less than 1e-12 (UtilEuclid.zeroLengthTolerance). </summary>
val angle: float
property Vc.Direction360: float with get
<summary> Returns the angle in Degrees from X-axis. Going Counter-Clockwise till 360. </summary>
<summary> Returns the angle in Degrees from X-axis. Going Counter-Clockwise till 360. </summary>
val dot: float
member Vc.Dot: b: Vc -> float
member Vc.Dot: b: UnitVc -> float
member Vc.Dot: b: UnitVc -> float
val cross: float
member Vc.Cross: b: Vc -> float
member Vc.Cross: b: UnitVc -> float
member Vc.Cross: b: UnitVc -> float
val p1: Pnt
val p2: Pnt
val dist3d: float
val mid3d: Pnt
static member Pnt.midPt: a: Pnt -> b: Pnt -> Pnt
val lerp: Pnt
static member Pnt.divPt: fromPt: Pnt * toPt: Pnt * rel: float -> Pnt
val v1: Vec
val v2: Vec
val normal: Vec
member Vec.Cross: b: UnitVec -> Vec
member Vec.Cross: b: Vec -> Vec
member Vec.Cross: b: Vec -> Vec
val dot3d: float
member Vec.Dot: b: Vec -> float
member Vec.Dot: b: UnitVec -> float
member Vec.Dot: b: UnitVec -> float
val angle3d: float
static member Vec.angle180: a: Vec -> b: Vec -> float
val dir3d: UnitVec
val isPerp: bool
member UnitVec.IsPerpendicularTo: other: UnitVec * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.00436330928475 :> obj))>] maxCosine: float<Cosine.cosine> -> bool
member UnitVec.IsPerpendicularTo: other: Vec * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.00436330928475 :> obj))>] maxCosine: float<Cosine.cosine> -> bool
member UnitVec.IsPerpendicularTo: other: Vec * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.00436330928475 :> obj))>] maxCosine: float<Cosine.cosine> -> bool
type UnitVec =
val X: float
val Y: float
val Z: float
override ToString: unit -> string
static member ( * ) : a: UnitVec * f: float -> Vec + 1 overload
static member ( *** ) : a: UnitVec * b: UnitVec -> float + 2 overloads
static member (+) : a: UnitVec * b: UnitVec -> Vec + 2 overloads
static member (-) : a: UnitVec * b: UnitVec -> Vec + 2 overloads
static member (/) : v: UnitVec * f: float -> Vec
static member create: x: float * y: float * z: float -> UnitVec
...
<summary> A struct containing 3 floats, representing an 3D unitized vector. All instances of this type are guaranteed to be always unitized. A 3D vector represents a direction or translation in space, but not a location. A 4x4 transformation matrix applied to a vector will only rotate and scale the vector but not translate it. (2D unit-vectors are called 'UnitVc' ) Use UnitVec.create or UnitVec.createUnchecked to create instances. Note: Never use the struct default constructor UnitVec() as it will create an invalid zero length vector. Use UnitVec.create or UnitVec.createUnchecked instead. </summary>
<summary> A struct containing 3 floats, representing an 3D unitized vector. All instances of this type are guaranteed to be always unitized. A 3D vector represents a direction or translation in space, but not a location. A 4x4 transformation matrix applied to a vector will only rotate and scale the vector but not translate it. (2D unit-vectors are called 'UnitVc' ) Use UnitVec.create or UnitVec.createUnchecked to create instances. Note: Never use the struct default constructor UnitVec() as it will create an invalid zero length vector. Use UnitVec.create or UnitVec.createUnchecked instead. </summary>
property UnitVec.Zaxis: UnitVec with get
<summary> Returns the World Z-axis with length one: UnitVec(0, 0, 1) </summary>
<summary> Returns the World Z-axis with length one: UnitVec(0, 0, 1) </summary>
val pt2d: Pt
property Pnt.AsPt: Pt with get
<summary> Returns the 3D point as 2D point. </summary>
<summary> Returns the 3D point as 2D point. </summary>
val pt3d: Pnt
val ln2d: Line2D
Multiple items
type Line2D = new: fromPt: Pt * toPt: Pt -> Line2D + 1 overload val FromX: float val FromY: float val ToX: float val ToY: float override ToString: unit -> string static member asFSharpCode: ln: Line2D -> string static member asString: ln: Line2D -> string static member direction: ln: Line2D -> Vc static member from: ln: Line2D -> Pt ...
<summary> A struct containing 4 floats, representing an immutable finite line in 2D. </summary>
--------------------
Line2D ()
new: fromPt: Pt * toPt: Pt -> Line2D
new: fromX: float * fromY: float * toX: float * toY: float -> Line2D
type Line2D = new: fromPt: Pt * toPt: Pt -> Line2D + 1 overload val FromX: float val FromY: float val ToX: float val ToY: float override ToString: unit -> string static member asFSharpCode: ln: Line2D -> string static member asString: ln: Line2D -> string static member direction: ln: Line2D -> Vc static member from: ln: Line2D -> Pt ...
<summary> A struct containing 4 floats, representing an immutable finite line in 2D. </summary>
--------------------
Line2D ()
new: fromPt: Pt * toPt: Pt -> Line2D
new: fromX: float * fromY: float * toX: float * toY: float -> Line2D
val ln3d: Line3D
Multiple items
type Line3D = new: fromPt: Pnt * toPt: Pnt -> Line3D + 1 overload val FromX: float val FromY: float val FromZ: float val ToX: float val ToY: float val ToZ: float override ToString: unit -> string static member asFSharpCode: ln: Line3D -> string static member asString: ln: Line3D -> string ...
<summary> A struct containing 6 floats, representing an immutable finite line in 3D. </summary>
--------------------
Line3D ()
new: fromPt: Pnt * toPt: Pnt -> Line3D
new: fromX: float * fromY: float * fromZ: float * toX: float * toY: float * toZ: float -> Line3D
type Line3D = new: fromPt: Pnt * toPt: Pnt -> Line3D + 1 overload val FromX: float val FromY: float val FromZ: float val ToX: float val ToY: float val ToZ: float override ToString: unit -> string static member asFSharpCode: ln: Line3D -> string static member asString: ln: Line3D -> string ...
<summary> A struct containing 6 floats, representing an immutable finite line in 3D. </summary>
--------------------
Line3D ()
new: fromPt: Pnt * toPt: Pnt -> Line3D
new: fromX: float * fromY: float * fromZ: float * toX: float * toY: float * toZ: float -> Line3D
val ln: Line2D
val lenLn: float
property Line2D.Length: float with get
<summary> Returns the length of the line. </summary>
<summary> Returns the length of the line. </summary>
val midPt: Pt
property Line2D.Mid: Pt with get
<summary> Returns the midpoint of the line, </summary>
<summary> Returns the midpoint of the line, </summary>
val dirLn: Vec
property Line3D.Direction: Vec with get
<summary> Same as ln.Vector or ln.Tangent. The returned vector has the same length as the Line3D. </summary>
<summary> Same as ln.Vector or ln.Tangent. The returned vector has the same length as the Line3D. </summary>
val tang: Vec
property Line3D.Tangent: Vec with get
<summary> Same as ln.Vector or ln.Direction. The returned vector has the same length as the Line3D. </summary>
<summary> Same as ln.Vector or ln.Direction. The returned vector has the same length as the Line3D. </summary>
val quarterPt: Pt
member Line2D.EvaluateAt: p: float -> Pt
val longer: Line2D
member Line2D.Extend: distAtStart: float * distAtEnd: float -> Line2D
val shorter: Line2D
member Line2D.Shrink: distAtStart: float * distAtEnd: float -> Line2D
val flipped: Line2D
property Line2D.Reversed: Line2D with get
<summary> Returns the Line2D reversed. </summary>
<summary> Returns the Line2D reversed. </summary>
val testPt: Pt
val closest: Pt
member Line2D.ClosestPoint: p: Pt -> Pt
val param: float
member Line2D.ClosestParameter: p: Pt -> float
val other: Line2D
val isParallel: bool
member Line2D.IsParallelTo: other: Line2D * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] minTangent: float<Tangent.tangent> -> bool
member Line2D.IsParallelTo: other: Vc * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] minTangent: float<Tangent.tangent> -> bool
member Line2D.IsParallelTo: other: UnitVc * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] minTangent: float<Tangent.tangent> -> bool
member Line2D.IsParallelTo: other: Vc * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] minTangent: float<Tangent.tangent> -> bool
member Line2D.IsParallelTo: other: UnitVc * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] minTangent: float<Tangent.tangent> -> bool
val isPerpLn: bool
member Line2D.IsPerpendicularTo: other: Line2D * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((229.181663609 :> obj))>] maxTangent: float<Tangent.tangent> -> bool
member Line2D.IsPerpendicularTo: other: Vc * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((229.181663609 :> obj))>] maxTangent: float<Tangent.tangent> -> bool
member Line2D.IsPerpendicularTo: other: UnitVc * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((229.181663609 :> obj))>] maxTangent: float<Tangent.tangent> -> bool
member Line2D.IsPerpendicularTo: other: Vc * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((229.181663609 :> obj))>] maxTangent: float<Tangent.tangent> -> bool
member Line2D.IsPerpendicularTo: other: UnitVc * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((229.181663609 :> obj))>] maxTangent: float<Tangent.tangent> -> bool
val hit: Pt option
static member Line2D.tryIntersect: lnA: Line2D -> lnB: Line2D -> Pt option
val offsetLn: Line2D
static member Line2D.offset: distance: float -> ln: Line2D -> Line2D
val movedLn: Line2D
member Line2D.Move: v: Vc -> Line2D
val lineA: Line2D
val lineB: Line2D
Multiple items
module XLine2D from Euclid
<summary> A module containing the result types for 2D Line-Line-Intersections and 2D Line-Line relationship queries. </summary>
--------------------
type XLine2D = static member doIntersect: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float -> bool + 2 overloads static member doOverlap: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tolerance: float -> bool + 2 overloads static member getClosestParameters: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> ClParams + 2 overloads static member getClosestPoints: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> ClPts + 2 overloads static member getEndsTouching: a: Line2D * b: Line2D * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tolerance: float -> XEnds static member getIntersection: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XPt + 2 overloads static member getIntersectionParam: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XParam + 2 overloads static member getRayIntersection: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XRay + 2 overloads static member getRayIntersectionParam: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XRayParam + 2 overloads static member getSqDistance: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float -> float + 2 overloads ...
<summary> A type containing only static member functions for computing 2D line intersections. Some functions return Discriminated Unions from the XLine2D module. </summary>
module XLine2D from Euclid
<summary> A module containing the result types for 2D Line-Line-Intersections and 2D Line-Line relationship queries. </summary>
--------------------
type XLine2D = static member doIntersect: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float -> bool + 2 overloads static member doOverlap: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tolerance: float -> bool + 2 overloads static member getClosestParameters: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> ClParams + 2 overloads static member getClosestPoints: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> ClPts + 2 overloads static member getEndsTouching: a: Line2D * b: Line2D * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tolerance: float -> XEnds static member getIntersection: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XPt + 2 overloads static member getIntersectionParam: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XParam + 2 overloads static member getRayIntersection: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XRay + 2 overloads static member getRayIntersectionParam: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XRayParam + 2 overloads static member getSqDistance: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float -> float + 2 overloads ...
<summary> A type containing only static member functions for computing 2D line intersections. Some functions return Discriminated Unions from the XLine2D module. </summary>
static member XLine2D.getIntersection: lineA: Line2D * lineB: Line2D * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<Tangent.tangent> * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XLine2D.XPt
static member XLine2D.getIntersection: pA: Pt * pB: Pt * vA: Vc * vB: Vc * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<Tangent.tangent> * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XLine2D.XPt
static member XLine2D.getIntersection: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<Tangent.tangent> * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XLine2D.XPt
static member XLine2D.getIntersection: pA: Pt * pB: Pt * vA: Vc * vB: Vc * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<Tangent.tangent> * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XLine2D.XPt
static member XLine2D.getIntersection: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<Tangent.tangent> * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XLine2D.XPt
type XPt =
| Intersect of xPt: Pt
| Apart
| Parallel
| TooShortA
| TooShortB
| TooShortBoth
<summary> Describes the possible relationships of two finite 2D lines. Returns the intersection point if they intersect. </summary>
<summary> Describes the possible relationships of two finite 2D lines. Returns the intersection point if they intersect. </summary>
union case XLine2D.XPt.Intersect: xPt: Pt -> XLine2D.XPt
<summary> The finite lines are intersecting in one well defined point. </summary>
<summary> The finite lines are intersecting in one well defined point. </summary>
val pt: Pt
val printfn: format: Printf.TextWriterFormat<'T> -> 'T
union case XLine2D.XPt.Apart: XLine2D.XPt
<summary> The finite 2D lines do not touch each other. Their intersection point is outside of their finite definition. However they are not parallel. XPt.Parallel is used when they are parallel. </summary>
<summary> The finite 2D lines do not touch each other. Their intersection point is outside of their finite definition. However they are not parallel. XPt.Parallel is used when they are parallel. </summary>
union case XLine2D.XPt.Parallel: XLine2D.XPt
<summary> The lines are parallel or even coincident, within the given tolerance. </summary>
<summary> The lines are parallel or even coincident, within the given tolerance. </summary>
union case XLine2D.XPt.TooShortA: XLine2D.XPt
<summary> Line A is shorter than the given minimum length tolerance. </summary>
<summary> Line A is shorter than the given minimum length tolerance. </summary>
union case XLine2D.XPt.TooShortB: XLine2D.XPt
<summary> Line B is shorter than the given minimum length tolerance. </summary>
<summary> Line B is shorter than the given minimum length tolerance. </summary>
union case XLine2D.XPt.TooShortBoth: XLine2D.XPt
<summary> Both Lines are shorter than the given minimum length tolerance. </summary>
<summary> Both Lines are shorter than the given minimum length tolerance. </summary>
static member XLine2D.getRayIntersection: lineA: Line2D * lineB: Line2D * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<Tangent.tangent> * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XLine2D.XRay
static member XLine2D.getRayIntersection: pA: Pt * pB: Pt * vA: Vc * vB: Vc * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<Tangent.tangent> * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XLine2D.XRay
static member XLine2D.getRayIntersection: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<Tangent.tangent> * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XLine2D.XRay
static member XLine2D.getRayIntersection: pA: Pt * pB: Pt * vA: Vc * vB: Vc * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<Tangent.tangent> * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XLine2D.XRay
static member XLine2D.getRayIntersection: pAx: float * pAy: float * pBx: float * pBy: float * vAx: float * vAy: float * vBx: float * vBy: float * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<Tangent.tangent> * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XLine2D.XRay
type XRay =
| Intersect of xPt: Pt
| Parallel
| TooShortA
| TooShortB
| TooShortBoth
<summary> Describes the possible intersection point of two rays (rays are 2D lines extended infinitely in both directions). Returns the intersection point if they intersect. </summary>
<summary> Describes the possible intersection point of two rays (rays are 2D lines extended infinitely in both directions). Returns the intersection point if they intersect. </summary>
union case XLine2D.XRay.Intersect: xPt: Pt -> XLine2D.XRay
<summary> The rays (2d-lines extended infinitely) are intersecting in one well defined point. </summary>
<summary> The rays (2d-lines extended infinitely) are intersecting in one well defined point. </summary>
union case XLine2D.XRay.Parallel: XLine2D.XRay
<summary> The lines are parallel or even coincident, within the given tolerance. </summary>
<summary> The lines are parallel or even coincident, within the given tolerance. </summary>
val ln3A: Line3D
val ln3B: Line3D
Multiple items
module XLine3D from Euclid
<summary> A module containing the result types for 3D Line-Line-Intersections, 3D Line-Line relationship queries, and Line-Cone intersections. </summary>
--------------------
type XLine3D = static member doOverlap: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tolerance: float -> bool + 2 overloads static member doRaysIntersect: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] maxSkewDistance: float -> bool + 2 overloads static member getClosestParameters: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> ClParams + 2 overloads static member getClosestPoints: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> ClPts + 2 overloads static member getEndsTouching: a: Line3D * b: Line3D * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tolerance: float -> XEnds static member getIntersection: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] maxSkewDistance: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XPnt + 2 overloads static member getIntersectionParam: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] maxSkewDistance: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XParam + 2 overloads static member getRayClosestParam: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XRayParam + 2 overloads static member getRayIntersection: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] maxSkewDistance: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XRay + 2 overloads static member getSqDistance: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float -> float + 2 overloads ...
<summary> A type containing only static member functions for computing 3D line intersections and closest approaches. Some functions return Discriminated Unions from the XLine3D module. </summary>
module XLine3D from Euclid
<summary> A module containing the result types for 3D Line-Line-Intersections, 3D Line-Line relationship queries, and Line-Cone intersections. </summary>
--------------------
type XLine3D = static member doOverlap: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tolerance: float -> bool + 2 overloads static member doRaysIntersect: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] maxSkewDistance: float -> bool + 2 overloads static member getClosestParameters: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> ClParams + 2 overloads static member getClosestPoints: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> ClPts + 2 overloads static member getEndsTouching: a: Line3D * b: Line3D * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tolerance: float -> XEnds static member getIntersection: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] maxSkewDistance: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XPnt + 2 overloads static member getIntersectionParam: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] maxSkewDistance: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XParam + 2 overloads static member getRayClosestParam: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XRayParam + 2 overloads static member getRayIntersection: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] maxSkewDistance: float * [<Optional; DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<tangent> * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XRay + 2 overloads static member getSqDistance: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float -> float + 2 overloads ...
<summary> A type containing only static member functions for computing 3D line intersections and closest approaches. Some functions return Discriminated Unions from the XLine3D module. </summary>
static member XLine3D.getIntersection: lineA: Line3D * lineB: Line3D * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] maxSkewDistance: float * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<Tangent.tangent> * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XPnt
static member XLine3D.getIntersection: pA: Pnt * pB: Pnt * vA: Vec * vB: Vec * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] maxSkewDistance: float * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<Tangent.tangent> * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XPnt
static member XLine3D.getIntersection: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] maxSkewDistance: float * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<Tangent.tangent> * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XPnt
static member XLine3D.getIntersection: pA: Pnt * pB: Pnt * vA: Vec * vB: Vec * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] maxSkewDistance: float * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<Tangent.tangent> * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XPnt
static member XLine3D.getIntersection: pAx: float * pAy: float * pAz: float * pBx: float * pBy: float * pBz: float * vAx: float * vAy: float * vAz: float * vBx: float * vBy: float * vBz: float * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] maxSkewDistance: float * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((0.0043633508207 :> obj))>] tangent: float<Tangent.tangent> * [<System.Runtime.InteropServices.Optional; System.Runtime.InteropServices.DefaultParameterValue ((1e-06 :> obj))>] tooShortTolerance: float -> XPnt
type XPnt =
| Intersect of xPnt: Pnt
| Skew of closestPntA: Pnt * closestPntB: Pnt * squareDist: float
| Apart
| Parallel
| TooShortA
| TooShortB
| TooShortBoth
<summary> Describes the possible relationships of two finite 3D lines. Returns the intersection or closest point if they intersect or are skew. </summary>
<summary> Describes the possible relationships of two finite 3D lines. Returns the intersection or closest point if they intersect or are skew. </summary>
union case XPnt.Intersect: xPnt: Pnt -> XPnt
<summary> The finite lines are intersecting in one well defined point (coplanar case). </summary>
<summary> The finite lines are intersecting in one well defined point (coplanar case). </summary>
val pt: Pnt
union case XPnt.Skew: closestPntA: Pnt * closestPntB: Pnt * squareDist: float -> XPnt
<summary> The finite 3D lines are skew (not parallel, not coplanar). Contains the closest points on both lines and the squared distance between them. </summary>
<summary> The finite 3D lines are skew (not parallel, not coplanar). Contains the closest points on both lines and the squared distance between them. </summary>
val ptA: Pnt
val ptB: Pnt
val d: float
union case XPnt.Apart: XPnt
<summary> The finite 3D lines do not touch each other. Their intersection point (or closest approach) is outside of their finite definition. However they are not parallel. XPt.Parallel is used when they are parallel. </summary>
<summary> The finite 3D lines do not touch each other. Their intersection point (or closest approach) is outside of their finite definition. However they are not parallel. XPt.Parallel is used when they are parallel. </summary>
union case XPnt.Parallel: XPnt
<summary> The lines are parallel, within the given tolerance. They have infinity many or no points in common. </summary>
<summary> The lines are parallel, within the given tolerance. They have infinity many or no points in common. </summary>
val npl: NPlane
Multiple items
type NPlane = new: pt: Pnt * n: UnitVec -> NPlane val Origin: Pnt val Normal: UnitVec member Angle90ToLine: ln: Line3D -> float member Angle90ToPlane: pl: NPlane -> float member Angle90ToVec: v: Vec -> float + 1 overload member ClosestPoint: pt: Pnt -> Pnt member DistanceToPt: pt: Pnt -> float member IsCoincidentTo: other: NPlane * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] distanceTolerance: float * [<Optional; DefaultParameterValue ((0.999990480721 :> obj))>] minCosine: float<cosine> -> bool member PlaneAtClPt: pt: Pnt -> NPlane ...
<summary> A struct containing a Pnt and a UnitVec, representing an unparametrized plane defined by a point and a normal vector. As opposed to the PPlane, this plane is not parametrized in X, Y, and Z directions. Note: Never use the struct default constructor NPlane() as it will create an invalid zero plane. Use NPlane.create or NPlane.createUnchecked instead. </summary>
--------------------
NPlane ()
new: pt: Pnt * n: UnitVec -> NPlane
type NPlane = new: pt: Pnt * n: UnitVec -> NPlane val Origin: Pnt val Normal: UnitVec member Angle90ToLine: ln: Line3D -> float member Angle90ToPlane: pl: NPlane -> float member Angle90ToVec: v: Vec -> float + 1 overload member ClosestPoint: pt: Pnt -> Pnt member DistanceToPt: pt: Pnt -> float member IsCoincidentTo: other: NPlane * [<Optional; DefaultParameterValue ((1e-06 :> obj))>] distanceTolerance: float * [<Optional; DefaultParameterValue ((0.999990480721 :> obj))>] minCosine: float<cosine> -> bool member PlaneAtClPt: pt: Pnt -> NPlane ...
<summary> A struct containing a Pnt and a UnitVec, representing an unparametrized plane defined by a point and a normal vector. As opposed to the PPlane, this plane is not parametrized in X, Y, and Z directions. Note: Never use the struct default constructor NPlane() as it will create an invalid zero plane. Use NPlane.create or NPlane.createUnchecked instead. </summary>
--------------------
NPlane ()
new: pt: Pnt * n: UnitVec -> NPlane
member NPlane.DistanceToPt: pt: Pnt -> float
val d2: float
val proj: Pnt
member NPlane.ClosestPoint: pt: Pnt -> Pnt
val ang: float
member NPlane.Angle90ToVec: v: UnitVec -> float
member NPlane.Angle90ToVec: v: Vec -> float
member NPlane.Angle90ToVec: v: Vec -> float
val ppl: PPlane
type PPlane =
val Origin: Pnt
val Xaxis: UnitVec
val Yaxis: UnitVec
val Zaxis: UnitVec
override ToString: unit -> string
static member asString: pl: PPlane -> string
static member createUnchecked: origin: Pnt * axisX: UnitVec * axisY: UnitVec * axisZ: UnitVec -> PPlane
static member createUncheckedXYZ: originX: float * originY: float * originZ: float * xAxisX: float * xAxisY: float * xAxisZ: float * yAxisX: float * yAxisY: float * yAxisZ: float * zAxisX: float * zAxisY: float * zAxisZ: float -> PPlane
member AsFSharpCode: string
member AsString: string
<summary> A struct containing one 3D point and three 3D unit vectors, representing an immutable parametrized plane or frame with unitized X, Y and Z Direction. This struct is called 'PPlane'; the other plane 'NPlane' refers to an un-oriented plane consisting only of an origin and a normal. Note: Never use the struct default constructor PPlane() as it will create an invalid zero length PPlane. Use PPlane.create or PPlane.createUnchecked instead. </summary>
<summary> A struct containing one 3D point and three 3D unit vectors, representing an immutable parametrized plane or frame with unitized X, Y and Z Direction. This struct is called 'PPlane'; the other plane 'NPlane' refers to an un-oriented plane consisting only of an origin and a normal. Note: Never use the struct default constructor PPlane() as it will create an invalid zero length PPlane. Use PPlane.create or PPlane.createUnchecked instead. </summary>
static member PPlane.createThreePoints: origin: Pnt -> xPt: Pnt -> yPt: Pnt -> PPlane
val rect: Rect2D
type Rect2D =
val OriginX: float
val OriginY: float
val XaxisX: float
val XaxisY: float
val YaxisX: float
val YaxisY: float
member Contains: p: Pt -> bool
member EvaluateAt: xParameter: float * yParameter: float -> Pt
member EvaluateDist: xDistance: float * yDistance: float -> Pt
member GetEdge: i: int -> Line2D
...
<summary> A struct containing a 2D Origin point and two 2D Edge vectors, representing an immutable 2D Rectangle with any rotation in 2D space. This implementation guarantees the 2D Rectangle to be always valid. That means the X and Y axes are always perpendicular to each other. However the length of one of these axes might still be zero. <code> local Y-Axis ^ | | 2 3 +------------+ | | | | | | | | | | local +------------+-----> X-Axis 0-Origin 1 </code></summary>
<summary> A struct containing a 2D Origin point and two 2D Edge vectors, representing an immutable 2D Rectangle with any rotation in 2D space. This implementation guarantees the 2D Rectangle to be always valid. That means the X and Y axes are always perpendicular to each other. However the length of one of these axes might still be zero. <code> local Y-Axis ^ | | 2 3 +------------+ | | | | | | | | | | local +------------+-----> X-Axis 0-Origin 1 </code></summary>
static member Rect2D.createFromXVectorAndWidth: origin: Pt * x: Vc * sizeY: float -> Rect2D
val dirRect: UnitVc
type UnitVc =
val X: float
val Y: float
override ToString: unit -> string
static member ( * ) : a: UnitVc * f: float -> Vc + 1 overload
static member ( *** ) : a: UnitVc * b: UnitVc -> float + 2 overloads
static member (+) : a: UnitVc * b: UnitVc -> Vc + 2 overloads
static member (-) : a: UnitVc * b: UnitVc -> Vc + 2 overloads
static member (/) : v: UnitVc * f: float -> Vc
static member create: x: float * y: float -> UnitVc
static member createUnchecked: x: float * y: float -> UnitVc
...
<summary>A struct containing 2 floats, representing an 2D unitized vector. All instances of this type are guaranteed to be always unitized. Never use the struct default constructor UnitVc()! It will create an invalid zero length vector. Use UnitVc.create or UnitVc.createUnchecked instead.</summary>
<remarks>3D unit-vectors are called 'UnitVec'</remarks>
<summary>A struct containing 2 floats, representing an 2D unitized vector. All instances of this type are guaranteed to be always unitized. Never use the struct default constructor UnitVc()! It will create an invalid zero length vector. Use UnitVc.create or UnitVc.createUnchecked instead.</summary>
<remarks>3D unit-vectors are called 'UnitVec'</remarks>
static member UnitVc.rotate: angDegree: float -> vec: UnitVc -> UnitVc
property UnitVc.Xaxis: UnitVc with get
<summary> Returns the World X-axis with length one: UnitVc(1, 0) </summary>
<summary> Returns the World X-axis with length one: UnitVc(1, 0) </summary>
val rotRect: Rect2D
static member Rect2D.createFromDirectionAndSizes: origin: Pt * directionX: UnitVc * sizeX: float * sizeY: float -> Rect2D
val area: float
property Rect2D.Area: float with get
<summary> Calculates the area of the 2D Rectangle. </summary>
<summary> Calculates the area of the 2D Rectangle. </summary>
val cx: float
property Rect2D.SizeX: float with get
<summary> The size in X direction </summary>
<summary> The size in X direction </summary>
val cy: float
property Rect2D.SizeY: float with get
<summary> The size in Y direction </summary>
<summary> The size in Y direction </summary>
val center: Pt
property Rect2D.Center: Pt with get
<summary> Returns the center of the 2D Rectangle. </summary>
<summary> Returns the center of the 2D Rectangle. </summary>
val c0: Pt
property Rect2D.Origin: Pt with get
<summary> The Origin Corner of the 2D Rectangle. </summary>
<summary> The Origin Corner of the 2D Rectangle. </summary>
val c2: Pt
property Rect2D.FarCorner: Pt with get
<summary>Returns the corner diagonally opposite of corner from Origin (point 2). r.Origin + r.Xaxis + r.Yaxis <code> local Y-Axis ^ | | 2 3 +------------+ | | | | | | | | | | local +------------+-----> X-Axis 0-Origin 1 </code></summary>
<summary>Returns the corner diagonally opposite of corner from Origin (point 2). r.Origin + r.Xaxis + r.Yaxis <code> local Y-Axis ^ | | 2 3 +------------+ | | | | | | | | | | local +------------+-----> X-Axis 0-Origin 1 </code></summary>
val midPoint: Pt
member Rect2D.EvaluateAt: xParameter: float * yParameter: float -> Pt
val points: Pnt list
val bbox: BBox
type BBox =
val MinX: float
val MinY: float
val MinZ: float
val MaxX: float
val MaxY: float
val MaxZ: float
member Contains: p: Pnt -> bool + 1 overload
member EvaluateAt: xParameter: float * yParameter: float * zParameter: float -> Pnt
member Expand: dist: float -> BBox + 1 overload
member ExpandSafe: xDist: float * yDist: float * zDist: float -> BBox + 1 overload
...
<summary> A struct of 6 floats representing an immutable 3D bounding box. This implementation guarantees the box to always be valid. That means the Min X, Y, and Z values are always smaller or equal to the respective Max values. The X, Y, and Z axes are also called Width, Depth, and Height3D. <code> Z-Axis Y-Axis ^ / | 7 / 6 MaxPt | +---------------+ | /| / /| | / | / / | 4 |/ | / 5 / | +---------------+ | | |/ | | | +-----------|---+ | / 3 | / 2 | / | / |/ |/ +---------------+----> X-Axis 0 MinPt 1 </code></summary>
<summary> A struct of 6 floats representing an immutable 3D bounding box. This implementation guarantees the box to always be valid. That means the Min X, Y, and Z values are always smaller or equal to the respective Max values. The X, Y, and Z axes are also called Width, Depth, and Height3D. <code> Z-Axis Y-Axis ^ / | 7 / 6 MaxPt | +---------------+ | /| / /| | / | / / | 4 |/ | / 5 / | +---------------+ | | |/ | | | +-----------|---+ | / 3 | / 2 | / | / |/ |/ +---------------+----> X-Axis 0 MinPt 1 </code></summary>
static member BBox.createFromSeq: ps: Pnt seq -> BBox
val size: float * float * float
property BBox.SizeX: float with get
<summary> The size in X direction, often also called Width. </summary>
<summary> The size in X direction, often also called Width. </summary>
property BBox.SizeY: float with get
<summary> The size in Y direction. </summary>
<summary> The size in Y direction. </summary>
property BBox.SizeZ: float with get
<summary> The size in Z direction, also called Height. </summary>
<summary> The size in Z direction, also called Height. </summary>
val minPt: Pnt
property BBox.MinPnt: Pnt with get
<summary> The point where X, Y, and Z are the minimum values. </summary>
<summary> The point where X, Y, and Z are the minimum values. </summary>
val maxPt: Pnt
property BBox.MaxPnt: Pnt with get
<summary> The point where X, Y, and Z are the maximum values. </summary>
<summary> The point where X, Y, and Z are the maximum values. </summary>
val centerBbox: Pnt
property BBox.Center: Pnt with get
<summary> The center of this 3D bounding box. </summary>
<summary> The center of this 3D bounding box. </summary>
val vol: float
property BBox.Volume: float with get
<summary> Returns the volume of this 3D bounding box. </summary>
<summary> Returns the volume of this 3D bounding box. </summary>
val box2: BBox
static member BBox.createFromCenter: center: Pnt * sizeX: float * sizeY: float * sizeZ: float -> BBox
val bigger: BBox
member BBox.Expand: dist: float -> BBox
member BBox.Expand: xDist: float * yDist: float * zDist: float -> BBox
member BBox.Expand: xDist: float * yDist: float * zDist: float -> BBox
val inside: bool
member BBox.Contains: o: BBox -> bool
member BBox.Contains: p: Pnt -> bool
member BBox.Contains: p: Pnt -> bool
val combined: BBox
member BBox.Union: p: Pnt -> BBox
member BBox.Union: a: BBox -> BBox
member BBox.Union: a: BBox -> BBox
val pl2d: Polyline2D
Multiple items
type Polyline2D = new: unit -> Polyline2D + 2 overloads member AddPoint: pt: Pt -> unit member AddXY: x: float * y: float -> unit member Clone: unit -> Polyline2D member CloseInPlace: [<Optional; DefaultParameterValue ((1e-06 :> obj))>] toleranceForAddingPoint: float -> unit member ClosestParameter: p: Pt -> float member ClosestPoint: p: Pt -> Pt member ClosestPointIndex: p: Pt -> int member Contains: pt: Pt -> bool member DistanceTo: p: Pt -> float ...
<summary> A class holding a list of 2D points representing a mutable 2D Polyline. If the last point is the same as the first point, the Polyline2D is considered closed. The source-of-truth storage is an interleaved float buffer: x0, y0, x1, y1, ... </summary>
--------------------
new: unit -> Polyline2D
new: capacity: int -> Polyline2D
new: points: Pt seq -> Polyline2D
type Polyline2D = new: unit -> Polyline2D + 2 overloads member AddPoint: pt: Pt -> unit member AddXY: x: float * y: float -> unit member Clone: unit -> Polyline2D member CloseInPlace: [<Optional; DefaultParameterValue ((1e-06 :> obj))>] toleranceForAddingPoint: float -> unit member ClosestParameter: p: Pt -> float member ClosestPoint: p: Pt -> Pt member ClosestPointIndex: p: Pt -> int member Contains: pt: Pt -> bool member DistanceTo: p: Pt -> float ...
<summary> A class holding a list of 2D points representing a mutable 2D Polyline. If the last point is the same as the first point, the Polyline2D is considered closed. The source-of-truth storage is an interleaved float buffer: x0, y0, x1, y1, ... </summary>
--------------------
new: unit -> Polyline2D
new: capacity: int -> Polyline2D
new: points: Pt seq -> Polyline2D
type ResizeArray<'T> = System.Collections.Generic.List<'T>
val lenPolyline: float
property Polyline2D.Length: float with get
<summary> Gets the length of the Polyline2D Returns 0.0 if there are less than 2 points. </summary>
<summary> Gets the length of the Polyline2D Returns 0.0 if there are less than 2 points. </summary>
val count: int
property Polyline2D.PointCount: int with get
<summary> Gets the count of points in the Polyline2D </summary>
<summary> Gets the count of points in the Polyline2D </summary>
val segs: int
property Polyline2D.SegmentCount: int with get
<summary> Gets the count of segments in the Polyline2D This is poly.Points.Count - 1 </summary>
<summary> Gets the count of segments in the Polyline2D This is poly.Points.Count - 1 </summary>
val firstSeg: Line2D
property Polyline2D.FirstSegment: Line2D with get
<summary> Gets the first segment of the Polyline2D. </summary>
<summary> Gets the first segment of the Polyline2D. </summary>
val seg: Line2D
member Polyline2D.GetSegment: i: int -> Line2D
member Polyline2D.SetPoint: idx: int * pt: Pt -> unit
val copy: Polyline2D
member Polyline2D.Duplicate: unit -> Polyline2D
val pl3d: Polyline3D
Multiple items
type Polyline3D = new: unit -> Polyline3D + 2 overloads member AddPoint: pt: Pnt -> unit member AddXYZ: x: float * y: float * z: float -> unit member Clone: unit -> Polyline3D member CloseInPlace: [<Optional; DefaultParameterValue ((1e-06 :> obj))>] toleranceForAddingPoint: float -> unit member ClosestParameter: p: Pnt -> float member ClosestPoint: p: Pnt -> Pnt member ClosestPointIndex: p: Pnt -> int member DistanceTo: p: Pnt -> float member Duplicate: unit -> Polyline3D ...
<summary> A class holding a list of 3D points representing a mutable 3D Polyline. If the last point is the same as the first point, the Polyline3D is closed. The source-of-truth storage is an interleaved float buffer: x0, y0, z0, x1, y1, z1, ... </summary>
--------------------
new: unit -> Polyline3D
new: capacity: int -> Polyline3D
new: points: Pnt seq -> Polyline3D
type Polyline3D = new: unit -> Polyline3D + 2 overloads member AddPoint: pt: Pnt -> unit member AddXYZ: x: float * y: float * z: float -> unit member Clone: unit -> Polyline3D member CloseInPlace: [<Optional; DefaultParameterValue ((1e-06 :> obj))>] toleranceForAddingPoint: float -> unit member ClosestParameter: p: Pnt -> float member ClosestPoint: p: Pnt -> Pnt member ClosestPointIndex: p: Pnt -> int member DistanceTo: p: Pnt -> float member Duplicate: unit -> Polyline3D ...
<summary> A class holding a list of 3D points representing a mutable 3D Polyline. If the last point is the same as the first point, the Polyline3D is closed. The source-of-truth storage is an interleaved float buffer: x0, y0, z0, x1, y1, z1, ... </summary>
--------------------
new: unit -> Polyline3D
new: capacity: int -> Polyline3D
new: points: Pnt seq -> Polyline3D
static member Polyline3D.create: points: Pnt seq -> Polyline3D
val totalLen: float
property Polyline3D.Length: float with get
<summary> Gets the length of the Polyline3D Returns 0.0 if there are less than 2 points. </summary>
<summary> Gets the length of the Polyline3D Returns 0.0 if there are less than 2 points. </summary>
val m1: Matrix
static member Matrix.createTranslation: v: Vec -> Matrix
static member Matrix.createTranslation: x: float * y: float * z: float -> Matrix
static member Matrix.createTranslation: x: float * y: float * z: float -> Matrix
val m2: Matrix
val m3: Matrix
static member Matrix.createRotationX: angleDegrees: float -> Matrix
val m4: Matrix
static member Matrix.createRotationAxis: axis: Vec * angleDegrees: float -> Matrix
static member Matrix.createRotationAxis: axis: UnitVec * angleDegrees: float -> Matrix
static member Matrix.createRotationAxis: axis: UnitVec * angleDegrees: float -> Matrix
val m5: Matrix
static member Matrix.createRotationAxisCenter: axis: UnitVec * cen: Pnt * angleDegrees: float -> Matrix
static member Matrix.createRotationAxisCenter: axis: Vec * cen: Pnt * angleDegrees: float -> Matrix
static member Matrix.createRotationAxisCenter: axis: Vec * cen: Pnt * angleDegrees: float -> Matrix
val m6: Matrix
static member Matrix.createScale: x: float * y: float * z: float -> Matrix
val m7: Matrix
val combinedTransform: Matrix
val pt2: Pnt
member Pnt.Transform: m: Matrix -> Pnt
val result: Pnt
static member Pnt.rotateOnZDeg: angDegree: float -> pt: Pnt -> Pnt
val fromPlane: PPlane
val toPlane: PPlane
val planeXform: Matrix
static member Matrix.createPlaneToPlane: fromPlane: PPlane * toPlane: PPlane -> Matrix
val mirror: Matrix
static member Matrix.createMirror: p: PPlane -> Matrix
val rigid: RigidMatrix
type RigidMatrix =
val M11: float
val M21: float
val M31: float
val X41: float
val M12: float
val M22: float
val M32: float
val Y42: float
val M13: float
val M23: float
...
<summary>A struct containing 12 floats, representing an immutable 4x3 rigid transformation matrix. This matrix guarantees to NOT scale, shear, flip, mirror, reflect or project. Angles are preserved. Lengths are preserved. Area is preserved. Volume is preserved. Transformations with 4x3 RigidMatrices are faster than with the more general 4x4 Matrices. A rigid matrix is made from a rotational 3x3 part whose columns and rows are orthogonal 3D unit-vectors. The last 1x3 column is the translation part of the matrix. It can be thought of as a 4x4 Orthonormal matrix where the last row would always be 0, 0, 0, 1. Thus it is not stored in the RigidMatrix 4x3 struct. The matrix is represented in the following column-vector syntax form: <code> M11 M21 M31 X41 M12 M22 M32 Y42 M13 M23 M33 Z43 </code> Where X41, Y42 and Z43 refer to the translation part of the RigidMatrix. The Determinant of this matrix is always 1.0. Note: Never use the struct default constructor RigidMatrix() as it will create an invalid zero RigidMatrix. Use RigidMatrix.create instead.</summary>
<summary>A struct containing 12 floats, representing an immutable 4x3 rigid transformation matrix. This matrix guarantees to NOT scale, shear, flip, mirror, reflect or project. Angles are preserved. Lengths are preserved. Area is preserved. Volume is preserved. Transformations with 4x3 RigidMatrices are faster than with the more general 4x4 Matrices. A rigid matrix is made from a rotational 3x3 part whose columns and rows are orthogonal 3D unit-vectors. The last 1x3 column is the translation part of the matrix. It can be thought of as a 4x4 Orthonormal matrix where the last row would always be 0, 0, 0, 1. Thus it is not stored in the RigidMatrix 4x3 struct. The matrix is represented in the following column-vector syntax form: <code> M11 M21 M31 X41 M12 M22 M32 Y42 M13 M23 M33 Z43 </code> Where X41, Y42 and Z43 refer to the translation part of the RigidMatrix. The Determinant of this matrix is always 1.0. Note: Never use the struct default constructor RigidMatrix() as it will create an invalid zero RigidMatrix. Use RigidMatrix.create instead.</summary>
static member RigidMatrix.createRotationZ: angleDegrees: float -> RigidMatrix
val vTransform: Vec
val v2Transform: Vec
member Vec.TransformRigid: m: RigidMatrix -> Vec
val q1: Quaternion
type Quaternion =
val X: float
val Y: float
val Z: float
val W: float
member Normalize: unit -> Quaternion
member SetAngleInDegrees: angleInDegrees: float -> Quaternion
member SetAngleInRadians: angleInRadians: float -> Quaternion
override ToString: unit -> string
static member ( *** ) : l: Quaternion * r: Quaternion -> Quaternion + 3 overloads
static member angleInDegrees: q: Quaternion -> float
...
<summary> A struct containing 4 floats, representing an immutable unitized Quaternion, for arbitrary 3D rotations. This implementation guarantees the Quaternion to be always unitized. Note: Never use the struct default constructor Quaternion() as it will create an invalid zero length Quaternion. Use Quaternion.create or Quaternion.createUnchecked instead. </summary>
<summary> A struct containing 4 floats, representing an immutable unitized Quaternion, for arbitrary 3D rotations. This implementation guarantees the Quaternion to be always unitized. Note: Never use the struct default constructor Quaternion() as it will create an invalid zero length Quaternion. Use Quaternion.create or Quaternion.createUnchecked instead. </summary>
static member Quaternion.createFromDegree: axis: UnitVec * angleInDegrees: float -> Quaternion
static member Quaternion.createFromDegree: axis: Vec * angleInDegrees: float -> Quaternion
static member Quaternion.createFromDegree: axis: Vec * angleInDegrees: float -> Quaternion
val q2: Quaternion
static member Quaternion.createFromRadians: axis: UnitVec * angleInRadians: float -> Quaternion
static member Quaternion.createFromRadians: axis: Vec * angleInRadians: float -> Quaternion
static member Quaternion.createFromRadians: axis: Vec * angleInRadians: float -> Quaternion
property UnitVec.Xaxis: UnitVec with get
<summary> Returns the World X-axis with length one: UnitVec(1, 0, 0) </summary>
<summary> Returns the World X-axis with length one: UnitVec(1, 0, 0) </summary>
val q3: Quaternion
static member Quaternion.createVecToVec: vecFrom: Vec * vecTo: Vec -> Quaternion
static member Quaternion.createVecToVec: vecFrom: UnitVec * vecTo: UnitVec -> Quaternion
static member Quaternion.createVecToVec: vecFrom: UnitVec * vecTo: UnitVec -> Quaternion
property UnitVec.Yaxis: UnitVec with get
<summary> Returns the World Y-axis with length one: UnitVec(0, 1, 0) </summary>
<summary> Returns the World Y-axis with length one: UnitVec(0, 1, 0) </summary>
val angleQ: float
property Quaternion.AngleInDegrees: float with get
<summary> Returns the angle in Degree. </summary>
<summary> Returns the angle in Degree. </summary>
val axis: Vec
property Quaternion.Axis: Vec with get
<summary> Returns the rotation axis of this Quaternion as a (non-unit) vector. This is just q.X, q.Y and q.Z, which equals axis * sin(angle/2). For the identity quaternion (no rotation), this returns a zero-length vector Vec(0,0,0). The length of this vector is sin(angle/2), ranging from 0 (no rotation) to 1 (180° rotation). </summary>
<summary> Returns the rotation axis of this Quaternion as a (non-unit) vector. This is just q.X, q.Y and q.Z, which equals axis * sin(angle/2). For the identity quaternion (no rotation), this returns a zero-length vector Vec(0,0,0). The length of this vector is sin(angle/2), ranging from 0 (no rotation) to 1 (180° rotation). </summary>
val inv: Quaternion
property Quaternion.Inverse: Quaternion with get
<summary> Returns a new Quaternion for the inverse rotation. Same as q.Conjugate. </summary>
<summary> Returns a new Quaternion for the inverse rotation. Same as q.Conjugate. </summary>
val q4: Quaternion
val rotated: Pnt
static member Pnt.rotate: q: Quaternion -> pt: Pnt -> Pnt
val mat: Matrix
static member Matrix.createFromQuaternion: quaternion: Quaternion -> Matrix
val cloud: ResizeArray<Pnt>
val nearest: Pnt
type Points3D =
static member center: pts: IList<Pnt> -> Pnt
static member closestOfTwo: pt1: Pnt -> pt2: Pnt -> referencePoint: Pnt -> Pnt
static member closestPoint: pts: IList<Pnt> * pt: Pnt -> Pnt
static member closestPointIdx: pts: IList<Pnt> * pt: Pnt -> int
static member closestPointsIdx: xs: IList<Pnt> * ys: IList<Pnt> -> int * int
static member cullDuplicatePointsInSeq: pts: ResizeArray<Pnt> * tolerance: float -> ResizeArray<Pnt>
static member minDistBetweenPointSets: xs: IList<Pnt> * ys: IList<Pnt> -> float
static member mostDistantPoint: findPointFrom: IList<Pnt> * checkAgainst: IList<Pnt> -> Pnt
static member mostDistantPointIdx: findPointFrom: IList<Pnt> * checkAgainst: IList<Pnt> -> int * int
static member normalOfPoints: pts: IList<Pnt> -> Vec
<summary> A type containing only static member functions for operating on multiple 3D points or set of 3D points. Aka point-clouds </summary>
<summary> A type containing only static member functions for operating on multiple 3D points or set of 3D points. Aka point-clouds </summary>
static member Points3D.closestPoint: pts: System.Collections.Generic.IList<Pnt> * pt: Pnt -> Pnt
val idx: int
static member Points3D.closestPointIdx: pts: System.Collections.Generic.IList<Pnt> * pt: Pnt -> int
val setA: ResizeArray<Pnt>
val setB: ResizeArray<Pnt>
val iA: int
val iB: int
static member Points3D.closestPointsIdx: xs: System.Collections.Generic.IList<Pnt> * ys: System.Collections.Generic.IList<Pnt> -> int * int
val farthest: Pnt
static member Points3D.mostDistantPoint: findPointFrom: System.Collections.Generic.IList<Pnt> * checkAgainst: System.Collections.Generic.IList<Pnt> -> Pnt
val centerPoints: Pnt
static member Points3D.center: pts: System.Collections.Generic.IList<Pnt> -> Pnt
val culled: ResizeArray<Pnt>
static member Points3D.cullDuplicatePointsInSeq: pts: ResizeArray<Pnt> * tolerance: float -> ResizeArray<Pnt>
val bad: UnitVec
Multiple items
type EuclidUnitizingException = inherit Exception new: s: string -> EuclidUnitizingException
<summary> Exception for attempting to divide by a 0.0 or almost 0.0 value during Unitizing Almost 0.0 is defined by UtilEuclid.zeroLengthTolerance as 1e-12. </summary>
--------------------
new: s: string -> EuclidUnitizingException
type EuclidUnitizingException = inherit Exception new: s: string -> EuclidUnitizingException
<summary> Exception for attempting to divide by a 0.0 or almost 0.0 value during Unitizing Almost 0.0 is defined by UtilEuclid.zeroLengthTolerance as 1e-12. </summary>
--------------------
new: s: string -> EuclidUnitizingException
val e: EuclidUnitizingException
property System.Exception.Message: string with get
<summary>Gets a message that describes the current exception.</summary>
<returns>The error message that explains the reason for the exception, or an empty string ("").</returns>
<summary>Gets a message that describes the current exception.</summary>
<returns>The error message that explains the reason for the exception, or an empty string ("").</returns>
Euclid