Rhino C++ API  8.14
Classes | Macros | Typedefs | Enumerations | Functions | Variables
OpenNURBS

Classes

class  Internal_SubDToNurbsExtraordinaryPoint
 
class  ON
 OpenNurbs enums. More...
 
class  ON_2dex
 
class  ON_2dexMap
 
class  ON_2dPoint
 
class  ON_2dPointArray
 
class  ON_2dSize
 
class  ON_2dVector
 
class  ON_2dVectorArray
 
class  ON_2fPoint
 
class  ON_2fPointArray
 
class  ON_2fVector
 
class  ON_2fVectorArray
 
class  ON_2iBoundingBox
 
class  ON_2iPoint
 
class  ON_2iSize
 
class  ON_2iVector
 
class  ON_2udex
 
class  ON_3dex
 
class  ON_3DM_BIG_CHUNK
 
struct  ON_3DM_CHUNK
 
class  ON_3dmAnimationProperties
 
class  ON_3dmAnnotationContext
 
class  ON_3dmAnnotationSettings
 
class  ON_3dmApplication
 
class  ON_3dmArchiveTableStatus
 
class  ON_3dmConstructionPlane
 
class  ON_3dmConstructionPlaneGridDefaults
 
class  ON_3dmGoo
 
class  ON_3dmIOSettings
 
class  ON_3dmNotes
 
class  ON_3dmObjectAttributes
 
class  ON_3dmPageSettings
 
class  ON_3dmProperties
 
class  ON_3dmRenderSettings
 
class  ON_3dmRevisionHistory
 
class  ON_3dmSettings
 
class  ON_3dmUnitsAndTolerances
 
class  ON_3dmView
 
class  ON_3dmViewPosition
 
class  ON_3dmViewTraceImage
 
class  ON_3dmWallpaperImage
 
class  ON_3dPoint
 
class  ON_3dPointArray
 
class  ON_3dPointListRef
 
class  ON_3dRay
 
class  ON_3dSimplex
 A Simplex in 3d. More...
 
class  ON_3dVector
 
class  ON_3dVectorArray
 
class  ON_3fPoint
 
class  ON_3fPointArray
 
class  ON_3fVector
 
class  ON_3fVectorArray
 
class  ON_3udex
 
class  ON_4dex
 quadruplet of integer indices. More...
 
class  ON_4dPoint
 
class  ON_4dPointArray
 
class  ON_4dRect
 
class  ON_4fColor
 
class  ON_4fPoint
 
class  ON_4fPointArray
 
class  ON_4iRect
 
class  ON_4udex
 
class  ON_AerialPhotoCameraPosition
 
class  ON_AerialPhotoImage
 
class  ON_AerialPhotoImageFrustum
 
class  ON_AggregateComponentStatus
 
class  ON_AggregateComponentStatusEx
 
class  ON_AngleUnitName
 
class  ON_AngleValue
 
class  ON_Annotation
 
class  ON_Arc
 
class  ON_ArcCurve
 
class  ON_ArchivableDictionary
 
class  ON_ArithmeticCalculator
 
class  ON_Arrowhead
 
class  ON_Base64
 
class  ON_Base64EncodeStream
 
class  ON_BendFaceConstraint
 
class  ON_BezierCage
 
class  ON_BezierCageMorph
 
class  ON_BezierCurve
 
class  ON_BezierSurface
 
class  ON_Big5CodePoint
 ON_Big5CodePoint is a tool to use when working with BIG5 encoded strings. More...
 
class  ON_Big5UnicodePair
 
class  ON_BinaryArchive
 < use for generic serialization of binary data More...
 
class  ON_BinaryArchiveBuffer
 
class  ON_BinaryFile
 
class  ON_Bitmap
 
class  ON_BoundingBox
 
class  ON_BoundingBoxAndHash
 
class  ON_BoundingBoxCache
 
class  ON_Box
 
class  ON_Brep
 
class  ON_BrepEdge
 
class  ON_BrepEdgeArray
 
class  ON_BrepFace
 
class  ON_BrepFaceArray
 
struct  ON_BrepFaceIsoInterval
 
class  ON_BrepFaceSide
 
class  ON_BrepFaceSideArray
 
class  ON_BrepLoop
 
class  ON_BrepLoopArray
 
class  ON_BrepQuadFacePack
 
class  ON_BrepQuadFacePackSide
 
class  ON_BrepRegion
 
class  ON_BrepRegionArray
 
class  ON_BrepRegionTopology
 
class  ON_BrepStarFacePack
 
class  ON_BrepTrim
 
class  ON_BrepTrimArray
 
struct  ON_BrepTrimParameter
 
struct  ON_BrepTrimPoint
 
class  ON_BrepVertex
 
class  ON_BrepVertexArray
 
class  ON_Buffer
 
class  ON_BumpFunction
 
class  ON_CageMorph
 
class  ON_Centermark
 
class  ON_CheckSum
 
class  ON_Circle
 
class  ON_CIXEvent
 Curve/ImplicitFunction intersection event. More...
 
class  ON_ClashEvent
 
class  ON_ClassArray< T >
 
class  ON_ClassId
 used for runtime class identification More...
 
class  ON_ClippingPlane
 
class  ON_ClippingPlaneDataStore
 
class  ON_ClippingPlaneInfo
 
class  ON_ClippingPlaneSurface
 
class  ON_ClippingRegion
 
class  ON_ClippingRegionPoints
 
class  ON_CMX_EVENT
 
class  ON_Color
 
class  ON_ColorStop
 
class  ON_COMPONENT_INDEX
 
class  ON_ComponentAttributes
 
class  ON_ComponentIndexAndNumber
 
class  ON_ComponentManifest
 
class  ON_ComponentManifestItem
 
class  ON_ComponentStatus
 
class  ON_CompressedBuffer
 
class  ON_CompressStream
 
class  ON_Cone
 
class  ON_ContentHash
 
class  ON_ConvexHullPoint2
 
class  ON_ConvexHullRef
 
class  ON_ConvexHullRefEx
 
class  ON_ConvexPoly
 
class  ON_Curve
 
class  ON_CURVE_POINT
 
class  ON_CurveArray
 
class  ON_CurveLeafBox
 
class  ON_CurveOnSurface
 
class  ON_CurvePair
 a parametric/space curve pair used in surface intersections More...
 
class  ON_CurvePiping
 
class  ON_CurvePipingUserData
 
class  ON_CurveProxy
 
class  ON_CurveProxyHistory
 
class  ON_CurveRegionBoundaryElement
 
class  ON_CurveSetOverlapCheck
 
class  ON_CurveTree
 
class  ON_CurveTreeBezier
 
class  ON_CurveTreeNode
 
class  ON_Cylinder
 
class  ON_DBL
 
class  ON_DebugWriteArchive
 
class  ON_Decal
 
class  ON_DecodeBase64
 
class  ON_DepthImage
 
class  ON_DepthImageDefaultShaderContext
 
class  ON_DepthImagePixel
 
class  ON_DepthImagePointShader
 
class  ON_DepthImageTriangle
 
class  ON_DepthImageTriangleMesh
 
class  ON_DepthImageTriangleShader
 
class  ON_DetailView
 
class  ON_DimAngular
 
class  ON_Dimension
 
class  ON_DimLinear
 
class  ON_DimOrdinate
 
class  ON_DimRadial
 
class  ON_DimStyle
 
class  ON_DimStyleContext
 
class  ON_Displacement
 
class  ON_DisplacementUserData
 
class  ON_DisplayMaterialRef
 
class  ON_Dithering
 
class  ON_DocumentUserStringList
 
class  ON_EarthAnchorPoint
 
class  ON_EdgeSoftening
 
class  ON_EdgeSofteningUserData
 
class  ON_Ellipse
 
class  ON_EmbeddedBitmap
 
class  ON_EmbeddedFile
 
class  ON_Environment
 ON_Environment. More...
 
class  ON_ErrorEvent
 
class  ON_ErrorLog
 
class  ON_Evaluator
 
class  ON_Extrusion
 
class  ON_FaceNameKey
 
class  ON_FileIterator
 
class  ON_FileReference
 
class  ON_FileStream
 
class  ON_FileSystem
 
class  ON_FileSystemPath
 
class  ON_FixedSizePool
 
class  ON_FixedSizePoolElement
 
class  ON_FixedSizePoolIterator
 
class  ON_Font
 An ON_Font is a face in a font family. It corresponds to a Windows LOGFONT, a .NET System.Drawing.Font or a FreeType FT_Face. More...
 
class  ON_FontFaceQuartet
 
class  ON_FontGlyph
 
class  ON_FontList
 
class  ON_FontMetrics
 
class  ON_FunctionList
 
class  ON_Geometry
 
class  ON_GeometryFingerprint
 
class  ON_GlyphMap
 
class  ON_GroundPlane
 
class  ON_Group
 
class  ON_Hash32Table
 
class  ON_Hash32TableItem
 
class  ON_Hatch
 
class  ON_HatchLine
 
class  ON_HatchLoop
 
class  ON_HatchPattern
 
class  ON_HermiteSurface
 
class  ON_HiddenLineDrawing
 
class  ON_HistoryRecord
 
class  ON_HLD_Object
 
class  ON_HLDCurve
 
class  ON_HLDFullCurve
 
class  ON_HLDPoint
 
class  ON_InstanceDefinition
 
class  ON_InstanceRef
 
class  ON_Internal_FontGlyphPool
 
class  ON_Interval
 
class  ON_Layer
 
class  ON_Leader
 ON_Leader class. More...
 
class  ON_LengthUnitName
 
class  ON_LengthValue
 
class  ON_Light
 
class  ON_Line
 
class  ON_LinearWorkflow
 
class  ON_LineCurve
 
class  ON_Linetype
 class ON_Linetype More...
 
class  ON_LinetypeSegment
 class ON_LinetypeSegment More...
 
class  ON_Locale
 
class  ON_Localizer
 
class  ON_LocalZero1
 find a local zero of a 1 parameter function More...
 
class  ON_Lock
 
class  ON_ManagedFonts
 
class  ON_ManifestMap
 
class  ON_ManifestMapItem
 
class  ON_MappingChannel
 
class  ON_MappingMeshInfo
 
class  ON_MappingRef
 
class  ON_MappingTag
 
class  ON_MassProperties
 
class  ON_Material
 
class  ON_MaterialRef
 
class  ON_Matrix
 
class  ON_MD5
 
class  ON_MD5_Hash
 
class  ON_Mesh
 
class  ON_MESH_POINT
 
class  ON_MeshCache
 
class  ON_MeshComponentRef
 
class  ON_MeshCurvatureStats
 
class  ON_MeshCurveParameters
 
class  ON_MeshFace
 
class  ON_MeshFaceList
 
class  ON_MeshFaceSide
 
class  ON_MeshIntersectionCache
 Provides a mechanism for lazily evaluating mesh data. The implementation is private and subject to change. More...
 
class  ON_MeshMarker
 
class  ON_MeshModifier
 
class  ON_MeshModifiers
 
class  ON_MeshNgon
 
class  ON_MeshNgonAllocator
 
class  ON_MeshNgonBuffer
 
class  ON_MeshNgonIterator
 
class  ON_MeshParameters
 
struct  ON_MeshPart
 
class  ON_MeshPartition
 
class  ON_MeshRef
 
class  ON_MeshThicknessAnalysis
 
class  ON_MeshThicknessAnalysisPoint
 
class  ON_MeshThicknessAnalysisVertexIterator
 
class  ON_MeshTopology
 
struct  ON_MeshTopologyEdge
 
struct  ON_MeshTopologyFace
 
struct  ON_MeshTopologyVertex
 
class  ON_MeshTree
 
class  ON_MeshTreeNode
 
class  ON_MeshTriangle
 
class  ON_MeshVertexFaceMap
 
class  ON_MeshX
 
class  ON_MeshXLine
 
class  ON_MeshXPlane
 
class  ON_MeshXPoint
 
class  ON_MeshXPointPair
 
class  ON_MeshXPointPool
 
class  ON_MeshXPointPoolIterator
 
class  ON_MMX_POINT
 
class  ON_MMX_Polyline
 
class  ON_ModelComponent
 
class  ON_ModelComponentContentMark
 
class  ON_ModelComponentReference
 ON_ModelComponentReference is a persistent reference to a model component. ON_ModelComponentReference and ON_ModelComponentWeakReference are based on like std::shared_ptr and std::weak_ptr. More...
 
class  ON_ModelComponentTypeIterator
 
class  ON_ModelComponentWeakReference
 ON_ModelComponentWeakReference is a weak shared reference to a model component. ON_ModelComponentReference and ON_ModelComponentWeakReference are based on like std::shared_ptr and std::weak_ptr. More...
 
class  ON_ModelGeometryComponent
 
class  ON_MorphControl
 
class  ON_NameHash
 
class  ON_NumberFormatter
 ON_Table class. More...
 
class  ON_NurbsCage
 
class  ON_NurbsCurve
 
class  ON_NurbsSurface
 
class  ON_Object
 
class  ON_ObjectArray< T >
 
class  ON_ObjectRenderingAttributes
 
class  ON_ObjRef
 
class  ON_ObjRef_IRefID
 
class  ON_ObjRefEvaluationParameter
 
class  ON_ObsoleteUserData
 
class  ON_OffsetCurveSDF
 
class  ON_OffsetSurface
 
class  ON_OffsetSurfaceFunction
 
class  ON_OffsetSurfaceValue
 
class  ON_Outline
 
class  ON_OutlineAccumulator
 
class  ON_OutlineFigure
 
class  ON_OutlineFigurePoint
 
class  ON_PackedTextureRectangle
 
class  ON_PackTextureRectanglesParameters
 
class  ON_PANOSE1
 https://monotype.github.io/panose/pan1.htm More...
 
class  ON_ParseSettings
 
class  ON_ParticleSystem
 
class  ON_PeriodicDomain
 
class  ON_PhysicallyBasedMaterial
 
class  ON_PickPoint
 
class  ON_PlanarSection
 
class  ON_PlanarSections
 
class  ON_Plane
 
class  ON_PlaneEquation
 
class  ON_PlaneSDF
 
class  ON_PlaneSurface
 
class  ON_PlugInRef
 
class  ON_PlusFunction
 
class  ON_Point
 
class  ON_PointCloud
 
class  ON_PointerSleepLock
 
class  ON_PointGrid
 
class  ON_PolyCurve
 
class  ON_PolyEdgeCurve
 
class  ON_PolyEdgeHistory
 
class  ON_PolyEdgeSegment
 
class  ON_Polyline
 
class  ON_PolylineCurve
 
class  ON_PolynomialCurve
 
class  ON_PolynomialSurface
 
class  ON_PostEffect
 Class ON_PostEffect represents a single post effect. More...
 
class  ON_PostEffectParams
 Class ON_PostEffectParams represents a collection of arbitrary post effect parameters. More...
 
class  ON_PostEffects
 Class ON_PostEffects represents a collection of post effects. More...
 
class  ON_ProgressReporter
 
class  ON_ProgressStepCounter
 
class  ON_Quaternion
 
struct  ON_RANDOM_NUMBER_CONTEXT
 
class  ON_RandomNumberGenerator
 
class  ON_RayShooter
 
class  ON_RdkDocumentDefaults
 This class is for internal RDK use only. More...
 
class  ON_RdkMaterialInstanceIdObsoleteUserData
 
class  ON_RdkUserData
 
class  ON_Read3dmBufferArchive
 
class  ON_ReferencedComponentSettings
 
class  ON_RegKey
 
class  ON_RenderChannels
 
class  ON_RenderContent
 
class  ON_RenderEnvironment
 
class  ON_RenderingAttributes
 
class  ON_RenderMaterial
 
class  ON_RenderMeshInfo
 
class  ON_RenderTexture
 
class  ON_RevSurface
 surface of revolution More...
 
class  ON_RtfFirstChar
 
class  ON_RtfParser
 
class  ON_RtfStringBuilder
 
class  ON_RTree
 
struct  ON_RTreeBBox
 
struct  ON_RTreeBranch
 
struct  ON_RTreeCapsule
 
class  ON_RTreeIterator
 
struct  ON_RTreeLeaf
 
class  ON_RTreeMemPool
 
struct  ON_RTreeNode
 
struct  ON_RTreePolylineContext
 Passes data about the polyline being intersected. More...
 
struct  ON_RTreeSearchResult
 
struct  ON_RTreeSphere
 
class  ON_SafeFrame
 
class  ON_ScaleValue
 
class  ON_SectionAnalysisAppearance
 
class  ON_SectionAnalysisPlane
 
class  ON_SectionStyle
 class ON_SectionStyle More...
 
class  ON_SerialNumberMap
 
class  ON_SHA1
 
class  ON_SHA1_Hash
 
class  ON_ShutLining
 
class  ON_ShutLiningUserData
 
class  ON_SignedDistanceFunction
 
class  ON_SIL_EVENT
 
class  ON_SilhouetteParameters
 
class  ON_SimpleArray< T >
 
class  ON_SimpleFixedSizePool< T >
 
class  ON_SimpleFixedSizePoolIterator< T >
 
class  ON_SimpleMinimizer
 
class  ON_SIXEvent
 Surface/ImplicitFunction Intersection event. More...
 
class  ON_Skylight
 
class  ON_SleepLock
 
class  ON_SleepLockGuard
 
class  ON_SpaceMorph
 
class  ON_Sphere
 
class  ON_SphereSDF
 
class  ON_SquishConstraint
 
class  ON_SquishConstraints
 
class  ON_Squisher
 
class  ON_SquisherImpl
 
class  ON_SquishParameters
 
class  ON_SSX_EVENT
 
class  ON_StackedText
 
class  ON_StandardDisplayModeId
 
class  ON_StopWatch
 
class  ON_String
 A char string. Any multibyte encoding can be used. If the encoding is unknown, assume it is UTF-8. More...
 
class  ON_StringBuffer
 
class  ON_SubD
 
class  ON_SubD_ComponentIdTypeAndTag
 Simple arrays of ON_SubD_ComponentIdTypeAndTag elements are used to save original tag values so the can be retrieved after complex editing operations. More...
 
class  ON_SubD_FixedSizeHeap
 
class  ON_SubDComponentAndNumber
 
class  ON_SubDComponentAndPoint
 
class  ON_SubDComponentBase
 
class  ON_SubDComponentFilter
 
class  ON_SubDComponentId
 
class  ON_SubDComponentIdList
 
class  ON_SubDComponentIterator
 
class  ON_SubDComponentList
 
class  ON_SubDComponentMarksClearAndRestore
 
class  ON_SubDComponentParameter
 
class  ON_SubDComponentPoint
 
class  ON_SubDComponentPtr
 
class  ON_SubDComponentPtrPair
 
class  ON_SubDComponentPtrPairHashTable
 
class  ON_SubDComponentRef
 
class  ON_SubDComponentRefList
 
class  ON_SubDComponentRegion
 
class  ON_SubDComponentRegionIndex
 
class  ON_SubDComponentTest
 
class  ON_SubDDisplayParameters
 
class  ON_SubDEdge
 
class  ON_SubDEdgeArray
 
class  ON_SubDEdgeChain
 
class  ON_SubDEdgeChainCurve
 
class  ON_SubDEdgeIdIterator
 
class  ON_SubDEdgeIterator
 
class  ON_SubDEdgePtr
 
class  ON_SubDEdgeSharpness
 ON_SubDHash provides a simple way to save a SubD's vertex, edge, and face SHA1 hashes. Typically it is used when a calculation needs to know if the current SubD has is geometrically identical to a previous SubD. When speed is not important, comparing the current value of ON_SubD::GeometryHash() to a previously save value of ON_SubD::GeometryHash() is functionally identical but typically much slower when the SubDs are different. More...
 
class  ON_SubDExpandEdgesParameters
 
class  ON_SubDFace
 
class  ON_SubDFaceArray
 
class  ON_SubDFaceCornerDex
 A ON_SubDFaceCornerDex is a value that identifies a subd face corner. More...
 
class  ON_SubDFaceEdgeIterator
 
class  ON_SubDFaceIdIterator
 
class  ON_SubDFaceIterator
 
class  ON_SubDFaceNeighborhood
 
class  ON_SubDFaceParameter
 
class  ON_SubDFacePtr
 
class  ON_SubDFaceRegion
 
class  ON_SubDFaceRegionAndNurbs
 
class  ON_SubDFromMeshParameters
 
class  ON_SubDFromSurfaceParameters
 
class  ON_SubDHash
 ON_SubDHash provides a simple way to save a SubD's vertex, edge, and face SHA1 hashes. Typically it is used when a calculation needs to know if the current SubD has is geometrically identical to a previous SubD. When speed is not important, comparing the current value of ON_SubD::GeometryHash() to a previously save value of ON_SubD::GeometryHash() is functionally identical but typically much slower when the SubDs are different. More...
 
class  ON_SubDManagedMeshFragment
 ON_SubDManagedMeshFragment is a legacy class that should not be used. More...
 
class  ON_SubDMatrix
 
class  ON_SubDMesh
 ON_SubDMesh is used to store a high density traditional quad mesh of a SubD surface or a mesh of a SubD control net. In general, is is better to use an ON_SubDMeshFragmentIterator(subd) that iterates the ON_MeshFragments cached on the ON_SubD. More...
 
class  ON_SubDMeshFragment
 
class  ON_SubDMeshFragmentGrid
 
class  ON_SubDMeshFragmentIterator
 
class  ON_SubDQuadFacePack
 
class  ON_SubDQuadFacePackSide
 
class  ON_SubDQuadNeighborhood
 
class  ON_SubDRef
 
class  ON_SubDRTree
 
class  ON_SubDRTreeVertexFinder
 
class  ON_SubDSectorId
 
class  ON_SubDSectorIterator
 
class  ON_SubDSectorSurfacePoint
 
class  ON_SubDSectorType
 
class  ON_SubDSurfaceInterpolator
 
class  ON_SubDSurfaceNurbsFragment
 
class  ON_SubDToBrepParameters
 
class  ON_SubDVertex
 
class  ON_SubDVertexArray
 
class  ON_SubDVertexEdgeProperties
 
class  ON_SubDVertexIdIterator
 
class  ON_SubDVertexIterator
 
class  ON_SubDVertexPtr
 
class  ON_SubDVertexSharpnessCalculator
 
class  ON_SubDVertexSurfacePointCoefficient
 
class  ON_Sum
 
class  ON_SumSurface
 surface of revolution More...
 
class  ON_Sun
 
class  ON_SunEngine
 Class ON_SunEngine is a sun astronomical calculation engine. More...
 
class  ON_Surface
 
class  ON_SurfaceArray
 
class  ON_SurfaceCurvature
 
class  ON_SurfaceCurvatureColorMapping
 
class  ON_SurfaceDraftAngleColorMapping
 
class  ON_SurfaceLeafBox
 
class  ON_SurfaceProperties
 
class  ON_SurfaceProxy
 
class  ON_SurfaceTree
 
class  ON_SurfaceTreeBezier
 
class  ON_SurfaceTreeNode
 
class  ON_SurfaceValues
 ON_SurfaceValues stores surface evaluation values (point, normal, curvatures, derivatives) in a single class More...
 
class  ON_Symmetry
 
class  ON_TensorProduct
 
class  ON_Terminator
 
class  ON_TestClass
 
class  ON_Text
 ON_Table class. More...
 
class  ON_TextBox
 
class  ON_TextBuilder
 
class  ON_TextContent
 
class  ON_TextContext
 
class  ON_TextDot
 
class  ON_TextHash
 
class  ON_TextIterator
 Converts wchar_t characters to Unicode codepoints. More...
 
class  ON_TextLog
 
class  ON_TextLogIndent
 
class  ON_TextLogLevelOfDetail
 
class  ON_TextMask
 
class  ON_TextRun
 A range of text with all the same attributes. More...
 
class  ON_TextRunArray
 
class  ON_TextRunBuilder
 
class  ON_TextStyle
 
class  ON_Texture
 
class  ON_TextureCoordinates
 
class  ON_TextureMapping
 
class  ON_Thickening
 
class  ON_ThickeningUserData
 
class  ON_Torus
 
class  ON_Triangle
 
class  ON_TriangleMesh
 
struct  ON_TriangleMeshPoint
 
class  ON_TrianglePlane
 
union  ON_U
 
class  ON_UncompressStream
 
struct  ON_UnicodeErrorParameters
 
class  ON_UnicodeShortCodePoint
 ON_UnicodeShortCodePoint is a tool to use when working with Unicode code points with values &lt=0xFFFF. Note that valid Unicode code point values can be as large as 0x10FFFD. (0x10FFFE and 0x10FFFF are specified as &ltnot a character&gt by the Unicode Standard code chart https://www.unicode.org/charts/PDF/U10FF80.pdf) This class is used when converting between Unicode and BIG5 encodings and in other settings where Unicode code points &gt 0xFFFF are not encountered and the 2 byte size of ON_UnicodeShortCodePoint appreciably more efficient that a 4 byte size of an unsigned int. More...
 
class  ON_UnicodeTextFile
 
class  ON_UniqueTester
 
class  ON_UnitSystem
 
class  ON_UnknownUserData
 
class  ON_UserData
 
class  ON_UserDataHolder
 
class  ON_UserDataItemFilter
 
class  ON_UserString
 
class  ON_UserStringList
 
struct  ON_UUID_struct
 ON_UUID is a 16 byte universally unique identifier. More...
 
class  ON_UuidIndex
 
class  ON_UuidIndexList
 
class  ON_UuidList
 
class  ON_UuidPair
 
class  ON_UuidPairList
 
class  ON_UuidPtr
 
class  ON_UuidPtrList
 
class  ON_Viewport
 
struct  ON_Vtable
 
class  ON_WeightedAverageHash
 
class  ON_WindingNumber
 
class  ON_WindowsBitmap
 
class  ON_WindowsBitmapEx
 
struct  ON_WindowsBITMAPFILEHEADER
 Windows packs BITMAPFILEHEADER. More...
 
struct  ON_WindowsBITMAPINFO
 
struct  ON_WindowsBITMAPINFOHEADER
 
struct  ON_WindowsRGBQUAD
 Windows sizeof(ON_WindowsRGBQUAD) = 4. More...
 
class  ON_Workspace
 
class  ON_Write3dmBufferArchive
 
class  ON_wString
 A wide character string. The default encoding is the encoding the compiler uses for wchar_t* s = L"..."; strings. This is typically 2 byte wchar_t UTF-16 on Windows and 4 byte wchar_t UTF-32 on MacOS. However, some MacOS SDK functions return 4 byte wchar_t UTF-16 strings. More...
 
class  ON_wStringBuffer
 
class  ON_X_EVENT
 
class  ON_Xform
 
class  ON_XMesh
 
class  ON_XMeshComponent
 
class  ON_XMeshEdge
 
class  ON_XMeshEdgeIterator
 
class  ON_XMeshEdgePool
 
class  ON_XMeshEvent
 
class  ON_XMeshEventIterator
 
class  ON_XMeshEventList
 
class  ON_XMeshEventPool
 
class  ON_XMeshFace
 
class  ON_XMeshFaceIterator
 
class  ON_XMeshFacePool
 
class  ON_XMeshFaceXData
 
class  ON_XMeshFF
 
class  ON_XMeshFFIterator
 
class  ON_XMeshFFPool
 
class  ON_XMeshIntersector
 
class  ON_XMeshPlaneEquation
 
class  ON_XMeshPolyline
 
class  ON_XMeshVertex
 
class  ON_XMeshVertexIterator
 
class  ON_XMeshVertexPool
 
class  ON_XMLNode
 
class  ON_XMLParamBlock
 Class ON_XMLParamBlock is ON_XMLParameters with a built-in XML node. More...
 
class  ON_XMLParameters
 
class  ON_XMLParametersV8
 
class  ON_XMLProperty
 
class  ON_XMLRootNode
 
class  ON_XMLSegmentedStream
 
class  ON_XMLUserData
 
class  ON_XMLVariant
 
class  ONX_ErrorCounter
 
class  ONX_Model
 
class  ONX_Model_UserData
 
class  ONX_ModelComponentIterator
 
class  ONX_ModelTest
 
class  RtfComposer
 
struct  tagFontKey
 

Macros

#define _GNU_SOURCE
 
#define BASETYPE   void *
 ON_SORT_TEMPLATE_TYPE -> double, int, .... More...
 
#define DATATYPE   unsigned char
 
#define DATAWIDTH   m_width
 
#define GreaterThan(A, B)   m_compare(A,B) > 0
 use a compare function without context parameter More...
 
#define MY_ZCALLOC
 
#define ON_1_OVER_SQRT2   0.7071067811865475244008445
 
#define ON_2PI   (2.0*ON_PI)
 
#define ON__SET__THIS__PTR(ptr)   if (ptr) *((void**)this) = ptr
 
#define ON_ArrayCount(a)   (sizeof(a)/sizeof((a)[0]))
 
#define ON_ASSERT(cond)   ON_REMOVE_ASAP_AssertEx(cond,__FILE__,__LINE__,OPENNURBS__FUNCTION__, #cond " is false")
 
#define ON_ASSERT_OR_RETURN(cond, returncode)   do{if (!(cond)) {ON_ErrorEx(__FILE__,__LINE__,OPENNURBS__FUNCTION__, #cond " is false");return(returncode);}}while(0)
 
#define ON_ASSERT_OR_RETURNVOID(cond)   do{if (!(cond)) {ON_ErrorEx(__FILE__,__LINE__,OPENNURBS__FUNCTION__, #cond " is false");return;}}while(0)
 
#define ON_BEGIN_EXTERNC   extern "C" {
 
#define ON_CALLBACK_CDECL
 
#define ON_CLASS
 
#define ON_CLASS_ID(cls)   ON_CLASS_RTTI( cls ).Uuid()
 
#define ON_CLASS_RTTI(cls)   cls::m_##cls##_class_rtti
 
#define ON_COMPILER_GNU
 
#define ON_COS_PI_OVER_12   0.9659258262890682867497433
 
#define ON_CURVE_PIPING_ACCURACY   L"accuracy"
 
#define ON_CURVE_PIPING_BOX   L"box"
 
#define ON_CURVE_PIPING_CAP_TYPE   L"cap-type"
 
#define ON_CURVE_PIPING_DOME   L"dome"
 
#define ON_CURVE_PIPING_FLAT   L"flat"
 
#define ON_CURVE_PIPING_NONE   L"none"
 
#define ON_CURVE_PIPING_ON   L"on"
 
#define ON_CURVE_PIPING_RADIUS   L"radius"
 
#define ON_CURVE_PIPING_ROOT   L"curve-piping-object-data"
 
#define ON_CURVE_PIPING_SEGMENTS   L"segments"
 
#define ON_CURVE_PIPING_WELD   L"weld"
 'Weld' is a legacy name. The real name is 'Faceted' but this is the INVERSE of weld. More...
 
#define ON_CV_COORDINATE_IS_VALID(x)   (-1.0e307 < x && x < 1.0e307)
 
#define ON_DBL_MAX   1.7976931348623158e+308
 
#define ON_DBL_MIN   2.22507385850720200e-308
 
#define ON_DECL
 
#define ON_DEFAULT_ANGLE_TOLERANCE   ON_DEFAULT_ANGLE_TOLERANCE_RADIANS
 
#define ON_DEFAULT_ANGLE_TOLERANCE_COSINE   0.99984769515639123915701155881391
 
#define ON_DEFAULT_ANGLE_TOLERANCE_DEGREES   (ON_DEFAULT_ANGLE_TOLERANCE_RADIANS * 180.0/ON_PI)
 
#define ON_DEFAULT_ANGLE_TOLERANCE_RADIANS   (ON_PI/180.0)
 
#define ON_DEFAULT_DISTANCE_TOLERANCE_MM   0.01
 
#define ON_DEGREES_TO_RADIANS   (ON_PI/180.0)
 
#define ON_DEPRECATED
 ON_DEPRECATED is used to mark deprecated functions. More...
 
#define ON_DEPRECATED_MSG(s)
 
#define ON_DepthImage_DEPTH_TYPE   double
 
#define ON_DISPLACEMENT_BLACK_POINT   L"black-point"
 
#define ON_DISPLACEMENT_CHANNEL   L"channel"
 
#define ON_DISPLACEMENT_FACE_COUNT_LIMIT   L"face-count-limit"
 
#define ON_DISPLACEMENT_FACE_COUNT_LIMIT_ENABLED   L"face-count-limit-enabled"
 
#define ON_DISPLACEMENT_FAIRING_AMOUNT   L"fairing-amount"
 
#define ON_DISPLACEMENT_FAIRING_ENABLED   L"fairing-enabled"
 
#define ON_DISPLACEMENT_MESH_MEMORY_LIMIT   L"mesh-memory-limit"
 
#define ON_DISPLACEMENT_ON   L"on"
 
#define ON_DISPLACEMENT_POST_WELD_ANGLE   L"post-weld-angle"
 
#define ON_DISPLACEMENT_REFINE_SENSITIVITY   L"refine-sensitivity"
 
#define ON_DISPLACEMENT_REFINE_STEPS   L"refine-steps"
 
#define ON_DISPLACEMENT_ROOT   L"new-displacement-object-data"
 
#define ON_DISPLACEMENT_SUB   L"sub"
 
#define ON_DISPLACEMENT_SUB_BLACK_POINT   L"sub-black-point"
 
#define ON_DISPLACEMENT_SUB_CHANNEL   L"sub-channel"
 
#define ON_DISPLACEMENT_SUB_INDEX   L"sub-index"
 
#define ON_DISPLACEMENT_SUB_OBJECT_COUNT   L"sub-object-count"
 
#define ON_DISPLACEMENT_SUB_ON   L"sub-on"
 
#define ON_DISPLACEMENT_SUB_TEXTURE   L"sub-texture"
 
#define ON_DISPLACEMENT_SUB_WHITE_POINT   L"sub-white-point"
 
#define ON_DISPLACEMENT_SWEEP_PITCH   L"sweep-pitch"
 
#define ON_DISPLACEMENT_SWEEP_RES_FORMULA   L"sweep-res-formula"
 
#define ON_DISPLACEMENT_TEXTURE   L"texture"
 
#define ON_DISPLACEMENT_WHITE_POINT   L"white-point"
 
#define ON_DOUBLE_BYTE_CODE_PAGE_SUPPORT
 
#define ON_EDGE_SOFTENING_CHAMFER   L"chamfer"
 
#define ON_EDGE_SOFTENING_EDGE_THRESHOLD   L"edge-threshold"
 
#define ON_EDGE_SOFTENING_FORCE_SOFTENING   L"force-softening"
 
#define ON_EDGE_SOFTENING_ON   L"on"
 
#define ON_EDGE_SOFTENING_ROOT   L"edge-softening-object-data"
 
#define ON_EDGE_SOFTENING_SOFTENING   L"softening"
 
#define ON_EDGE_SOFTENING_UNWELD   L"unweld"
 
#define ON_END_EXTERNC   }
 
#define ON_ENUM_FROM_UNSIGNED_CASE(e)   case (unsigned int)e: return(e); break
 
#define ON_ENUM_TO_STRING_CASE(e)   case e: return( ON_String(#e) ); break
 
#define ON_ENUM_TO_STRING_CASE_SET(e, s)   case e: (s)=ON_String(#e); break
 
#define ON_ENUM_TO_WIDE_STRING_CASE(e)   case e: return( ON_wString(#e) ); break
 
#define ON_ENUM_TO_WIDE_STRING_CASE_SET(e, s)   case e: (s)=ON_wString(#e); break
 
#define ON_ENVIRONMENT_PROJECTION_BOX   L"box"
 Environment projections. More...
 
#define ON_ENVIRONMENT_PROJECTION_CUBE_MAP   L"cubemap"
 
#define ON_ENVIRONMENT_PROJECTION_CUBE_MAP_HORZ   L"horizontal-cross-cubemap"
 
#define ON_ENVIRONMENT_PROJECTION_CUBE_MAP_VERT   L"vertical-cross-cubemap"
 
#define ON_ENVIRONMENT_PROJECTION_EMAP   L"emap"
 
#define ON_ENVIRONMENT_PROJECTION_HEMISPHERICAL   L"hemispherical"
 
#define ON_ENVIRONMENT_PROJECTION_LIGHT_PROBE   L"lightprobe"
 
#define ON_ENVIRONMENT_PROJECTION_PLANAR   L"planar"
 
#define ON_ENVIRONMENT_PROJECTION_SPHERICAL   L"spherical"
 
#define ON_ENVIRONMENT_SIMULATION_BACKGROUND_COLOR   L"background-color"
 Environment simulation. More...
 
#define ON_ENVIRONMENT_SIMULATION_BACKGROUND_IMAGE   L"background-image"
 
#define ON_ENVIRONMENT_SIMULATION_BACKGROUND_PROJECTION   L"background-projection"
 
#define ON_EPSILON   2.2204460492503131e-16
 ON_EPSILON = 2^-52. More...
 
#define ON_ERROR(msg)   ON_ErrorEx(__FILE__,__LINE__,OPENNURBS__FUNCTION__,msg)
 
#define ON_EXTERN_DECL
 
#define ON_EXTERNC   extern "C"
 C++ extern "C" declaration for C linkage. More...
 
#define ON_FLOAT_EPSILON   1.192092896e-07
 
#define ON_FLT_MAX   3.402823466e+38F
 
#define ON_forigin   ON_3fPoint::Origin
 OBSOLETE - use ON_3fPoint::Origin. More...
 
#define ON_FPU_CW_DEFAULT   ( ON_FPU_EX_ALL | ON_FPU_PC_53 | ON_FPU_RC_NEAR )
 
#define ON_FPU_CW_DEFAULT_MASK   ( ON_FPU_CW_EX_MASK | ON_FPU_CW_PC_MASK | ON_FPU_CW_RC_MASK )
 
#define ON_FPU_CW_EX_MASK   0x0008001f
 
#define ON_FPU_CW_PC_MASK   0x00030000
 
#define ON_FPU_CW_RC_MASK   0x00000300
 
#define ON_FPU_EX_ALL   (ON_FPU_EX_INEXACT|ON_FPU_EX_UNDERFLOW|ON_FPU_EX_OVERFLOW|ON_FPU_EX_ZERODIVIDE|ON_FPU_EX_INVALID|ON_FPU_EX_DENORMAL)
 Use ON_FPU_EX_ALL to mask all FPU exceptions. More...
 
#define ON_FPU_EX_DENORMAL   0x00080000
 denormal exception mask More...
 
#define ON_FPU_EX_INEXACT   0x00000001
 inexact (precision) More...
 
#define ON_FPU_EX_INVALID   0x00000010
 invalid More...
 
#define ON_FPU_EX_MINOR   (ON_FPU_EX_INEXACT|ON_FPU_EX_UNDERFLOW|ON_FPU_EX_DENORMAL)
 
#define ON_FPU_EX_OVERFLOW   0x00000004
 overflow More...
 
#define ON_FPU_EX_UNDERFLOW   0x00000002
 underflow More...
 
#define ON_FPU_EX_ZERODIVIDE   0x00000008
 zero divide More...
 
#define ON_FPU_PC_24   0x00020000
 24 bits More...
 
#define ON_FPU_PC_53   0x00010000
 53 bits More...
 
#define ON_FPU_PC_64   0x00000000
 64 bits More...
 
#define ON_FPU_RC_CHOP   0x00000300
 chop More...
 
#define ON_FPU_RC_DOWN   0x00000100
 down More...
 
#define ON_FPU_RC_NEAR   0x00000000
 near More...
 
#define ON_FPU_RC_UP   0x00000200
 up More...
 
#define ON_FPU_SW_BAD   (ON_FPU_SW_OVERFLOW|ON_FPU_SW_ZERODIVIDE)
 "Bad" FPU status - results of calculation are suspect More...
 
#define ON_FPU_SW_DENORMAL   0x00080000
 denormal status bit - ok - happens on occasion More...
 
#define ON_FPU_SW_INEXACT   0x00000001
 inexact (precision) - ok - happens frequently More...
 
#define ON_FPU_SW_INVALID   0x00000010
 invalid - bad More...
 
#define ON_FPU_SW_OVERFLOW   0x00000004
 overflow - bad More...
 
#define ON_FPU_SW_UNDERFLOW   0x00000002
 underflow - ok - happens on occasion More...
 
#define ON_FPU_SW_ZERODIVIDE   0x00000008
 zero divide - bad More...
 
#define ON_fxaxis   ON_3fVector::XAxis
 OBSOLETE - use ON_3fVector::XAxis. More...
 
#define ON_fyaxis   ON_3fVector::YAxis
 OBSOLETE - use ON_3fVector::YAxis. More...
 
#define ON_fzaxis   ON_3fVector::ZAxis
 OBSOLETE - use ON_3fVector::ZAxis. More...
 
#define ON_HALFPI   (0.5*ON_PI)
 
#define ON_HAS_RVALUEREF
 
#define ON_HSORT_COPY(dst, src)   *dst = *src
 
#define ON_HSORT_FROM_TMP(A)   *A = tmp
 
#define ON_HSORT_GT(A, B)   *A > *B
 ON_SORT_TEMPLATE_TYPE -> double, int, .... More...
 
#define ON_HSORT_GT_TMP(A)   *A > tmp
 
#define ON_HSORT_TO_TMP(A)   tmp = *A
 
#define ON_INT_FROM_ENUM(e)   ((int)static_cast<unsigned int>(e))
 
#define ON_INTERNAL_SDK
 
#define ON_IntSleepLock_Set(lock, lock_value)   lock=lock_value
 
#define ON_IntSleepLock_Test(lock, test_value, sleep_value)   lock;
 if (test_value==lock) lock=sleep_value More...
 
#define ON_IS_FINITE(x)   (_finite(x)?true:false)
 
#define ON_IS_FINITE_FLOAT(x)   ((x) <= 3.402823466e+38F && (x) >= -3.402823466e+38F)
 
#define ON_IS_INFINITE_FLOAT(x)   ((x) > 3.402823466e+38F || (x) < -3.402823466e+38F)
 
#define ON_IS_NAN(x)   (!((x)==(x)))
 
#define ON_IS_UNSET_DOUBLE(x)   (ON_UNSET_VALUE == (x) || ON_UNSET_POSITIVE_VALUE == (x))
 
#define ON_IS_UNSET_FLOAT(x)   (ON_UNSET_FLOAT == (x) || ON_UNSET_POSITIVE_FLOAT == (x))
 
#define ON_IS_VALID(x)   ((x) > ON_UNSET_VALUE && (x) < ON_UNSET_POSITIVE_VALUE)
 
#define ON_IS_VALID_FLOAT(x)   ((x) > ON_UNSET_FLOAT && (x) < ON_UNSET_POSITIVE_FLOAT)
 
#define ON_KIND_ENVIRONMENT   L"environment"
 
#define ON_KIND_MATERIAL   L"material"
 Strings returned by ON_RenderContent::Kind(). More...
 
#define ON_KIND_TEXTURE   L"texture"
 
#define ON_LOG10   2.302585092994045684017991
 
#define ON_LOG2   0.6931471805599453094172321
 
#define ON_MATERIAL_ALPHA_TRANSPARENCY   L"alpha-transparency"
 General parameters used by materials that simulate ON_Material. More...
 
#define ON_MATERIAL_AMBIENT   L"ambient"
 
#define ON_MATERIAL_CLARITY_AMOUNT   L"clarity-amount"
 
#define ON_MATERIAL_DIFFUSE   L"diffuse"
 
#define ON_MATERIAL_DISABLE_LIGHTING   L"disable-lighting"
 
#define ON_MATERIAL_EMISSION   L"emission"
 
#define ON_MATERIAL_FLAMINGO_LIBRARY   L"flamingo-library"
 
#define ON_MATERIAL_FRESNEL_ENABLED   L"fresnel-enabled"
 
#define ON_MATERIAL_IOR   L"ior"
 
#define ON_MATERIAL_IS_PHYSICALLY_BASED   L"is-physically-based"
 
#define ON_MATERIAL_POLISH_AMOUNT   L"polish-amount"
 
#define ON_MATERIAL_REFLECTIVITY_AMOUNT   L"reflectivity"
 
#define ON_MATERIAL_REFLECTIVITY_COLOR   L"reflectivity-color"
 
#define ON_MATERIAL_SHINE   L"shine"
 Value is 0.0..1.0, NOT ON_Material::MaxShine. More...
 
#define ON_MATERIAL_SIM_REFLECTION_COLOR   L"reflection"
 Used by simulation, not by Custom Material field. More...
 
#define ON_MATERIAL_SIM_TRANSPARENT_COLOR   L"transparent"
 Used by simulation, not by Custom Material field. More...
 
#define ON_MATERIAL_SPECULAR   L"specular"
 
#define ON_MATERIAL_TRANSPARENCY_AMOUNT   L"transparency"
 
#define ON_MATERIAL_TRANSPARENCY_COLOR   L"transparency-color"
 
#define ON_MAX_SIZE_T   SIZE_MAX
 
#define ON_MAXIMUM_WORLD_COORDINATE_VALUE   1.34217728e8
 ON_MAXIMUM_VALUE = 2^27. More...
 
#define ON_MINIMUM_ANGLE_TOLERANCE   (ON_DEFAULT_ANGLE_TOLERANCE/10.0)
 
#define ON_MSC_CDECL   ON_CALLBACK_CDECL
 
#define ON_NO_SLEEPLOCK_SUPPORT
 #error Need to fill in the following defines or comment out this error for single threaded applications More...
 
#define ON_NOEXCEPT   noexcept
 
#define ON_NONSENSE_WORLD_COORDINATE_VALUE   1.0e100
 ON_NONSENSE_WORLD_COORDINATE_VALUE = 1.0e100. More...
 
#define ON_OBJECT_DECLARE(cls)
 
#define ON_OBJECT_DECLARE_OVERRIDE   override
 
#define ON_OBJECT_DECLARE_OVERRIDE
 
#define ON_OBJECT_DECLARE_OVERRIDE   override
 
#define ON_OBJECT_DECLARE_VIRTUAL
 Every other use of ON_OBJECT_DECLARE() is in derived class. More...
 
#define ON_OBJECT_DECLARE_VIRTUAL   virtual
 Every other use of ON_OBJECT_DECLARE() is in derived class. More...
 
#define ON_OBJECT_DECLARE_VIRTUAL
 Every other use of ON_OBJECT_DECLARE() is in derived class. More...
 
#define ON_OBJECT_IMPLEMENT(cls, basecls, uuid)
 
#define ON_OBJECT_IMPLEMENT_NO_COPY(cls, basecls, uuid)
 
#define ON_OBJECT_IMPLEMENT_NO_COPYCTOR(cls, basecls, uuid)
 
#define ON_origin   ON_3dPoint::Origin
 OBSOLETE - use ON_3dPoint::Origin. More...
 
#define ON_PARTICLE_SYSTEM_WIP
 
#define ON_PBR_MATERIAL_ALPHA   L"pbr-alpha"
 
#define ON_PBR_MATERIAL_ANISOTROPIC   L"pbr-anisotropic"
 
#define ON_PBR_MATERIAL_ANISOTROPIC_ROTATION   L"pbr-anisotropic-rotation"
 
#define ON_PBR_MATERIAL_BASE_COLOR   L"pbr-base-color"
 
#define ON_PBR_MATERIAL_BRDF   L"pbr-brdf"
 
#define ON_PBR_MATERIAL_BRDF_GGX   L"ggx"
 
#define ON_PBR_MATERIAL_BRDF_WARD   L"ward"
 
#define ON_PBR_MATERIAL_CLEARCOAT   L"pbr-clearcoat"
 
#define ON_PBR_MATERIAL_CLEARCOAT_BUMP   L"pbr-clearcoat-bump"
 
#define ON_PBR_MATERIAL_CLEARCOAT_ROUGHNESS   L"pbr-clearcoat-roughness"
 
#define ON_PBR_MATERIAL_EMISSION_COLOR   L"pbr-emission"
 
#define ON_PBR_MATERIAL_EMISSION_MULTIPLIER   L"emission-multiplier"
 
#define ON_PBR_MATERIAL_METALLIC   L"pbr-metallic"
 
#define ON_PBR_MATERIAL_OPACITY   L"pbr-opacity"
 
#define ON_PBR_MATERIAL_OPACITY_IOR   L"pbr-opacity-ior"
 
#define ON_PBR_MATERIAL_OPACITY_ROUGHNESS   L"pbr-opacity-roughness"
 
#define ON_PBR_MATERIAL_ROUGHNESS   L"pbr-roughness"
 
#define ON_PBR_MATERIAL_SHEEN   L"pbr-sheen"
 
#define ON_PBR_MATERIAL_SHEEN_TINT   L"pbr-sheen-tint"
 
#define ON_PBR_MATERIAL_SPECULAR   L"pbr-specular"
 
#define ON_PBR_MATERIAL_SPECULAR_TINT   L"pbr-specular-tint"
 
#define ON_PBR_MATERIAL_SUBSURFACE   L"pbr-subsurface"
 
#define ON_PBR_MATERIAL_SUBSURFACE_SCATTERING_COLOR   L"pbr-subsurface-scattering-color"
 
#define ON_PBR_MATERIAL_SUBSURFACE_SCATTERING_RADIUS   L"pbr-subsurface-scattering-radius"
 
#define ON_PBR_MATERIAL_USE_BASE_COLOR_TEXTURE_ALPHA   L"pbr-use-base-color-texture-alpha"
 
#define ON_PI   3.141592653589793238462643
 
#define ON_PLUS_MESH_INTERSECTION_INC_
 
#define ON_PLUS_RECTPACK2_INC_
 
#define ON_PointerSleepLock_Set(ptr_type, ptr, ptr_value)   (ptr_type*)(ptr); ((ptr)=(ptr_value));
 
#define ON_PointerSleepLock_SuspendThisThread(n)   usleep(n)
 Sleeps the THREAD not the PROCESS. More...
 
#define ON_PointerSleepLock_Test(ptr_type, ptr)   (ptr_type*)(ON_Internal_CompareExchangePointer((void* volatile*)(&(ptr)),(void*)1,(void*)0))
 
#define ON_PRAGMA_WARNING_AFTER_DIRTY_INCLUDE   ON_PRAGMA_WARNING_POP
 
#define ON_PRAGMA_WARNING_BEFORE_DIRTY_INCLUDE   ON_PRAGMA_WARNING_PUSH
 
#define ON_PRAGMA_WARNING_DISABLE_CLANG(ON_PRAGMA_WARNING_DISABLE_param)
 
#define ON_PRAGMA_WARNING_DISABLE_GNU(ON_PRAGMA_WARNING_DISABLE_param)   GCC diagnostic ignored ON_PRAGMA_WARNING_DISABLE_param
 Apple CLang warning disable. More...
 
#define ON_PRAGMA_WARNING_DISABLE_MSC(ON_PRAGMA_WARNING_DISABLE_param)
 
#define ON_PRAGMA_WARNING_POP   GCC diagnostic pop
 Gnu gcc warning state pop. More...
 
#define ON_PRAGMA_WARNING_PUSH   GCC diagnostic push
 Gnu gcc warning state push. More...
 
#define ON_PTR_SEMAPHORE1   ((ON__UINT_PTR)8)
 
#define ON_PTR_SEMAPHORE2   ((ON__UINT_PTR)16)
 
#define ON_PTR_SEMAPHORE3   ((ON__UINT_PTR)24)
 
#define ON_PTR_SEMAPHORE4   ((ON__UINT_PTR)32)
 
#define ON_PTR_SEMAPHORE_MAX   ((ON__UINT_PTR)32)
 
#define ON_QSORT_CUTOFF   8 /* testing shows that this is good value */
 
#define ON_QSORT_EQ(A, B)   *A == *B
 
#define ON_QSORT_GT(A, B)   *A > *B
 ON_SORT_TEMPLATE_TYPE -> double, int, .... More...
 
#define ON_QSORT_LE(A, B)   *A <= *B
 
#define ON_QSORT_SHORT_SORT_FNAME   ON__shortsort
 The default name for the short sort helper function is ON__shortsort. More...
 
#define ON_QSORT_STKSIZ   (8*sizeof(void*) - 2)
 
#define ON_QSORT_SWAP(A, B)   tmp = *A; *A = *B; *B = tmp
 
#define ON_QUACKSORT_SWAP_FUNCS_DEFINED
 
#define ON_RADIANS_TO_DEGREES   (180.0/ON_PI)
 
#define ON_RDK_BACKGROUND_ENVIRONMENT   L"environment"
 
#define ON_RDK_CURRENT_CONTENT   L"content"
 
#define ON_RDK_CURRENT_RENDER_PRESET   L"current-preset"
 
#define ON_RDK_CUSTOM_IMAGE_SIZE_IS_PRESET   L"custom-image-size-is-preset"
 
#define ON_RDK_CUSTOM_REFLECTIVE_ENVIRONMENT   L"custom-env-for-refl-and-refr"
 
#define ON_RDK_CUSTOM_REFLECTIVE_ENVIRONMENT_ON   L"custom-env-for-refl-and-refr-on"
 
#define ON_RDK_DECAL   L"decal"
 
#define ON_RDK_DECAL_CUSTOM   L"custom"
 
#define ON_RDK_DECAL_CUSTOM_PARAMS   L"parameters"
 
#define ON_RDK_DECAL_CUSTOM_RENDERER   L"renderer"
 
#define ON_RDK_DECAL_HEIGHT   L"height"
 
#define ON_RDK_DECAL_HORZ_SWEEP_END   L"latitude-stop"
 
#define ON_RDK_DECAL_HORZ_SWEEP_STA   L"latitude-start"
 
#define ON_RDK_DECAL_INSTANCE_ID   L"instance-id"
 
#define ON_RDK_DECAL_IS_TEMPORARY   L"is-temporary"
 
#define ON_RDK_DECAL_IS_VISIBLE   L"is-visible"
 
#define ON_RDK_DECAL_MAP_TO_INSIDE_ON   L"map-to-inside-on"
 
#define ON_RDK_DECAL_MAPPING   L"mapping"
 
#define ON_RDK_DECAL_MAPPING_CYLINDRICAL   L"cylindrical"
 
#define ON_RDK_DECAL_MAPPING_NONE   L"none"
 
#define ON_RDK_DECAL_MAPPING_PLANAR   L"planar"
 --— +++++++++++++++++++ More...
 
#define ON_RDK_DECAL_MAPPING_SPHERICAL   L"spherical"
 
#define ON_RDK_DECAL_MAPPING_UV   L"uv"
 
#define ON_RDK_DECAL_MAX_U   L"max-u"
 
#define ON_RDK_DECAL_MAX_V   L"max-v"
 
#define ON_RDK_DECAL_MIN_U   L"min-u"
 
#define ON_RDK_DECAL_MIN_V   L"min-v"
 
#define ON_RDK_DECAL_ORIGIN   L"origin"
 
#define ON_RDK_DECAL_PROJECTION   L"projection"
 
#define ON_RDK_DECAL_PROJECTION_BACKWARD   L"backward"
 
#define ON_RDK_DECAL_PROJECTION_BOTH   L"both"
 
#define ON_RDK_DECAL_PROJECTION_FORWARD   L"forward"
 --— ++++++++++++++++++++++ More...
 
#define ON_RDK_DECAL_PROJECTION_NONE   L"none"
 
#define ON_RDK_DECAL_RADIUS   L"radius"
 
#define ON_RDK_DECAL_TEXTURE_INSTANCE   L"texture-instance"
 
#define ON_RDK_DECAL_TRANSPARENCY   L"transparency"
 
#define ON_RDK_DECAL_VECTOR_ACROSS   L"vector-across"
 
#define ON_RDK_DECAL_VECTOR_UP   L"vector-up"
 
#define ON_RDK_DECAL_VERT_SWEEP_END   L"longitude-stop"
 
#define ON_RDK_DECAL_VERT_SWEEP_STA   L"longitude-start"
 
#define ON_RDK_DECALS   L"decals"
 Decals (stored in object attributes user data). More...
 
#define ON_RDK_DEFAULT_CONTENT_SECTION   L"default-content-section"
 
#define ON_RDK_DITHERING_ENABLED   L"use-dithering"
 
#define ON_RDK_DITHERING_METHOD   L"dithering"
 
#define ON_RDK_DITHERING_METHOD_FLOYD_STEINBERG   L"floyd-steinberg"
 
#define ON_RDK_DITHERING_METHOD_SIMPLE_NOISE   L"simple-noise"
 
#define ON_RDK_DOCUMENT   L"render-content-manager-document"
 This is the structure of the RDK document XML. More...
 
#define ON_RDK_EMBED_SUPPORT_FILES_ON   L"embed-support-files-on"
 
#define ON_RDK_EXCLUDED_RENDER_ENGINES   L"excluded-render-engines"
 
#define ON_RDK_FILTERS   L"filters"
 
#define ON_RDK_GP_ALTITUDE   L"altitude"
 
#define ON_RDK_GP_AUTO_ALTITUDE   L"auto-altitude"
 
#define ON_RDK_GP_ENABLED   L"on"
 
#define ON_RDK_GP_MATERIAL_ID   L"material"
 
#define ON_RDK_GP_SHADOW_ONLY   L"shadow-only"
 
#define ON_RDK_GP_SHOW_UNDERSIDE   L"show-underside"
 
#define ON_RDK_GP_TEXTURE_OFFSET   L"texture-offset"
 
#define ON_RDK_GP_TEXTURE_OFFSET_LOCKED   L"offset-lock"
 Keep old string. More...
 
#define ON_RDK_GP_TEXTURE_ROTATION   L"texture-rotation"
 
#define ON_RDK_GP_TEXTURE_SIZE   L"texture-size"
 
#define ON_RDK_GP_TEXTURE_SIZE_LOCKED   L"repeat-lock"
 Keep old string. More...
 
#define ON_RDK_GROUND_PLANE   L"ground-plane"
 
#define ON_RDK_IMPORT   L"import"
 
#define ON_RDK_MISCELLANEOUS   L"miscellaneous"
 
#define ON_RDK_NAME_COLLISION_SUPPRESS   L"smart-merge-name-collision-suppress"
 
#define ON_RDK_NAME_FILTER   L"name-filter"
 
#define ON_RDK_NAME_FILTER_INVERT   L"name-filter-invert"
 
#define ON_RDK_NAMED_CPLANES   L"named-cplanes"
 
#define ON_RDK_NAMED_POSITIONS   L"named-positions"
 
#define ON_RDK_NAMED_SNAPSHOTS   L"named-snapshots"
 
#define ON_RDK_NAMED_VIEWS   L"named-views"
 
#define ON_RDK_PASTE   L"paste"
 
#define ON_RDK_PEP_ID   L"id"
 
#define ON_RDK_PEP_LOCAL_NAME   L"name"
 
#define ON_RDK_PEP_ON   L"on"
 
#define ON_RDK_PEP_PARAMS   L"state"
 This should really be 'params'. More...
 
#define ON_RDK_PEP_PLUG_IN   L"plug-in"
 
#define ON_RDK_PEP_SELECTION   L"selection"
 
#define ON_RDK_PEP_SHOWN   L"shown"
 
#define ON_RDK_PEP_TYPE_EARLY   L"early"
 
#define ON_RDK_PEP_TYPE_LATE   L"late"
 
#define ON_RDK_PEP_TYPE_TONE_MAPPING   L"tone-mapping"
 
#define ON_RDK_POST_EFFECTS   L"post-effects-new"
 
#define ON_RDK_POST_PROCESS_GAMMA   L"gamma"
 Keep original XML tag. More...
 
#define ON_RDK_POST_PROCESS_GAMMA_ON   L"use-post-process-gamma"
 
#define ON_RDK_POSTFIX_SECTION   L"-section"
 
#define ON_RDK_PRE_PROCESS_GAMMA_ON   L"use-linear-workflow"
 
#define ON_RDK_RCH_LIST   L"list"
 
#define ON_RDK_RCH_MODE   L"mode"
 
#define ON_RDK_RCH_MODE_AUTOMATIC   L"automatic"
 
#define ON_RDK_RCH_MODE_CUSTOM   L"custom"
 
#define ON_RDK_RENDER_CHANNELS   L"render-channels"
 
#define ON_RDK_RENDERING   L"rendering"
 
#define ON_RDK_SAFE_FRAME   L"safe-frame"
 
#define ON_RDK_SETTINGS   L"settings"
 
#define ON_RDK_SF_4x3_FIELD_GRID_ON   L"field-display-on"
 
#define ON_RDK_SF_ACTION_FRAME   L"action-frame"
 
#define ON_RDK_SF_ENABLED   L"on"
 
#define ON_RDK_SF_LIVE_FRAME   L"live-frame"
 
#define ON_RDK_SF_PERSPECTIVE_ONLY   L"perspective-only"
 
#define ON_RDK_SF_TITLE_FRAME   L"title-frame"
 
#define ON_RDK_SFF_LINK   L"link"
 
#define ON_RDK_SFF_ON   L"on"
 
#define ON_RDK_SFF_XSCALE   L"x-scale"
 
#define ON_RDK_SFF_YSCALE   L"y-scale"
 
#define ON_RDK_SHOW_HIDDEN   L"show-hidden-materials"
 
#define ON_RDK_SHOW_REFERENCE   L"show-reference-materials"
 
#define ON_RDK_SHOW_UNASSIGNED   L"show-unassigned-materials"
 
#define ON_RDK_SHOW_V4   L"show-v4-materials"
 
#define ON_RDK_SORT_MODE   L"sort-mode"
 
#define ON_RDK_SORT_MODE_ASCENDING   L"ascending"
 
#define ON_RDK_SORT_MODE_CUSTOM   L"custom"
 
#define ON_RDK_SORT_MODE_DESCENDING   L"descending"
 
#define ON_RDK_SUN   L"sun"
 
#define ON_RDK_SUN_ALTITUDE   L"sun-altitude"
 
#define ON_RDK_SUN_AZIMUTH   L"sun-azimuth"
 
#define ON_RDK_SUN_DATE_DAY   L"day"
 
#define ON_RDK_SUN_DATE_MONTH   L"month"
 
#define ON_RDK_SUN_DATE_YEAR   L"year"
 
#define ON_RDK_SUN_DAYLIGHT_SAVING_MINUTES   L"daylight-saving-minutes"
 
#define ON_RDK_SUN_DAYLIGHT_SAVING_ON   L"daylight-saving-on"
 
#define ON_RDK_SUN_ENABLE_ALLOWED   L"enable-allowed"
 
#define ON_RDK_SUN_ENABLE_ON   L"enable-on"
 
#define ON_RDK_SUN_INTENSITY   L"intensity"
 
#define ON_RDK_SUN_MANUAL_CONTROL_ALLOWED   L"manual-control-allowed"
 
#define ON_RDK_SUN_MANUAL_CONTROL_ON   L"manual-control-on"
 
#define ON_RDK_SUN_NORTH   L"north"
 
#define ON_RDK_SUN_OBSERVER_LATITUDE   L"observer-latitude"
 
#define ON_RDK_SUN_OBSERVER_LONGITUDE   L"observer-longitude"
 
#define ON_RDK_SUN_OBSERVER_TIMEZONE   L"observer-timezone"
 
#define ON_RDK_SUN_SHADOW_INTENSITY   L"shadow-intensity"
 
#define ON_RDK_SUN_SKYLIGHT_ENABLED   L"skylight-on"
 
#define ON_RDK_SUN_SKYLIGHT_ENVIRONMENT_ID   L"skylight-custom-environment"
 
#define ON_RDK_SUN_SKYLIGHT_ENVIRONMENT_OVERRIDE   L"skylight-custom-environment-on"
 
#define ON_RDK_SUN_SKYLIGHT_SHADOW_INTENSITY   L"skylight-shadow-intensity"
 
#define ON_RDK_SUN_TIME_HOURS   L"time"
 
#define ON_RDK_UUIDS   L"uuids"
 
#define ON_RELATIVE_CURVATURE_TOLERANCE   0.05
 
#define ON_RELATIVE_TOLERANCE   2.27373675443232059478759765625e-13
 ON_RELATIVE_TOLERANCE = 2^-42. More...
 
#define ON_RENDER_CONTENT_AUTO_DELETE   L"auto-delete"
 
#define ON_RENDER_CONTENT_CHILD_SLOT_NAME   L"child-slot-name"
 
#define ON_RENDER_CONTENT_GROUP_ID   L"group-id"
 
#define ON_RENDER_CONTENT_HIDDEN   L"hidden"
 
#define ON_RENDER_CONTENT_INSTANCE_ID   L"instance-id"
 
#define ON_RENDER_CONTENT_INSTANCE_NAME   L"instance-name"
 
#define ON_RENDER_CONTENT_NOTES   L"notes"
 
#define ON_RENDER_CONTENT_PARAMETERS   L"parameters"
 
#define ON_RENDER_CONTENT_PARAMETERS_V8   L"parameters-v8"
 
#define ON_RENDER_CONTENT_PLUG_IN_ID   L"plug-in-id"
 
#define ON_RENDER_CONTENT_REFERENCE   L"reference"
 
#define ON_RENDER_CONTENT_RENDER_ENGINE_ID   L"render-engine-id"
 
#define ON_RENDER_CONTENT_SIMULATION   L"simulation"
 
#define ON_RENDER_CONTENT_TAGS   L"tags"
 
#define ON_RENDER_CONTENT_TYPE_ID   L"type-id"
 
#define ON_RENDER_CONTENT_TYPE_NAME   L"type-name"
 Render Content. More...
 
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_AMOUNT   L"amount"
 
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_FILENAME   L"filename"
 
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_FILTER   L"filter"
 
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_FORMAT   L"Texture-%u-"
 Material's texture simulation. More...
 
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_MODE   L"mode"
 
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_ON   L"on"
 
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_TYPE   L"type"
 
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_UVW   L"uvw"
 
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_WRAP_U   L"wrap-u"
 
#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_WRAP_V   L"wrap-v"
 
#define ON_RENDER_TEXTURE_FILENAME   L"filename"
 
#define ON_RTree_MAX_NODE_COUNT   6
 
#define ON_RTree_MIN_NODE_COUNT   2
 
#define ON_SHUTLINING_AUTO_UPDATE   L"auto-update"
 
#define ON_SHUTLINING_CURVE   L"curve"
 
#define ON_SHUTLINING_CURVE_ENABLED   L"enabled"
 
#define ON_SHUTLINING_CURVE_IS_BUMP   L"is-bump"
 
#define ON_SHUTLINING_CURVE_PROFILE   L"profile"
 
#define ON_SHUTLINING_CURVE_PULL   L"pull"
 
#define ON_SHUTLINING_CURVE_RADIUS   L"radius"
 
#define ON_SHUTLINING_CURVE_UUID   L"uuid"
 
#define ON_SHUTLINING_FACETED   L"faceted"
 
#define ON_SHUTLINING_FORCE_UPDATE   L"force-update"
 
#define ON_SHUTLINING_ON   L"on"
 
#define ON_SHUTLINING_ROOT   L"shut-lining-object-data"
 
#define ON_SIN_PI_OVER_12   0.2588190451025207623488990
 
#define ON_SleepLock_SuspendThisThread(n)   usleep(n)
 Sleeps the THREAD not the PROCESS. More...
 
#define ON_SLEEPLOCK_USES_STD_ATOMIC_FLAG
 Use std::atomic_lock and std::this_thread::sleep_for(std::chrono::milliseconds(...)) More...
 
#define ON_SQRT2   1.414213562373095048801689
 
#define ON_SQRT3   1.732050807568877293527446
 
#define ON_SQRT3_OVER_2   0.8660254037844386467637230
 
#define ON_SQRT_EPSILON   1.490116119385000000e-8
 
#define ON_SQRT_FLOAT_EPSILON   3.452669830725202719e-4
 
#define ON_STATIC_ASSERT(expr)   typedef char on_static_assert_t[(expr) != 0]
 < C++17 More...
 
#define ON_STATIC_ASSERT_MSG(expr, msg)   typedef char on_static_assert_t[(expr) != 0]
 
#define ON_TESTS_BUILD
 
#define ON_TEXT_BRACKET_FRACTION
 
#define ON_TEXTURE_CHILD_SLOT_NAME_BITMAP_TEXTURE   L"bitmap-texture"
 Standard texture child slot names. More...
 
#define ON_TEXTURE_CHILD_SLOT_NAME_BUMP_TEXTURE   L"bump-texture"
 
#define ON_TEXTURE_CHILD_SLOT_NAME_ENVIRONMENT_TEXTURE   L"environment-texture"
 
#define ON_TEXTURE_CHILD_SLOT_NAME_TRANSPARENCY_TEXTURE   L"transparency-texture"
 
#define ON_TEXTURE_SIMULATION_BLEND_CONSTANT_A   L"blend-constant-a"
 
#define ON_TEXTURE_SIMULATION_FILENAME   L"filename"
 
#define ON_TEXTURE_SIMULATION_HAS_TRANSPARENT_COLOR   L"has-trans-color"
 
#define ON_TEXTURE_SIMULATION_MAG_FILTER   L"mag-filter"
 
#define ON_TEXTURE_SIMULATION_MAPPING_CHANNEL   L"mapping-channel"
 
#define ON_TEXTURE_SIMULATION_MIN_FILTER   L"min-filter"
 
#define ON_TEXTURE_SIMULATION_MODE   L"mode"
 
#define ON_TEXTURE_SIMULATION_OFFSET   L"offset"
 
#define ON_TEXTURE_SIMULATION_ON   L"on"
 Texture simulation. More...
 
#define ON_TEXTURE_SIMULATION_PROJECTION_MODE   L"projection-mode"
 
#define ON_TEXTURE_SIMULATION_REPEAT   L"repeat"
 
#define ON_TEXTURE_SIMULATION_ROTATION   L"rotation"
 
#define ON_TEXTURE_SIMULATION_TRANSPARENCY_TEXTURE_ID   L"transparency-texture-id"
 
#define ON_TEXTURE_SIMULATION_TRANSPARENT_COLOR   L"trans-color"
 
#define ON_TEXTURE_SIMULATION_TRANSPARENT_COLOR_SENSITIVITY   L"trans-color-sensitivity"
 
#define ON_TEXTURE_SIMULATION_TREAT_AS_LINEAR   L"treat-as-linear"
 
#define ON_TEXTURE_SIMULATION_TYPE   L"type"
 
#define ON_TEXTURE_SIMULATION_WRAP_TYPE   L"wrap-type"
 
#define ON_THICKENING_BOTH_SIDES   L"both-sides"
 
#define ON_THICKENING_DISTANCE   L"distance"
 
#define ON_THICKENING_OFFSET_ONLY   L"offset-only"
 
#define ON_THICKENING_ON   L"on"
 
#define ON_THICKENING_ROOT   L"thickening-object-data"
 
#define ON_THICKENING_SOLID   L"solid"
 
#define ON_UINT_FROM_ENUM(e)   (static_cast<unsigned int>(e))
 
#define ON_UINT_MAX   (~(0U))
 
#define ON_UNSET_COLOR   0xFFFFFFFF
 
#define ON_UNSET_FLOAT   -ON_UNSET_POSITIVE_FLOAT
 
#define ON_UNSET_INT_INDEX   ((const int)-2147483647)
 
#define ON_unset_point   ON_3dPoint::UnsetPoint
 OBSOLETE - use ON_3dPoint::UnsetPoint. More...
 
#define ON_UNSET_POINT   ON_3dPoint::UnsetPoint
 OBSOLETE - use ON_3dPoint::UnsetPoint. More...
 
#define ON_UNSET_POSITIVE_FLOAT   1.234321e+38f
 
#define ON_UNSET_POSITIVE_VALUE   1.23432101234321e+308
 
#define ON_UNSET_UINT_INDEX   0xFFFFFFFFU
 
#define ON_UNSET_VALUE   -ON_UNSET_POSITIVE_VALUE
 
#define ON_UNSET_VECTOR   ON_3dVector::UnsetVector
 OBSOLETE - use ON_3dPoint::UnsetVector. More...
 
#define ON_UUID_DEFINED
 ON_UUID is a 16 byte universally unique identifier. More...
 
#define ON_VARGS_FUNC_CDECL
 
#define ON_VERSION_NUMBER_CTOR(major, minor, year, month, day_of_month, branch)
 
#define ON_VERSION_NUMBER_DAYOFYEAR(year, month, day_of_month)
 
#define ON_VERSION_NUMBER_FEBDAYS(year)
 
#define ON_VERSION_NUMBER_PLATFORM_ID(branch)   (((branch) > 0x0U) ? (0x02U - ((branch) % 0x02U)) : 0x0U)
 
#define ON_VERSION_NUMBER_TIME(year, month, day_of_month)   ((((year)-2000)*367) + (ON_VERSION_NUMBER_DAYOFYEAR(year,month,day_of_month)))
 
#define ON_VIRTUAL_OBJECT_IMPLEMENT(cls, basecls, uuid)
 
#define ON_WARNING(msg)   ON_WarningEx(__FILE__,__LINE__,OPENNURBS__FUNCTION__,msg)
 
#define ON_WIP_CLASS   ON_CLASS
 #endif More...
 
#define ON_WIP_DECL   ON_DECL
 
#define ON_WIP_EXTERN_DECL   ON_EXTERN_DECL
 
#define ON_WIP_SDK
 
#define ON_xaxis   ON_3dVector::XAxis
 OBSOLETE - use ON_3dVector::XAxis. More...
 
#define ON_XML_SLASH   L"/"
 
#define ON_yaxis   ON_3dVector::YAxis
 OBSOLETE - use ON_3dVector::YAxis. More...
 
#define ON_zaxis   ON_3dVector::ZAxis
 OBSOLETE - use ON_3dVector::ZAxis. More...
 
#define ON_ZERO_CURVATURE_TOLERANCE   1.0e-8
 
#define ON_ZERO_TOLERANCE   2.3283064365386962890625e-10
 
#define OPENNURBS__FUNCTION__   ""
 For definition of PRIu64 to print 64-bit ints portably. More...
 
#define OPENNURBS_CURRENT_ARCHIVE_VERSION   80
 
#define OPENNURBS_GIT_BRANCH_NAME   RMA_GIT_BRANCH_NAME_STRING
 
#define OPENNURBS_GIT_REVISION_HASH   RMA_GIT_REVISION_HASH_STRING
 
#define OPENNURBS_GL_INC_
 < Open GL utilities (for GL NURBS stuff) More...
 
#define OPENNURBS_INC_IN_PROGRESS
 
#define OPENNURBS_MAX_VERSION_MAJOR   0x03F
 
#define OPENNURBS_MAX_VERSION_MINOR   0x07F
 
#define OPENNURBS_PLUS_INC_
 
#define OPENNURBS_PLUS_SILHOUETTE_INC_
 
#define OPENNURBS_PLUS_SLEEPLOCK_INC_
 
#define OPENNURBS_PP2STR(s)   OPENNURBS_PP2STR_HELPER(s)
 
#define OPENNURBS_PP2STR_HELPER(s)   #s
 
#define OPENNURBS_PUBLIC
 
#define OPENNURBS_PUBLIC_INC_IN_PROGRESS
 
#define OPENNURBS_SLEEPLOCK_AVAILABLE
 
#define OPENNURBS_SLEEPLOCK_INC_
 
#define OPENNURBS_STRING_VALUE_INC_
 
#define OPENNURBS_SUBD_DATA_INC_
 
#define OPENNURBS_SUBD_PLUS_INC_
 
#define OPENNURBS_VERSION_BRANCH   RMA_VERSION_BRANCH
 
#define OPENNURBS_VERSION_DAY_OF_MONTH   RMA_VERSION_DATE
 
#define OPENNURBS_VERSION_HOUR   RMA_VERSION_HOUR
 
#define OPENNURBS_VERSION_MAJOR   RMA_VERSION_MAJOR
 
#define OPENNURBS_VERSION_MINOR   RMA_VERSION_MINOR
 
#define OPENNURBS_VERSION_MINUTE   RMA_VERSION_MINUTE
 
#define OPENNURBS_VERSION_MONTH   RMA_VERSION_MONTH
 
#define OPENNURBS_VERSION_NUMBER
 
#define OPENNURBS_VERSION_QUARTET_STRING   RMA_VERSION_WITH_PERIODS_STRING
 
#define OPENNURBS_VERSION_QUARTET_WITH_COMMAS   VERSION_WITH_COMMAS
 
#define OPENNURBS_VERSION_QUARTET_WITH_PERIODS   VERSION_WITH_PERIODS
 
#define OPENNURBS_VERSION_QUARTET_WSTRING   RMA_VERSION_WITH_PERIODS_WSTRING
 
#define OPENNURBS_VERSION_YEAR   RMA_VERSION_YEAR
 
#define RTFFIRSTCHAR
 
#define Swap(a, b)   m_swapfunc(a,b,m_width)
 
#define TCODE_ANALYSIS_MESH   (TCODE_GEOMETRY | 0x0018)
 
#define TCODE_ANGULAR_DIMENSION   (TCODE_ANNOTATION | 0x0007)
 
#define TCODE_ANNOTATION   0x00200000
 
#define TCODE_ANNOTATION_LEADER   (TCODE_ANNOTATION | 0x0005)
 
#define TCODE_ANNOTATION_SETTINGS   (TCODE_ANNOTATION | 0x0001)
 
#define TCODE_ANONYMOUS_CHUNK   (TCODE_USER | TCODE_CRC | 0x0000 )
 
#define TCODE_BITMAP_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0090) /* bitmap table record derived from ON_Bitmap */
 
#define TCODE_BITMAP_TABLE   (TCODE_TABLE | 0x0016) /* embedded bitmaps */
 
#define TCODE_BITMAPPREVIEW   (TCODE_INTERFACE | 0x0014)
 
#define TCODE_BUMPMAP   (TCODE_DISPLAY | 0x0003)
 
#define TCODE_COMMENTBLOCK   0x00000001
 
#define TCODE_COMPRESSED_MESH_GEOMETRY   (TCODE_GEOMETRY | 0x0017)
 
#define TCODE_CPLANE   (TCODE_INTERFACE | 0x0003)
 
#define TCODE_CRC   0x8000
 
#define TCODE_CURRENTLAYER   (TCODE_SHORT | TCODE_DISPLAY | 0x0025 )
 
#define TCODE_DICTIONARY   (TCODE_USER | TCODE_CRC | 0x0010)
 
#define TCODE_DICTIONARY_END   (TCODE_USER | TCODE_SHORT | 0x0013)
 
#define TCODE_DICTIONARY_ENTRY   (TCODE_USER | TCODE_CRC | 0x0012)
 
#define TCODE_DICTIONARY_ID   (TCODE_USER | TCODE_CRC | 0x0011)
 
#define TCODE_DIMSTYLE_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0075)
 
#define TCODE_DIMSTYLE_TABLE   (TCODE_TABLE | 0x0020) /* annotation dimension style table */
 
#define TCODE_DISP_AM_RESOLUTION   (TCODE_SHORT | TCODE_DISPLAY | 0x0005)
 
#define TCODE_DISP_CPLINES   (TCODE_SHORT | TCODE_DISPLAY | 0x0022)
 
#define TCODE_DISP_MAXLENGTH   (TCODE_DISPLAY | 0x0023)
 
#define TCODE_DISPLAY   0x00400000
 
#define TCODE_ENDOFFILE   0x00007FFF
 
#define TCODE_ENDOFFILE_GOO
 
#define TCODE_ENDOFTABLE   0xFFFFFFFF
 
#define TCODE_FONT_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0074)
 
#define TCODE_FONT_TABLE   (TCODE_TABLE | 0x0019) /* annotation font table */
 
#define TCODE_GEOMETRY   0x00100000
 
#define TCODE_GROUP_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0073)
 
#define TCODE_GROUP_TABLE   (TCODE_TABLE | 0x0018) /* group table */
 
#define TCODE_HATCHPATTERN_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0077)
 
#define TCODE_HATCHPATTERN_TABLE   (TCODE_TABLE | 0x0022) /* hatch pattern table */
 
#define TCODE_HIDE_TRACE   (TCODE_INTERFACE | 0x000E)
 
#define TCODE_HISTORYRECORD_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x007B)
 
#define TCODE_HISTORYRECORD_TABLE   (TCODE_TABLE | 0x0026) /* history records */
 
#define TCODE_INSTANCE_DEFINITION_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0076)
 
#define TCODE_INSTANCE_DEFINITION_TABLE   (TCODE_TABLE | 0x0021) /* instance definition table */
 
#define TCODE_INTERFACE   0x02000000
 
#define TCODE_LAYER   (TCODE_DISPLAY | 0x0010)
 
#define TCODE_LAYER_OBSELETE_1   (TCODE_SHORT | TCODE_DISPLAY | 0x0013)
 
#define TCODE_LAYER_OBSELETE_2   (TCODE_SHORT | TCODE_DISPLAY | 0x0014)
 
#define TCODE_LAYER_OBSELETE_3   (TCODE_SHORT | TCODE_DISPLAY | 0x0015)
 
#define TCODE_LAYER_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0050) /* layer table record derived from ON_Layer */
 
#define TCODE_LAYER_TABLE   (TCODE_TABLE | 0x0011) /* layers */
 
#define TCODE_LAYERINDEX   (TCODE_SHORT | TCODE_DISPLAY | 0x0034)
 
#define TCODE_LAYERLOCKED   (TCODE_SHORT | TCODE_DISPLAY | 0x0018)
 
#define TCODE_LAYERMATERIALINDEX   (TCODE_SHORT | TCODE_DISPLAY | 0x0035)
 
#define TCODE_LAYERNAME   (TCODE_DISPLAY | 0x0011)
 
#define TCODE_LAYERON   (TCODE_SHORT | TCODE_DISPLAY | 0x0016)
 
#define TCODE_LAYERPICKABLE   (TCODE_SHORT | TCODE_DISPLAY | 0x0030)
 
#define TCODE_LAYERREF   (TCODE_SHORT | TCODE_TABLEREC | 0x0001)
 
#define TCODE_LAYERRENDERABLE   (TCODE_SHORT | TCODE_DISPLAY | 0x0032)
 
#define TCODE_LAYERSNAPABLE   (TCODE_SHORT | TCODE_DISPLAY | 0x0031)
 
#define TCODE_LAYERSTATE   (TCODE_SHORT | TCODE_DISPLAY | 0x0033)
 
#define TCODE_LAYERTABLE   (TCODE_SHORT | TCODE_TABLE | 0x0001) /* obsolete - do not use */
 
#define TCODE_LAYERTHAWED   (TCODE_SHORT | TCODE_DISPLAY | 0x0017)
 
#define TCODE_LAYERVISIBLE   (TCODE_SHORT | TCODE_DISPLAY | 0x0012)
 
#define TCODE_LEGACY_ASM   (TCODE_LEGACY_GEOMETRY | 0x0001)
 
#define TCODE_LEGACY_ASMSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_ASM)
 
#define TCODE_LEGACY_BND   (TCODE_LEGACY_GEOMETRY | 0x0005)
 
#define TCODE_LEGACY_BNDSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_BND)
 
#define TCODE_LEGACY_CRV   (TCODE_LEGACY_GEOMETRY | 0x0008)
 
#define TCODE_LEGACY_CRVSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_CRV)
 
#define TCODE_LEGACY_FAC   (TCODE_LEGACY_GEOMETRY | 0x0004)
 
#define TCODE_LEGACY_FACSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_FAC)
 
#define TCODE_LEGACY_GEOMETRY   0x00010000
 
#define TCODE_LEGACY_PNT   (TCODE_LEGACY_GEOMETRY | 0x000A)
 
#define TCODE_LEGACY_PNTSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_PNT)
 
#define TCODE_LEGACY_PRT   (TCODE_LEGACY_GEOMETRY | 0x0002)
 
#define TCODE_LEGACY_PRTSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_PRT)
 
#define TCODE_LEGACY_SHL   (TCODE_LEGACY_GEOMETRY | 0x0003)
 
#define TCODE_LEGACY_SHLSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_SHL)
 
#define TCODE_LEGACY_SPL   (TCODE_LEGACY_GEOMETRY | 0x0009)
 
#define TCODE_LEGACY_SPLSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_SPL)
 
#define TCODE_LEGACY_SRF   (TCODE_LEGACY_GEOMETRY | 0x0007)
 
#define TCODE_LEGACY_SRFSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_SRF)
 
#define TCODE_LEGACY_TOL_ANGLE   (TCODE_TOLERANCE | 0x0002)
 
#define TCODE_LEGACY_TOL_FIT   (TCODE_TOLERANCE | 0x0001)
 
#define TCODE_LEGACY_TRM   (TCODE_LEGACY_GEOMETRY | 0x0006)
 
#define TCODE_LEGACY_TRMSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_TRM)
 
#define TCODE_LIGHT_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0060) /* light table record derived from ON_Light */
 
#define TCODE_LIGHT_RECORD_ATTRIBUTES   (TCODE_INTERFACE | TCODE_CRC | 0x0061) /* ON_3dmObjectAttributes chunk */
 
#define TCODE_LIGHT_RECORD_ATTRIBUTES_USERDATA   (TCODE_INTERFACE | 0x0062) /* ON_3dmObjectAttributes userdata chunk */
 
#define TCODE_LIGHT_RECORD_END   (TCODE_INTERFACE | TCODE_SHORT | 0x006F)
 
#define TCODE_LIGHT_TABLE   (TCODE_TABLE | 0x0012) /* rendering lights */
 
#define TCODE_LINEAR_DIMENSION   (TCODE_ANNOTATION | 0x0006)
 
#define TCODE_LINETYPE_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0078)
 
#define TCODE_LINETYPE_TABLE   (TCODE_TABLE | 0x0023) /* linetype table */
 
#define TCODE_MATERIAL_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0040) /* material table record derived from ON_Material */
 
#define TCODE_MATERIAL_TABLE   (TCODE_TABLE | 0x0010) /* rendering materials */
 
#define TCODE_MAXIMIZED_VIEWPORT   (TCODE_SHORT | TCODE_INTERFACE | 0x0011)
 
#define TCODE_MESH_OBJECT   (TCODE_GEOMETRY | 0x0015)
 
#define TCODE_MODEL_ATTRIBUTES_CHUNK   (TCODE_USER | TCODE_CRC | 0x0002 )
 
#define TCODE_NAME   (TCODE_INTERFACE | 0x0001)
 
#define TCODE_NAMED_CPLANE   (TCODE_INTERFACE | 0x0004)
 
#define TCODE_NAMED_VIEW   (TCODE_INTERFACE | 0x0005)
 
#define TCODE_NEAR_CLIP_PLANE   (TCODE_INTERFACE | 0x000D)
 
#define TCODE_NOTES   (TCODE_INTERFACE | 0x000F)
 
#define TCODE_OBJECT_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0070)
 
#define TCODE_OBJECT_RECORD_ATTRIBUTES   (TCODE_INTERFACE | TCODE_CRC | 0x0072) /* ON_3dmObjectAttributes chunk */
 
#define TCODE_OBJECT_RECORD_ATTRIBUTES_USERDATA   (TCODE_INTERFACE | 0x0073) /* ON_3dmObjectAttributes userdata chunk */
 
#define TCODE_OBJECT_RECORD_END   (TCODE_INTERFACE | TCODE_SHORT | 0x007F)
 
#define TCODE_OBJECT_RECORD_HISTORY   (TCODE_INTERFACE | TCODE_CRC | 0x0074) /* construction history */
 
#define TCODE_OBJECT_RECORD_HISTORY_DATA   (TCODE_INTERFACE | TCODE_CRC | 0x0076) /* construction history data */
 
#define TCODE_OBJECT_RECORD_HISTORY_HEADER   (TCODE_INTERFACE | TCODE_CRC | 0x0075) /* construction history header*/
 
#define TCODE_OBJECT_RECORD_TYPE   (TCODE_INTERFACE | TCODE_SHORT | 0x0071) /* ON::object_type value */
 
#define TCODE_OBJECT_TABLE   (TCODE_TABLE | 0x0013) /* geometry and annotation */
 
#define TCODE_OBSOLETE_LAYERSET_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0079)
 
#define TCODE_OBSOLETE_LAYERSET_TABLE   (TCODE_TABLE | 0x0024) /* obsolete layer set table */
 
#define TCODE_OLD_FULLMESH   (TCODE_GEOMETRY | 0x0014)
 
#define TCODE_OLD_MESH_UV   (TCODE_GEOMETRY | 0x0013)
 
#define TCODE_OLD_MESH_VERTEX_NORMALS   (TCODE_GEOMETRY | 0x0012)
 
#define TCODE_OLD_RH_TRIMESH   (TCODE_GEOMETRY | 0x0011)
 
#define TCODE_OPENNURBS_BUFFER   (TCODE_OPENNURBS_OBJECT | TCODE_CRC | 0x0100) /* chunk stores ON_Buffer classes */
 
#define TCODE_OPENNURBS_CLASS   (TCODE_OPENNURBS_OBJECT | 0x7FFA)
 
#define TCODE_OPENNURBS_CLASS_DATA   (TCODE_OPENNURBS_OBJECT | TCODE_CRC | 0x7FFC)
 
#define TCODE_OPENNURBS_CLASS_END   (TCODE_OPENNURBS_OBJECT | TCODE_SHORT | 0x7FFF)
 
#define TCODE_OPENNURBS_CLASS_USERDATA   (TCODE_OPENNURBS_OBJECT | 0x7FFD)
 
#define TCODE_OPENNURBS_CLASS_USERDATA_HEADER   (TCODE_OPENNURBS_OBJECT | TCODE_CRC | 0x7FF9)
 
#define TCODE_OPENNURBS_CLASS_UUID   (TCODE_OPENNURBS_OBJECT | TCODE_CRC | 0x7FFB)
 
#define TCODE_OPENNURBS_OBJECT   0x00020000
 
#define TCODE_PROPERTIES_APPLICATION   (TCODE_TABLEREC | TCODE_CRC | 0x0024)
 
#define TCODE_PROPERTIES_AS_FILE_NAME   (TCODE_TABLEREC | TCODE_CRC | 0x0027 )
 
#define TCODE_PROPERTIES_COMPRESSED_PREVIEWIMAGE   (TCODE_TABLEREC | TCODE_CRC | 0x0025)
 
#define TCODE_PROPERTIES_NOTES   (TCODE_TABLEREC | TCODE_CRC | 0x0022)
 
#define TCODE_PROPERTIES_OPENNURBS_VERSION   (TCODE_TABLEREC | TCODE_SHORT | 0x0026)
 
#define TCODE_PROPERTIES_PREVIEWIMAGE   (TCODE_TABLEREC | TCODE_CRC | 0x0023)
 
#define TCODE_PROPERTIES_REVISIONHISTORY   (TCODE_TABLEREC | TCODE_CRC | 0x0021)
 
#define TCODE_PROPERTIES_TABLE
 
#define TCODE_RADIAL_DIMENSION   (TCODE_ANNOTATION | 0x0008)
 
#define TCODE_RENDER   0x00800000
 
#define TCODE_RENDER_MATERIAL_ID   (TCODE_DISPLAY | 0x0007) /* id for render material */
 
#define TCODE_RENDERMESHPARAMS   (TCODE_DISPLAY | 0x0020) /* block of parameters for render meshes */
 
#define TCODE_RGB   (TCODE_SHORT | TCODE_DISPLAY | 0x0001)
 
#define TCODE_RGBDISPLAY   (TCODE_SHORT | TCODE_DISPLAY | 0x0006) /* will be used for color by object */
 
#define TCODE_RH_POINT   (TCODE_GEOMETRY | 0x0001)
 
#define TCODE_RH_SPOTLIGHT   (TCODE_RENDER | 0x0001)
 
#define TCODE_RHINOIO_OBJECT_BREP   (TCODE_OPENNURBS_OBJECT | 0x000B) /* old CRhinoBrep */
 
#define TCODE_RHINOIO_OBJECT_DATA   (TCODE_OPENNURBS_OBJECT | 0xFFFE) /* obsolete - don't confuse with TCODE_OPENNURBS_OBJECT_DATA */
 
#define TCODE_RHINOIO_OBJECT_END   (TCODE_OPENNURBS_OBJECT | 0xFFFF) /* obsolete - don't confuse with TCODE_OPENNURBS_OBJECT_END */
 
#define TCODE_RHINOIO_OBJECT_NURBS_CURVE   (TCODE_OPENNURBS_OBJECT | 0x0008) /* old CRhinoNurbsCurve */
 
#define TCODE_RHINOIO_OBJECT_NURBS_SURFACE   (TCODE_OPENNURBS_OBJECT | 0x0009) /* old CRhinoNurbsSurface */
 
#define TCODE_SETTINGS__NEVER__USE__THIS   (TCODE_TABLEREC | TCODE_CRC | 0x003E)
 
#define TCODE_SETTINGS_ANALYSISMESH   (TCODE_TABLEREC | TCODE_CRC | 0x0033)
 
#define TCODE_SETTINGS_ANNOTATION   (TCODE_TABLEREC | TCODE_CRC | 0x0034)
 
#define TCODE_SETTINGS_ATTRIBUTES   (TCODE_TABLEREC | TCODE_CRC | 0x0134)
 
#define TCODE_SETTINGS_CURRENT_COLOR   (TCODE_TABLEREC | TCODE_CRC | 0x003A)
 
#define TCODE_SETTINGS_CURRENT_DIMSTYLE_INDEX   (TCODE_TABLEREC | TCODE_SHORT | 0x0133)
 
#define TCODE_SETTINGS_CURRENT_FONT_INDEX   (TCODE_TABLEREC | TCODE_SHORT | 0x0132)
 
#define TCODE_SETTINGS_CURRENT_LAYER_INDEX   (TCODE_TABLEREC | TCODE_SHORT | 0x0038)
 
#define TCODE_SETTINGS_CURRENT_MATERIAL_INDEX   (TCODE_TABLEREC | TCODE_CRC | 0x0039)
 
#define TCODE_SETTINGS_CURRENT_WIRE_DENSITY   (TCODE_TABLEREC | TCODE_SHORT | 0x003C)
 
#define TCODE_SETTINGS_GRID_DEFAULTS   (TCODE_TABLEREC | TCODE_CRC | 0x003F)
 
#define TCODE_SETTINGS_MODEL_URL   (TCODE_TABLEREC | TCODE_CRC | 0x0131)
 
#define TCODE_SETTINGS_NAMED_CPLANE_LIST   (TCODE_TABLEREC | TCODE_CRC | 0x0035)
 
#define TCODE_SETTINGS_NAMED_VIEW_LIST   (TCODE_TABLEREC | TCODE_CRC | 0x0036)
 
#define TCODE_SETTINGS_PLUGINLIST   (TCODE_TABLEREC | TCODE_CRC | 0x0135)
 
#define TCODE_SETTINGS_RENDER   (TCODE_TABLEREC | TCODE_CRC | 0x003D)
 
#define TCODE_SETTINGS_RENDER_USERDATA   (TCODE_TABLEREC | TCODE_CRC | 0x0136)
 
#define TCODE_SETTINGS_RENDERMESH   (TCODE_TABLEREC | TCODE_CRC | 0x0032)
 
#define TCODE_SETTINGS_TABLE
 
#define TCODE_SETTINGS_UNITSANDTOLS   (TCODE_TABLEREC | TCODE_CRC | 0x0031)
 
#define TCODE_SETTINGS_VIEW_LIST   (TCODE_TABLEREC | TCODE_CRC | 0x0037)
 
#define TCODE_SHORT   0x80000000
 
#define TCODE_SHOWGRID   (TCODE_SHORT | TCODE_INTERFACE | 0x0007)
 
#define TCODE_SHOWGRIDAXES   (TCODE_SHORT | TCODE_INTERFACE | 0x0008)
 
#define TCODE_SHOWWORLDAXES   (TCODE_SHORT | TCODE_INTERFACE | 0x0009)
 
#define TCODE_SNAPSIZE   (TCODE_INTERFACE | 0x000C)
 
#define TCODE_STUFF   0x0100
 
#define TCODE_SUMMARY   (TCODE_INTERFACE | 0x0013)
 
#define TCODE_TABLE   0x10000000
 
#define TCODE_TABLEREC   0x20000000
 
#define TCODE_TEXT_BLOCK   (TCODE_ANNOTATION | 0x0004)
 
#define TCODE_TEXTURE_MAPPING_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x007A)
 
#define TCODE_TEXTURE_MAPPING_TABLE   (TCODE_TABLE | 0x0025) /* texture mappings */
 
#define TCODE_TEXTUREMAP   (TCODE_DISPLAY | 0x0002)
 
#define TCODE_TOLERANCE   0x08000000
 
#define TCODE_TRANSPARENCY   (TCODE_SHORT | TCODE_DISPLAY | 0x0004)
 
#define TCODE_UNIT_AND_TOLERANCES   (TCODE_INTERFACE | 0x0010)
 
#define TCODE_USER   0x40000000
 
#define TCODE_USER_RECORD   (TCODE_TABLEREC | 0x0081)
 
#define TCODE_USER_TABLE   (TCODE_TABLE | 0x0017) /* user table */
 
#define TCODE_USER_TABLE_RECORD_HEADER   (TCODE_TABLEREC | TCODE_CRC | 0x0082)
 
#define TCODE_USER_TABLE_UUID   (TCODE_TABLEREC | TCODE_CRC | 0x0080)
 
#define TCODE_UTF8_STRING_CHUNK   (TCODE_USER | TCODE_CRC | 0x0001 )
 
#define TCODE_VIEW   (TCODE_INTERFACE | 0x0002)
 
#define TCODE_VIEW_ATTRIBUTES   (TCODE_TABLEREC | TCODE_CRC | 0x0C3B)
 
#define TCODE_VIEW_CPLANE   (TCODE_TABLEREC | TCODE_CRC | 0x013B)
 
#define TCODE_VIEW_NAME   (TCODE_TABLEREC | TCODE_CRC | 0x0A3B)
 
#define TCODE_VIEW_POSITION   (TCODE_TABLEREC | TCODE_CRC | 0x0B3B)
 
#define TCODE_VIEW_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x003B)
 
#define TCODE_VIEW_SHOWCONAXES   (TCODE_TABLEREC | TCODE_SHORT | 0x043B)
 
#define TCODE_VIEW_SHOWCONGRID   (TCODE_TABLEREC | TCODE_SHORT | 0x033B)
 
#define TCODE_VIEW_SHOWWORLDAXES   (TCODE_TABLEREC | TCODE_SHORT | 0x053B)
 
#define TCODE_VIEW_TARGET   (TCODE_TABLEREC | TCODE_CRC | 0x083B)
 
#define TCODE_VIEW_TRACEIMAGE   (TCODE_TABLEREC | TCODE_CRC | 0x063B)
 
#define TCODE_VIEW_V3_DISPLAYMODE   (TCODE_TABLEREC | TCODE_SHORT | 0x093B)
 
#define TCODE_VIEW_VIEWPORT   (TCODE_TABLEREC | TCODE_CRC | 0x023B)
 
#define TCODE_VIEW_VIEWPORT_USERDATA   (TCODE_TABLEREC | TCODE_CRC | 0x0D3B)
 
#define TCODE_VIEW_WALLPAPER   (TCODE_TABLEREC | TCODE_CRC | 0x073B)
 
#define TCODE_VIEW_WALLPAPER_V3   (TCODE_TABLEREC | TCODE_CRC | 0x074B)
 
#define TCODE_VIEWPORT   (TCODE_INTERFACE | 0x0006)
 
#define TCODE_VIEWPORT_POSITION   (TCODE_INTERFACE | 0x000A)
 
#define TCODE_VIEWPORT_TRACEINFO   (TCODE_INTERFACE | 0x000B)
 
#define TCODE_VIEWPORT_V1_DISPLAYMODE   (TCODE_SHORT | TCODE_INTERFACE | 0x0015)
 
#define TCODE_VIEWPORT_WALLPAPER   (TCODE_INTERFACE | 0x0012)
 
#define TCODE_XDATA   (TCODE_USER | 0x0001)
 
#define Z_PREFIX
 

Typedefs

typedef int(* CRASHTEST__FUNCTION__POINTER__) (int)
 
typedef ON_TextureMapping(* GET_TEXMAP_FROM_DOCUMENT) (const class CRhinoDoc &, const ON_MappingChannel *)
 
typedef int16_t ON__INT16
 
typedef int32_t ON__INT32
 
typedef int64_t ON__INT64
 
typedef int8_t ON__INT8
 
typedef uint16_t ON__UINT16
 
typedef uint32_t ON__UINT32
 
typedef uint64_t ON__UINT64
 
typedef uint8_t ON__UINT8
 
typedef void(* ON_Buffer_ErrorHandler) (class ON_Buffer *)
 
typedef ON__UINT_PTR ON_CRT_locale_t
 
typedef ON_ClassArray< ON_CurveRegionBoundaryON_CurveRegion
 
typedef ON_ClassArray< ON_CurveRegionBoundaryElementON_CurveRegionBoundary
 A list of curve subdomains that form a closed boundary with active space on the left. More...
 
typedef struct tagFontKey ON_FontKey
 
typedef int(* ON_FontPtrCompareFunc) (ON_Font const *const *lhs, ON_Font const *const *rhs)
 
typedef int(* ON_memory_error_handler) (int)
 
typedef class ON_NurbsSurface *(* ON_PLUS_FUNCTION_BendBrepFace) (const class ON_BrepFace *face0, const ON_SimpleArray< ON_BendFaceConstraint > *, double, double, class ON_NurbsSurface *, ON_TextLog *)
 
typedef bool(* ON_PLUS_FUNCTION_BezierCurve_GetLocalClosestPoint) (const class ON_BezierCurve *, ON_3dPoint, double, double *, const ON_Interval *)
 
typedef bool(* ON_PLUS_FUNCTION_BezierCurve_GetTightBoundingBox) (const class ON_BezierCurve *, ON_BoundingBox *, bool, const ON_Xform *)
 
typedef bool(* ON_PLUS_FUNCTION_BezierCurve_LocalIntersectCurve) (const class ON_BezierCurve *, const class ON_BezierCurve *, double *, const ON_Interval *, const ON_Interval *)
 
typedef bool(* ON_PLUS_FUNCTION_BezierCurve_LocalIntersectSurface) (const class ON_BezierCurve *, const class ON_BezierSurface *, double *, const ON_Interval *, const ON_Interval *, const ON_Interval *)
 
typedef bool(* ON_PLUS_FUNCTION_BezierSurface_GetClosestPoint) (const class ON_BezierSurface *, ON_3dPoint, double, double, double *, double *, const ON_Interval *, const ON_Interval *)
 
typedef bool(* ON_PLUS_FUNCTION_Brep_GetEdgeOrTrimParameter) (const ON_Brep &, int, double, double *, bool)
 
typedef bool(* ON_PLUS_FUNCTION_Brep_IsPointInsideHelper) (const ON_Brep &, ON_3dPoint, double, bool)
 
typedef int(* ON_PLUS_FUNCTION_Brep_MassProperties) (const ON_Brep &, void *, int, ON_3dPoint, ON_MassProperties &, bool, bool, bool, bool, double, double)
 
typedef ON_Brep *(* ON_PLUS_FUNCTION_Brep_MergeBrepsHelper) (const ON_Brep &, const ON_Brep &, double)
 
typedef int(* ON_PLUS_FUNCTION_Brep_Mesh) (const ON_Brep &, const ON_MeshParameters &, ON_SimpleArray< ON_Mesh * > &)
 
typedef bool(* ON_PLUS_FUNCTION_Brep_RegionTopologyHelper) (const ON_Brep &, ON_BrepRegionTopology &)
 
typedef bool(* ON_PLUS_FUNCTION_Brep_Silhouette) (const ON_SilhouetteParameters, const ON_Brep &, const ON_PlaneEquation *, size_t, ON_ClassArray< ON_SIL_EVENT > &, ON_ProgressReporter *, ON_Terminator *)
 
typedef bool(* ON_PLUS_FUNCTION_Brep_SplitFaces) (ON_Brep &, bool, int, const int *, const int *, const double *)
 
typedef bool(* ON_PLUS_FUNCTION_BrepCloseTrimGap) (class ON_Brep *, class ON_BrepTrim *, class ON_BrepTrim *)
 
typedef ON_Mesh *(* ON_PLUS_FUNCTION_BrepFace_Mesh) (const ON_BrepFace &, const ON_MeshParameters &, ON_Mesh *)
 
typedef bool(* ON_PLUS_FUNCTION_BrepFace_Silhouette) (const ON_SilhouetteParameters, const ON_BrepFace &, const ON_PlaneEquation *, size_t, ON_ClassArray< ON_SIL_EVENT > &, ON_ProgressReporter *, ON_Terminator *)
 
typedef bool(* ON_PLUS_FUNCTION_BrepFaceGetIsoIntervals) (const class ON_BrepFace *, int, double, ON_SimpleArray< ON_Interval > *, ON_SimpleArray< ON_Curve * > *, ON_SimpleArray< struct ON_BrepFaceIsoInterval > *)
 
typedef bool(* ON_PLUS_FUNCTION_Check2dPatternHasMapBackInfo) (const ON_Geometry *geom)
 
typedef ON_SquisherImpl *(* ON_PLUS_FUNCTION_CreateSquisherImpl) ()
 
typedef ON_NurbsCurve *(* ON_PLUS_FUNCTION_Curve_CreateCubicLoft) (int, int, int, const double *, double, int, ON::cubic_loft_end_condition, ON::cubic_loft_end_condition, ON_NurbsCurve *)
 
typedef int(* ON_PLUS_FUNCTION_Curve_MassProperties) (const ON_Curve &, void *, int, ON_3dPoint, ON_3dVector, ON_MassProperties &, bool, bool, bool, bool, double, double)
 
typedef class ON_PolylineCurve *(* ON_PLUS_FUNCTION_Curve_Mesh) (const ON_Curve *, const ON_MeshCurveParameters *, class ON_PolylineCurve *, bool, const ON_Interval *)
 
typedef const class ON_CurveTreeNode *(* ON_PLUS_FUNCTION_CurveTreeNode_GetClosestPoint) (const class ON_CurveTreeNode *, ON_3dPoint, double *, ON_3dPoint *, double, const ON_Interval *)
 
typedef int(* ON_PLUS_FUNCTION_CurveTreeNode_IntersectCurveTree) (const class ON_CurveTreeNode *, const class ON_CurveTreeNode *, ON_SimpleArray< ON_X_EVENT > &, double, double, const ON_Interval *, const ON_Interval *)
 
typedef int(* ON_PLUS_FUNCTION_CurveTreeNode_IntersectPlane) (const class ON_CurveTreeNode *, const class ON_PlaneEquation &, ON_SimpleArray< ON_X_EVENT > &, double, double, const ON_Interval *)
 
typedef int(* ON_PLUS_FUNCTION_CurveTreeNode_IntersectSelf) (const class ON_CurveTreeNode *, ON_SimpleArray< ON_X_EVENT > &, double, const ON_Interval *)
 
typedef int(* ON_PLUS_FUNCTION_CurveTreeNode_IntersectSurfaceTree) (const class ON_CurveTreeNode *, const class ON_SurfaceTreeNode *, ON_SimpleArray< ON_X_EVENT > &, double, double, const ON_Interval *, const ON_Interval *, const ON_Interval *)
 
typedef void(* ON_PLUS_FUNCTION_DumpSquishInfoText) (const ON_Geometry *geom, ON_TextLog &text_log, const wchar_t *objid_locale_str, const wchar_t *meshcount_locale_str)
 
typedef ON_Curve *(* ON_PLUS_FUNCTION_Extrusion_Pullback) (const ON_Extrusion &, const ON_Curve &, double, const ON_Interval *, ON_3dPoint, ON_3dPoint, ON_FitResult *)
 
typedef ON_Curve *(* ON_PLUS_FUNCTION_Extrusion_Pushup) (const ON_Extrusion &, const ON_Curve &, double, const ON_Interval *, ON_FitResult *)
 
typedef int(* ON_PLUS_FUNCTION_GetMatrixSVD) (int, int, int, double const *const *, double **&, double *&, double **&)
 
typedef ON_HiddenLineDrawingImplBase *(* ON_PLUS_FUNCTION_GetNew_HiddenLineDrawing) (ON_SimpleArray< class ON_HLDFullCurve * > &, ON_SimpleArray< class ON_HLDCurve * > &, ON_SimpleArray< const class ON_HLD_Object * > &)
 
typedef double(* ON_PLUS_FUNCTION_Integrate1) (double(*f) (ON__UINT_PTR context, int limit_direction, double t), ON__UINT_PTR f_context, const ON_SimpleArray< double > &limits, double relative_tolerance, double absolute_tolerance, double *error_bound)
 
typedef double(* ON_PLUS_FUNCTION_Integrate2) (double(*f) (ON__UINT_PTR context, int limit_direction, double s, double t), ON__UINT_PTR f_context, const ON_SimpleArray< double > &limits1, const ON_SimpleArray< double > &limits2, double relative_tolerance, double absolute_tolerance, double *error_bound)
 
typedef int(* ON_PLUS_FUNCTION_IsPointListPlanar) (bool, int, int, const double *, const double *, const double *, double, ON_PlaneEquation *)
 
typedef class ON_PolylineCurve *(* ON_PLUS_FUNCTION_MapBackCurve) (const ON_Mesh &mesh0, double mesh0_edge_length, const ON_3fPoint *V1, const ON_Curve &curve0, ON_PolylineCurve *curve1)
 
typedef bool(* ON_PLUS_FUNCTION_MapBackPoint) (const ON_Mesh &mesh0, const ON_3fPoint *V1, ON_3dPoint P0, ON_MESH_POINT &P1)
 
typedef int(* ON_PLUS_FUNCTION_Mesh2dPolygon) (int, int, const double *, int, int *)
 
typedef int(* ON_PLUS_FUNCTION_Mesh2dRegion) (unsigned int, unsigned int, const double *, unsigned int, unsigned int, const unsigned int *, unsigned int, const unsigned char *, bool, bool, bool, ON_SimpleArray< ON_3dex > &, ON_SimpleArray< ON_2dPoint > *)
 
typedef bool(* ON_PLUS_FUNCTION_Mesh_IsPointInside) (const ON_Mesh &, ON_3dPoint, double, bool)
 
typedef int(* ON_PLUS_FUNCTION_Mesh_MassProperties) (const ON_Mesh &, void *, int, ON_3dPoint, ON_MassProperties &, bool, bool, bool, bool, double, double)
 
typedef bool(* ON_PLUS_FUNCTION_Mesh_Silhouette) (const ON_SilhouetteParameters, const ON_Mesh &, const ON_PlaneEquation *, size_t, ON_ClassArray< ON_SIL_EVENT > &, ON_ProgressReporter *, ON_Terminator *)
 
typedef int(* ON_PLUS_FUNCTION_Mesh_SolidOrientation) (const ON_Mesh &)
 
typedef void(* ON_PLUS_FUNCTION_MeshClashSearch) (int, const class ON_Mesh *const *, int, const class ON_Mesh *const *, const class ON_Mesh *, const class ON_RTree *, const class ON_Mesh *, const class ON_RTree *, double, bool, int, ON_SimpleArray< class ON_ClashEvent > &)
 
typedef double(* ON_PLUS_FUNCTION_Minimize) (unsigned n, double(*f) (ON__UINT_PTR context, const double *t, double *grad), ON__UINT_PTR context, const ON_Interval search_domain[], const double t0[], double terminate_value, double relative_tolerance, double zero_tolerance, unsigned maximum_iterations, double t[], bool *bConverged)
 
typedef ON_Mesh *(* ON_PLUS_FUNCTION_NurbsSurface_Mesh) (const ON_NurbsSurface &, const ON_MeshParameters &, ON_Mesh *)
 
typedef bool(* ON_PLUS_FUNCTION_OldMeshBooleansPickTwoSides) (class ON_Mesh *, int, class ON_SimpleArray< int > *, class ON_Mesh *, bool)
 
typedef bool(* ON_PLUS_FUNCTION_ON_NurbsCurve_RemoveKnots) (ON_NurbsCurve *, int, int, double)
 
typedef bool(* ON_PLUS_FUNCTION_ON_NurbsGrevilleInterpolate) (int, int, int, int, double *, const double *, int, int, int, const double *)
 
typedef bool(* ON_PLUS_FUNCTION_ON_NurbsSurface_RemoveKnots) (ON_NurbsSurface *, int, int, int)
 
typedef unsigned int(* ON_PLUS_FUNCTION_Outline_GetOutlineMesh) (const class ON_Outline &, double, double, ON_SimpleArray< ON_2dPoint > &, ON_SimpleArray< ON_3udex > &, double *, double *, class ONX_ErrorCounter *)
 
typedef ON_Mesh *(* ON_PLUS_FUNCTION_PlaneSurface_Mesh) (const ON_PlaneSurface &, const ON_MeshParameters &, ON_Mesh *)
 
typedef ON_Mesh *(* ON_PLUS_FUNCTION_RevSurface_Mesh) (const ON_RevSurface &, const ON_MeshParameters &, ON_Mesh *)
 
typedef int(* ON_PLUS_FUNCTION_SimpleCreate2dMesh) (const ON_SimpleArray< ON_2dPoint > &points, const ON_SimpleArray< ON_2udex > &edges, const ON_SimpleArray< unsigned char > &dirs, ON_SimpleArray< ON_3dex > &triangulation, ON_SimpleArray< ON_2dPoint > &new_pts, ON_TextLog *text_log)
 
typedef bool(* ON_PLUS_FUNCTION_SquishBack2dMarks) (const ON_Geometry *squished_geometry, const ON_SimpleArray< const ON_Geometry * > *marks, ON_SimpleArray< ON_Geometry * > *squishedback_marks)
 
typedef class ON_Mesh *(* ON_PLUS_FUNCTION_SquishMesh) (const class ON_Mesh *, const class ON_SquishParameters *, const ON_SimpleArray< const ON_Geometry * > *, ON_SimpleArray< ON_Geometry * > *, class ON_Mesh *)
 
typedef class ON_Brep *(* ON_PLUS_FUNCTION_SquishSurface) (const class ON_Surface *, const class ON_SquishParameters *, const ON_SimpleArray< const ON_Geometry * > *, ON_SimpleArray< ON_Geometry * > *, class ON_Brep *)
 
typedef ON_Mesh *(* ON_PLUS_FUNCTION_SumSurface_Mesh) (const ON_SumSurface &, const ON_MeshParameters &, ON_Mesh *)
 
typedef ON_NurbsSurface *(* ON_PLUS_FUNCTION_Surface_CreateCubicLoft) (int, const ON_Curve *const *, double, int, ON::cubic_loft_end_condition, ON::cubic_loft_end_condition, ON_NurbsSurface *)
 
typedef ON_NurbsSurface *(* ON_PLUS_FUNCTION_Surface_CreateLinearLoft) (int, const ON_Curve *const *, double, int, ON_NurbsSurface *)
 
typedef int(* ON_PLUS_FUNCTION_Surface_MassProperties) (const ON_Surface &, void *, int, ON_3dPoint, ON_MassProperties &, bool, bool, bool, bool, double, double)
 
typedef bool(* ON_PLUS_FUNCTION_Surface_Silhouette) (const ON_SilhouetteParameters, const ON_Surface &, const ON_Interval *, const ON_Interval *, const ON_PlaneEquation *, size_t, ON_ClassArray< ON_SIL_EVENT > &, ON_ProgressReporter *, ON_Terminator *)
 
typedef const class ON_SurfaceTreeNode *(* ON_PLUS_FUNCTION_SurfaceTreeNode_GetClosestPoint) (const class ON_SurfaceTreeNode *, ON_3dPoint, double *, double *, ON_3dPoint *, double, const ON_Interval *, const ON_Interval *)
 
typedef int(* ON_PLUS_FUNCTION_SurfaceTreeNode_IntersectSurfaceTree) (const class ON_SurfaceTreeNode *, const class ON_SurfaceTreeNode *, ON_ClassArray< ON_SSX_EVENT > &, double, double, double, const ON_Interval *, const ON_Interval *, const ON_Interval *, const ON_Interval *)
 
typedef bool(* ON_PLUS_FUNCTION_TransformBrepComponents) (ON_Brep *, int, const ON_COMPONENT_INDEX *, ON_Xform, double, double, bool)
 
typedef void(* ON_SSLMTC_PROC) (int msg_type, const ON_wString *pClass, const ON_wString *pEventDesc, const ON_wString *pMessage)
 
typedef bool(* ON_StreamCallbackFunction) (void *context, ON__UINT32 size, const void *buffer)
 
typedef struct ON_UUID_struct ON_UUID
 ON_UUID is a 16 byte universally unique identifier. More...
 
typedef int(* ON_Vtable_func) (void)
 
typedef ON_wString ON_XMeshEventComponentString[2]
 
typedef bool(* ON_XMLRecurseChildrenCallback) (class ON_XMLNode *, void *)
 
typedef bool(* TEXMAP_BREP_FACE_CLOSEST_POINT) (const ON_BrepFace *, const ON_3dPoint *, ON_3dPoint &)
 
typedef int(* TEXMAP_INTERSECT_LINE_SURFACE) (const ON_Line *, const ON_BrepFace *, ON_SimpleArray< ON_X_EVENT > &)
 

Enumerations

enum  eXMeshOverlapType : unsigned int {
  eXMeshOverlapType::unknown = 0, eXMeshOverlapType::not_overlap = 1, eXMeshOverlapType::same_normal = 2, eXMeshOverlapType::opposite_normal = 3,
  eXMeshOverlapType::overlap = 4
}
 
enum  eXMeshPoolStatus : unsigned int { eXMeshPoolStatus::unknown = 0, eXMeshPoolStatus::active = 1, eXMeshPoolStatus::returned = 2 }
 
enum  ON_3dmArchiveTableType : unsigned int {
  ON_3dmArchiveTableType::Unset = 0, ON_3dmArchiveTableType::start_section = 0x00000001U, ON_3dmArchiveTableType::properties_table = 0x00000002U, ON_3dmArchiveTableType::settings_table = 0x00000004U,
  ON_3dmArchiveTableType::bitmap_table = 0x00000008U, ON_3dmArchiveTableType::texture_mapping_table = 0x00000010U, ON_3dmArchiveTableType::material_table = 0x00000020U, ON_3dmArchiveTableType::linetype_table = 0x00000040U,
  ON_3dmArchiveTableType::layer_table = 0x00000080U, ON_3dmArchiveTableType::group_table = 0x00000100U, ON_3dmArchiveTableType::text_style_table = 0x00000200U, ON_3dmArchiveTableType::leader_style_table = 0x00000400U,
  ON_3dmArchiveTableType::dimension_style_table = 0x00000800U, ON_3dmArchiveTableType::light_table = 0x00001000U, ON_3dmArchiveTableType::hatchpattern_table = 0x00002000U, ON_3dmArchiveTableType::instance_definition_table = 0x00004000U,
  ON_3dmArchiveTableType::object_table = 0x00008000U, ON_3dmArchiveTableType::historyrecord_table = 0x00010000U, ON_3dmArchiveTableType::user_table = 0x00020000U, ON_3dmArchiveTableType::end_mark = 0x40000000U
}
 
enum  ON_ChainDirection : unsigned char { ON_ChainDirection::Unset = 0, ON_ChainDirection::Previous = 1, ON_ChainDirection::Next = 2, ON_ChainDirection::Both = 3 }
 
enum  ON_ComponentState : unsigned char {
  ON_ComponentState::Unset = 0, ON_ComponentState::Clear = 1, ON_ComponentState::NotSelected = 2, ON_ComponentState::Selected = 3,
  ON_ComponentState::SelectedPersistent = 4, ON_ComponentState::NotHighlighted = 5, ON_ComponentState::Highlighted = 6, ON_ComponentState::NotHidden = 7,
  ON_ComponentState::Hidden = 8, ON_ComponentState::NotLocked = 9, ON_ComponentState::Locked = 10, ON_ComponentState::NotDamaged = 11,
  ON_ComponentState::Damaged = 12, ON_ComponentState::NotDeleted = 13, ON_ComponentState::Deleted = 14, ON_ComponentState::RuntimeMarkClear = 15,
  ON_ComponentState::RuntimeMarkSet = 16
}
 
enum  ON_DateFormat : int {
  ON_DateFormat::Unset = 0, ON_DateFormat::Omit = 1, ON_DateFormat::YearMonthDay = 2, ON_DateFormat::YearDayMonth = 3,
  ON_DateFormat::MonthDayYear = 4, ON_DateFormat::DayMonthYear = 5, ON_DateFormat::YearDayOfYear = 6
}
 
enum  ON_FitResult : unsigned int { ON_FitResult::unknown =0, ON_FitResult::in_tolerance =1, ON_FitResult::not_in_tolerance =2 }
 
enum  ON_FocalBlurModes : unsigned int { ON_FocalBlurModes::None, ON_FocalBlurModes::Automatic, ON_FocalBlurModes::Manual }
 
enum  ON_GradientType : int {
  ON_GradientType::None = 0, ON_GradientType::Linear = 1, ON_GradientType::Radial = 2, ON_GradientType::LinearDisabled = 3,
  ON_GradientType::RadialDisabled = 4
}
 
enum  ON_LogMessageType : int {
  ON_LogMessageType::unknown = 0, ON_LogMessageType::information = 1, ON_LogMessageType::warning = 2, ON_LogMessageType::error = 3,
  ON_LogMessageType::assert = 4
}
 #include "opennurbs_plus_validate.h" More...
 
enum  ON_PickType : unsigned char { ON_PickType::Unset = 0, ON_PickType::PointPick = 1, ON_PickType::WindowPick = 2, ON_PickType::CrossingPick = 3 }
 ON_PickType specifies what type of pick is occurring. More...
 
enum  ON_SDFQueryResult : int { ON_SDFQueryResult::Unknown = 0, ON_SDFQueryResult::Disjoint = 1, ON_SDFQueryResult::Intersects = 2 }
 
enum  ON_SquishDeformation : int {
  ON_SquishDeformation::Free = 0, ON_SquishDeformation::StretchMostly = 1, ON_SquishDeformation::StretchOnly = 2, ON_SquishDeformation::CompressMostly = 3,
  ON_SquishDeformation::CompressOnly = 4, ON_SquishDeformation::Custom =5
}
 The types of deformation allowed in the squish process More...
 
enum  ON_SquishFlatteningAlgorithm : unsigned int { ON_SquishFlatteningAlgorithm::Geometric = 0, ON_SquishFlatteningAlgorithm::PhysicalStress = 1 }
 Represents the type of flattening to use More...
 
enum  ON_StringMapOrdinalType : int { ON_StringMapOrdinalType::Identity = 0, ON_StringMapOrdinalType::UpperOrdinal = 1, ON_StringMapOrdinalType::LowerOrdinal = 2, ON_StringMapOrdinalType::MinimumOrdinal = 3 }
 
enum  ON_StringMapType : int { ON_StringMapType::Identity = 0, ON_StringMapType::UpperCase = 1, ON_StringMapType::LowerCase = 2 }
 
enum  ON_SubDComponentLocation : unsigned char { ON_SubDComponentLocation::Unset = 0, ON_SubDComponentLocation::ControlNet = 1, ON_SubDComponentLocation::Surface = 2 }
 The ON_SubDComponentLocation enum is used when an ON_SubD component is referenced and it is important to distinguish between the component's location in the SubD control net and its location in the SubD limit surface. More...
 
enum  ON_SubDEdgeTag : unsigned char { ON_SubDEdgeTag::Unset = 0, ON_SubDEdgeTag::Smooth = 1, ON_SubDEdgeTag::Crease = 2, ON_SubDEdgeTag::SmoothX = 4 }
 ON_SubDEdgeTag identifies the type of subdivision edge. Different tags use different subdivision algorithms to calculate the subdivision point. More...
 
enum  ON_SubDEdgeType : unsigned char {
  ON_SubDEdgeType::Unset = 0, ON_SubDEdgeType::Wire = 1, ON_SubDEdgeType::Boundary = 2, ON_SubDEdgeType::InteriorSmooth = 4,
  ON_SubDEdgeType::InteriorSharp = 8, ON_SubDEdgeType::InteriorCrease = 16, ON_SubDEdgeType::Nonmanifold = 32, ON_SubDEdgeType::Invalid = 64,
  ON_SubDEdgeType::InteriorMask = 28, ON_SubDEdgeType::ValidTypesMask = 63
}
 ON_SubDEdgeType describes a subdivision edge. ON_SubDEdgeType is typically used when generating text descriptions or filtering edges during selection processes. Do not confuse ON_SubDEdgeType and ON_SubDEdgeTag. The unique types are single bits and suitable for use in bitwise logic. More...
 
enum  ON_SubDEndCapStyle : unsigned char {
  ON_SubDEndCapStyle::Unset = 0, ON_SubDEndCapStyle::None = 1, ON_SubDEndCapStyle::Triangles = 2, ON_SubDEndCapStyle::Quads = 3,
  ON_SubDEndCapStyle::Ngon = 4
}
 ON_SubDEndCapStyle enumerates the type of end caps functions like ON_SubD::CreateCylinder will create. Use ON_SubDEndCapStyleFromUnsigned(integer value) to convert integer values to an ON_SubDEndCapStyle. Use ON_SubDEndCapStyleToString(end_cap_style) to convert ON_SubDEndCapStyle values to string descriptions. More...
 
enum  ON_SubDGetControlNetMeshPriority : unsigned char { ON_SubDGetControlNetMeshPriority::Geometry = 0, ON_SubDGetControlNetMeshPriority::TextureCoordinates = 1 }
 ON_SubDGetControlNetMeshPriority specifies what type of ON_SubD information is most important to transfer to the ON_Mesh. More...
 
enum  ON_SubDHashType : unsigned char { ON_SubDHashType::Unset = 0, ON_SubDHashType::Topology = 3, ON_SubDHashType::TopologyAndEdgeCreases = 1, ON_SubDHashType::Geometry = 2 }
 ON_SubDHashType used used to specify what type of SubD information is hashed (topology or geometry). More...
 
enum  ON_SubDTextureCoordinateType : unsigned char {
  ON_SubDTextureCoordinateType::Unset = 0, ON_SubDTextureCoordinateType::Unpacked = 1, ON_SubDTextureCoordinateType::Packed = 2, ON_SubDTextureCoordinateType::Zero = 3,
  ON_SubDTextureCoordinateType::Nan = 4, ON_SubDTextureCoordinateType::FromFaceTexturePoints = 6, ON_SubDTextureCoordinateType::FromMapping = 7
}
 ON_SubDTextureCoordinateType identifies the way ON_SubDMeshFragment texture coordinates are set from an ON_SubDFace. More...
 
enum  ON_SubDVertexTag : unsigned char {
  ON_SubDVertexTag::Unset = 0, ON_SubDVertexTag::Smooth = 1, ON_SubDVertexTag::Crease = 2, ON_SubDVertexTag::Corner = 3,
  ON_SubDVertexTag::Dart = 4
}
 ON_SubDVertexTag identifies the type of subdivision vertex. Different tags use different subdivision algorithms to determine where the subdivision point and limit point are located. There are topological constraints that restrict which tags can be assigned. More...
 
enum  ON_TimeFormat : int {
  ON_TimeFormat::Unset = 0, ON_TimeFormat::Omit = 1, ON_TimeFormat::HourMinute12 = 2, ON_TimeFormat::HourMinuteSecond12 = 3,
  ON_TimeFormat::HourMinute24 = 4, ON_TimeFormat::HourMinuteSecond24 = 5
}
 
enum  ON_UnicodeCodePoint {
  ON_NullCodePoint = 0x00, ON_Backspace = 0x08, ON_Tab = 0x09, ON_LineFeed = 0x0A,
  ON_VerticalTab = 0x0B, ON_FormFeed = 0x0C, ON_CarriageReturn = 0x0D, ON_Escape = 0x1B,
  ON_Space = 0x20, ON_Delete = 0x7F, ON_NoBreakSpace = 0x00A0, ON_OghamSpaceMark = 0x1680,
  ON_EnQuad = 0x2000, ON_EmQuad = 0x2001, ON_EnSpace = 0x2002, ON_EmSpace = 0x2003,
  ON_ThreePerEmSpace = 0x2004, ON_FourPerEmSpace = 0x2005, ON_SixPerEmSpace = 0x2006, ON_FigureSpace = 0x2007,
  ON_PunctuationSpace = 0x2008, ON_ThinSpace = 0x2009, ON_HairSpace = 0x200A, ON_ZeroWidthSpace = 0x200B,
  ON_MediumMathematicalSpace = 0x205F, ON_IdeographicSpace = 0x3000, ON_ZeroWidthNonJoiner = 0x200C, ON_ZeroWidthJoiner = 0x200D,
  ON_NarrowNoBreakSpace = 0x202F, ON_QuotationMark = 0x22, ON_NumberSign = 0x23, ON_PercentSign = 0x25,
  ON_Ampersand = 0x26, ON_Apostrophe = 0x27, ON_Comma = 0x2C, ON_HyphenMinus = 0x2D,
  ON_UnambiguousHyphen = 0x2010, ON_NoBreakHyphen = 0x2011, ON_SmallHyphen = 0xFE63, ON_UnambiguousMinus = 0x2212,
  ON_FigureDash = 0x2012, ON_EnDash = 0x2013, ON_EmDash = 0x2014, ON_Period = 0x2E,
  ON_Slash = 0x2F, ON_FractionSlash = 0x2044, ON_DivisionSlash = 0x2215, ON_MathimaticalSlash = 0x27CB,
  ON_Colon = 0x3A, ON_Semicolon = 0x3B, ON_LessThanSign = 0x3C, ON_GreaterThanSign = 0x3E,
  ON_Backslash = 0x5C, ON_Underscore = 0x5F, ON_Pipe = 0x7C, ON_Tilde = 0x7E,
  ON_NextLine = 0x0085, ON_RadiusSymbol = 0x0052, ON_DegreeSymbol = 0x00B0, ON_PlusMinusSymbol = 0x00B1,
  ON_Superscript2 = 0x00B2, ON_Superscript3 = 0x00B3, ON_DiameterSymbol = 0x00D8, ON_LineSeparator = 0x2028,
  ON_ParagraphSeparator = 0x2029, ON_GreekCapitalAlpha = 0x0391, ON_GreekAlpha = 0x03B1, ON_GreekCapitalSigma = 0x03A3,
  ON_GreekSigma = 0x03C3, ON_GreekCapitalOmega = 0x03A9, ON_GreekOmega = 0x03C9, ON_CyrillicCapitalYu = 0x042E,
  ON_PlaceOfInterestSign = 0x2318, ON_SimplifiedChineseTree = 0x6881, ON_TraditionalChineseTree = 0x6A39, ON_JapaneseRhinoceros = 0x7280,
  ON_JapaneseTree = 0x6728, ON_KoreanHan = 0xD55C, ON_KoreanJeong = 0xC815, ON_DollarSign = 0x0024,
  ON_CentSign = 0x00A2, ON_PoundSign = 0x00A3, ON_CurrencySign = 0x00A4, ON_YenSign = 0x00A5,
  ON_EuroSign = 0x20AC, ON_PesoSign = 0x20B1, ON_RubleSign = 0x20BD, ON_InfinitySymbol = 0x221E,
  ON_RecyclingSymbol = 0x2672, ON_BlackRecyclingSymbol = 0x267B, ON_WarningSign = 0x26A0, ON_CheckMark = 0x2713,
  ON_ReplacementCharacter = 0xFFFD, ON_ByteOrderMark = 0xFEFF, ON_Wastebasket = 0x1F5D1, ON_MaximumCodePoint = 0x10FFFF,
  ON_InvalidCodePoint = 0x110000
}
 Unicode code point values for that are hard to include in code or are useful for testing encoding and glyph rendering. Code points >= U+0080 require UTF-8 multiple byte encodings. Code points >= U+10000 require UTF-16 surrogate pair encodings. More...
 
enum  ON_UnicodeEncoding {
  ON_UTF_unset =0, ON_not_UTF, ON_UTF_8, ON_UTF_16,
  ON_UTF_16BE, ON_UTF_16LE, ON_UTF_32, ON_UTF_32BE,
  ON_UTF_32LE
}
 

Functions

 ON_ClassArray< T >::ON_ClassArray () ON_NOEXCEPT
 construction //////////////////////////////////////////////////////// More...
 
 ON_ClassArray< T >::ON_ClassArray (const ON_ClassArray< T > &)
 Copy constructor. More...
 
 ON_ClassArray< T >::ON_ClassArray (size_t)
 size_t parameter = initial capacity More...
 
 ON_ObjectArray< T >::ON_ObjectArray ()
 Class ON_ObjectArray<> More...
 
 ON_ObjectArray< T >::ON_ObjectArray (const ON_ObjectArray< T > &)
 
 ON_ObjectArray< T >::ON_ObjectArray (size_t)
 size_t parameter = initial capacity More...
 
 ON_SimpleArray< T >::ON_SimpleArray () ON_NOEXCEPT
 construction //////////////////////////////////////////////////////// More...
 
 ON_SimpleArray< T >::ON_SimpleArray (const ON_SimpleArray< T > &)
 Copy constructor. More...
 
 ON_SimpleArray< T >::ON_SimpleArray (size_t)
 size_t parameter = initial capacity More...
 
 ON_SimpleFixedSizePool< T >::ON_SimpleFixedSizePool ()
 construction //////////////////////////////////////////////////////// More...
 
 ON_SimpleFixedSizePoolIterator< T >::ON_SimpleFixedSizePoolIterator (const class ON_SimpleFixedSizePool< T > &fsp)
 
 ON_SimpleFixedSizePoolIterator< T >::ON_SimpleFixedSizePoolIterator (const class ON_SimpleFixedSizePoolIterator< T > &)
 
virtual ON_ClassArray< T >::~ON_ClassArray ()
 override for struct member deallocation, etc. More...
 
 ON_ObjectArray< T >::~ON_ObjectArray ()
 override for struct member deallocation, etc. More...
 
virtual ON_SimpleArray< T >::~ON_SimpleArray ()
 
 ON_SimpleFixedSizePool< T >::~ON_SimpleFixedSizePool ()
 
size_t ON_SimpleFixedSizePool< T >::ActiveElementCount () const
 
T * ON_SimpleFixedSizePool< T >::AllocateElement ()
 
void ON_SimpleArray< T >::Append (const T &)
 
void ON_ClassArray< T >::Append (const T &)
 
void ON_SimpleArray< T >::Append (int, const T *)
 Append copy of an array T[count]. More...
 
void ON_ClassArray< T >::Append (int, const T *)
 Append copy of an array T[count]. More...
 
T & ON_SimpleArray< T >::AppendNew ()
 array operations //////////////////////////////////////////////////// More...
 
T & ON_ClassArray< T >::AppendNew ()
 array operations //////////////////////////////////////////////////// More...
 
T * ON_SimpleArray< T >::Array ()
 The Array() function return the. More...
 
T * ON_ClassArray< T >::Array ()
 The Array() function return the. More...
 
T * ON_SimpleArray< T >::At (int)
 At(index) returns nullptr if index < 0 or index >= count. More...
 
T * ON_ClassArray< T >::At (int)
 At(index) returns nullptr if index < 0 or index >= count. More...
 
const T * ON_SimpleArray< T >::At (int) const
 
const T * ON_ClassArray< T >::At (int) const
 
T * ON_SimpleArray< T >::At (ON__INT64)
 
T * ON_ClassArray< T >::At (ON__INT64)
 
const T * ON_SimpleArray< T >::At (ON__INT64) const
 
const T * ON_ClassArray< T >::At (ON__INT64) const
 
T * ON_SimpleArray< T >::At (ON__UINT64)
 
T * ON_ClassArray< T >::At (ON__UINT64)
 
const T * ON_SimpleArray< T >::At (ON__UINT64) const
 
const T * ON_ClassArray< T >::At (ON__UINT64) const
 
T * ON_SimpleArray< T >::At (unsigned int)
 
T * ON_ClassArray< T >::At (unsigned int)
 
const T * ON_SimpleArray< T >::At (unsigned int) const
 
const T * ON_ClassArray< T >::At (unsigned int) const
 
int ON_SimpleArray< T >::BinarySearch (const T *, int(*)(const T *, const T *)) const
 See Also: ON_CompareIncreasing<T> and ON_CompareDeccreasing<T> More...
 
int ON_ClassArray< T >::BinarySearch (const T *, int(*)(const T *, const T *)) const
 See Also: ON_CompareIncreasing<T> and ON_CompareDeccreasing<T> More...
 
int ON_SimpleArray< T >::BinarySearch (const T *, int(*)(const T *, const T *), int) const
 
int ON_ClassArray< T >::BinarySearch (const T *, int(*)(const T *, const T *), int) const
 
const T * ON_SimpleArray< T >::BinarySearchPtr (const T *, int(*)(const T *, const T *)) const
 
const T * ON_SimpleArray< T >::BinarySearchPtr (const T *, int(*)(const T *, const T *), int) const
 
int ON_SimpleArray< T >::Capacity () const
 capacity of array More...
 
int ON_ClassArray< T >::Capacity () const
 capacity of array More...
 
void ON_ClassArray< T >::ConstructDefaultElement (T *)
 
int ON_SimpleArray< T >::Count () const
 query /////////////////////////////////////////////////////////////// More...
 
int ON_ClassArray< T >::Count () const
 query /////////////////////////////////////////////////////////////// More...
 
static int CrashTestHelper (int crash_type, ON_TextLog &textlog)
 
static bool CrashTestHelper_AllocationFailure (ON_TextLog &textlog, size_t sz)
 
static int CrashTestHelper_CallBoguslFuncPtr (ON_TextLog &textlog, int crash_type, int *stack_ptr)
 
static int CrashTestHelper_CallNullFuncPtr (ON_TextLog &textlog, int crash_type, int *stack_ptr)
 
static int CrashTestHelper_DerefBogusIntPtr (ON_TextLog &textlog, int crash_type, int *stack_ptr)
 
static int CrashTestHelper_DerefNullIntPtr (ON_TextLog &textlog, int crash_type, int *stack_ptr)
 
static bool CrashTestHelper_DivideByDoubleZero (ON_TextLog &textlog, const char *zero)
 
static bool CrashTestHelper_DivideByFloatZero (ON_TextLog &textlog, const char *zero)
 
static bool CrashTestHelper_DivideByIntZero (ON_TextLog &textlog, const char *zero)
 
static bool CrashTestHelper_DoubleOverflow (ON_TextLog &textlog, const char *sx, const char *sy)
 
static void CrashTestHelper_GetBogusFuncPtr (CRASHTEST__FUNCTION__POINTER__ *pp)
 
static void CrashTestHelper_GetBogusIntPtr (int **pp)
 
static void CrashTestHelper_GetNullFuncPtr (CRASHTEST__FUNCTION__POINTER__ *pp)
 
static void CrashTestHelper_GetNullIntPrt (int **pp)
 
static bool CrashTestHelper_LogNegativeNumber (ON_TextLog &textlog, const char *minus_one)
 
static bool CrashTestHelper_StackOverflow (ON_TextLog &textlog, int depth=0)
 
static bool CrashTestHelper_Throw (ON_TextLog &textlog, const char *si)
 
bool ON_SimpleFixedSizePool< T >::Create (size_t element_count_estimate, size_t block_element_count)
 
T * ON_SimpleFixedSizePoolIterator< T >::CurrentElement ()
 
ON__UINT32 ON_SimpleArray< T >::DataCRC (ON__UINT32 current_remainder) const
 
ON__UINT32 ON_ObjectArray< T >::DataCRC (ON__UINT32 current_remainder) const
 
void ON_SimpleArray< T >::Destroy ()
 onfree any memory and set count and capacity to zero More...
 
void ON_ClassArray< T >::Destroy ()
 onfree any memory and set count and capacity to zero More...
 
void ON_SimpleFixedSizePool< T >::Destroy ()
 
void ON_ClassArray< T >::DestroyElement (T &)
 
T * ON_SimpleFixedSizePool< T >::Element (size_t element_index) const
 
size_t ON_SimpleFixedSizePool< T >::ElementIndex (T *) const
 
void ON_SimpleArray< T >::EmergencyDestroy (void)
 emergency bailout /////////////////////////////////////////////////// More...
 
void ON_ClassArray< T >::EmergencyDestroy (void)
 emergency bailout /////////////////////////////////////////////////// More...
 
void ON_SimpleArray< T >::Empty ()
 Sets count to 0, leaves capacity untouched. More...
 
void ON_ClassArray< T >::Empty ()
 Sets count to 0, leaves capacity untouched. More...
 
T * ON_SimpleArray< T >::First ()
 
T * ON_ClassArray< T >::First ()
 
T * ON_SimpleFixedSizePoolIterator< T >::FirstBlock (size_t *block_element_count)
 
T * ON_SimpleFixedSizePoolIterator< T >::FirstElement ()
 
T * ON_SimpleFixedSizePoolIterator< T >::FirstElement (size_t element_index)
 
bool ON_SimpleArray< T >::HeapSort (int(*)(const T *, const T *))
 
virtual bool ON_ClassArray< T >::HeapSort (int(*)(const T *, const T *))
 QuickSort() is generally the better choice. More...
 
bool ON_ObjectArray< T >::HeapSort (int(*)(const T *, const T *))
 
void ON_SimpleArray< T >::Insert (int, const T &)
 
void ON_ClassArray< T >::Insert (int, const T &)
 Insert called with a reference uses operator =. More...
 
int ON_SimpleArray< T >::InsertInSortedList (const T &, int(*)(const T *, const T *))
 
int ON_ClassArray< T >::InsertInSortedList (const T &, int(*)(const T *, const T *))
 
int ON_SimpleArray< T >::InsertInSortedList (const T &, int(*)(const T *, const T *), int)
 
int ON_ClassArray< T >::InsertInSortedList (const T &, int(*)(const T *, const T *), int)
 
T * ON_SimpleArray< T >::KeepArray ()
 
T * ON_ClassArray< T >::KeepArray ()
 
T * ON_SimpleArray< T >::Last ()
 
T * ON_ClassArray< T >::Last ()
 
void ON_SimpleArray< T >::MemSet (unsigned char)
 
void ON_SimpleArray< T >::Move (int, int, int)
 implementation ////////////////////////////////////////////////////// More...
 
void ON_ClassArray< T >::Move (int, int, int)
 implementation ////////////////////////////////////////////////////// More...
 
int ON_SimpleArray< T >::NewCapacity () const
 
int ON_ClassArray< T >::NewCapacity () const
 
T * ON_SimpleFixedSizePoolIterator< T >::NextBlock (size_t *block_element_count)
 
T * ON_SimpleFixedSizePoolIterator< T >::NextElement ()
 
ON_DECL ON_3dVector ON_2ndDerFromCurvature (ON_3dVector D1, ON_3dVector K)
 
ON_DECL ON_3dVector ON_3rdDerFromJerk (ON_3dVector D1, ON_3dVector D2, ON_3dVector J)
 
ON_DECL ON_3dVector ON_4thDerFromYank (ON_3dVector D1, ON_3dVector D2, ON_3dVector D3, ON_3dVector Y)
 
bool ON__PackTextureRectangles1 (ON_PackedTextureRectangle *top, const class ON_PackTextureRectanglesParameters *packing_parameters)
 do not export this function or declare it in a header file More...
 
bool ON__PackTextureRectangles2 (ON_PackedTextureRectangle *top, const class ON_PackTextureRectanglesParameters *packing_parameters)
 do not export this function or declare it in a header file More...
 
const ON_DECL ON_wString ON_AddIdPrefixToString (const ON_UUID id, const wchar_t *separator, const wchar_t *source)
 
const ON_DECL ON_wString ON_AddIdSuffixToString (const wchar_t *source, const wchar_t *separator, const ON_UUID id)
 
ON_DECL bool ON_Adjust2ndPointToDomain (const ON_2dPoint &First, ON_2dPoint &Second, const ON_Interval dom[2])
 
ON_DECL int ON_ArePointsOnLine (int, bool, int, int, const double *, const ON_BoundingBox &, const ON_Line &, double)
 returns 0 = no, 1 = yes, 2 = points are coincident and on line More...
 
ON_DECL int ON_ArePointsOnPlane (int, bool, int, int, const double *, const ON_BoundingBox &, const ON_Plane &, double)
 returns 0 = no, 1 = yes, 2 = points are coincident and on line More...
 
ON_DECL void ON_Array_aA_plus_B (int, double, const double *, const double *, double *)
 
ON_DECL void ON_Array_aA_plus_B (int, float, const float *, const float *, float *)
 
ON_DECL double ON_ArrayDistance (int, const double *, const double *)
 
ON_DECL double ON_ArrayDistanceSquared (int, const double *, const double *)
 
ON_DECL double ON_ArrayDotDifference (int, const double *, const double *, const double *)
 
ON_DECL double ON_ArrayDotProduct (int, const double *, const double *)
 
ON_DECL float ON_ArrayDotProduct (int, const float *, const float *)
 
ON_DECL double ON_ArrayMagnitude (int, const double *)
 
ON_DECL double ON_ArrayMagnitudeSquared (int, const double *)
 
ON_DECL void ON_ArrayScale (int, double, const double *, double *)
 
ON_DECL void ON_ArrayScale (int, float, const float *, float *)
 
ON_DECL bool ON_Base32ToString (const ON_SimpleArray< unsigned char > &base32_digits, ON_String &sBase32)
 
ON_DECL bool ON_Base32ToString (const ON_SimpleArray< unsigned char > &base32_digits, ON_wString &sBase32)
 
ON_DECL bool ON_Base32ToString (const unsigned char *base32_digits, int base32_digit_count, char *sBase32)
 
ON_DECL ON_NurbsSurfaceON_BendBrepFace (const ON_BrepFace &face0, const ON_SimpleArray< ON_BendFaceConstraint > &constraints, double tolerance, double time_limit, ON_NurbsSurface *bent_surface, ON_TextLog *text_log=0)
 
ON_DECL bool ON_BeyondSinglePrecision (const ON_BoundingBox &bbox, ON_Xform *xform)
 
const ON_DECL ON_2dexON_BinarySearch2dexArray (int key_i, const ON_2dex *base, size_t nel)
 
const ON_DECL ON_2udexON_BinarySearch2udexArray (unsigned int key_i, const ON_2udex *base, size_t nel)
 
const ON_DECL void * ON_BinarySearchArrayFirst2udex (ON_2udex key, const void *base, size_t count, size_t sizeof_element, size_t key_offset)
 
const ON_DECL void * ON_BinarySearchArrayFirstUnsignedInt (unsigned int key, const void *base, size_t count, size_t sizeof_element, size_t key_offset)
 
const ON_DECL void * ON_BinarySearchArrayForUnsingedInt (unsigned int key, const void *base, size_t count, size_t sizeof_element, size_t key_offset)
 
const ON_DECL double * ON_BinarySearchDoubleArray (double key, const double *base, size_t nel)
 
const ON_DECL int * ON_BinarySearchIntArray (int key, const int *base, size_t nel)
 
const ON_DECL unsigned int * ON_BinarySearchUnsignedIntArray (unsigned int key, const unsigned int *base, size_t nel)
 
ON_DECL double ON_BinomialCoefficient (int i, int j)
 
ON_DECL double ON_BoundingBoxTolerance (int dim, const double *bboxmin, const double *bboxmax)
 
ON_DECL ON_BrepON_BrepBox (const ON_3dPoint *box_corners, ON_Brep *pBrep=nullptr)
 
ON_DECL ON_BrepON_BrepCone (const ON_Cone &cone, bool bCapBottom, ON_Brep *pBrep=nullptr)
 
ON_DECL int ON_BrepConeEdge (ON_Brep &brep, int edge_index, ON_3dPoint apex_point)
 
ON_DECL int ON_BrepConeFace (ON_Brep &brep, int face_index, ON_3dPoint apex_point)
 
ON_DECL bool ON_BrepConeLoop (ON_Brep &brep, int loop_index, ON_3dPoint apex_point)
 
ON_DECL ON_BrepON_BrepCylinder (const ON_Cylinder &cylinder, bool bCapBottom, bool bCapTop, ON_Brep *pBrep=nullptr)
 
ON_DECL bool ON_BrepExtrude (ON_Brep &brep, const ON_Curve &path_curve, bool bCap=true)
 
ON_DECL int ON_BrepExtrudeEdge (ON_Brep &brep, int edge_index, const ON_Curve &path_curve)
 
ON_DECL int ON_BrepExtrudeFace (ON_Brep &brep, int face_index, const ON_Curve &path_curve, bool bCap=true)
 
ON_DECL int ON_BrepExtrudeLoop (ON_Brep &brep, int loop_index, const ON_Curve &path_curve, bool bCap=true)
 
ON_DECL int ON_BrepExtrudeVertex (ON_Brep &brep, int vertex_index, const ON_Curve &path_curve)
 
ON_DECL ON_BrepON_BrepFromMesh (const ON_MeshTopology &mesh_topology, bool bTrimmedTriangles=true, ON_Brep *pBrep=nullptr)
 
ON_DECL ON_BrepON_BrepFromMeshWithNgons (const ON_MeshTopology &mesh_topology, bool bTrimmedTriangles, bool bUseNgonsIfTheyExist, double tolerance, ON_Brep *pBrep=nullptr)
 
ON_DECL void ON_BrepMergeAllEdges (ON_Brep &B)
 Merges all possible edges. More...
 
ON_DECL bool ON_BrepMergeFaces (ON_Brep &B)
 
ON_DECL int ON_BrepMergeFaces (ON_Brep &B, int fid0, int fid1)
 These merge adjacent faces that have the same underlying surface. More...
 
ON_DECL ON_BrepON_BrepQuadSphere (const ON_3dPoint &Center, double radius, ON_Brep *pBrep=nullptr)
 
ON_DECL bool ON_BrepRemoveSlits (ON_BrepFace &F)
 
ON_DECL ON_BrepON_BrepRevSurface (ON_RevSurface *&pRevSurface, bool bCapStart, bool bCapEnd, ON_Brep *pBrep=nullptr)
 
ON_DECL ON_BrepON_BrepSphere (const ON_Sphere &sphere, ON_Brep *pBrep=nullptr)
 
ON_DECL ON_BrepON_BrepTorus (const ON_Torus &torus, ON_Brep *pBrep=nullptr)
 
ON_DECL ON_BrepON_BrepTrimmedPlane (const ON_Plane &plane, const ON_Curve &boundary, ON_Brep *pBrep=nullptr)
 
ON_DECL ON_BrepON_BrepTrimmedPlane (const ON_Plane &plane, ON_SimpleArray< ON_Curve * > &boundary, bool bDuplicateCurves=true, ON_Brep *pBrep=nullptr)
 
ON_DECL ON_BrepON_BrepWedge (const ON_3dPoint *corners, ON_Brep *pBrep=nullptr)
 
const ON_DECL ON_2dex ON_BsplineControlPointSpans (int order, int control_point_count, int control_point_index)
 Get the indices of the B-spline spans where the specified control point is active. Note that a B-spline with n control points has (n-degree) many spans. If 0 &lt= span_index < (n-degree), then CV(span_index), ..., CV(span_index+degree) and {knot[span_index], ..., knot[span_index+2*degree-1]} are the control points and knots that are active in that span. The domain of the span is [knot[span_index+degree-1], knot[span_index+degree]]. More...
 
const ON_DECL ON_Interval ON_BsplineControlPointSupport (int order, int control_point_count, const double *knots, int control_point_index)
 Get the interval in the B-spline domain where the control point is active. The domain = [knots[order-2], knots[control_point_count-1]]. The returned interval will be in domain and are the parameters where the control point influnces the value of the B-spline. More...
 
ON_DECL bool ON_ChangeRationalBezierCurveWeights (int dim, int order, int cvstride, double *cv, int i0, double w0, int i1, double w1)
 
ON_DECL bool ON_ChangeRationalNurbsCurveEndWeights (int dim, int order, int cv_count, int cvstride, double *cv, double *knot, double w0, double w1)
 
ON_DECL bool ON_ClampKnotVector (int, int, double *, int)
 
ON_DECL bool ON_ClampKnotVector (int, int, int, int, double *, double *, int)
 
ON_DECL struct ON_VtableON_ClassVtable (void *p)
 
ON_DECL ON__UINT64 ON_ClearWorkerThreadContext ()
 
ON_DECL int ON_ClosedCurveOrientation (const ON_Curve &curve, const ON_Plane &plane)
 
ON_DECL int ON_ClosedCurveOrientation (const ON_Curve &curve, const ON_Xform *xform)
 
ON_DECL double ON_ClosestPointAngle (const ON_Line &, const ON_Curve &, ON_Interval, const ON_3dPoint &, ON_3dPoint &, double *, double *)
 
ON_DECL bool ON_ClosestPointBetweenQuads (const ON_3dPoint A[4], const ON_3dPoint B[4], double a[4], double b[4])
 
ON_DECL bool ON_ClosestPointBetweenTriangleAndQuad (const ON_3dPoint Tri[3], const ON_3dPoint Quad[4], double t[3], double q[4])
 
ON_DECL bool ON_ClosestPointBetweenTriangles (const ON_3dPoint A[3], const ON_3dPoint B[3], double a[3], double b[3])
 
ON_DECL bool ON_ClosestPointToTriangle (ON_3dPoint A, ON_3dPoint B, ON_3dPoint C, ON_3dPoint P, double *a, double *b, double *c)
 
ON_DECL bool ON_ClosestPointToTriangleFast (const ON_3dPoint &A, const ON_3dPoint &B, const ON_3dPoint &C, ON_3dPoint P, double *a, double *b, double *c)
 
ON_DECL bool ON_CombineShortSegments (ON_Curve &crv, double tolerance)
 
ON_DECL int ON_Compare2dex (const ON_2dex *a, const ON_2dex *b)
 
ON_DECL int ON_Compare2udex (const ON_2udex *a, const ON_2udex *b)
 
ON_DECL int ON_Compare3dex (const ON_3dex *a, const ON_3dex *b)
 
ON_DECL int ON_Compare4dex (const ON_4dex *a, const ON_4dex *b)
 
template<class T >
static int ON_CompareDecreasing (const T *a, const T *b)
 
ON_DECL int ON_CompareDouble (double a, double b)
 
ON_DECL int ON_CompareDoubleArray (size_t count, const double *a, const double *b)
 
ON_DECL int ON_CompareFloat (float a, float b)
 
template<class T >
static int ON_CompareIncreasing (const T *a, const T *b)
 
ON_DECL int ON_CompareKnotVector (int, int, const double *, int, int, const double *)
 
ON_DECL int ON_ComparePoint (int dim, bool israt, const double *cv0, const double *cv1)
 
ON_DECL int ON_ComparePointList (int, bool, int, int, const double *, int, const double *)
 
ON_DECL ON_ComponentState ON_ComponentStateFromUnsigned (unsigned int state_as_unsigned)
 
ON_DECL ON_MeshON_ControlPolygonMesh (const ON_NurbsSurface &nurbs_surface, bool bCleanMesh, ON_Mesh *input_mesh=nullptr)
 
ON_DECL int ON_ConvertMSMBCPToWideChar (ON__UINT32 windows_code_page, const char *sMBCS, int sMBCS_count, wchar_t *sWideChar, int sWideChar_capacity, unsigned int *error_status)
 
ON_DECL void ON_ConvertNurbSpanToBezier (int, int, int, double *, const double *, double, double)
 
ON_DECL int ON_ConvertUTF16ToUTF16 (int bTestByteOrder, const ON__UINT16 *sInputUTF16, int sInputUTF16_count, ON__UINT16 *sOutputUTF16, int sOutputUTF16_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const ON__UINT16 **sNextInputUTF16)
 
ON_DECL int ON_ConvertUTF16ToUTF32 (int bTestByteOrder, const ON__UINT16 *sUTF16, int sUTF16_count, unsigned int *sUTF32, int sUTF32_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const ON__UINT16 **sNextUTF16)
 
ON_DECL int ON_ConvertUTF16ToUTF8 (int bTestByteOrder, const ON__UINT16 *sUTF16, int sUTF16_count, char *sUTF8, int sUTF8_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const ON__UINT16 **sNextUTF16)
 
ON_DECL int ON_ConvertUTF16ToWideChar (int bTestByteOrder, const ON__UINT16 *sUTF16, int sUTF16_count, wchar_t *sWideChar, int sWideChar_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const ON__UINT16 **sNextUTF16)
 
ON_DECL int ON_ConvertUTF32ToUTF16 (int bTestByteOrder, const ON__UINT32 *sUTF32, int sUTF32_count, ON__UINT16 *sUTF16, int sUTF16_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const ON__UINT32 **sNextUTF32)
 
ON_DECL int ON_ConvertUTF32ToUTF32 (int bTestByteOrder, const ON__UINT32 *sInputUTF32, int sInputUTF32_count, ON__UINT32 *sOuputUTF32, int sOutputUTF32_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const ON__UINT32 **sNextInputUTF32)
 
ON_DECL int ON_ConvertUTF32ToUTF8 (int bTestByteOrder, const ON__UINT32 *sUTF32, int sUTF32_count, char *sUTF8, int sUTF8_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const ON__UINT32 **sNextUTF32)
 
ON_DECL int ON_ConvertUTF32ToWideChar (int bTestByteOrder, const ON__UINT32 *sUTF32, int sUTF32_count, wchar_t *sWideChar, int sWideChar_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const ON__UINT32 **sNextUTF32)
 
ON_DECL int ON_ConvertUTF8ToUTF16 (int bTestByteOrder, const char *sUTF8, int sUTF8_count, ON__UINT16 *sUTF16, int sUTF16_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const char **sNextUTF8)
 
ON_DECL int ON_ConvertUTF8ToUTF32 (int bTestByteOrder, const char *sUTF8, int sUTF8_count, ON__UINT32 *sUTF32, int sUTF32_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const char **sNextUTF8)
 
ON_DECL int ON_ConvertUTF8ToUTF8 (int bTestByteOrder, const char *sInputUTF8, int sInputUTF8_count, char *sOutputUTF8, int sOutputUTF8_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const char **sNextInputUTF8)
 
ON_DECL int ON_ConvertUTF8ToWideChar (int bTestByteOrder, const char *sUTF8, int sUTF8_count, wchar_t *sWideChar, int sWideChar_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const char **sNextUTF8)
 
ON_DECL int ON_ConvertWideCharToMSMBCP (const wchar_t *sWideChar, int sWideChar_count, ON__UINT32 windows_code_page, char *sMBCS, int sMBCS_capacity, unsigned int *error_status)
 
ON_DECL int ON_ConvertWideCharToUTF16 (int bTestByteOrder, const wchar_t *sWideChar, int sWideChar_count, ON__UINT16 *sUTF16, int sUTF16_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const wchar_t **sNextWideChar)
 
ON_DECL int ON_ConvertWideCharToUTF32 (int bTestByteOrder, const wchar_t *sWideChar, int sWideChar_count, ON__UINT32 *sUTF32, int sUTF32_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const wchar_t **sNextWideChar)
 
ON_DECL int ON_ConvertWideCharToUTF8 (int bTestByteOrder, const wchar_t *sWideChar, int sWideChar_count, char *sUTF8, int sUTF8_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const wchar_t **sNextWideChar)
 
ON_DECL int ON_ConvexHull2d (const ON_SimpleArray< ON_2dPoint > &Pnt, ON_SimpleArray< ON_2dPoint > &Hull, ON_SimpleArray< int > *PntInd=nullptr)
 
ON_DECL int ON_CorrectBase32StringTypos (const char *sBase32, char *sBase32clean)
 
ON_DECL int ON_CorrectBase32StringTypos (const char *sBase32, ON_String &sBase32clean)
 
ON_DECL int ON_CorrectBase32StringTypos (const wchar_t *sBase32, ON_wString &sBase32clean)
 
ON_DECL int ON_CrashTest (int crash_type, ON_TextLog &text_log)
 
ON_BEGIN_EXTERNC ON_DECL ON__UINT16 ON_CRC16 (ON__UINT16 current_remainder, size_t sizeof_buffer, const void *buffer)
 
ON_DECL ON__UINT32 ON_CRC32 (ON__UINT32 current_remainder, size_t sizeof_buffer, const void *buffer)
 
ON_DECL ON_UUID ON_CreateId ()
 
ON_END_EXTERNC ON_DECL bool ON_CreateUuid (ON_UUID &uuid)
 
ON_DECL ON_3dVector ON_CrossProduct (const double *, const double *)
 
ON_DECL ON_3fVector ON_CrossProduct (const float *, const float *)
 
ON_DECL ON_3dVector ON_CrossProduct (const ON_2dVector &, const ON_2dVector &)
 
ON_DECL ON_3fVector ON_CrossProduct (const ON_2fVector &, const ON_2fVector &)
 
ON_DECL ON_3dVector ON_CrossProduct (const ON_3dVector &, const ON_3dVector &)
 
ON_DECL ON_3fVector ON_CrossProduct (const ON_3fVector &, const ON_3fVector &)
 
ON_DECL ON_Quaternion ON_CrossProduct (const ON_Quaternion &p, const ON_Quaternion &q)
 
ON_DECL bool ON_CSXFirstOrderNecessaryConditions (ON_TextLog *text_log, const ON_X_EVENT &xevent, int end_index, const ON_Interval *curve_domain, const ON_Interval *surface_domain0, const ON_Interval *surface_domain1)
 
ON_DECL double ON_CurveOrientationArea (const ON_Curve *curve, const ON_Interval *domain, const ON_Xform *xform, bool bReverseCurve)
 
ON_DECL bool ON_CvxHullFromLeafBox (ON_ConvexHullPoint2 &Hull, const ON_SurfaceLeafBox &leaf)
 
ON_DECL unsigned int ON_DayOfGregorianYear (unsigned int year, unsigned int month, unsigned int day_of_month)
 
ON_DECL unsigned int ON_DaysInGregorianYear (unsigned int year)
 
ON_DECL unsigned int ON_DaysInMonthOfGregorianYear (unsigned int year, unsigned int month)
 
ON_DECL void ON_DBL_SNAN (double *x)
 
ON_DECL int ON_DebugWriteObject (const class ON_Object *pObject)
 
ON_DECL int ON_DebugWriteObjectArray (const ON_SimpleArray< const class ON_Object * > &object_list)
 
const ON_DECL wchar_t * ON_DebugWriteObjectDirectory ()
 
ON_DECL int ON_DebugWriteObjects (size_t object_list_count, const ON_Object *const *object_list)
 
ON_DECL int ON_DebugWritePoint (const class ON_3dPoint *p3dPoint)
 
ON_DECL int ON_DebugWritePoints (const double *pPoint, int dim, bool is_rat, int count)
 
ON__UINT32 ON_DECL ON_DecalCRCFromNode (const ON_XMLNode &node)
 For internal use only. More...
 
ON_DECL double ON_DecimalHoursFromHMS (int hour, int minute, int second)
 
ON_DECL void ON_DecimalHoursToHMS (double hours, int &hour, int &minute, int &second)
 
ON_DECL void ON_DecimalHoursToHMS (double hours, int &hour, int &minute, int &second, int &year, int &month, int &day)
 
ON_DECL int ON_DecodeSwapByteUTF16 (const ON__UINT16 *sUTF16, int sUTF16_count, struct ON_UnicodeErrorParameters *e, ON__UINT32 *unicode_code_point)
 
ON_DECL int ON_DecodeSwapByteUTF32 (const ON__UINT32 *sUTF32, int sUTF32_count, struct ON_UnicodeErrorParameters *e, ON__UINT32 *unicode_code_point)
 
ON_DECL int ON_DecodeUTF16 (const ON__UINT16 *sUTF16, int sUTF16_count, struct ON_UnicodeErrorParameters *e, ON__UINT32 *unicode_code_point)
 
ON_DECL int ON_DecodeUTF16BE (const ON__UINT16 *sUTF16, int sUTF16_count, struct ON_UnicodeErrorParameters *e, ON__UINT32 *unicode_code_point)
 
ON_DECL int ON_DecodeUTF16LE (const ON__UINT16 *sUTF16, int sUTF16_count, struct ON_UnicodeErrorParameters *e, ON__UINT32 *unicode_code_point)
 
ON_DECL unsigned int ON_DecodeUTF16SurrogatePair (unsigned int u1, unsigned int u2, unsigned int error_code_point)
 
ON_DECL int ON_DecodeUTF32 (const ON__UINT32 *sUTF32, int sUTF32_count, struct ON_UnicodeErrorParameters *e, ON__UINT32 *unicode_code_point)
 
ON_DECL int ON_DecodeUTF32BE (const ON__UINT32 *sUTF32, int sUTF32_count, struct ON_UnicodeErrorParameters *e, ON__UINT32 *unicode_code_point)
 
ON_DECL int ON_DecodeUTF32LE (const ON__UINT32 *sUTF32, int sUTF32_count, struct ON_UnicodeErrorParameters *e, ON__UINT32 *unicode_code_point)
 
ON_DECL int ON_DecodeUTF8 (const char *sUTF8, int sUTF8_count, struct ON_UnicodeErrorParameters *e, ON__UINT32 *unicode_code_point)
 
ON_DECL int ON_DecodeWideChar (const wchar_t *sWideChar, int sWideChar_count, struct ON_UnicodeErrorParameters *e, ON__UINT32 *unicode_code_point)
 
ON_DECL int ON_DecomposeVector (const ON_3dVector &V, const ON_3dVector &A, const ON_3dVector &B, double *x, double *y)
 
ON_DECL double ON_DegreesFromRadians (double angle_in_radians)
 
ON_DECL void ON_Disableonmalloc ()
 
ON_DECL bool ON_DollyExtents (const ON_Viewport &current_vp, ON_BoundingBox camcoord_bbox, ON_Viewport &zoomed_vp)
 
ON_DECL double ON_DomainTolerance (double, double)
 
ON_DECL double ON_DotProduct (const ON_2dVector &, const ON_2dVector &)
 
ON_DECL float ON_DotProduct (const ON_2fVector &, const ON_2fVector &)
 
ON_DECL double ON_DotProduct (const ON_3dVector &, const ON_3dVector &)
 
ON_DECL float ON_DotProduct (const ON_3fVector &, const ON_3fVector &)
 
ON_DECL double ON_DoubleFromFloat (float x)
 
ON_DECL void ON_DumpSquishInfoText (const ON_Geometry *squished_geometry, ON_TextLog &text_log, const wchar_t *objid_locale_str, const wchar_t *meshcount_locale_str)
 
ON_DECL ON_CurveTreeBezierON_DuplicateCurveTreeBezier (const ON_CurveTreeBezier &src)
 
ON_DECL ON_SurfaceTreeBezierON_DuplicateSurfaceTreeBezier (const ON_SurfaceTreeBezier &src)
 
ON_DECL double ON_EigenvectorPrecision (const unsigned int N, const double *const *M, bool bTransposeM, double lambda, const double *eigenvector)
 
ON_DECL void ON_EnableDebugBreak (int bEnableDebugBreak)
 
ON_DECL void ON_EnableDebugBreakOnFirstError (int bEnableDebugBreak)
 
ON_DECL void ON_EnableDebugErrorMessage (int bEnableDebugErrorMessage)
 
ON_DECL int ON_EncodeUTF16 (ON__UINT32 unicode_code_point, ON__UINT16 sUTF16[2])
 
ON_DECL int ON_EncodeUTF8 (ON__UINT32 u, char sUTF8[6])
 
ON_DECL int ON_EncodeWideChar (ON__UINT32 code_point, size_t w_capacity, wchar_t *w)
 
ON_DECL void ON_VARGS_FUNC_CDECL ON_Error (const char *file_name, int line_number, const char *format,...)
 
ON_DECL void ON_VARGS_FUNC_CDECL ON_ErrorEx (const char *file_name, int line_number, const char *function_name, const char *format,...)
 
ON_BEGIN_EXTERNC ON_DECL void ON_ErrorMessage (int, const char *)
 
ON_DECL double ON_EvaluateBernsteinBasis (int, int, double)
 
ON_DECL bool ON_EvaluateBezier (int, bool, int, int, const double *, double, double, int, double, int, double *)
 
ON_DECL void ON_EvaluatedeCasteljau (int, int, int, int, double *, double)
 
ON_DECL bool ON_EvaluateNurbsBasis (int order, const double *knot, double t, double *N)
 
ON_DECL bool ON_EvaluateNurbsBasisDerivatives (int order, const double *knot, int der_count, double *N)
 
ON_DECL bool ON_EvaluateNurbsBlossom (int, int, int, const double *, const double *, const double *, double *)
 
ON_DECL bool ON_EvaluateNurbsCageSpan (int dim, bool is_rat, int order0, int order1, int order2, const double *knot0, const double *knot1, const double *knot2, int cv_stride0, int cv_stride1, int cv_stride2, const double *cv, int der_count, double t0, double t1, double t2, int v_stride, double *v)
 
ON_DECL bool ON_EvaluateNurbsDeBoor (int, int, int, double *, const double *, int, double, double)
 
ON_DECL bool ON_EvaluateNurbsSpan (int dim, bool is_rat, int order, const double *knot, int cv_stride, const double *cv, int der_count, double t, int v_stride, double *v)
 
ON_DECL bool ON_EvaluateNurbsSurfaceSpan (int dim, bool is_rat, int order0, int order1, const double *knot0, const double *knot1, int cv_stride0, int cv_stride1, const double *cv, int der_count, double s, double t, int v_stride, double *v)
 
ON_DECL bool ON_EvaluateQuotientRule (int dim, int der_count, int v_stride, double *v)
 
ON_DECL bool ON_EvaluateQuotientRule2 (int dim, int der_count, int v_stride, double *v)
 
ON_DECL bool ON_EvaluateQuotientRule3 (int dim, int der_count, int v_stride, double *v)
 
ON_DECL void ON_EvaluateSurfaceSectionalCurvature (const class ON_Surface *surface, const class ON_SectionAnalysisAppearance &appearance, ON_PlaneEquation plane_eqn, unsigned int uv_point_count, size_t uv_point_stride, const double *uv_points, ON_SimpleArray< ON_3dPoint > &points, ON_SimpleArray< ON_3dVector > &curvatures, ON_SimpleArray< ON_2dPoint > *refined_uv_points)
 
ON_DECL bool ON_EvCurvature (const ON_3dVector &, const ON_3dVector &, ON_3dVector &, ON_3dVector &)
 returns false if first derivative is zero More...
 
ON_DECL bool ON_EvCurvature1Der (const ON_3dVector &D1, const ON_3dVector &D2, const ON_3dVector &D3, ON_3dVector &T, ON_3dVector &K, double *kprime, double *torsion)
 torsion More...
 
ON_DECL bool ON_EvJacobian (double, double, double, double *)
 return false if determinant is (nearly) singular More...
 
ON_DECL bool ON_EvJerk (ON_3dVector D1, ON_3dVector D2, ON_3dVector D3, ON_3dVector &T, ON_3dVector &K, ON_3dVector &J)
 
ON_DECL bool ON_EvNormal (int, const ON_3dVector &, const ON_3dVector &, const ON_3dVector &, const ON_3dVector &, const ON_3dVector &, ON_3dVector &)
 
ON_DECL bool ON_EvNormalPartials (const ON_3dVector &ds, const ON_3dVector &dt, const ON_3dVector &dss, const ON_3dVector &dst, const ON_3dVector &dtt, ON_3dVector &ns, ON_3dVector &nt)
 
ON_DECL int ON_EvNormalYank (const ON_Surface &srf, double u, double v, ON_3dVector srfDirection, ON_3dVector &T, ON_3dVector &K, ON_3dVector &J, ON_3dVector &Y)
 
ON_DECL bool ON_EvPrincipalCurvatures (const ON_3dVector &, const ON_3dVector &, const ON_3dVector &, const ON_3dVector &, const ON_3dVector &, const ON_3dVector &, double *, double *, double *, double *, ON_3dVector &, ON_3dVector &)
 
ON_DECL bool ON_EvPrincipalCurvatures (const ON_3dVector &, const ON_3dVector &, double l, double m, double n, const ON_3dVector &, double *, double *, double *, double *, ON_3dVector &, ON_3dVector &)
 
ON_DECL bool ON_EvSectionalCurvature (const ON_3dVector &S10, const ON_3dVector &S01, const ON_3dVector &S20, const ON_3dVector &S11, const ON_3dVector &S02, const ON_3dVector &planeNormal, ON_3dVector &K)
 
ON_DECL bool ON_EvTangent (const ON_3dVector &, const ON_3dVector &, ON_3dVector &)
 returns false if the returned tangent is zero More...
 
ON_DECL bool ON_EvYank (ON_3dVector D1, ON_3dVector D2, ON_3dVector D3, ON_3dVector D4, ON_3dVector &T, ON_3dVector &K, ON_3dVector &J, ON_3dVector &Y)
 
int ON_FindLocalMinimum (int(*)(void *, double, double *, double *), void *, double, double, double, double, double, int, double *)
 find a local minimum of a 1 parameter function More...
 
ON_DECL bool ON_FindMeshMeshIntersectionSets (ON_SimpleArray< ON_MMX_POINT > &pArray, double tol)
 This function is soon going to be deprecated. It always uses the old code. More...
 
ON_DECL bool ON_FixBrepLoop (ON_Brep &B, int loop_id, bool bCompact=true)
 
ON_DECL bool ON_FixBrepLoops (ON_Brep &B, ON_SimpleArray< int > *loop_ids=0)
 
ON_DECL void ON_FixNurbsSurfacePole (ON_NurbsSurface &srf, int side, const ON_3dPoint *pPole)
 
ON_DECL void ON_FixNurbsSurfaceSeam (ON_NurbsSurface &srf, int dir, bool bMakeG1)
 
ON_DECL float ON_FloatCeil (double x)
 
ON_DECL float ON_FloatFloor (double x)
 
ON_DECL float ON_FloatFromDouble (double x)
 
ON_DECL void ON_FLT_SNAN (float *x)
 
ON_DECL bool ON_ForceMatchCurveEnds (ON_Curve &Crv0, int end0, ON_Curve &Crv1, int end1)
 
ON_DECL bool ON_FPU_AfterDotNetJITUse (void)
 
ON_DECL bool ON_FPU_AfterSloppyCall (void)
 
ON_DECL bool ON_FPU_BeforeSloppyCall (void)
 
ON_DECL bool ON_FPU_Check (bool bCheckExceptionStatus, bool bCheckControl, bool bCall_ON_Error)
 
ON_DECL void ON_FPU_ClearExceptionStatus ()
 
ON_DECL ON__UINT32 ON_FPU_ControlWord ()
 
ON_DECL bool ON_FPU_EnableInvalidStatusCheck (bool bEnableInvalidStatusCheck)
 
ON_DECL ON__UINT32 ON_FPU_ExceptionStatus ()
 
ON_DECL ON__UINT32 ON_FPU_Init (void)
 
ON_DECL ON__UINT32 ON_FPU_InitControlWord (void)
 
ON_DECL bool ON_FPU_InvalidStatusCheckEnabled ()
 
ON_DECL bool ON_FPU_UnmaskExceptions (ON__UINT32 unmasked_ex)
 
ON_DECL int ON_Get3dConvexHull (const ON_SimpleArray< ON_3dPoint > &points, ON_SimpleArray< ON_PlaneEquation > &hull)
 
ON_DECL int ON_GetBase32Digits (const ON_SimpleArray< unsigned char > &x, ON_SimpleArray< unsigned char > &base32_digits)
 
ON_DECL int ON_GetBase32Digits (const unsigned char *x, int x_count, unsigned char *base32_digits)
 
ON_DECL bool ON_GetCageXform (const ON_NurbsCage &cage, ON_Xform &cage_xform)
 
ON_DECL bool ON_GetClosestPointInPointList (int point_count, const ON_3dPoint *point_list, ON_3dPoint P, int *closest_point_index)
 
ON_DECL bool ON_GetClosestPointOnTriangle (const double A[3], const double B[3], const double C[3], const double N[3], const double test_point[3], double triangle_bc[3])
 
ON_DECL bool ON_GetClosestPointOnTriangle (const float A[3], const float B[3], const float C[3], const float N[3], const double test_point[3], double triangle_bc[3])
 
ON_DECL bool ON_GetConicEquationThrough6Points (int stride, const double *points2d, double conic[6], double *max_pivot, double *min_pivot, double *zero_pivot)
 
ON_DECL int ON_GetDebugBreak (void)
 
ON_DECL int ON_GetDebugBreakOnFirstError (void)
 
ON_DECL int ON_GetDebugErrorMessage (void)
 
ON_DECL unsigned int ON_GetEigenvectors (const unsigned int N, const double *const *M, bool bTransposeM, double lambda, unsigned int lambda_multiplicity, const double *termination_tolerances, double **eigenvectors, double *eigenprecision, double *eigenpivots)
 
ON_DECL bool ON_GetEllipseConicEquation (double a, double b, double x0, double y0, double alpha, double conic[6])
 
ON_DECL bool ON_GetEndCapTransformation (ON_3dPoint P, ON_3dVector T, ON_3dVector U, const ON_3dVector *Normal, ON_Xform &xform, ON_Xform *scale2d, ON_Xform *rot2d)
 
ON_DECL int ON_GetErrorCount (void)
 
ON_DECL double ON_GetFittingTolerance (const class ON_SurfaceTreeNode *snodeA, const class ON_SurfaceTreeNode *snodeB, double intersection_tolerance, double fitting_tolerance)
 
ON_DECL bool ON_GetFunctionRoot (void(*func)(void *, double, double *, double *), void *funcarg, double t0, double t1, double *root)
 
ON_DECL bool ON_GetGregorianMonthAndDayOfMonth (unsigned int year, unsigned int day_of_year, unsigned int *month, unsigned int *day_of_month)
 
ON_DECL bool ON_GetGrevilleAbcissae (int, int, const double *, bool, double *)
 
ON_DECL bool ON_GetGrevilleKnotVector (int, const double *, bool, int, int, double *)
 
ON_DECL bool ON_GetHighCurvatureSpans (const ON_Curve &crv, double tolerance, ON_SimpleArray< int > *span_indices)
 
ON_DECL bool ON_GetKnotVectorDomain (int, int, const double *, double *, double *)
 
ON_DECL bool ON_GetKnotVectorSpanVector (int, int, const double *, double *)
 
ON_DECL int ON_GetMathErrorCount (void)
 
ON_DECL bool ON_GetMatrixSVD (int row_count, int col_count, double const *const *A, double **&U, double *&W, double **&V)
 
ON_DECL bool ON_GetMeshMeshClosestPoint (const ON_Mesh &MeshA, const ON_Mesh &MeshB, double max_dist, bool bUseMultipleThreads, int *fidA, double a[4], int *fidB, double b[4])
 
ON_DECL ON_UUID ON_GetMostRecentClassIdCreateUuid ()
 
ON_DECL bool ON_GetNextCurveSpan (const ON_Curve &crv, double t0, double t1, double tolerance, bool(*check)(const ON_Curve &, double, double, double), ON_Interval *seg_dom, int *span_index)
 
ON_DECL bool ON_GetParameterTolerance (double, double, double, double *, double *)
 
ON_DECL bool ON_GetPointGridBoundingBox (int dim, bool is_rat, int point_count0, int point_count1, int point_stride0, int point_stride1, const double *point_grid, double *boxmin, double *boxmax, int bGrowBox)
 
ON_DECL bool ON_GetPointListBoundingBox (int dim, bool is_rat, int count, int stride, const double *point_list, double *boxmin, double *boxmax, int bGrowBox)
 
ON_DECL bool ON_GetPointListBoundingBox (int dim, bool is_rat, int count, int stride, const double *point_list, ON_BoundingBox &bbox, int bGrowBox=false, const ON_Xform *xform=0)
 
ON_DECL bool ON_GetPointListBoundingBox (int dim, bool is_rat, int count, int stride, const float *point_list, float *boxmin, float *boxmax, int bGrowBox)
 
ON_DECL bool ON_GetPointListBoundingBox (int dim, bool is_rat, int count, int stride, const float *point_list, ON_BoundingBox &bbox, int bGrowBox=false, const ON_Xform *xform=0)
 
ON_DECL unsigned int * ON_GetPointLocationIds (size_t point_count, const class ON_2dPoint *points, unsigned int first_point_id, unsigned int *point_ids, unsigned int *point_id_map)
 
ON_DECL unsigned int * ON_GetPointLocationIds (size_t point_count, const class ON_2fPoint *points, unsigned int first_point_id, unsigned int *point_ids, unsigned int *point_id_map)
 
ON_DECL unsigned int * ON_GetPointLocationIds (size_t point_count, const class ON_3dPoint *points, unsigned int first_point_id, unsigned int *point_ids, unsigned int *point_id_map)
 
ON_DECL unsigned int * ON_GetPointLocationIds (size_t point_count, const class ON_3fPoint *points, unsigned int first_point_id, unsigned int *point_ids, unsigned int *point_id_map)
 
ON_DECL unsigned int * ON_GetPointLocationIds (size_t point_dim, size_t point_count, size_t point_stride, const double *points, unsigned int first_point_id, unsigned int *point_ids, unsigned int *point_id_map)
 
ON_DECL unsigned int * ON_GetPointLocationIds (size_t point_dim, size_t point_count, size_t point_stride, const float *points, unsigned int first_point_id, unsigned int *point_ids, unsigned int *point_id_map)
 
ON_DECL bool ON_GetPolylineLength (int, bool, int, int, const double *, double *)
 
ON_DECL bool ON_GetShortSpans (const ON_Curve &crv, double tolerance, ON_SimpleArray< int > *span_indices)
 
ON_DECL int ON_GetSpanIndices (int order, int cv_count, const double *knot, int *)
 
ON_DECL bool ON_GetTrianglePlaneEquation (const ON_3dPoint &A, const ON_3dPoint &B, const ON_3dPoint &C, double *a, double *b, double *c, double *d, double *evaluation_tol)
 
ON_DECL unsigned int ON_GetVersionQuartet (unsigned int major_version, unsigned int minor_version, unsigned int year, unsigned int month, unsigned int day_of_month, unsigned int hour, unsigned int minute, unsigned int branch, unsigned short quartet_values[4])
 
ON_DECL unsigned int ON_GetVersionString (unsigned int major_version, unsigned int minor_version, unsigned int year, unsigned int month, unsigned int day_of_month, unsigned int hour, unsigned int minute, unsigned int branch, size_t string_buffer_capacity, char *string_buffer)
 
ON_DECL unsigned int ON_GetVersionWideString (unsigned int major_version, unsigned int minor_version, unsigned int year, unsigned int month, unsigned int day_of_month, unsigned int hour, unsigned int minute, unsigned int branch, size_t string_buffer_capacity, wchar_t *string_buffer)
 
ON_DECL bool ON_GetViewportRotationAngles (const ON_3dVector &, const ON_3dVector &, const ON_3dVector &, double *, double *, double *)
 
ON_DECL int ON_GetWarningCount (void)
 
void ON_GL (const int, const int, const double *, GLfloat *, int=0, double *=nullptr)
 
void ON_GL (const ON_3dPoint &)
 must be bracketed by calls to glBegin(GL_POINTS) / glEnd() More...
 
void ON_GL (const ON_Brep &, GLUnurbsObj *)
 Use ON_GL( const ON_Brep&, ...) to render OpenNURBS b-reps. More...
 
void ON_GL (const ON_BrepFace &, GLUnurbsObj *)
 
void ON_GL (const ON_Color &, double, GLfloat[4])
 
void ON_GL (const ON_Color &, GLfloat[4])
 Use ON_GL( const ON_Color ...) to set GL color to OpenNURBS color. More...
 
void ON_GL (const ON_Curve &, GLUnurbsObj *, GLenum=0, double[][4]=nullptr)
 
void ON_GL (const ON_Light &, GLenum)
 
void ON_GL (const ON_Light *, GLenum)
 
void ON_GL (const ON_Material &)
 Use ON_GL( const ON_Material ...) to set GL material to OpenNURBS material. More...
 
void ON_GL (const ON_Material *)
 
void ON_GL (const ON_Mesh &)
 Use ON_GL( const ON_Mesh&, ...) to render OpenNURBS meshes. More...
 
void ON_GL (const ON_NurbsCurve &, GLUnurbsObj *, GLenum=0, int=1, double *=nullptr, double[][4]=nullptr)
 
void ON_GL (const ON_NurbsSurface &, GLUnurbsObj *, GLenum=0, int=1, double *=nullptr, double *=nullptr)
 
void ON_GL (const ON_Point &)
 Use ON_GL( const ON_Point, ...) to render single points. More...
 
void ON_GL (const ON_PointCloud &)
 Use ON_GL( const ON_PointCloud, ...) to render Rhino point sets. More...
 
void ON_GL (const ON_Surface &, GLUnurbsObj *)
 must be bracketed by calls to gluBeginSurface( nobj )/gluEndSurface( nobj ) More...
 
void ON_GL (const ON_Viewport &)
 
void ON_GL (int, int, int, int, const double *, int, const double *, GLUnurbsObj *, GLenum=0, int=1, double *=nullptr, double[][4]=nullptr)
 
void ON_GL (ON_Viewport &, int, int, int, int)
 
ON_DECL unsigned ON_GreatestCommonDivisor (unsigned a, unsigned b)
 
ON_DECL double ON_GrevilleAbcissa (int, const double *)
 
ON_DECL double ON_HairlinePrintWidth ()
 
ON_DECL void ON_hsort (void *base, size_t count, size_t sizeof_element, int(*compare)(const void *, const void *))
 
ON_DECL void ON_hsort (void *base, size_t count, size_t sizeof_element, int(*compare)(void *, const void *, const void *), void *context)
 
void ON_HSORT_FNAME (ON_SORT_TEMPLATE_TYPE *base, size_t nel)
 
const ON_DECL ON_wString ON_IdToString (ON_UUID id)
 
ON_DECL bool ON_IncreaseBezierDegree (int, bool, int, int, double *)
 
ON_DECL ON__UINT64 ON_IndexFromNotUniqueId (ON_UUID not_unique_id)
 
ON_DECL int ON_InsertKnot (double, int, int, int, int, int, double *, double *, int *)
 
ON_DECL double ON_Integrate (const class ON_Curve &curve, double(*f)(ON__UINT_PTR context, int limit_direction, double t), ON__UINT_PTR f_context, ON_Interval integration_limit, double relative_tolerance, double absolute_tolerance, double *error_bound)
 Calculates the definite integral of a smooth (C-infinity) function of one variable using a Rhomberg integration technique and returns returns Integral(f(t)*|curve'(t)|*dt). The C-infinity requirement is used by the Rhomberg algorithm when estimating error bounds and convergence. If you choose to pass a C2 function, you are likely to converge while getting less accurate results and incorrect error bound estimates. Using a C0 or C1 fucntion will ofter return nonsense. More...
 
ON_DECL double ON_Integrate (const class ON_Surface &surface, double(*f)(ON__UINT_PTR context, int limit_direction, double s, double t), ON__UINT_PTR f_context, ON_Interval integration_limit1, ON_Interval integration_limit2, double relative_tolerance, double absolute_tolerance, double *error_bound)
 Calculates the definite integral of a smooth (C-infinity) function of two variables using a Rhomberg integration technique and returns returns Integral(f(s,t)*|dS/ds(s,t) x dS/dt(s,t)|*ds*dt), where dS/ds and dS/dt are the surface's first partial derivatives. The C-infinity requirement is used by the Rhomberg algorithm when estimating error bounds and convergence. If you choose to pass a C2 function, you are likely to converge while getting less accurate results and incorrect error bound estimates. Using a C0 or C1 fucntion will ofter return nonsense. More...
 
ON_DECL double ON_Integrate (double(*f)(ON__UINT_PTR context, int limit_direction, double s, double t), ON__UINT_PTR f_context, const ON_SimpleArray< double > &limits1, const ON_SimpleArray< double > &limits2, double relative_tolerance, double absolute_tolerance, double *error_bound)
 Calculates the definite integral of a piecewise smooth (C-infinity) function of two variables using a Rhomberg integration technique. The C-infinity requirement is used by the Rhomberg algorithm when estimating error bounds and convergence. If you choose to pass a C2 function, you are likely to converge while getting less accurate results and incorrect error bound estimates. Using a C0 or C1 fucntion will ofter return nonsense. More...
 
ON_DECL double ON_Integrate (double(*f)(ON__UINT_PTR context, int limit_direction, double s, double t), ON__UINT_PTR f_context, ON_Interval limits1, ON_Interval limits2, double relative_tolerance, double absolute_tolerance, double *error_bound)
 Calculates the definite integral of a smooth (C-infinity) function of two variables using a Rhomberg integration technique. The C-infinity requirement is used by the Rhomberg algorithm when estimating error bounds and convergence. If you choose to pass a C2 function, you are likely to converge while getting less accurate results and incorrect error bound estimates. Using a C0 or C1 fucntion will ofter return nonsense. More...
 
ON_DECL double ON_Integrate (double(*f)(ON__UINT_PTR context, int limit_direction, double t), ON__UINT_PTR f_context, const ON_SimpleArray< double > &limits, double relative_tolerance, double absolute_tolerance, double *error_bound)
 Calculates the definite integral of a piecewise smooth (C-infinity) function of one variable using a Rhomberg integration technique and returns returns Integral(f(t)dt). The C-infinity requirement is used by the Rhomberg algorithm when estimating error bounds and convergence. If you choose to pass a C2 function, you are likely to converge while getting less accurate results and incorrect error bound estimates. Using a C0 or C1 fucntion will ofter return nonsense. More...
 
ON_DECL double ON_Integrate (double(*f)(ON__UINT_PTR context, int limit_direction, double t), ON__UINT_PTR f_context, ON_Interval limits, double relative_tolerance, double absolute_tolerance, double *error_bound)
 Calculates the definite integral of a smooth (C-infinity) function of one variable using a Rhomberg integration technique and returns returns Integral(f(t)dt). The C-infinity requirement is used by the Rhomberg algorithm when estimating error bounds and convergence. If you choose to pass a C2 function, you are likely to converge while getting less accurate results and incorrect error bound estimates. Using a C0 or C1 fucntion will ofter return nonsense. More...
 
void * ON_Internal_CompareExchangePointer (void *volatile *dest, void *exchange, void *comparand)
 
ON_DECL int ON_Intersect (const ON_Arc &arc0, const ON_Arc &arc1, ON_3dPoint &point0, ON_3dPoint &point1)
 
ON_DECL bool ON_Intersect (const ON_BoundingBox &bbox, const ON_Line &line, double tolerance, ON_Interval *line_parameters)
 
ON_DECL int ON_Intersect (const ON_Circle &c0, const ON_Circle &c1, ON_3dPoint &point0, ON_3dPoint &point1)
 
ON_DECL int ON_Intersect (const ON_Line &, const ON_Cylinder &, ON_3dPoint &, ON_3dPoint &)
 
ON_DECL bool ON_Intersect (const ON_Line &, const ON_Line &, double *, double *)
 
ON_DECL bool ON_Intersect (const ON_Line &, const ON_Plane &, double *)
 
ON_DECL int ON_Intersect (const ON_Line &, const ON_Sphere &, ON_3dPoint &, ON_3dPoint &)
 
ON_DECL int ON_Intersect (const ON_Line &line, const ON_Arc &arc, double *line_t0, ON_3dPoint &arc_point0, double *line_t1, ON_3dPoint &arc_point1)
 
ON_DECL int ON_Intersect (const ON_Line &line, const ON_Circle &circle, double *line_t0, ON_3dPoint &circle_point0, double *line_t1, ON_3dPoint &circle_point1)
 
ON_DECL bool ON_Intersect (const ON_Line &line, const ON_PlaneEquation &plane_equation, double *line_parameter)
 
ON_DECL bool ON_Intersect (const ON_Plane &, const ON_Plane &, const ON_Plane &, ON_3dPoint &)
 
ON_DECL bool ON_Intersect (const ON_Plane &, const ON_Plane &, ON_Line &)
 
ON_DECL int ON_Intersect (const ON_Plane &, const ON_Sphere &, ON_Circle &)
 
ON_DECL int ON_Intersect (const ON_Plane &plane, const ON_Arc &arc, ON_3dPoint &point0, ON_3dPoint &point1)
 
ON_DECL int ON_Intersect (const ON_Plane &plane, const ON_Circle &circle, ON_3dPoint &point0, ON_3dPoint &point1)
 
ON_DECL int ON_Intersect (const ON_Sphere &sphere0, const ON_Sphere &sphere1, ON_Circle &circle)
 
ON_DECL unsigned int ON_IntersectCoplanarLineAndTriangle (const double A[3], const double B[3], const double C[3], const double N[3], const double P[3], const double Q[3], double line_t[2], double triangle_bc[2][3])
 
ON_DECL unsigned int ON_IntersectLineAndTriangle (const double A[3], const double B[3], const double C[3], const ON_TrianglePlane *tri_plane, const double P[3], const double Q[3], double tolerance, double line_t[2], double triangle_bc[2][3])
 
ON_DECL bool ON_IntersectLineLine (const ON_Line &lineA, const ON_Line &lineB, double *a, double *b, double tolerance, bool bIntersectSegments)
 
ON_DECL bool ON_IntersectMeshRay (const ON_Mesh *mesh, const ON_3dRay &ray, double tolerance, ON_SimpleArray< double > &ray_ts)
 
ON_DECL bool ON_IntersectViewFrustumPlane (const ON_Viewport &vp, const ON_PlaneEquation &plane_equation, ON_SimpleArray< ON_3dPoint > &points)
 
ON_DECL int ON_InvertSVDW (int count, const double *W, double *&invW)
 
ON_DECL bool ON_Is2dPatternSquished (const ON_Geometry *geometry)
 
ON_DECL bool ON_IsConicEquationAnEllipse (const double conic[6], ON_2dPoint &center, ON_2dVector &major_axis, ON_2dVector &minor_axis, double *major_radius, double *minor_radius)
 
ON_DECL bool ON_IsContinuous (ON::continuity c, ON_3dPoint Pa, ON_3dVector D1a, ON_3dVector D2a, ON_3dPoint Pb, ON_3dVector D1b, ON_3dVector D2b, double point_tolerance=ON_ZERO_TOLERANCE, double d1_tolerance=ON_ZERO_TOLERANCE, double d2_tolerance=ON_ZERO_TOLERANCE, double cos_angle_tolerance=ON_DEFAULT_ANGLE_TOLERANCE_COSINE, double curvature_tolerance=ON_SQRT_EPSILON)
 
ON_DECL bool ON_IsConvexPolyline (const ON_SimpleArray< ON_3dPoint > &points, bool bStrictlyConvex)
 
ON_DECL bool ON_IsConvexPolyline (size_t point_dim, size_t point_count, const double *points, size_t point_stride, bool bStrictlyConvex)
 
ON_DECL bool ON_IsCurvatureDiscontinuity (const ON_3dVector Km, const ON_3dVector Kp, double cos_angle_tolerance, double curvature_tolerance, double zero_curvature, double radius_tolerance)
 
ON_DECL bool ON_IsCurvatureDiscontinuity (const ON_3dVector Km, const ON_3dVector Kp, double cos_angle_tolerance, double curvature_tolerance, double zero_curvature, double radius_tolerance, double relative_tolerance)
 
void ON_DECL ON_IsG1Closed (const ON_Surface &Srf, bool closed[2])
 
ON_DECL bool ON_IsG2CurvatureContinuous (const ON_3dVector Km, const ON_3dVector Kp, double cos_angle_tolerance, double curvature_tolerance)
 
ON_DECL bool ON_IsGregorianLeapYear (unsigned int year)
 
ON_DECL bool ON_IsGsmoothCurvatureContinuous (const ON_3dVector Km, const ON_3dVector Kp, double cos_angle_tolerance, double curvature_tolerance)
 
ON_DECL bool ON_IsHairlinePrintWidth (double width_mm)
 
ON_DECL bool ON_IsKnotVectorClamped (int order, int cv_count, const double *knot, int=2)
 
ON_DECL bool ON_IsKnotVectorPeriodic (int order, int cv_count, const double *knot)
 
ON_DECL bool ON_IsKnotVectorUniform (int order, int cv_count, const double *knot)
 
bool ON_IsLongChunkTypecode (ON__UINT32 typecode)
 
ON_DECL bool ON_IsNaNd (double x)
 
ON_DECL bool ON_IsNaNf (float x)
 
ON_DECL bool ON_IsNotValid ()
 
ON_DECL bool ON_IsNullPtr (const ON__INT_PTR ptr)
 
ON_DECL bool ON_IsNullPtr (const ON__UINT_PTR ptr)
 
ON_DECL bool ON_IsNullPtr (const void *ptr)
 
ON_DECL unsigned int ON_IsOpennurbsApplicationId (ON_UUID id)
 
ON_DECL bool ON_IsOrthogonalFrame (const ON_2dVector &, const ON_2dVector &)
 
ON_DECL bool ON_IsOrthogonalFrame (const ON_2fVector &, const ON_2fVector &)
 
ON_DECL bool ON_IsOrthogonalFrame (const ON_3dVector &, const ON_3dVector &, const ON_3dVector &)
 
ON_DECL bool ON_IsOrthogonalFrame (const ON_3fVector &, const ON_3fVector &, const ON_3fVector &)
 
ON_DECL bool ON_IsOrthonormalFrame (const ON_2dVector &, const ON_2dVector &)
 
ON_DECL bool ON_IsOrthonormalFrame (const ON_2fVector &, const ON_2fVector &)
 
ON_DECL bool ON_IsOrthonormalFrame (const ON_3dVector &, const ON_3dVector &, const ON_3dVector &)
 
ON_DECL bool ON_IsOrthonormalFrame (const ON_3fVector &, const ON_3fVector &, const ON_3fVector &)
 
ON_DECL bool ON_IsPointGridClosed (int, bool, int, int, int, int, const double *, int)
 
ON_DECL bool ON_IsPointListClosed (int, bool, int, int, const double *)
 
ON_DECL int ON_IsPointListPlanar (bool bRational, int count, int stride, const double *points, const double *boxMin, const double *boxMax, double tolerance, ON_PlaneEquation *plane_equation)
 
bool ON_IsPotentialWindowsCodePage932DoubleByteEncoding (ON__UINT32 lead_byte, ON__UINT32 trailing_byte)
 
bool ON_IsPotentialWindowsCodePage932SingleByteEncoding (ON__UINT32 x)
 
bool ON_IsPotentialWindowsCodePage949DoubleByteEncoding (ON__UINT32 lead_byte, ON__UINT32 trailing_byte)
 
bool ON_IsPotentialWindowsCodePage949SingleByteEncoding (ON__UINT32 x)
 
ON_DECL bool ON_IsPrivateUseUnicodeCodePoint (ON__UINT32 unicode_code_point)
 
ON_DECL bool ON_IsProjectedPointOnTriangleBoundary (const double A[3], const double B[3], const double C[3], const double N[3], const double test_point[3])
 
ON_DECL bool ON_IsProjectedPointOnTriangleBoundary (const float A[3], const float B[3], const float C[3], const float N[3], const double test_point[3])
 
ON_DECL bool ON_IsQNaNd (double x)
 
ON_DECL bool ON_IsQNaNf (float x)
 
ON_DECL unsigned int ON_IsRhinoApplicationId (ON_UUID id)
 
ON_DECL bool ON_IsRightHandFrame (const ON_2dVector &, const ON_2dVector &)
 
ON_DECL bool ON_IsRightHandFrame (const ON_2fVector &, const ON_2fVector &)
 
ON_DECL bool ON_IsRightHandFrame (const ON_3dVector &, const ON_3dVector &, const ON_3dVector &)
 
ON_DECL bool ON_IsRightHandFrame (const ON_3fVector &, const ON_3fVector &, const ON_3fVector &)
 
bool ON_IsShortChunkTypecode (ON__UINT32 typecode)
 
ON_DECL bool ON_IsSNaNd (double x)
 
ON_DECL bool ON_IsSNaNf (float x)
 
ON_DECL bool ON_IsStandardUnicodeCodePoint (ON__UINT32 unicode_code_point)
 
ON_DECL int ON_IsUnicodeC1ControlCodePoint (ON__UINT32 u)
 
ON_DECL bool ON_IsUnicodeControlCodePoint (ON__UINT32 code_point, bool bNullReturnValue)
 
ON_DECL int ON_IsUnicodeSpaceCodePoint (ON__UINT32 u)
 
ON_DECL int ON_IsUnicodeSpaceOrControlCodePoint (ON__UINT32 u)
 
ON_DECL enum ON_UnicodeEncoding ON_IsUTFByteOrderMark (const void *buffer, size_t sizeof_buffer)
 
ON_DECL bool ON_IsValid (double x)
 
ON_DECL bool ON_IsValidFloat (float x)
 
ON_DECL bool ON_IsValidKnotVector (int order, int cv_count, const double *knot, ON_TextLog *text_log=0)
 
ON_DECL bool ON_IsValidNegativeNumber (double x)
 
ON_DECL bool ON_IsValidPointGrid (int, bool, int, int, int, int, const double *)
 
ON_DECL bool ON_IsValidPointList (int, bool, int, int, const double *)
 
ON_DECL bool ON_IsValidPointList (int, bool, int, int, const float *)
 
ON_DECL bool ON_IsValidPositiveNumber (double x)
 
ON_DECL int ON_IsValidSingleByteUTF8CharValue (char c)
 ON_DEPRECATED. More...
 
ON_DECL int ON_IsValidSingleElementUTF16Value (ON__UINT32 c)
 ON_DEPRECATED. More...
 
ON_DECL int ON_IsValidSingleElementUTF8Value (ON__UINT32 c)
 ON_DEPRECATED. More...
 
ON_DECL int ON_IsValidSingleElementWideCharValue (wchar_t w)
 
ON_DECL int ON_IsValidUnicodeCodePoint (ON__UINT32 unicode_code_point)
 
ON_DECL int ON_IsValidUTF16Singleton (ON__UINT32 c)
 
ON_DECL int ON_IsValidUTF16SurrogatePair (unsigned int w1, unsigned int w2)
 
ON_DECL int ON_IsValidUTF32Value (ON__UINT32 c)
 
ON_DECL int ON_IsValidUTF8Singleton (ON__UINT32 c)
 
ON_DECL int ON_IsValidUTF8SingletonChar (char c)
 
ON_DECL int ON_JoinCurves (const ON_SimpleArray< const ON_Curve * > &InCurves, ON_SimpleArray< ON_Curve * > &OutCurves, double join_tol, bool bPreserveDirection=false, ON_SimpleArray< int > *key=0)
 
ON_DECL int ON_JoinCurves (const ON_SimpleArray< const ON_Curve * > &InCurves, ON_SimpleArray< ON_Curve * > &OutCurves, double join_tol, double kink_tol, bool bUseTanAngle, bool bPreserveDirection=false, ON_SimpleArray< int > *key=0)
 
ON_DECL int ON_JoinCurvesOld (const ON_SimpleArray< const ON_Curve * > &InCurves, ON_SimpleArray< ON_Curve * > &OutCurves, double join_tol, bool bPreserveDirection, ON_SimpleArray< int > *key)
 
ON_DECL int ON_JoinLines (const ON_SimpleArray< ON_Line > &InLines, ON_ClassArray< ON_Polyline > &OutPolylines, double tolerance, bool bPreserveDirection, ON_SimpleArray< int > *pKey)
 
ON_DECL int ON_JoinPolylines (const ON_SimpleArray< const ON_Polyline * > &InPlines, ON_SimpleArray< ON_Polyline * > &OutPlines, double join_tol, double kink_tol, bool bUseTanAngle, bool bPreserveDirection=false, ON_SimpleArray< int > *key=0)
 
ON_DECL int ON_KnotCount (int, int)
 
ON_DECL int ON_KnotMultiplicity (int, int, const double *, int)
 
ON_DECL double ON_KnotTolerance (int, int, const double *, int)
 
ON_DECL bool ON_KnotVectorHasBezierSpans (int order, int cv_count, const double *knot)
 returns true if all knots have multiplicity = degree More...
 
ON_DECL int ON_KnotVectorSpanCount (int, int, const double *)
 
ON_DECL ON::knot_style ON_KnotVectorStyle (int order, int cv_count, const double *knot)
 
ON_DECL unsigned ON_LeastCommonMultiple (unsigned a, unsigned b)
 The least common multiple of a and b is (a/gcd)*(b/gcd)*(gcd), where gcd = greatest common divisor of and b. More...
 
ON_DECL double ON_Length2d (double x, double y)
 
ON_DECL double ON_Length2dSquared (double x, double y)
 
ON_DECL double ON_Length3d (double x, double y, double z)
 
ON_DECL double ON_Length3dSquared (double x, double y, double z)
 
ON_2dPoint ON_DECL ON_LiftInverse (ON_2dPoint P, ON_Interval dom[2], bool closed[2])
 
ON_DECL ON_SimpleArray< ON_2dPointON_LiftToCover (const ON_SimpleArray< ON_2dPoint > &in, const ON_Interval dom[2], bool closed[2], double normband=1.0/3.0)
 
ON_DECL double ON_LinearInterpolation (double t, double x, double y)
 
ON_DECL int ON_LineTriangleIntersect (const ON_3dPoint &A, const ON_3dPoint &B, const ON_3dPoint &C, const ON_3dPoint &P, const ON_3dPoint &Q, double abc[2][3], double t[2], double tol)
 
ON_DECL bool ON_MakeClampedUniformKnotVector (int order, int cv_count, double *knot, double delta=1.0)
 
ON_DECL bool ON_MakeKnotVectorPeriodic (int, int, double *)
 
ON_DECL bool ON_MakePeriodicUniformKnotVector (int order, int cv_count, double *knot, double delta=1.0)
 
ON_DECL ON__UINT32 ON_MapMSSBCPToUnicode (ON__UINT32 code_page, ON__UINT32 code_page_single_byte_encoding)
 
ON_DECL ON__UINT32 ON_MapRTFcharsetToWindowsCodePage (ON__UINT32 rtf_charset, ON__UINT32 default_code_page)
 
ON_DECL ON__UINT32 ON_MapUnicodeToMSSBCP (ON__UINT32 code_page, ON__UINT32 unicode_code_point)
 
int ON_MapWindowsCodePage932ToUnicode (ON__UINT32 code_page_932_character_value, ON__UINT32 *unicode_code_point)
 
int ON_MapWindowsCodePage949ToUnicode (ON__UINT32 code_page_949_character_value, ON__UINT32 *unicode_code_point)
 
ON_DECL void ON_MathError (const char *, const char *, const char *)
 
ON_DECL double ON_MatrixSolutionPrecision (const unsigned int N, const double *const *M, bool bTransposeM, double lambda, const double *X, const double *B)
 
ON_DECL double ON_Max (double a, double b)
 
ON_DECL float ON_Max (float a, float b)
 
ON_DECL int ON_Max (int a, int b)
 
ON_DECL double ON_MaximumCoordinate (const double *data, int dim, bool is_rat, int count)
 Find the largest absolute value of coordinates from an array of points (possibly homogeneous). More...
 
ON_DECL double ON_MaximumCoordinate (const double *data, int dim, bool is_rat, int count, int stride)
 stride>=dim+is_rat More...
 
ON_DECL ON_memory_error_handler ON_memory_error_register_handler (ON_memory_error_handler)
 
ON_DECL int ON_memory_error_test_handler (int error_code)
 
ON_DECL void ON_MemoryManagerBegin (void)
 
ON_DECL void ON_MemoryManagerEnd (void)
 
ON_DECL size_t ON_MemoryPageSize ()
 
ON_DECL ON_BrepON_MergeBreps (const ON_Brep &brep0, const ON_Brep &brep1, double tolerance)
 
ON_DECL bool ON_Mesh2dPolygon (int point_count, int point_stride, const double *P, int tri_stride, int *triangle)
 
ON_DECL int ON_Mesh2dRegion (int point_count, int point_stride, const double *points, int edge_count, int edge_stride, const int *edges, const int *edge_side, ON_SimpleArray< ON_3dex > &triangles)
 Fill in a 2d region with triangles. More...
 
ON_DECL int ON_Mesh2dRegion (unsigned int point_count, unsigned int point_stride, const double *points, unsigned int edge_count, unsigned int edge_stride, const unsigned int *edges, unsigned int edge_side_stride, const unsigned char *edge_side, bool bOuterBoundaryIsConvexHull, bool bPermitVertexAdditions, bool bPermitEdgeSplitting, ON_SimpleArray< ON_3dex > &triangles, ON_SimpleArray< ON_2dPoint > &new_points)
 Fill in a 2d region with triangles. More...
 
ON_DECL int ON_Mesh2dRegion (unsigned int point_count, unsigned int point_stride, const double *points, unsigned int edge_count, unsigned int edge_stride, const unsigned int *edges, unsigned int edge_side_stride, const unsigned char *edge_side, bool bPermitVertexAdditions, bool bPermitEdgeSplitting, ON_SimpleArray< ON_3dex > &triangles, ON_SimpleArray< ON_2dPoint > &new_points)
 Fill in a 2d region with triangles. More...
 
ON_DECL int ON_Mesh2dRegion (unsigned int point_count, unsigned int point_stride, const double *points, unsigned int edge_count, unsigned int edge_stride, const unsigned int *edges, unsigned int edge_side_stride, const unsigned char *edge_side, ON_SimpleArray< ON_3dex > &triangles, ON_SimpleArray< ON_2dPoint > &new_points)
 Fill in a 2d region with triangles. More...
 
ON_DECL int ON_MeshClashSearch (int mesh_listA_count, const ON_Mesh *const *mesh_listA, int mesh_listB_count, const ON_Mesh *const *mesh_listB, double distance, bool bUseMultipleThreads, int max_event_count, ON_SimpleArray< class ON_ClashEvent > &clash_events)
 
ON_DECL int ON_MeshFaceClashSearch (const class ON_Mesh *meshA, const class ON_RTree *meshAtree, const class ON_Mesh *meshB, const class ON_RTree *meshBtree, double distance, bool bUseMultipleThreads, int max_event_count, ON_SimpleArray< class ON_ClashEvent > &clash_events)
 
ON_DECL void ON_MeshFaceClashSearch (const class ON_Mesh *meshA, const class ON_RTree *meshAtree, const class ON_Mesh *meshB, const class ON_RTree *meshBtree, double distance, bool bUseMultipleThreads, int max_event_count, ON_SimpleArray< int > &meshA_face_indices, ON_SimpleArray< int > &meshB_face_indices)
 
ON_DECL bool ON_MeshGetClosestPoint (const ON_Mesh *mesh, ON_3dPoint P, ON_MESH_POINT *t, double distance_tolerance=0.0)
 
ON_DECL bool ON_MeshMeshIntersect (const ON_Mesh *meshA, const ON_Mesh *meshB, ON_ClassArray< ON_MMX_Polyline > &plines, ON_ClassArray< ON_MMX_Polyline > &overlapplines, double intersection_tolerance=0.0, double overlap_tolerance=0.0, bool bDebug=false)
 This function is soon going to be deprecated. It always uses the old code. More...
 
ON_DECL bool ON_MeshMeshIntersectOldCompliant (const ON_Mesh *meshA, const ON_Mesh *meshB, ON_ClassArray< ON_Polyline > &plines, ON_ClassArray< ON_Polyline > &overlapplines, double intersection_tolerance=0.0, double overlap_tolerance=0.0, bool bDebug=false)
 
ON_DECL ON_MeshON_MeshSurface (const ON_Surface &surface, int mesh_density=0, ON_Mesh *mesh=0)
 
ON_DECL ON_MeshON_MeshSurface (const ON_Surface &surface, int u_count, const double *u, int v_count, const double *v, bool bDoublePrecisionMesh, ON_Mesh *mesh)
 
ON_DECL ON_MeshON_MeshSurface (const ON_Surface &surface, int u_count, const double *u, int v_count, const double *v, ON_Mesh *mesh=0)
 
ON_DECL double ON_Min (double a, double b)
 
ON_DECL float ON_Min (float a, float b)
 
ON_DECL int ON_Min (int a, int b)
 
ON_DECL double ON_Minimize (unsigned n, double(*f)(ON__UINT_PTR context, const double *t, double *grad), ON__UINT_PTR f_context, const ON_Interval search_domain[], const double t0[], double terminate_value, double relative_tolerance, double zero_tolerance, unsigned maximum_iterations, double t[], bool *bConverged)
 Find a local minimum of the object function f(t[]) of n independent variables. The function must be C2 on the search domain. The search begins at t0[]. More...
 
const ON_DECL ON__UINT32ON_MSSBCP_0x80_0xFF_Unicode (ON__UINT32 code_page)
 
ON_DECL int on_MultiByteToWideChar (const char *, int, wchar_t *, int)
 
ON_DECL bool ON_MX_GetUseNewCode ()
 
ON_DECL void ON_MX_SetUseNewCode (bool value)
 
ON_DECL ON_CurveTreeBezierON_NewCurveTreeBezier (const ON_BezierCurve &bez)
 
ON_DECL ON_CurveTreeBezierON_NewCurveTreeBezier (int dim, bool is_rat, int order)
 
ON_DECL ON_SurfaceTreeBezierON_NewSurfaceTreeBezier (const ON_BezierSurface &bez)
 
ON_DECL ON_SurfaceTreeBezierON_NewSurfaceTreeBezier (int dim, bool is_rat, int order0, int order1)
 
ON__UINT64 ON_NextContentSerialNumber ()
 
ON_DECL ON_UUID ON_NextNotUniqueId (ON_UUID not_unique_id)
 
ON_DECL int ON_NextNurbsSpanIndex (int order, int cv_count, const double *knot, int)
 
ON_DECL ON_3dVector ON_NormalCurvature (const ON_3dVector &, const ON_3dVector &, const ON_3dVector &, const ON_3dVector &, const ON_3dVector &, const ON_3dVector &, const ON_3dVector &)
 
ON_DECL ON_UUID ON_NotUniqueIdFromIndex (ON__UINT32 index_32_bit)
 
ON_DECL ON_UUID ON_NotUniqueIdFromIndex (ON__UINT64 index_64_bit)
 
ON_DECL int ON_NurbsSpanIndex (int order, int cv_count, const double *knot, double t, int side, int hint)
 
ON_DECL ON_NurbsSurfaceON_NurbsSurfaceQuadrilateral (const ON_3dPoint &P, const ON_3dPoint &Q, const ON_3dPoint &R, const ON_3dPoint &S, ON_NurbsSurface *nurbs_surface=nullptr)
 
ON_DECL bool ON_OrderEdgesAroundVertex (const ON_Brep &B, int vid, ON_2dex *trim_ends, bool &bClosed)
 
ON_DECL bool ON_OrderEdgesAroundVertex (const ON_Brep &B, int vid, ON_SimpleArray< ON_2dex > &trim_ends, bool &bClosed)
 
ON_DECL bool ON_PackTextureRectangles (class ON_PackedTextureRectangle *rectangle_list, const class ON_PackTextureRectanglesParameters *packing_parameters)
 
ON_DECL bool ON_PackTextureRectangles (ON_SimpleArray< ON_PackedTextureRectangle > &rectangle_array, const class ON_PackTextureRectanglesParameters *packing_parameters)
 
ON_DECL bool ON_PackTextureRectangles (size_t rectangle_count, class ON_PackedTextureRectangle *rectangle_array, const class ON_PackTextureRectanglesParameters *packing_parameters)
 
ON_DECL int ON_ParseAngleArcDegreesExpression (const wchar_t *str, int str_count, ON::AngleUnitSystem default_str_angle_unit_system, double *angle_value_in_arc_degrees)
 
ON_DECL int ON_ParseAngleExpression (const wchar_t *str, int str_count, ON_ParseSettings parse_settings, const ON::AngleUnitSystem angle_value_unit_system, double *angle_value, ON_ParseSettings *parse_results, ON::AngleUnitSystem *str_angle_unit_system)
 
ON_DECL int ON_ParseAngleExpression (const wchar_t *str, int str_count, ON_ParseSettings parse_settings, double *angle_value, ON_ParseSettings *parse_results, ON::AngleUnitSystem *str_angle_unit_system)
 
ON_DECL int ON_ParseAngleRadiansExpression (const wchar_t *str, int str_count, ON::AngleUnitSystem default_str_angle_unit_system, double *angle_value_in_radians)
 
ON_DECL int ON_ParseAngleUnitName (const wchar_t *str, int str_count, int prefered_locale_id, ON::AngleUnitSystem *angle_unit_system)
 
ON_DECL int ON_ParseAngleUnitName (const wchar_t *str, int str_count, ON_ParseSettings parse_settings, ON::AngleUnitSystem *angle_unit_system)
 
ON_DECL int ON_ParseLengthExpression (const wchar_t *str, int str_count, ON::AngleUnitSystem default_str_angle_unit_system, const ON_UnitSystem &length_value_unit_system, double *length_value)
 
ON_DECL int ON_ParseLengthExpression (const wchar_t *str, int str_count, ON::AngleUnitSystem default_str_angle_unit_system, ON::LengthUnitSystem length_value_unit_system, double *length_value)
 
ON_DECL int ON_ParseLengthExpression (const wchar_t *str, int str_count, ON_ParseSettings parse_settings, const ON_UnitSystem &length_value_unit_system, double *length_value, ON_ParseSettings *parse_results, ON::LengthUnitSystem *str_length_unit_system)
 
ON_DECL int ON_ParseLengthExpression (const wchar_t *str, int str_count, ON_ParseSettings parse_settings, double *length_value, ON_ParseSettings *parse_results, ON::LengthUnitSystem *str_length_unit_system)
 
ON_DECL int ON_ParseLengthExpression (const wchar_t *str, int str_count, ON_ParseSettings parse_settings, ON::LengthUnitSystem length_value_unit_system, double *length_value, ON_ParseSettings *parse_results, ON::LengthUnitSystem *str_length_unit_system)
 
ON_DECL int ON_ParseLengthUnitName (const wchar_t *str, int str_count, int prefered_locale_id, ON::LengthUnitSystem *length_unit_system)
 
ON_DECL int ON_ParseLengthUnitName (const wchar_t *str, int str_count, ON_ParseSettings parse_settings, ON::LengthUnitSystem *length_unit_system)
 
ON_DECL int ON_ParseNumber (const wchar_t *str, int str_count, ON_ParseSettings parse_settings, ON_ParseSettings *parse_results, double *value)
 
ON_DECL int ON_ParseNumberExpression (const wchar_t *str, int str_count, ON_ParseSettings parse_settings, ON_ParseSettings *parse_results, double *value)
 
ON_DECL int ON_ParsePointExpression (const wchar_t *str, int str_count, ON::AngleUnitSystem default_str_angle_unit_system, const ON_UnitSystem &point_value_unit_system, ON_3dPoint *point_value)
 
ON_DECL int ON_ParsePointExpression (const wchar_t *str, int str_count, ON::AngleUnitSystem default_str_angle_unit_system, ON::LengthUnitSystem point_value_unit_system, ON_3dPoint *point_value)
 
ON_DECL int ON_ParsePointExpression (const wchar_t *str, int str_count, ON_ParseSettings parse_settings, const ON_UnitSystem &point_value_unit_system, ON_3dPoint *point_value, ON_ParseSettings *parse_results)
 
ON_DECL int ON_ParsePointExpression (const wchar_t *str, int str_count, ON_ParseSettings parse_settings, ON::LengthUnitSystem point_value_unit_system, ON_3dPoint *point_value, ON_ParseSettings *parse_results)
 
const ON_DECL char * ON_ParseUuidString (const char *sUUID, ON_UUID *uuid)
 
ON_DECL bool ON_PassesNanTest ()
 
ON_DECL ON_BoundingBox ON_PointGridBoundingBox (int dim, bool is_rat, int point_count0, int point_count1, int point_stride0, int point_stride1, const double *point_grid)
 
ON_DECL ON_BoundingBox ON_PointListBoundingBox (int dim, bool is_rat, int count, int stride, const double *point_list)
 
ON_DECL ON_BoundingBox ON_PointListBoundingBox (int dim, bool is_rat, int count, int stride, const float *point_list)
 
ON_DECL bool ON_PointsAreCoincident (const ON_3dPoint &, const ON_3dPoint &)
 
ON_DECL bool ON_PointsAreCoincident (int dim, bool is_rat, const double *pointA, const double *pointB)
 
ON_DECL bool ON_PointsAreCoincident (int dim, bool is_rat, int point_count, int point_stride, const double *points)
 
const ON_DECL wchar_t * ON_PostEffectTypeString (ON_PostEffect::Types type)
 Helper function to get the type of a post effect as a string. More...
 
ON_DECL bool ON_Pullback3dVector (const ON_3dVector &, double, const ON_3dVector &, const ON_3dVector &, const ON_3dVector &, const ON_3dVector &, const ON_3dVector &, ON_2dVector &)
 
ON_DECL void ON_qsort (void *base, size_t count, size_t sizeof_element, int(*compare)(const void *, const void *))
 
ON_DECL void ON_qsort (void *base, size_t count, size_t sizeof_element, int(*compare)(void *, const void *, const void *), void *context)
 
static void ON_QSORT_SHORT_SORT_FNAME (ON_SORT_TEMPLATE_TYPE *, ON_SORT_TEMPLATE_TYPE *)
 
void ON_quacksort (BASETYPE *base, size_t nel, size_t width, int(*compar)(const void *, const void *))
 implementation of quick sort with minimum swaps for partition sizes 4 and less More...
 
ON_DECL ON_Quaternion ON_QuaternionProduct (const ON_Quaternion &p, const ON_Quaternion &q)
 
ON_DECL double ON_RadiansFromDegrees (double angle_in_degrees)
 
ON__UINT32 on_rand (void)
 
ON__UINT32 on_random_number (struct ON_RANDOM_NUMBER_CONTEXT *rand_context)
 
void on_random_number_seed (ON__UINT32 s, struct ON_RANDOM_NUMBER_CONTEXT *rand_context)
 
ON_DECL void ON_VARGS_FUNC_CDECL ON_REMOVE_ASAP_AssertEx (int, const char *file_name, int line_number, const char *function_name, const char *format,...)
 Ideally - these "assert" functions will be deleted when the SDK can be changed. More...
 
ON_DECL bool ON_RemoveBezierSingAt0 (int, int, int, double *)
 
ON_DECL bool ON_RemoveBezierSingAt1 (int, int, int, double *)
 
const ON_DECL ON_wString ON_RemoveIdPrefixFromString (const ON_UUID id, const wchar_t *separator, const wchar_t *source)
 
const ON_DECL ON_wString ON_RemoveIdSuffixFromString (const wchar_t *source, const wchar_t *separator, const ON_UUID id)
 
ON_DECL bool ON_ReparameterizeRationalBezierCurve (double c, int dim, int order, int cvstride, double *cv)
 
ON_DECL bool ON_ReparameterizeRationalNurbsCurve (double c, int dim, int order, int cv_count, int cvstride, double *cv, double *knot)
 
ON_DECL bool ON_ReverseKnotVector (int, int, double *)
 
ON_DECL bool ON_ReversePointGrid (int, bool, int, int, int, int, double *, int)
 
ON_DECL bool ON_ReversePointList (int, bool, int, int, double *)
 
ON_DECL int ON_Round (double x)
 
ON_DECL int ON_RowReduce (int row_count, int col_count, double zero_pivot, double **A, double **B, double pivots[2])
 
ON_DECL unsigned int ON_RowReduce (unsigned int row_count, unsigned col_count, double zero_pivot_tolerance, const double *const *constA, bool bInitializeB, bool bInitializeColumnPermutation, double **A, double **B, unsigned int *column_permutation, double pivots[3])
 
ON_DECL bool ON_RunXMLTests (const wchar_t *test_folder)
 
const ON_DECL ON_String ON_SdkVersionNumberToString (unsigned int sdk_version_number, unsigned int sdk_service_release_number)
 
const ON_DECL ON_wString ON_SdkVersionNumberToWideString (unsigned int sdk_version_number, unsigned int sdk_service_release_number)
 
ON_DECL int ON_SearchMonotoneArray (const double *, int, double)
 
ON_DECL ON__UINT64 ON_SecondsSinceJanOne1970UTC ()
 
ON_DECL void ON_SendLogMessageToCloud (ON_LogMessageType msg_type, const wchar_t *wszClass, const wchar_t *wszEventDesc, const wchar_t *wszMessage)
 
void ON_SetBinaryArchiveOpenNURBSVersion (class ON_BinaryArchive &, unsigned int)
 
ON_DECL bool ON_SetCurveCurveIntersectionDir (ON_3dVector N, int xcount, ON_X_EVENT *xevent, double a0, double a1, double b0, double b1)
 
ON_DECL bool ON_SetCurveSurfaceIntersectionDir (int xcount, ON_X_EVENT *xevent, double t0, double t1, double u0, double u1, double v0, double v1)
 
ON_DECL bool ON_SetCVFromDerivative (int end, int d, const double *D, ON_BezierCurve &bezier_curve)
 
ON_DECL void ON_SetDebugWriteObjectDirectory (const wchar_t *directory_name)
 
ON_DECL bool ON_SetKnotVectorDomain (int order, int cv_count, double *knot, double t0, double t1)
 
ON_DECL void ON_SetSendLogMessageToCloudProc (ON_SSLMTC_PROC)
 
ON_DECL ON__UINT64 ON_SetWorkerThreadContext (void(*fTerminateThreadFunction)(ON__UINT_PTR), ON__UINT_PTR function_parameter)
 
void ON_SHA1_Accumulate2dPointArray (class ON_SHA1 &sha1, const class ON_SimpleArray< ON_2dPoint > &a)
 
void ON_SHA1_Accumulate2dVectorArray (class ON_SHA1 &sha1, const class ON_SimpleArray< ON_2dVector > &a)
 
void ON_SHA1_Accumulate2fPointArray (class ON_SHA1 &sha1, const class ON_SimpleArray< ON_2fPoint > &a)
 
void ON_SHA1_Accumulate2fVectorArray (class ON_SHA1 &sha1, const class ON_SimpleArray< ON_2fVector > &a)
 
void ON_SHA1_Accumulate3dPointArray (class ON_SHA1 &sha1, const class ON_SimpleArray< ON_3dPoint > &a)
 
void ON_SHA1_Accumulate3dVectorArray (class ON_SHA1 &sha1, const class ON_SimpleArray< ON_3dVector > &a)
 
void ON_SHA1_Accumulate3fPointArray (class ON_SHA1 &sha1, const class ON_SimpleArray< ON_3fPoint > &a)
 
void ON_SHA1_Accumulate3fVectorArray (class ON_SHA1 &sha1, const class ON_SimpleArray< ON_3fVector > &a)
 
void ON_SHA1_Accumulate4dPointArray (class ON_SHA1 &sha1, const class ON_SimpleArray< ON_4dPoint > &a)
 
void ON_SHA1_Accumulate4fPointArray (class ON_SHA1 &sha1, const class ON_SimpleArray< ON_4fPoint > &a)
 
ON_DECL int ON_SimpleQuadraticMinimize (int(*f)(void *, double, double *), void *f_arg, double ax, double bx, double cx, double desired_min, double stop_tol, int max_it, double *t_addr=0, double *min_f=0)
 
ON_DECL int ON_Solve2x2 (double, double, double, double, double, double, double *, double *, double *)
 
ON_DECL int ON_Solve3x2 (const double[3], const double[3], double, double, double, double *, double *, double *, double *)
 
ON_DECL int ON_Solve3x3 (const double row0[3], const double row1[3], const double row2[3], double d0, double d1, double d2, double *x_addr, double *y_addr, double *z_addr, double *pivot_ratio)
 
ON_DECL int ON_Solve4x4 (const double row0[4], const double row1[4], const double row2[4], const double row3[4], double d0, double d1, double d2, double d3, double *x_addr, double *y_addr, double *z_addr, double *w_addr, double *pivot_ratio)
 
ON_DECL int ON_SolveCubicEquation (double a, double b, double c, double d, double *r1, double *r2, double *r3)
 
ON_DECL double ON_SolveNxN (bool bFullPivot, bool bNormalize, int n, double *M[], double B[], double X[])
 
ON_DECL int ON_SolveQuadraticEquation (double, double, double, double *, double *)
 
ON_DECL bool ON_SolveSVD (int row_count, int col_count, double const *const *U, const double *invW, double const *const *V, const double *B, double *&X)
 
ON_DECL int ON_SolveTriDiagonal (int, int, double *, const double *, double *, const double *, double *)
 
ON_DECL void ON_Sort (ON::sort_algorithm method, int *index, const void *base, size_t count, size_t sizeof_element, int(*compare)(const void *, const void *))
 
ON_DECL void ON_Sort (ON::sort_algorithm method, int *index, const void *base, size_t count, size_t sizeof_element, int(*compare)(const void *, const void *, void *), void *context)
 
ON_DECL void ON_Sort (ON::sort_algorithm method, unsigned int *index, const void *base, size_t count, size_t sizeof_element, int(*compare)(const void *, const void *))
 
ON_DECL void ON_Sort (ON::sort_algorithm method, unsigned int *index, const void *base, size_t count, size_t sizeof_element, int(*compare)(const void *, const void *, void *), void *context)
 
ON_DECL bool ON_SortCurves (const ON_SimpleArray< const ON_Curve * > &curves, ON_SimpleArray< int > &index, ON_SimpleArray< bool > &bReverse)
 
ON_DECL bool ON_SortCurves (const ON_SimpleArray< ON_Curve * > &curves, ON_SimpleArray< int > &index, ON_SimpleArray< bool > &bReverse)
 
ON_DECL bool ON_SortCurves (int curve_count, const ON_Curve *const *curve_list, int *index, bool *bReverse)
 
ON_DECL void ON_SortDoubleArray (ON::sort_algorithm sort_algorithm, double *a, size_t nel)
 
ON_DECL void ON_SortDoubleArrayDecreasing (double *a, size_t nel)
 
ON_DECL void ON_SortDoubleArrayIncreasing (double *a, size_t nel)
 
ON_DECL void ON_SortIntArray (ON::sort_algorithm sort_algorithm, int *a, size_t nel)
 
ON_DECL bool ON_SortLines (const ON_SimpleArray< ON_Line > &line_list, int *index, bool *bReverse)
 
ON_DECL bool ON_SortLines (int line_count, const ON_Line *line_list, int *index, bool *bReverse)
 
ON_DECL void ON_SortStringArray (ON::sort_algorithm sort_algorithm, char **a, size_t nel)
 
ON_DECL void ON_SortUINT64Array (ON::sort_algorithm sort_algorithm, ON__UINT64 *a, size_t nel)
 
ON_DECL void ON_SortUnsignedIntArray (ON::sort_algorithm sort_algorithm, unsigned int *a, size_t nel)
 
ON_DECL double ON_SpanTolerance (int, int, const double *, int)
 
ON_DECL void on_splitpath (const char *path, const char **volume, const char **dir, const char **fname, const char **ext)
 
ON_DECL bool ON_SquishBack2dMarks (const ON_Geometry *squished_geometry, const ON_SimpleArray< const ON_Geometry * > *marks, ON_SimpleArray< ON_Geometry * > *squished_marks)
 
ON_DECL ON_MeshON_SquishMesh (const ON_Mesh *mesh, const ON_SquishParameters *squish_parameters, const ON_SquishConstraints *squish_constraints, const ON_SimpleArray< const ON_Geometry * > *marks, ON_SimpleArray< ON_Geometry * > *squished_marks, ON_Mesh *squished_mesh)
 
ON_DECL ON_MeshON_SquishMesh (const ON_Mesh *mesh, const ON_SquishParameters *squish_parameters, const ON_SquishConstraints *squish_constraints, ON_Mesh *squished_mesh)
 
ON_DECL ON_BrepON_SquishSurface (const ON_Surface *surface, const ON_SquishParameters *squish_parameters, const ON_SimpleArray< const ON_Geometry * > *marks, ON_SimpleArray< ON_Geometry * > *squished_marks, ON_Brep *squished_brep)
 
ON_DECL ON_BrepON_SquishSurface (const ON_Surface *surface, const ON_SquishParameters *squish_parameters, ON_Brep *squished_brep)
 
void on_srand (ON__UINT32 s)
 
 ON_STATIC_ASSERT (sizeof(ON__INT16)==2)
 
 ON_STATIC_ASSERT (sizeof(ON__INT32)==4)
 
 ON_STATIC_ASSERT (sizeof(ON__INT64)==8)
 
 ON_STATIC_ASSERT (sizeof(ON__INT8)==1)
 
 ON_STATIC_ASSERT (sizeof(ON__UINT16)==2)
 
 ON_STATIC_ASSERT (sizeof(ON__UINT32)==4)
 
 ON_STATIC_ASSERT (sizeof(ON__UINT64)==8)
 
 ON_STATIC_ASSERT (sizeof(ON__UINT8)==1)
 
 ON_STATIC_ASSERT_MSG (ON_SIZEOF_POINTER==sizeof(void *), "ON_SIZEOF_POINTER must be equal to sizeof(void*)")
 
 ON_STATIC_ASSERT_MSG (sizeof(ON__INT_PTR)==sizeof(void *), "ON_INT_PTR must be an integer type with sizeof(ON_INT_PTR) = sizeof(void*)")
 
 ON_STATIC_ASSERT_MSG (sizeof(ON__UINT_PTR)==sizeof(void *), "ON_UINT_PTR must be an integer type with sizeof(ON_UINT_PTR) = sizeof(void*)")
 
ON_DECL std::string ON_VARGS_FUNC_CDECL ON_std_string_format (const char *format,...) ON_NOEXCEPT
 
ON_DECL std::wstring ON_VARGS_FUNC_CDECL ON_std_wstring_format (const wchar_t *format,...) ON_NOEXCEPT
 
ON_DECL int on_stricmp (const char *, const char *)
 
ON_DECL int ON_StringCompareOrdinalUTF16 (const ON__UINT16 *string1, int element_count1, const ON__UINT16 *string2, int element_count2, bool bOrdinalIgnoreCase)
 
ON_DECL int ON_StringCompareOrdinalUTF32 (const ON__UINT32 *string1, int element_count1, const ON__UINT32 *string2, int element_count2, bool bOrdinalIgnoreCase)
 
ON_DECL int ON_StringCompareOrdinalUTF8 (const char *string1, int element_count1, const char *string2, int element_count2, bool bOrdinalIgnoreCase)
 
ON_DECL int ON_StringCompareOrdinalWideChar (const wchar_t *string1, int element_count1, const wchar_t *string2, int element_count2, bool bOrdinalIgnoreCase)
 
const ON_SHA1_Hash ON_StringContentHash (const char *sUTF8, int element_count, ON_StringMapOrdinalType mapping)
 
const ON_SHA1_Hash ON_StringContentHash (const wchar_t *sWideString, int element_count, ON_StringMapOrdinalType mapping)
 
ON_DECL int ON_StringLengthUTF16 (const ON__UINT16 *string)
 
ON_DECL int ON_StringLengthUTF16 (const ON__UINT16 *string, size_t string_capacity)
 
ON_DECL int ON_StringLengthUTF32 (const ON__UINT32 *string)
 
ON_DECL int ON_StringLengthUTF32 (const ON__UINT32 *string, size_t string_capacity)
 
ON_DECL int ON_StringLengthUTF8 (const char *string)
 
ON_DECL int ON_StringLengthUTF8 (const char *string, size_t string_capacity)
 
ON_DECL int ON_StringLengthWideChar (const wchar_t *string)
 
ON_DECL int ON_StringLengthWideChar (const wchar_t *string, size_t string_capacity)
 
ON_DECL ON_StringMapOrdinalType ON_StringMapOrdinalTypeFromStringMapType (ON_StringMapType map_type)
 
ON_DECL int ON_StringToBase32 (const char *sBase32, unsigned char *base32_digits)
 
ON_DECL int ON_StringToBase32 (const ON_String &sBase32, ON_SimpleArray< unsigned char > &base32_digits)
 
ON_DECL int ON_StringToBase32 (const ON_wString &sBase32, ON_SimpleArray< unsigned char > &base32_digits)
 
ON_DECL char * on_strlwr (char *)
 on_strlwr() calls _strlwr() or strlwr() depending on OS More...
 
ON_DECL int on_strnicmp (const char *s1, const char *s2, int n)
 
ON_DECL char * on_strrev (char *)
 on_strrev() calls _strrev() or strrev() depending on OS More...
 
ON_DECL char * on_strupr (char *)
 on_strupr() calls _strupr() or strupr() depending on OS More...
 
ON_SubDComponentLocation ON_SubDComponentLocationFromUnsigned (unsigned int loc_as_unsigned)
 
bool ON_SubDComponentRegionBreakpoint (const class ON_SubDComponentRegion *component_region)
 
ON_DECL ON_SubDEndCapStyle ON_SubDEndCapStyleFromUnsigned (unsigned int subd_cap_style_as_unsigned)
 Convert an integer value to an ON_SubDEndCapStyle enum value. More...
 
const ON_DECL ON_wString ON_SubDEndCapStyleToString (ON_SubDEndCapStyle subd_cap_style)
 Convert subd_cap_style to a string description. More...
 
bool ON_SubDFaceRegionBreakpoint (unsigned int level0_face_id, const class ON_SubDComponentRegionIndex &region_index)
 
ON_DECL ON_SubDHashType ON_SubDHashTypeFromUnsigned (unsigned int subd_hash_type_as_unsigned)
 
const ON_DECL ON_wString ON_SubDHashTypeToString (ON_SubDHashType subd_hash_type, bool bVerbose)
 
ON_DECL double ON_SuperfluousKnot (int order, int cv_count, const double *knot, int)
 
ON_DECL bool ON_SwapPointGridCoordinates (int, int, int, int, double *, int, int)
 
ON_DECL bool ON_SwapPointListCoordinates (int, int, double *, int, int)
 
ON_DECL bool ON_SwapPointListCoordinates (int, int, float *, int, int)
 
ON_DECL bool ON_Sym3x3EigenSolver (double A, double B, double C, double D, double E, double F, double *e1, ON_3dVector &E1, double *e2, ON_3dVector &E2, double *e3, ON_3dVector &E3)
 
ON_DECL bool ON_Test_MSSBCP (bool bWindowsAPITest, ON_TextLog &text_log)
 
ON_DECL bool ON_Test_MSSBCP (const ON__UINT32 code_page, bool bWindowsAPITest, ON_TextLog &text_log)
 
ON_END_EXTERNC ON_DECL ON__UINT32 ON_Test_MSSBCP (const ON__UINT32 code_page, const ON__UINT32 char_encoding, bool bWindowsAPITest, ON_TextLog &text_log)
 
ON_DECL bool ON_Test_PrintPlatformMSSBCPToUnicodeTable (const ON__UINT32 code_page, ON__UINT32 char_encoding0, ON__UINT32 char_encoding1, ON_TextLog &text_log)
 
ON_DECL void ON_TestHashSpeed (size_t byte_count, bool bTestCRC16, bool bTestCRC32, bool bTestMD5, bool bTestSHA1, ON_TextLog &text_log)
 
ON_DECL void ON_TestHashSpeed (size_t byte_count, ON__UINT16 *crc16, ON__UINT32 *crc32, ON_MD5_Hash *md5_hash, ON_SHA1_Hash *sha1_hash, double elapsed_time_in_seconds[4])
 
ON_DECL void ON_TestHashSpeed (size_t byte_count, ON_TextLog &text_log)
 
ON_DECL double ON_TestMathFunction (int function_index, double x, double y)
 
ON_DECL bool ON_TestVersionNumber (unsigned int major, unsigned int minor, unsigned int year, unsigned int month, unsigned int day_of_month, unsigned int platform_branch, unsigned int version_as_unsigned_number)
 
ON_DECL bool ON_TransformBrepComponents (ON_Brep *brep, int brep_component_count, const ON_COMPONENT_INDEX *brep_components, ON_Xform xform, double tolerance, double time_limit, bool bUseMultipleThreads)
 
ON_DECL bool ON_TransformPointGrid (int, bool, int, int, int, int, double *, const ON_Xform &)
 
ON_DECL bool ON_TransformPointList (int, bool, int, int, double *, const ON_Xform &)
 
ON_DECL bool ON_TransformPointList (int, bool, int, int, float *, const ON_Xform &)
 
ON_DECL bool ON_TransformVectorList (int, int, int, double *, const ON_Xform &)
 
ON_DECL bool ON_TransformVectorList (int, int, int, float *, const ON_Xform &)
 
ON_DECL double ON_TriangleArea2d (ON_2dPoint A, ON_2dPoint B, ON_2dPoint C)
 
ON_DECL double ON_TriangleArea3d (ON_3dPoint A, ON_3dPoint B, ON_3dPoint C)
 
ON_DECL ON_3dVector ON_TriangleNormal (const ON_3dPoint &A, const ON_3dPoint &B, const ON_3dPoint &C)
 
ON_DECL ON_CurveON_TrimCurve (const ON_Curve &curve, ON_Interval trim_parameters)
 
ON_DECL double ON_TrinomialCoefficient (int i, int j, int k)
 
ON_DECL double ON_TripleProduct (const double *, const double *, const double *)
 
ON_DECL float ON_TripleProduct (const float *, const float *, const float *)
 
ON_DECL double ON_TripleProduct (const ON_3dVector &, const ON_3dVector &, const ON_3dVector &)
 
ON_DECL float ON_TripleProduct (const ON_3fVector &, const ON_3fVector &, const ON_3fVector &)
 
ON_DECL bool ON_TuneupEvaluationParameter (int side, double s0, double s1, double *s)
 
ON_DECL bool ON_UnclampKnotVectorForExperts (int cv_dim, int order, int cv_count, int cv_stride, double *cv, double *knot, int end)
 
ON_DECL size_t ON_UncompressBuffer (size_t sizeof_compressed_buffer, const void *compressed_buffer, size_t sizeof_uncompressed_buffer, void *uncompressed_buffer)
 
ON_DECL ON__UINT32 ON_UnicodeMapCodePoint (const ON_Locale &locale, ON_StringMapType map_type, ON__UINT32 unicode_code_point)
 
ON_DECL ON__UINT32 ON_UnicodeMapCodePointOrdinal (ON_StringMapOrdinalType map_type, ON__UINT32 unicode_code_point)
 
ON_DECL enum ON_UnicodeEncoding ON_UnicodeNativeCPU_UTF16 ()
 
ON_DECL enum ON_UnicodeEncoding ON_UnicodeNativeCPU_UTF32 ()
 
ON_DECL unsigned ON_UnicodeSubcriptFromCodePoint (unsigned cp, unsigned no_subscript_cp)
 When possible, converts a code point to a subscript code point. Note that many common fonts typecast the Unicode digit subscripts as vulgar fraction denominators rather than a proper subscript. More...
 
ON_DECL unsigned ON_UnicodeSubscriptFromDigit (unsigned decimal_digit)
 Get the Unicode code point for a decimal digit subscript. More...
 
ON_DECL unsigned ON_UnicodeSuperscriptFromCodePoint (unsigned cp, unsigned no_superscript_cp)
 When possible, converts a code point to a superscript code point. Note that many common fonts typecast the Unicode digit superscripts as vulgar fraction numerators rather than a proper superscript. More...
 
ON_DECL unsigned ON_UnicodeSuperscriptFromDigit (unsigned decimal_digit)
 Get the Unicode code point for a decimal digit superscript. More...
 
ON_DECL std::string ON_UTF16_to_std_string (int bTestByteOrder, const ON__UINT16 *sInputUTF, int sInputUTF_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const ON__UINT16 **sEndElement) ON_NOEXCEPT
 
ON_DECL std::wstring ON_UTF16_to_std_wstring (int bTestByteOrder, const ON__UINT16 *sInputUTF, int sInputUTF_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const ON__UINT16 **sEndElement) ON_NOEXCEPT
 
ON_DECL std::string ON_UTF32_to_std_string (int bTestByteOrder, const ON__UINT32 *sInputUTF, int sInputUTF_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const ON__UINT32 **sEndElement) ON_NOEXCEPT
 
ON_DECL std::wstring ON_UTF32_to_std_wstring (int bTestByteOrder, const ON__UINT32 *sInputUTF, int sInputUTF_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const ON__UINT32 **sEndElement) ON_NOEXCEPT
 
ON_DECL std::string ON_UTF8_to_std_string (int bTestByteOrder, const char *sInputUTF, int sInputUTF_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const char **sEndElement) ON_NOEXCEPT
 
ON_DECL std::wstring ON_UTF8_to_std_wstring (int bTestByteOrder, const char *sInputUTF, int sInputUTF_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, const char **sEndElement) ON_NOEXCEPT
 
ON_DECL std::wstring ON_UTF_std_string_to_std_wstring (int bTestByteOrder, const std::string &sInputUTF, int sInputUTF_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, int *end_element_index) ON_NOEXCEPT
 
ON_DECL std::string ON_UTF_std_wstring_to_std_string (int bTestByteOrder, const std::wstring &sInputUTF, int sInputUTF_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, int *end_element_index) ON_NOEXCEPT
 
std::string ON_UTF_WideChar_to_std_string (int bTestByteOrder, const wchar_t *sInputUTF, int sInputUTF_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, int *end_element_index) ON_NOEXCEPT
 
std::wstring ON_UTF_WideChar_to_std_wstring (int bTestByteOrder, const wchar_t *sInputUTF, int sInputUTF_count, unsigned int *error_status, unsigned int error_mask, ON__UINT32 error_code_point, int *end_element_index) ON_NOEXCEPT
 
ON_DECL unsigned int ON_UTFSizeofByteOrderMark (enum ON_UnicodeEncoding e)
 
ON_DECL int ON_UuidCompare (const ON_UUID &a, const ON_UUID &b)
 
ON_DECL int ON_UuidCompare (const ON_UUID *a, const ON_UUID *b)
 
ON_DECL ON_UUID ON_UuidFromString (const char *s)
 
ON_DECL ON_UUID ON_UuidFromString (const wchar_t *s)
 
ON_DECL bool ON_UuidIsNil (const ON_UUID &uuid)
 
ON_DECL bool ON_UuidIsNotNil (const ON_UUID &uuid)
 
ON_DECL char * ON_UuidToString (const ON_UUID &uuid, char *s)
 
const ON_DECL char * ON_UuidToString (const ON_UUID &uuid, ON_String &s)
 
const ON_DECL wchar_t * ON_UuidToString (const ON_UUID &uuid, ON_wString &s)
 
ON_DECL wchar_t * ON_UuidToString (const ON_UUID &uuid, wchar_t *s)
 
ON_DECL bool ON_ValidateBrepLoop (const ON_Brep &B, int loop_id)
 See ON_ValidateBrepLoops. More...
 
ON_DECL bool ON_ValidateBrepLoops (const ON_Brep &B, ON_SimpleArray< int > *loop_ids=0)
 
ON_DECL bool ON_ValidateCurveCVSpacing (const ON_NurbsCurve &crv, double close_tol, double stack_tol, ON_SimpleArray< int > &close_ids, ON_SimpleArray< int > &stacked_ids, double &chord_length)
 
ON_DECL bool ON_ValidateCurveSet (const ON_SimpleArray< const ON_Curve * > &Crvs, double close_dist_tol, double good_dist_tol, double close_kink_tol, double good_kink_tol, double close_curvature_tol, double good_curvature_tol, ON_SimpleArray< ON_2dex > &overlap_problems, ON_SimpleArray< ON_Interval > &overlap_subdoms, ON_SimpleArray< ON_4dex > &g0_problems, ON_SimpleArray< ON_4dex > &g1_problems, ON_SimpleArray< ON_4dex > &g2_problems)
 
ON_DECL bool ON_ValidateEdgeTrims (const ON_Brep &brep, int edge_index, ON_TextLog *text_log, ON_BrepTrimPoint *bad_tp, int *bad_eti, double *deviation)
 
ON_DECL bool ON_ValidateNurbsSurfacePole (const ON_NurbsSurface &srf, int side, double tolerance, ON_3dPoint *pAvgPole)
 
ON_DECL bool ON_ValidateSurfaceCVSpacing (const ON_NurbsSurface &srf, double close_tol, double stack_tol, ON_SimpleArray< ON_2dex > &close_ids, ON_SimpleArray< ON_2dex > &stacked_ids)
 
ON_DECL bool ON_ValidateSurfaceSeam (const ON_Surface &srf, int dir, double dist_tol, double angle_tol, bool &bIsCloseG1)
 
ON_DECL unsigned int ON_VersionNumberConstruct (unsigned int major_version, unsigned int minor_version, unsigned int year, unsigned int month, unsigned int day_of_month, unsigned int platform_branch)
 
ON_DECL unsigned int ON_VersionNumberFromYearMonthDateFormat (unsigned int major_version, unsigned int yyyy_mm_dd_n_version_number)
 
ON_DECL bool ON_VersionNumberIsValid (unsigned int version_number)
 
ON_DECL bool ON_VersionNumberIsYearMonthDateFormat (unsigned int archive_3dm_version, unsigned int version_number)
 
ON_DECL unsigned int ON_VersionNumberMinimum (unsigned int major_version)
 
ON_DECL bool ON_VersionNumberParse (unsigned int version_number, unsigned int *version_major, unsigned int *version_minor, unsigned int *version_year, unsigned int *version_month, unsigned int *version_day_of_month, unsigned int *version_branch)
 
const ON_DECL ON_String ON_VersionNumberToString (unsigned int version_number, bool bUnsignedFormat, bool bDateFormat)
 
const ON_DECL ON_wString ON_VersionNumberToWideString (unsigned int version_number, bool bUnsignedFormat, bool bDateFormat)
 
ON_DECL bool ON_ViewportFromRhinoView (ON::view_projection, const ON_3dPoint &, double, double, double, double, double, int, int, ON_Viewport &)
 
ON_DECL double ON_VoronoiArea2d (const ON_2dPoint &p0, const ON_2dPoint &p1, const ON_2dPoint &p2)
 Compute the Voronoi area contribution of a 2d triangle. More...
 
ON_DECL double ON_VoronoiArea3d (const ON_3dPoint &p0, const ON_3dPoint &p1, const ON_3dPoint &p2)
 Compute the Voronoi area contribution of a 3d triangle. More...
 
ON_DECL void ON_VARGS_FUNC_CDECL ON_Warning (const char *file_name, int line_number, const char *format,...)
 
ON_DECL void ON_VARGS_FUNC_CDECL ON_WarningEx (const char *file_name, int line_number, const char *function_name, const char *format,...)
 
ON_BEGIN_EXTERNC ON_DECL int on_wcsicmp (const wchar_t *, const wchar_t *)
 
ON_DECL wchar_t * on_wcslwr (wchar_t *)
 on_wcslwr() calls _wcslwr() or wcslwr() depending on OS More...
 
ON_DECL wchar_t * on_wcsrev (wchar_t *)
 on_wcsrev() calls _wcsrev() or wcsrev() depending on OS More...
 
ON_DECL wchar_t * on_wcsupr (wchar_t *)
 on_wcsupr() calls _wcsupr() or wcsupr() depending on OS More...
 
ON_DECL double ON_WedgeProduct (const ON_2dVector &A, const ON_2dVector &B)
 
ON_DECL int on_WideCharToMultiByte (const wchar_t *, int, char *, int)
 
ON_DECL ON__UINT64 ON_WorkerThreadContextSerialNumber ()
 
ON_DECL ON__UINT64 ON_WorkerThreadEnableTerminateRequest ()
 
ON_DECL ON__UINT64 ON_WorkerThreadTerminateRequestStatus ()
 
ON_DECL bool ON_WorldBBoxIsInTightBBox (const ON_BoundingBox &tight_bbox, const ON_BoundingBox &world_bbox, const ON_Xform *xform)
 
bool ON_WriteMultipleObjectArchive (const wchar_t *filename, int version, size_t object_list_count, const ON_Object *const *object_list)
 
ON_DECL bool ON_WriteMultipleObjectArchive (ON_BinaryArchive &archive, int version, const ON_SimpleArray< const ON_Object * > &object_list)
 
ON_DECL bool ON_WriteMultipleObjectArchive (ON_BinaryArchive &archive, int version, size_t object_list_count, const ON_Object *const *object_list)
 
ON_DECL bool ON_WriteOneObjectArchive (const wchar_t *filename, const ON_Object &object)
 
ON_DECL bool ON_WriteOneObjectArchive (ON_BinaryArchive &archive, int version, const ON_Object &object)
 
ON_DECL void on_wsplitpath (const wchar_t *path, const wchar_t **volume, const wchar_t **dir, const wchar_t **fname, const wchar_t **ext)
 
ON_DECL void * oncalloc (size_t, size_t)
 
ON_DECL void onfree (void *)
 
ON_DECL void * onmalloc (size_t)
 
ON_DECL void * onmalloc_forever (size_t)
 
ON_DECL unsigned char * onmbsdup (const unsigned char *)
 
ON_DECL void * onmemdup (const void *, size_t)
 
ON_DECL void * onrealloc (void *, size_t)
 
ON_DECL char * onstrdup (const char *)
 
ON_DECL wchar_t * onwcsdup (const wchar_t *)
 
 ON_SimpleArray< T >::operator const T * () const
 
 ON_ClassArray< T >::operator const T * () const
 
 ON_SimpleArray< T >::operator T* ()
 The cast operators return a pointer. More...
 
 ON_ClassArray< T >::operator T* ()
 The cast operators return a pointer. More...
 
ON_DECL bool operator!= (const char *lhs, const ON_String &rhs)
 
ON_DECL bool operator!= (const class ON_ParseSettings &a, const class ON_ParseSettings &b)
 
bool operator!= (const class ON_TextMask &lhs, const class ON_TextMask &rhs)
 
ON_DECL bool operator!= (const ON_2dSize &lhs, const ON_2dSize &rhs)
 
ON_DECL bool operator!= (const ON_2iBoundingBox &, const ON_2iBoundingBox &)
 
ON_DECL bool operator!= (const ON_2iPoint &, const ON_2iPoint &)
 
ON_DECL bool operator!= (const ON_2iSize &lhs, const ON_2iSize &rhs)
 
ON_DECL bool operator!= (const ON_2iVector &, const ON_2iVector &)
 
ON_DECL bool operator!= (const ON_4dRect &, const ON_4dRect &)
 
ON_DECL bool operator!= (const ON_4iRect &, const ON_4iRect &)
 
ON_DECL bool operator!= (const ON_AngleUnitName &a, const ON_AngleUnitName &b)
 
ON_DECL bool operator!= (const ON_BoundingBox &lhs, const ON_BoundingBox &rhs)
 
ON_DECL bool operator!= (const ON_LengthUnitName &a, const ON_LengthUnitName &b)
 
ON_DECL bool operator!= (const ON_Line &a, const ON_Line &b)
 
ON_DECL bool operator!= (const ON_ManifestMapItem &lhs, const ON_ManifestMapItem &rhs)
 
ON_DECL bool operator!= (const ON_MappingTag &lhs, const ON_MappingTag &rhs)
 
ON_DECL bool operator!= (const ON_Material &, const ON_Material &)
 
ON_DECL bool operator!= (const ON_MD5_Hash &a, const ON_MD5_Hash &b)
 
ON_DECL bool operator!= (const ON_MeshParameters &a, const ON_MeshParameters &b)
 
bool operator!= (const ON_ModelComponentContentMark &lhs, const ON_ModelComponentContentMark &rhs)
 
ON_DECL bool operator!= (const ON_NameHash &a, const ON_NameHash &b)
 
ON_DECL bool operator!= (const ON_SHA1_Hash &a, const ON_SHA1_Hash &b)
 
ON_DECL bool operator!= (const ON_String &lhs, const char *rhs)
 
ON_DECL bool operator!= (const ON_String &lhs, const ON_String &rhs)
 
ON_DECL bool operator!= (const ON_SubDEdgeSharpness &lhs, const ON_SubDEdgeSharpness &rhs)
 
bool operator!= (const ON_SubDExpandEdgesParameters &lhs, const ON_SubDExpandEdgesParameters &rhs)
 
ON_WIP_DECL bool operator!= (const ON_SubDFaceParameter &lhs, const ON_SubDFaceParameter &rhs)
 
bool operator!= (const ON_SubDHash &lhs, const ON_SubDHash &rhs)
 
bool operator!= (const ON_SubDToBrepParameters &lhs, const ON_SubDToBrepParameters &rhs)
 
ON_DECL bool operator!= (const ON_SurfaceCurvature &lhs, const ON_SurfaceCurvature &rhs)
 
ON_DECL bool operator!= (const ON_SurfaceCurvatureColorMapping &lhs, const ON_SurfaceCurvatureColorMapping &rhs)
 Returns true if some property of lhs and rhs is different and no double is a nan. More...
 
ON_DECL bool operator!= (const ON_SurfaceDraftAngleColorMapping &lhs, const ON_SurfaceDraftAngleColorMapping &rhs)
 Returns true if some property of lhs and rhs is different and no double is a nan. More...
 
ON_DECL bool operator!= (const ON_Triangle &a, const ON_Triangle &b)
 
ON_DECL bool operator!= (const ON_wString &lhs, const ON_wString &rhs)
 
ON_DECL bool operator!= (const ON_wString &lhs, const wchar_t *rhs)
 
bool operator!= (const struct ON_UUID_struct &a, const struct ON_UUID_struct &b)
 
ON_DECL bool operator!= (const wchar_t *lhs, const ON_wString &rhs)
 
ON_DECL bool operator!= (ON_Big5CodePoint lhs, ON_Big5CodePoint rhs)
 
ON_DECL bool operator!= (ON_Big5UnicodePair lhs, ON_Big5UnicodePair rhs)
 
ON_DECL bool operator!= (ON_SubDComponentPtr lhs, ON_SubDComponentPtr rhs)
 
ON_DECL bool operator!= (ON_SubDEdgePtr lhs, ON_SubDEdgePtr rhs)
 
ON_DECL bool operator!= (ON_SubDFacePtr lhs, ON_SubDFacePtr rhs)
 
ON_DECL bool operator!= (ON_SubDSectorId, ON_SubDSectorId)
 
ON_DECL bool operator!= (ON_SubDVertexPtr lhs, ON_SubDVertexPtr rhs)
 
ON_DECL bool operator!= (ON_UnicodeShortCodePoint lhs, ON_UnicodeShortCodePoint rhs)
 
ON_DECL ON_ParseSettings operator&& (const class ON_ParseSettings &a, const class ON_ParseSettings &b)
 
const ON_DECL ON_PlaneEquation operator* (const ON_Xform &, const ON_PlaneEquation &)
 
const ON_DECL ON_Xform operator* (const ON_Xform &xform, double c)
 
const ON_DECL ON_Xform operator* (double c, const ON_Xform &xform)
 
ON_DECL ON_2dPoint operator* (double, const ON_2dPoint &)
 
ON_DECL ON_2dVector operator* (double, const ON_2dVector &)
 
ON_DECL ON_2dPoint operator* (double, const ON_2fPoint &)
 
ON_DECL ON_2dVector operator* (double, const ON_2fVector &)
 
ON_DECL ON_3dPoint operator* (double, const ON_3dPoint &)
 
ON_DECL ON_3dVector operator* (double, const ON_3dVector &)
 
ON_DECL ON_3dPoint operator* (double, const ON_3fPoint &)
 
ON_DECL ON_3dVector operator* (double, const ON_3fVector &)
 
ON_DECL ON_4dPoint operator* (double, const ON_4dPoint &)
 
ON_DECL ON_4dPoint operator* (double, const ON_4fPoint &)
 
ON_DECL ON_Quaternion operator* (double, const ON_Quaternion &)
 
ON_DECL ON_2dPoint operator* (float, const ON_2dPoint &)
 
ON_DECL ON_2dVector operator* (float, const ON_2dVector &)
 
ON_DECL ON_2fPoint operator* (float, const ON_2fPoint &)
 
ON_DECL ON_2fVector operator* (float, const ON_2fVector &)
 
ON_DECL ON_3dPoint operator* (float, const ON_3dPoint &)
 
ON_DECL ON_3dVector operator* (float, const ON_3dVector &)
 
ON_DECL ON_3fPoint operator* (float, const ON_3fPoint &)
 
ON_DECL ON_3fVector operator* (float, const ON_3fVector &)
 
ON_DECL ON_4fPoint operator* (float, const ON_4fPoint &)
 
ON_DECL ON_Quaternion operator* (float, const ON_Quaternion &)
 
ON_DECL ON_2dPoint operator* (int, const ON_2dPoint &)
 
ON_DECL ON_2dVector operator* (int, const ON_2dVector &)
 
ON_DECL ON_2fPoint operator* (int, const ON_2fPoint &)
 
ON_DECL ON_2fVector operator* (int, const ON_2fVector &)
 
ON_DECL ON_2iVector operator* (int, const ON_2iVector &)
 
ON_DECL ON_3dPoint operator* (int, const ON_3dPoint &)
 
ON_DECL ON_3dVector operator* (int, const ON_3dVector &)
 
ON_DECL ON_3fPoint operator* (int, const ON_3fPoint &)
 
ON_DECL ON_3fVector operator* (int, const ON_3fVector &)
 
ON_DECL ON_Quaternion operator* (int, const ON_Quaternion &)
 
ON_DECL ON_2iPoint operator+ (const ON_2iPoint &, const ON_2iVector &)
 
ON_DECL ON_2iVector operator+ (const ON_2iVector &, const ON_2iVector &)
 
ON_DECL ON_2iPoint operator- (const ON_2iPoint &, const ON_2iVector &)
 
ON_DECL ON_2iVector operator- (const ON_2iVector &, const ON_2iVector &)
 
ON_DECL bool operator< (const char *lhs, const ON_String &rhs)
 
ON_DECL bool operator< (const ON_NameHash &a, const ON_NameHash &b)
 
ON_DECL bool operator< (const ON_String &lhs, const char *rhs)
 
ON_DECL bool operator< (const ON_String &lhs, const ON_String &rhs)
 
ON_DECL bool operator< (const ON_wString &lhs, const ON_wString &rhs)
 
ON_DECL bool operator< (const ON_wString &lhs, const wchar_t *rhs)
 
ON_DECL bool operator< (const wchar_t *lhs, const ON_wString &rhs)
 
ON_DECL bool operator< (ON_Big5CodePoint lhs, ON_Big5CodePoint rhs)
 
ON_DECL bool operator< (ON_SubDSectorId, ON_SubDSectorId)
 
ON_DECL bool operator< (ON_UnicodeShortCodePoint lhs, ON_UnicodeShortCodePoint rhs)
 
ON_DECL bool operator<= (const char *lhs, const ON_String &rhs)
 
ON_DECL bool operator<= (const ON_NameHash &a, const ON_NameHash &b)
 
ON_DECL bool operator<= (const ON_String &lhs, const char *rhs)
 
ON_DECL bool operator<= (const ON_String &lhs, const ON_String &rhs)
 
ON_DECL bool operator<= (const ON_wString &lhs, const ON_wString &rhs)
 
ON_DECL bool operator<= (const ON_wString &lhs, const wchar_t *rhs)
 
ON_DECL bool operator<= (const wchar_t *lhs, const ON_wString &rhs)
 
ON_DECL bool operator<= (ON_Big5CodePoint lhs, ON_Big5CodePoint rhs)
 
ON_DECL bool operator<= (ON_SubDSectorId, ON_SubDSectorId)
 
ON_DECL bool operator<= (ON_UnicodeShortCodePoint lhs, ON_UnicodeShortCodePoint rhs)
 
ON_ClassArray< T > & ON_ClassArray< T >::operator= (const ON_ClassArray< T > &)
 Assignment operator. More...
 
ON_ObjectArray< T > & ON_ObjectArray< T >::operator= (const ON_ObjectArray< T > &)
 
ON_SimpleArray< T > & ON_SimpleArray< T >::operator= (const ON_SimpleArray< T > &)
 
ON_DECL bool operator== (const char *lhs, const ON_String &rhs)
 
ON_DECL bool operator== (const class ON_ParseSettings &a, const class ON_ParseSettings &b)
 
bool operator== (const class ON_TextMask &lhs, const class ON_TextMask &rhs)
 
ON_DECL bool operator== (const ON_2dSize &lhs, const ON_2dSize &rhs)
 
ON_DECL bool operator== (const ON_2iBoundingBox &, const ON_2iBoundingBox &)
 
ON_DECL bool operator== (const ON_2iPoint &, const ON_2iPoint &)
 
ON_DECL bool operator== (const ON_2iSize &lhs, const ON_2iSize &rhs)
 
ON_DECL bool operator== (const ON_2iVector &, const ON_2iVector &)
 
ON_DECL bool operator== (const ON_4dRect &, const ON_4dRect &)
 
ON_DECL bool operator== (const ON_4iRect &, const ON_4iRect &)
 
ON_DECL bool operator== (const ON_AngleUnitName &a, const ON_AngleUnitName &b)
 
ON_DECL bool operator== (const ON_BoundingBox &lhs, const ON_BoundingBox &rhs)
 
ON_DECL bool operator== (const ON_LengthUnitName &a, const ON_LengthUnitName &b)
 
ON_DECL bool operator== (const ON_Line &a, const ON_Line &b)
 
ON_DECL bool operator== (const ON_ManifestMapItem &lhs, const ON_ManifestMapItem &rhs)
 
ON_DECL bool operator== (const ON_MappingTag &lhs, const ON_MappingTag &rhs)
 
ON_DECL bool operator== (const ON_Material &, const ON_Material &)
 
ON_DECL bool operator== (const ON_MD5_Hash &a, const ON_MD5_Hash &b)
 
ON_DECL bool operator== (const ON_MeshParameters &a, const ON_MeshParameters &b)
 
bool operator== (const ON_ModelComponentContentMark &lhs, const ON_ModelComponentContentMark &rhs)
 
ON_DECL bool operator== (const ON_NameHash &a, const ON_NameHash &b)
 
ON_DECL bool operator== (const ON_SHA1_Hash &a, const ON_SHA1_Hash &b)
 
ON_DECL bool operator== (const ON_String &lhs, const char *rhs)
 
ON_DECL bool operator== (const ON_String &lhs, const ON_String &rhs)
 
ON_DECL bool operator== (const ON_SubDEdgeSharpness &lhs, const ON_SubDEdgeSharpness &rhs)
 
bool operator== (const ON_SubDExpandEdgesParameters &lhs, const ON_SubDExpandEdgesParameters &rhs)
 
ON_WIP_DECL bool operator== (const ON_SubDFaceParameter &lhs, const ON_SubDFaceParameter &rhs)
 
bool operator== (const ON_SubDHash &lhs, const ON_SubDHash &rhs)
 
bool operator== (const ON_SubDToBrepParameters &lhs, const ON_SubDToBrepParameters &rhs)
 
ON_DECL bool operator== (const ON_SurfaceCurvature &lhs, const ON_SurfaceCurvature &rhs)
 
ON_DECL bool operator== (const ON_SurfaceCurvatureColorMapping &lhs, const ON_SurfaceCurvatureColorMapping &rhs)
 Returns true if all properties of lhs and rhs are identical and no double is a nan. More...
 
ON_DECL bool operator== (const ON_SurfaceDraftAngleColorMapping &lhs, const ON_SurfaceDraftAngleColorMapping &rhs)
 Returns true if all properties of lhs and rhs are identical and no double is a nan. More...
 
ON_DECL bool operator== (const ON_Triangle &a, const ON_Triangle &b)
 
ON_DECL bool operator== (const ON_wString &lhs, const ON_wString &rhs)
 
ON_DECL bool operator== (const ON_wString &lhs, const wchar_t *rhs)
 
bool operator== (const struct ON_UUID_struct &a, const struct ON_UUID_struct &b)
 basic C++ declarations More...
 
ON_DECL bool operator== (const wchar_t *lhs, const ON_wString &rhs)
 
ON_DECL bool operator== (ON_Big5CodePoint lhs, ON_Big5CodePoint rhs)
 
ON_DECL bool operator== (ON_Big5UnicodePair lhs, ON_Big5UnicodePair rhs)
 
ON_DECL bool operator== (ON_SubDComponentPtr lhs, ON_SubDComponentPtr rhs)
 
ON_DECL bool operator== (ON_SubDEdgePtr lhs, ON_SubDEdgePtr rhs)
 
ON_DECL bool operator== (ON_SubDFacePtr lhs, ON_SubDFacePtr rhs)
 
ON_DECL bool operator== (ON_SubDSectorId, ON_SubDSectorId)
 
ON_DECL bool operator== (ON_SubDVertexPtr lhs, ON_SubDVertexPtr rhs)
 
ON_DECL bool operator== (ON_UnicodeShortCodePoint lhs, ON_UnicodeShortCodePoint rhs)
 
ON_DECL bool operator> (const char *lhs, const ON_String &rhs)
 
ON_DECL bool operator> (const ON_NameHash &a, const ON_NameHash &b)
 
ON_DECL bool operator> (const ON_String &lhs, const char *rhs)
 
ON_DECL bool operator> (const ON_String &lhs, const ON_String &rhs)
 
ON_DECL bool operator> (const ON_wString &lhs, const ON_wString &rhs)
 
ON_DECL bool operator> (const ON_wString &lhs, const wchar_t *rhs)
 
ON_DECL bool operator> (const wchar_t *lhs, const ON_wString &rhs)
 
ON_DECL bool operator> (ON_Big5CodePoint lhs, ON_Big5CodePoint rhs)
 
ON_DECL bool operator> (ON_SubDSectorId, ON_SubDSectorId)
 
ON_DECL bool operator> (ON_UnicodeShortCodePoint lhs, ON_UnicodeShortCodePoint rhs)
 
ON_DECL bool operator>= (const char *lhs, const ON_String &rhs)
 
ON_DECL bool operator>= (const ON_NameHash &a, const ON_NameHash &b)
 
ON_DECL bool operator>= (const ON_String &lhs, const char *rhs)
 
ON_DECL bool operator>= (const ON_String &lhs, const ON_String &rhs)
 
ON_DECL bool operator>= (const ON_wString &lhs, const ON_wString &rhs)
 
ON_DECL bool operator>= (const ON_wString &lhs, const wchar_t *rhs)
 
ON_DECL bool operator>= (const wchar_t *lhs, const ON_wString &rhs)
 
ON_DECL bool operator>= (ON_Big5CodePoint lhs, ON_Big5CodePoint rhs)
 
ON_DECL bool operator>= (ON_SubDSectorId, ON_SubDSectorId)
 
ON_DECL bool operator>= (ON_UnicodeShortCodePoint lhs, ON_UnicodeShortCodePoint rhs)
 
T & ON_SimpleArray< T >::operator[] (int)
 
T & ON_ClassArray< T >::operator[] (int)
 
const T & ON_SimpleArray< T >::operator[] (int) const
 
const T & ON_ClassArray< T >::operator[] (int) const
 
T & ON_SimpleArray< T >::operator[] (ON__INT64)
 
T & ON_ClassArray< T >::operator[] (ON__INT64)
 
const T & ON_SimpleArray< T >::operator[] (ON__INT64) const
 
const T & ON_ClassArray< T >::operator[] (ON__INT64) const
 
T & ON_SimpleArray< T >::operator[] (ON__UINT64)
 
T & ON_ClassArray< T >::operator[] (ON__UINT64)
 
const T & ON_SimpleArray< T >::operator[] (ON__UINT64) const
 
const T & ON_ClassArray< T >::operator[] (ON__UINT64) const
 
T & ON_SimpleArray< T >::operator[] (unsigned int)
 
T & ON_ClassArray< T >::operator[] (unsigned int)
 
const T & ON_SimpleArray< T >::operator[] (unsigned int) const
 
const T & ON_ClassArray< T >::operator[] (unsigned int) const
 
ON_DECL ON_ParseSettings operator|| (const class ON_ParseSettings &a, const class ON_ParseSettings &b)
 
bool ON_SimpleArray< T >::Permute (const int *)
 
bool ON_ClassArray< T >::Permute (const int *)
 
void ON_SimpleArray< T >::Prepend (int, const T *)
 Prepend copy of an array T[count]. More...
 
ON_DECL ON_SDFQueryResult QueryBoundingBox (const ON_BoundingBox &bb, const ON_SignedDistanceFunction &sdf, double tolerance)
 these functions are not in any header but need testing More...
 
ON_DECL ON_SDFQueryResult QueryCurveTreeLeaf (const ON_CurveTreeBezier &node, const ON_SignedDistanceFunction &sdf, double tolerance)
 
bool ON_SimpleArray< T >::QuickSort (int(*)(const T *, const T *))
 See Also: ON_CompareIncreasing<T> and ON_CompareDeccreasing<T> More...
 
virtual bool ON_ClassArray< T >::QuickSort (int(*)(const T *, const T *))
 Sorts the array using the heap sort algorithm. More...
 
bool ON_ObjectArray< T >::QuickSort (int(*)(const T *, const T *))
 
bool ON_SimpleArray< T >::QuickSortAndRemoveDuplicates (int(*)(const T *, const T *))
 See Also: ON_CompareIncreasing<T> and ON_CompareDeccreasing<T> More...
 
virtual T * ON_SimpleArray< T >::Realloc (T *, int)
 low level memory management ////////////////////////////////////////// More...
 
virtual T * ON_ClassArray< T >::Realloc (T *, int)
 low level memory management /////////////////////////////////////// More...
 
T * ON_ObjectArray< T >::Realloc (T *, int)
 
void ON_SimpleArray< T >::Remove ()
 
void ON_ClassArray< T >::Remove ()
 
virtual void ON_SimpleArray< T >::Remove (int)
 
void ON_ClassArray< T >::Remove (int)
 
void ON_SimpleArray< T >::RemoveIf (bool predicate(const T &key))
 
void ON_SimpleArray< T >::RemoveValue (const T &)
 
T * ON_SimpleArray< T >::Reserve (size_t)
 memory management //////////////////////////////////////////////////// More...
 
T * ON_ClassArray< T >::Reserve (size_t)
 memory management ///////////////////////////////////////////////// More...
 
void ON_SimpleFixedSizePoolIterator< T >::Reset ()
 
void ON_SimpleFixedSizePool< T >::ReturnAll ()
 
void ON_SimpleFixedSizePool< T >::ReturnElement (T *p)
 
void ON_SimpleArray< T >::Reverse ()
 reverse order More...
 
void ON_ClassArray< T >::Reverse ()
 reverse order More...
 
int ON_SimpleArray< T >::Search (const T &) const
 
int ON_SimpleArray< T >::Search (const T *, int(*)(const T *, const T *)) const
 See Also: ON_CompareIncreasing<T> and ON_CompareDeccreasing<T> More...
 
int ON_ClassArray< T >::Search (const T *, int(*)(const T *, const T *)) const
 
void ON_SimpleArray< T >::SetArray (T *)
 
void ON_ClassArray< T >::SetArray (T *)
 
void ON_SimpleArray< T >::SetArray (T *, int, int)
 
void ON_ClassArray< T >::SetArray (T *, int, int)
 
T * ON_SimpleArray< T >::SetCapacity (size_t)
 
T * ON_ClassArray< T >::SetCapacity (size_t)
 
void ON_SimpleArray< T >::SetCount (int)
 low level memory management ////////////////////////////////////////// More...
 
void ON_ClassArray< T >::SetCount (int)
 low level memory management ////////////////////////////////////////// More...
 
void ON_SimpleArray< T >::SetRange (int from, int count, T)
 
void ON_SimpleArray< T >::Shrink ()
 remove unused capacity More...
 
void ON_ClassArray< T >::Shrink ()
 remove unused capacity More...
 
unsigned int ON_SimpleArray< T >::SizeOfArray () const
 amount of memory in the m_a[] array More...
 
unsigned int ON_ClassArray< T >::SizeOfArray () const
 amount of memory in the m_a[] array More...
 
unsigned int ON_SimpleArray< T >::SizeOfElement () const
 amount of memory in an m_a[] array element More...
 
unsigned int ON_ClassArray< T >::SizeOfElement () const
 amount of memory in an m_a[] array element More...
 
size_t ON_SimpleFixedSizePool< T >::SizeofElement () const
 
bool ON_SimpleArray< T >::Sort (ON::sort_algorithm sort_algorithm, int *, int(*)(const T *, const T *)) const
 
bool ON_ClassArray< T >::Sort (ON::sort_algorithm sort_algorithm, int *, int(*)(const T *, const T *)) const
 
bool ON_SimpleArray< T >::Sort (ON::sort_algorithm sort_algorithm, int *, int(*)(const T *, const T *, void *), void *) const
 
bool ON_ClassArray< T >::Sort (ON::sort_algorithm sort_algorithm, int *, int(*)(const T *, const T *, void *), void *) const
 
void ON_SimpleArray< T >::Swap (int, int)
 swap elements i and j More...
 
void ON_ClassArray< T >::Swap (int, int)
 swap elements i and j More...
 
static void SwapBigInts (unsigned char *a, unsigned char *b, size_t width)
 
static void SwapChars (unsigned char *a, unsigned char *b, size_t width)
 
static void SwapInts (unsigned char *a, unsigned char *b, size_t width)
 
size_t ON_SimpleFixedSizePool< T >::TotalElementCount () const
 
unsigned int ON_SimpleArray< T >::UnsignedCount () const
 
unsigned int ON_ClassArray< T >::UnsignedCount () const
 
ON_BEGIN_EXTERNC voidpf zcalloc (voidpf, unsigned, unsigned)
 
void zcfree (voidpf, voidpf)
 
void ON_SimpleArray< T >::Zero ()
 
void ON_ClassArray< T >::Zero ()
 

Variables

const ON_EXTERN_DECL double ON_DBL_NINF
 
const ON_EXTERN_DECL double ON_DBL_PINF
 
ON_BEGIN_EXTERNC const ON_EXTERN_DECL double ON_DBL_QNAN
 IEEE 754 special values. More...
 
const ON_EXTERN_DECL float ON_FLT_NINF
 
const ON_EXTERN_DECL float ON_FLT_PINF
 
const ON_EXTERN_DECL float ON_FLT_QNAN
 
const ON_EXTERN_DECL ON_UUID ON_max_uuid
 
ON_BEGIN_EXTERNC const ON_EXTERN_DECL ON_UUID ON_nil_uuid
 
const ON_EXTERN_DECL ON_UUID ON_opennurbs_id
 
ON_DECL ON_UUID ON_RenderContentType_2DCheckerTexture
 Render textures. More...
 
ON_DECL ON_UUID ON_RenderContentType_3DCheckerTexture
 
ON_DECL ON_UUID ON_RenderContentType_AddTexture
 
ON_DECL ON_UUID ON_RenderContentType_AdvancedDotTexture
 
ON_DECL ON_UUID ON_RenderContentType_BasicEnvironment
 Render environments. More...
 
ON_DECL ON_UUID ON_RenderContentType_BitmapTexture
 
ON_DECL ON_UUID ON_RenderContentType_BlendMaterial
 Render materials. More...
 
ON_DECL ON_UUID ON_RenderContentType_BlendMaterial_V8
 
ON_DECL ON_UUID ON_RenderContentType_BlendTexture
 
ON_DECL ON_UUID ON_RenderContentType_CompositeMaterial
 
ON_DECL ON_UUID ON_RenderContentType_CrossHatchBumpTexture
 Simple bump textures. More...
 
ON_DECL ON_UUID ON_RenderContentType_CubeMapTexture
 
ON_DECL ON_UUID ON_RenderContentType_CustomMaterial
 
ON_DECL ON_UUID ON_RenderContentType_DefaultEnvironment
 
ON_DECL ON_UUID ON_RenderContentType_DefaultMaterial
 
ON_DECL ON_UUID ON_RenderContentType_DisplayAttributeMaterial
 
ON_DECL ON_UUID ON_RenderContentType_DotBumpTexture
 
ON_DECL ON_UUID ON_RenderContentType_DoubleSidedMaterial
 
ON_DECL ON_UUID ON_RenderContentType_EmissionMaterial
 
ON_DECL ON_UUID ON_RenderContentType_ExposureTexture
 
ON_DECL ON_UUID ON_RenderContentType_FBmTexture
 
ON_DECL ON_UUID ON_RenderContentType_GemMaterial
 
ON_DECL ON_UUID ON_RenderContentType_GlassMaterial
 
ON_DECL ON_UUID ON_RenderContentType_GradientTexture
 
ON_DECL ON_UUID ON_RenderContentType_GraniteTexture
 
ON_DECL ON_UUID ON_RenderContentType_GridTexture
 
ON_DECL ON_UUID ON_RenderContentType_GritBumpTexture
 
ON_DECL ON_UUID ON_RenderContentType_HatchBumpTexture
 
ON_DECL ON_UUID ON_RenderContentType_HDRTexture
 
ON_DECL ON_UUID ON_RenderContentType_LeatherBumpTexture
 
ON_DECL ON_UUID ON_RenderContentType_MarbleTexture
 
ON_DECL ON_UUID ON_RenderContentType_MaskTexture
 
ON_DECL ON_UUID ON_RenderContentType_MetalMaterial
 
ON_DECL ON_UUID ON_RenderContentType_MultiplyTexture
 
ON_DECL ON_UUID ON_RenderContentType_NoiseTexture
 
ON_DECL ON_UUID ON_RenderContentType_PaintMaterial
 
ON_DECL ON_UUID ON_RenderContentType_PerlinMarbleTexture
 
ON_DECL ON_UUID ON_RenderContentType_PerturbingTexture
 
ON_DECL ON_UUID ON_RenderContentType_PhysicallyBasedMaterial
 
ON_DECL ON_UUID ON_RenderContentType_PhysicalSkyTexture
 
ON_DECL ON_UUID ON_RenderContentType_PictureMaterial
 
ON_DECL ON_UUID ON_RenderContentType_PlasterMaterial
 
ON_DECL ON_UUID ON_RenderContentType_PlasticMaterial
 
ON_DECL ON_UUID ON_RenderContentType_ProjectionChangerTexture
 
ON_DECL ON_UUID ON_RenderContentType_RealtimeDisplayMaterial
 Display material used to support front and back materials for realtime rendering in the viewport. More...
 
ON_DECL ON_UUID ON_RenderContentType_ResampleTexture
 
ON_DECL ON_UUID ON_RenderContentType_SimpleBitmapTexture
 
ON_DECL ON_UUID ON_RenderContentType_SingleColorTexture
 
ON_DECL ON_UUID ON_RenderContentType_SpeckleBumpTexture
 
ON_DECL ON_UUID ON_RenderContentType_StuccoTexture
 
ON_DECL ON_UUID ON_RenderContentType_TextureAdjustmentTexture
 
ON_DECL ON_UUID ON_RenderContentType_TileTexture
 
ON_DECL ON_UUID ON_RenderContentType_TurbulenceTexture
 
ON_DECL ON_UUID ON_RenderContentType_WavesTexture
 
ON_DECL ON_UUID ON_RenderContentType_WoodBumpTexture
 
ON_DECL ON_UUID ON_RenderContentType_WoodTexture
 
const ON_EXTERN_DECL ON_UUID ON_rhino2_id
 
const ON_EXTERN_DECL ON_UUID ON_rhino3_id
 
const ON_EXTERN_DECL ON_UUID ON_rhino4_id
 
const ON_EXTERN_DECL ON_UUID ON_rhino5_id
 
const ON_EXTERN_DECL ON_UUID ON_rhino6_id
 
const ON_EXTERN_DECL ON_UUID ON_rhino7_id
 
const ON_EXTERN_DECL ON_UUID ON_rhino8_id
 
const ON_EXTERN_DECL ON_UUID ON_rhino_id
 
ON_DECL ON_UUID ON_UniversalRenderEngineId
 
ON_DECL ON_UUID ON_UuidDefaultEnvironmentInstance
 
ON_DECL ON_UUID ON_UuidDefaultMaterialInstance
 
const ON_EXTERN_DECL ON_UUID ON_v2_userdata_id
 
const ON_EXTERN_DECL ON_UUID ON_v3_userdata_id
 
const ON_EXTERN_DECL ON_UUID ON_v4_userdata_id
 
const ON_EXTERN_DECL ON_Plane ON_xy_plane
 
const ON_EXTERN_DECL ON_Plane ON_yz_plane
 
const ON_EXTERN_DECL ON_Plane ON_zx_plane
 

Detailed Description

Macro Definition Documentation

◆ _GNU_SOURCE

#define _GNU_SOURCE

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. Determines what compiler is being used.

◆ BASETYPE

#define BASETYPE   void *

ON_SORT_TEMPLATE_TYPE -> double, int, ....

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. See opennurbs_sort.cpp for examples showing how to use opennurbs_quacksort_template.h to define type specific sorting functions.

◆ DATATYPE

#define DATATYPE   unsigned char

◆ DATAWIDTH

#define DATAWIDTH   m_width

◆ GreaterThan

#define GreaterThan (   A,
 
)    m_compare(A,B) > 0

use a compare function without context parameter

◆ MY_ZCALLOC

#define MY_ZCALLOC

have zlib use oncalloc() and onfree() for memory management

◆ ON_1_OVER_SQRT2

#define ON_1_OVER_SQRT2   0.7071067811865475244008445

◆ ON_2PI

#define ON_2PI   (2.0*ON_PI)

double precision ON_2PI = 2.0*ON_PI. ON_2PI radians = 360 degrees.

◆ ON__SET__THIS__PTR

#define ON__SET__THIS__PTR (   ptr)    if (ptr) *((void**)this) = ptr

◆ ON_ArrayCount

#define ON_ArrayCount (   a)    (sizeof(a)/sizeof((a)[0]))

◆ ON_ASSERT

#define ON_ASSERT (   cond)    ON_REMOVE_ASAP_AssertEx(cond,__FILE__,__LINE__,OPENNURBS__FUNCTION__, #cond " is false")

Do not use ON_ASSERT. If a condition can be checked by ON_ASSERT, then the code must be written detect and respond to that condition. This define will be deleted ASAP. It is being used to detect situations where a crash will occur and then letting the crash occur.

◆ ON_ASSERT_OR_RETURN

#define ON_ASSERT_OR_RETURN (   cond,
  returncode 
)    do{if (!(cond)) {ON_ErrorEx(__FILE__,__LINE__,OPENNURBS__FUNCTION__, #cond " is false");return(returncode);}}while(0)

◆ ON_ASSERT_OR_RETURNVOID

#define ON_ASSERT_OR_RETURNVOID (   cond)    do{if (!(cond)) {ON_ErrorEx(__FILE__,__LINE__,OPENNURBS__FUNCTION__, #cond " is false");return;}}while(0)

◆ ON_BEGIN_EXTERNC

#define ON_BEGIN_EXTERNC   extern "C" {

◆ ON_CALLBACK_CDECL

#define ON_CALLBACK_CDECL

/ Compilers that require special declaration of callback functions / will change ON_CALLBACK_CDECL accordingly.

◆ ON_CLASS

#define ON_CLASS

export/import compiling or using OpenNurbs as a static library

◆ ON_CLASS_ID

#define ON_CLASS_ID (   cls)    ON_CLASS_RTTI( cls ).Uuid()

Description: ON_CLASS_ID is a macro to get the class's uuid from a class name. Example: / Get the class id for ON_Brep. ON_UUID brep_class_id = ON_CLASS_ID(ON_Brep);

◆ ON_CLASS_RTTI

#define ON_CLASS_RTTI (   cls)    cls::m_##cls##_class_rtti

Description: ON_CLASS_RTTI is a macro to get the class's run-time type information from class name. Example: / Get the ON_Brep class's run-time type information. const ON_ClassId& brep_rtti = ON_CLASS_RTTI(ON_Brep);

◆ ON_COMPILER_GNU

#define ON_COMPILER_GNU

////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// / / ON_COMPILER_GNU /

◆ ON_COS_PI_OVER_12

#define ON_COS_PI_OVER_12   0.9659258262890682867497433

◆ ON_CURVE_PIPING_ACCURACY

#define ON_CURVE_PIPING_ACCURACY   L"accuracy"

◆ ON_CURVE_PIPING_BOX

#define ON_CURVE_PIPING_BOX   L"box"

◆ ON_CURVE_PIPING_CAP_TYPE

#define ON_CURVE_PIPING_CAP_TYPE   L"cap-type"

◆ ON_CURVE_PIPING_DOME

#define ON_CURVE_PIPING_DOME   L"dome"

◆ ON_CURVE_PIPING_FLAT

#define ON_CURVE_PIPING_FLAT   L"flat"

◆ ON_CURVE_PIPING_NONE

#define ON_CURVE_PIPING_NONE   L"none"

◆ ON_CURVE_PIPING_ON

#define ON_CURVE_PIPING_ON   L"on"

◆ ON_CURVE_PIPING_RADIUS

#define ON_CURVE_PIPING_RADIUS   L"radius"

◆ ON_CURVE_PIPING_ROOT

#define ON_CURVE_PIPING_ROOT   L"curve-piping-object-data"

◆ ON_CURVE_PIPING_SEGMENTS

#define ON_CURVE_PIPING_SEGMENTS   L"segments"

◆ ON_CURVE_PIPING_WELD

#define ON_CURVE_PIPING_WELD   L"weld"

'Weld' is a legacy name. The real name is 'Faceted' but this is the INVERSE of weld.

◆ ON_CV_COORDINATE_IS_VALID

#define ON_CV_COORDINATE_IS_VALID (   x)    (-1.0e307 < x && x < 1.0e307)

March 27, 2024 - Tim Fix for https://mcneel.myjetbrains.com/youtrack/issue/RH-81184 The vertexes were crap just not quite ON_UNSET_VALUE crap

◆ ON_DBL_MAX

#define ON_DBL_MAX   1.7976931348623158e+308

◆ ON_DBL_MIN

#define ON_DBL_MIN   2.22507385850720200e-308

◆ ON_DECL

#define ON_DECL

◆ ON_DEFAULT_ANGLE_TOLERANCE

#define ON_DEFAULT_ANGLE_TOLERANCE   ON_DEFAULT_ANGLE_TOLERANCE_RADIANS

◆ ON_DEFAULT_ANGLE_TOLERANCE_COSINE

#define ON_DEFAULT_ANGLE_TOLERANCE_COSINE   0.99984769515639123915701155881391

◆ ON_DEFAULT_ANGLE_TOLERANCE_DEGREES

#define ON_DEFAULT_ANGLE_TOLERANCE_DEGREES   (ON_DEFAULT_ANGLE_TOLERANCE_RADIANS * 180.0/ON_PI)

◆ ON_DEFAULT_ANGLE_TOLERANCE_RADIANS

#define ON_DEFAULT_ANGLE_TOLERANCE_RADIANS   (ON_PI/180.0)

default value for angle tolerances = 1 degree

◆ ON_DEFAULT_DISTANCE_TOLERANCE_MM

#define ON_DEFAULT_DISTANCE_TOLERANCE_MM   0.01

◆ ON_DEGREES_TO_RADIANS

#define ON_DEGREES_TO_RADIANS   (ON_PI/180.0)

angle_in_degrees = ON_DEGREES_TO_RADIANS*angle_in_radians

◆ ON_DEPRECATED

#define ON_DEPRECATED

ON_DEPRECATED is used to mark deprecated functions.

◆ ON_DEPRECATED_MSG

#define ON_DEPRECATED_MSG (   s)

◆ ON_DepthImage_DEPTH_TYPE

#define ON_DepthImage_DEPTH_TYPE   double

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. Description: ON_DepthImage is a tool for geometry calculations that want to use depth buffer rendering techniques. The depth buffer is a double precision depth buffer and the calculations are all performed in double precision.

◆ ON_DISPLACEMENT_BLACK_POINT

#define ON_DISPLACEMENT_BLACK_POINT   L"black-point"

◆ ON_DISPLACEMENT_CHANNEL

#define ON_DISPLACEMENT_CHANNEL   L"channel"

◆ ON_DISPLACEMENT_FACE_COUNT_LIMIT

#define ON_DISPLACEMENT_FACE_COUNT_LIMIT   L"face-count-limit"

◆ ON_DISPLACEMENT_FACE_COUNT_LIMIT_ENABLED

#define ON_DISPLACEMENT_FACE_COUNT_LIMIT_ENABLED   L"face-count-limit-enabled"

◆ ON_DISPLACEMENT_FAIRING_AMOUNT

#define ON_DISPLACEMENT_FAIRING_AMOUNT   L"fairing-amount"

◆ ON_DISPLACEMENT_FAIRING_ENABLED

#define ON_DISPLACEMENT_FAIRING_ENABLED   L"fairing-enabled"

◆ ON_DISPLACEMENT_MESH_MEMORY_LIMIT

#define ON_DISPLACEMENT_MESH_MEMORY_LIMIT   L"mesh-memory-limit"

◆ ON_DISPLACEMENT_ON

#define ON_DISPLACEMENT_ON   L"on"

◆ ON_DISPLACEMENT_POST_WELD_ANGLE

#define ON_DISPLACEMENT_POST_WELD_ANGLE   L"post-weld-angle"

◆ ON_DISPLACEMENT_REFINE_SENSITIVITY

#define ON_DISPLACEMENT_REFINE_SENSITIVITY   L"refine-sensitivity"

◆ ON_DISPLACEMENT_REFINE_STEPS

#define ON_DISPLACEMENT_REFINE_STEPS   L"refine-steps"

◆ ON_DISPLACEMENT_ROOT

#define ON_DISPLACEMENT_ROOT   L"new-displacement-object-data"

Displacement

◆ ON_DISPLACEMENT_SUB

#define ON_DISPLACEMENT_SUB   L"sub"

◆ ON_DISPLACEMENT_SUB_BLACK_POINT

#define ON_DISPLACEMENT_SUB_BLACK_POINT   L"sub-black-point"

◆ ON_DISPLACEMENT_SUB_CHANNEL

#define ON_DISPLACEMENT_SUB_CHANNEL   L"sub-channel"

◆ ON_DISPLACEMENT_SUB_INDEX

#define ON_DISPLACEMENT_SUB_INDEX   L"sub-index"

◆ ON_DISPLACEMENT_SUB_OBJECT_COUNT

#define ON_DISPLACEMENT_SUB_OBJECT_COUNT   L"sub-object-count"

◆ ON_DISPLACEMENT_SUB_ON

#define ON_DISPLACEMENT_SUB_ON   L"sub-on"

◆ ON_DISPLACEMENT_SUB_TEXTURE

#define ON_DISPLACEMENT_SUB_TEXTURE   L"sub-texture"

◆ ON_DISPLACEMENT_SUB_WHITE_POINT

#define ON_DISPLACEMENT_SUB_WHITE_POINT   L"sub-white-point"

◆ ON_DISPLACEMENT_SWEEP_PITCH

#define ON_DISPLACEMENT_SWEEP_PITCH   L"sweep-pitch"

◆ ON_DISPLACEMENT_SWEEP_RES_FORMULA

#define ON_DISPLACEMENT_SWEEP_RES_FORMULA   L"sweep-res-formula"

◆ ON_DISPLACEMENT_TEXTURE

#define ON_DISPLACEMENT_TEXTURE   L"texture"

◆ ON_DISPLACEMENT_WHITE_POINT

#define ON_DISPLACEMENT_WHITE_POINT   L"white-point"

◆ ON_DOUBLE_BYTE_CODE_PAGE_SUPPORT

#define ON_DOUBLE_BYTE_CODE_PAGE_SUPPORT
NoKeywords

/ / Copyright (c) 1993-2012 Robert McNeel & Associates. All rights reserved. / OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert / McNeel & Associates. / / THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. / ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF / MERCHANTABILITY ARE HEREBY DISCLAIMED. /
/ For complete openNURBS copyright information see http://www.opennurbs.org. / ////////////////////////////////////////////////////////////// This check is included in all opennurbs source .c and .cpp files to insure ON_COMPILING_OPENNURBS is defined when opennurbs source is compiled. When opennurbs source is being compiled, ON_COMPILING_OPENNURBS is defined and the opennurbs .h files alter what is declared and how it is declared. When we do not have access to Windows code page tools, we have to add in code to get convert Windows and Apple multibyte encodings to UNICODE encodings.

In practice, the primary use of the double byte code page support is in parsing rich text (RTF) in ON_TextContent classes created on computers with Eastern European and Asian locales as the default locale.

Many Western European and Americas locales are handled by the single byte code pages 1252 and 10000. Code pages for other locales will be added as needed because embedding the large double byte tables makes the resulting libraries large.

At this time opennurbs does not ship the code page N to UNICODE translation tables as separate files that can be loaded on demand because of the added installation and runtime lookup complexities.

When possible, Rhino and opennurbs replace code page encodings with UNICODE in RTF. All runtimes strings use UNICODE UTF-8, UTF-16, or UTF-32 encodings. Whenever possible, the UNICODE encoding is used to retrieve glyph information from fonts.

◆ ON_EDGE_SOFTENING_CHAMFER

#define ON_EDGE_SOFTENING_CHAMFER   L"chamfer"

◆ ON_EDGE_SOFTENING_EDGE_THRESHOLD

#define ON_EDGE_SOFTENING_EDGE_THRESHOLD   L"edge-threshold"

◆ ON_EDGE_SOFTENING_FORCE_SOFTENING

#define ON_EDGE_SOFTENING_FORCE_SOFTENING   L"force-softening"

◆ ON_EDGE_SOFTENING_ON

#define ON_EDGE_SOFTENING_ON   L"on"

◆ ON_EDGE_SOFTENING_ROOT

#define ON_EDGE_SOFTENING_ROOT   L"edge-softening-object-data"

Edge Softening

◆ ON_EDGE_SOFTENING_SOFTENING

#define ON_EDGE_SOFTENING_SOFTENING   L"softening"

◆ ON_EDGE_SOFTENING_UNWELD

#define ON_EDGE_SOFTENING_UNWELD   L"unweld"

◆ ON_END_EXTERNC

#define ON_END_EXTERNC   }

◆ ON_ENUM_FROM_UNSIGNED_CASE

#define ON_ENUM_FROM_UNSIGNED_CASE (   e)    case (unsigned int)e: return(e); break

/ Declarations in header (.H) files look like / / ON_DECL type function(): / extern ON_EXTERN_DECL type global_variable; / class ON_CLASS classname {}; / ON_TEMPLATE template class ON_CLASS template<T>; /

◆ ON_ENUM_TO_STRING_CASE

#define ON_ENUM_TO_STRING_CASE (   e)    case e: return( ON_String(#e) ); break

◆ ON_ENUM_TO_STRING_CASE_SET

#define ON_ENUM_TO_STRING_CASE_SET (   e,
 
)    case e: (s)=ON_String(#e); break

◆ ON_ENUM_TO_WIDE_STRING_CASE

#define ON_ENUM_TO_WIDE_STRING_CASE (   e)    case e: return( ON_wString(#e) ); break

◆ ON_ENUM_TO_WIDE_STRING_CASE_SET

#define ON_ENUM_TO_WIDE_STRING_CASE_SET (   e,
 
)    case e: (s)=ON_wString(#e); break

◆ ON_ENVIRONMENT_PROJECTION_BOX

#define ON_ENVIRONMENT_PROJECTION_BOX   L"box"

Environment projections.

◆ ON_ENVIRONMENT_PROJECTION_CUBE_MAP

#define ON_ENVIRONMENT_PROJECTION_CUBE_MAP   L"cubemap"

◆ ON_ENVIRONMENT_PROJECTION_CUBE_MAP_HORZ

#define ON_ENVIRONMENT_PROJECTION_CUBE_MAP_HORZ   L"horizontal-cross-cubemap"

◆ ON_ENVIRONMENT_PROJECTION_CUBE_MAP_VERT

#define ON_ENVIRONMENT_PROJECTION_CUBE_MAP_VERT   L"vertical-cross-cubemap"

◆ ON_ENVIRONMENT_PROJECTION_EMAP

#define ON_ENVIRONMENT_PROJECTION_EMAP   L"emap"

◆ ON_ENVIRONMENT_PROJECTION_HEMISPHERICAL

#define ON_ENVIRONMENT_PROJECTION_HEMISPHERICAL   L"hemispherical"

◆ ON_ENVIRONMENT_PROJECTION_LIGHT_PROBE

#define ON_ENVIRONMENT_PROJECTION_LIGHT_PROBE   L"lightprobe"

◆ ON_ENVIRONMENT_PROJECTION_PLANAR

#define ON_ENVIRONMENT_PROJECTION_PLANAR   L"planar"

◆ ON_ENVIRONMENT_PROJECTION_SPHERICAL

#define ON_ENVIRONMENT_PROJECTION_SPHERICAL   L"spherical"

◆ ON_ENVIRONMENT_SIMULATION_BACKGROUND_COLOR

#define ON_ENVIRONMENT_SIMULATION_BACKGROUND_COLOR   L"background-color"

Environment simulation.

◆ ON_ENVIRONMENT_SIMULATION_BACKGROUND_IMAGE

#define ON_ENVIRONMENT_SIMULATION_BACKGROUND_IMAGE   L"background-image"

◆ ON_ENVIRONMENT_SIMULATION_BACKGROUND_PROJECTION

#define ON_ENVIRONMENT_SIMULATION_BACKGROUND_PROJECTION   L"background-projection"

◆ ON_EPSILON

#define ON_EPSILON   2.2204460492503131e-16

ON_EPSILON = 2^-52.

◆ ON_ERROR

#define ON_ERROR (   msg)    ON_ErrorEx(__FILE__,__LINE__,OPENNURBS__FUNCTION__,msg)

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. / Macros used to log errors and warnings. The ON_Warning() and ON_Error() / functions are defined in opennurbs_error.cpp.

◆ ON_EXTERN_DECL

#define ON_EXTERN_DECL

◆ ON_EXTERNC

#define ON_EXTERNC   extern "C"

C++ extern "C" declaration for C linkage.

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. Includes all openNURBS toolkit defines and enums.

◆ ON_FLOAT_EPSILON

#define ON_FLOAT_EPSILON   1.192092896e-07

◆ ON_FLT_MAX

#define ON_FLT_MAX   3.402823466e+38F

◆ ON_forigin

#define ON_forigin   ON_3fPoint::Origin

OBSOLETE - use ON_3fPoint::Origin.

◆ ON_FPU_CW_DEFAULT

#define ON_FPU_CW_DEFAULT   ( ON_FPU_EX_ALL | ON_FPU_PC_53 | ON_FPU_RC_NEAR )

FPU default control word for Rhino and OpenNURBS

  • mask all exceptions (Microsoft and Intel default)
  • 53 bit mantissa precision (Microsoft default - Intel default is 64 bit mantissa precision)
  • round to nearest (Microsoft and Intel default)
  • signed infinity (Microsoft and Intel default) (Intel FPUs 387 and later use signed infinities) 14 July 2009 Dale Lear In order to have our 32-bit and 64-bit executables perform the same way, I'm switching the FPU precision to 53-bit mantissas. This means plug-ins may run differently in V4 and V5, but in the using this setting will make it easier to write conde the behaves consistently. PC_53 is also Microsoft's default setting. define ON_FPU_CW_DEFAULT ( ON_FPU_EX_ALL | ON_FPU_PC_64 | ON_FPU_RC_NEAR )

◆ ON_FPU_CW_DEFAULT_MASK

#define ON_FPU_CW_DEFAULT_MASK   ( ON_FPU_CW_EX_MASK | ON_FPU_CW_PC_MASK | ON_FPU_CW_RC_MASK )

◆ ON_FPU_CW_EX_MASK

#define ON_FPU_CW_EX_MASK   0x0008001f

FPU exception mask bits

◆ ON_FPU_CW_PC_MASK

#define ON_FPU_CW_PC_MASK   0x00030000

FPU control word precision control bits

◆ ON_FPU_CW_RC_MASK

#define ON_FPU_CW_RC_MASK   0x00000300

FPU control word rounding control bits

◆ ON_FPU_EX_ALL

Use ON_FPU_EX_ALL to mask all FPU exceptions.

◆ ON_FPU_EX_DENORMAL

#define ON_FPU_EX_DENORMAL   0x00080000

denormal exception mask

◆ ON_FPU_EX_INEXACT

#define ON_FPU_EX_INEXACT   0x00000001

inexact (precision)

◆ ON_FPU_EX_INVALID

#define ON_FPU_EX_INVALID   0x00000010

invalid

◆ ON_FPU_EX_MINOR

Minor FPU exceptions that are common and generally benign These should be masked unless you are doing something unusual.

◆ ON_FPU_EX_OVERFLOW

#define ON_FPU_EX_OVERFLOW   0x00000004

overflow

◆ ON_FPU_EX_UNDERFLOW

#define ON_FPU_EX_UNDERFLOW   0x00000002

underflow

◆ ON_FPU_EX_ZERODIVIDE

#define ON_FPU_EX_ZERODIVIDE   0x00000008

zero divide

◆ ON_FPU_PC_24

#define ON_FPU_PC_24   0x00020000

24 bits

◆ ON_FPU_PC_53

#define ON_FPU_PC_53   0x00010000

53 bits

◆ ON_FPU_PC_64

#define ON_FPU_PC_64   0x00000000

64 bits

◆ ON_FPU_RC_CHOP

#define ON_FPU_RC_CHOP   0x00000300

chop

◆ ON_FPU_RC_DOWN

#define ON_FPU_RC_DOWN   0x00000100

down

◆ ON_FPU_RC_NEAR

#define ON_FPU_RC_NEAR   0x00000000

near

◆ ON_FPU_RC_UP

#define ON_FPU_RC_UP   0x00000200

up

◆ ON_FPU_SW_BAD

#define ON_FPU_SW_BAD   (ON_FPU_SW_OVERFLOW|ON_FPU_SW_ZERODIVIDE)

"Bad" FPU status - results of calculation are suspect

As of November 2014, .NET makes it impossible to use the invalid status bit to detect serious floating point bugs and errors. See the comment above the declaration of ON_FPU_EnableInvalidStatusCheck() for more details. define ON_FPU_SW_BAD (ON_FPU_SW_OVERFLOW|ON_FPU_SW_ZERODIVIDE|ON_FPU_SW_INVALID)

◆ ON_FPU_SW_DENORMAL

#define ON_FPU_SW_DENORMAL   0x00080000

denormal status bit - ok - happens on occasion

◆ ON_FPU_SW_INEXACT

#define ON_FPU_SW_INEXACT   0x00000001

inexact (precision) - ok - happens frequently

FPU control and query tools FPU status word bits

◆ ON_FPU_SW_INVALID

#define ON_FPU_SW_INVALID   0x00000010

invalid - bad

◆ ON_FPU_SW_OVERFLOW

#define ON_FPU_SW_OVERFLOW   0x00000004

overflow - bad

◆ ON_FPU_SW_UNDERFLOW

#define ON_FPU_SW_UNDERFLOW   0x00000002

underflow - ok - happens on occasion

◆ ON_FPU_SW_ZERODIVIDE

#define ON_FPU_SW_ZERODIVIDE   0x00000008

zero divide - bad

◆ ON_fxaxis

#define ON_fxaxis   ON_3fVector::XAxis

OBSOLETE - use ON_3fVector::XAxis.

◆ ON_fyaxis

#define ON_fyaxis   ON_3fVector::YAxis

OBSOLETE - use ON_3fVector::YAxis.

◆ ON_fzaxis

#define ON_fzaxis   ON_3fVector::ZAxis

OBSOLETE - use ON_3fVector::ZAxis.

◆ ON_HALFPI

#define ON_HALFPI   (0.5*ON_PI)

double precision ON_HALFPI = 0.5*ON_PI. ON_HALFPI radians = 90 degrees.

◆ ON_HAS_RVALUEREF

#define ON_HAS_RVALUEREF

/ Compilers that do not support the C++ 11 rvalue refs / will change ON_HAS_RVALUEREF accordingly.

◆ ON_HSORT_COPY

#define ON_HSORT_COPY (   dst,
  src 
)    *dst = *src

◆ ON_HSORT_FROM_TMP

#define ON_HSORT_FROM_TMP (   A)    *A = tmp

◆ ON_HSORT_GT

#define ON_HSORT_GT (   A,
 
)    *A > *B

ON_SORT_TEMPLATE_TYPE -> double, int, ....

See opennurbs_sort.cpp for examples of using openurbs_hsort_template.c to define type specific heap sort functions. use type compares

◆ ON_HSORT_GT_TMP

#define ON_HSORT_GT_TMP (   A)    *A > tmp

◆ ON_HSORT_TO_TMP

#define ON_HSORT_TO_TMP (   A)    tmp = *A

◆ ON_INT_FROM_ENUM

#define ON_INT_FROM_ENUM (   e)    ((int)static_cast<unsigned int>(e))

◆ ON_INTERNAL_SDK

#define ON_INTERNAL_SDK

◆ ON_IntSleepLock_Set

#define ON_IntSleepLock_Set (   lock,
  lock_value 
)    lock=lock_value

◆ ON_IntSleepLock_Test

#define ON_IntSleepLock_Test (   lock,
  test_value,
  sleep_value 
)    lock;

if (test_value==lock) lock=sleep_value

◆ ON_IS_FINITE

#define ON_IS_FINITE (   x)    (_finite(x)?true:false)

class ON_CLASS ON_TimeLimit { ON_TimeLimit(); ON_TimeLimit(ON__UINT64 time_limit_seconds); void SetTimeLimit(ON__UINT64 time_limit_seconds); bool Continue() const; bool IsSet() const; private: ON__UINT64 m_time_limit[2]; }; The ON_IS_FINITE and ON_IS_VALID defines are much faster than calling ON_IsValid(), but need to be used when the macro expansion works. Returns true if x is a finite double. Specifically, _finite returns a nonzero value (true) if its argument x is not infinite, that is, if -INF < x < +INF. It returns 0 (false) if the argument is infinite or a NaN.

If you are trying to compile opennurbs on a platform that does not support finite(), then see if you can use _fpclass(), fpclass(), _isnan(), or isnan(). If you can't find anything, then just set this function to return true.

◆ ON_IS_FINITE_FLOAT

#define ON_IS_FINITE_FLOAT (   x)    ((x) <= 3.402823466e+38F && (x) >= -3.402823466e+38F)

◆ ON_IS_INFINITE_FLOAT

#define ON_IS_INFINITE_FLOAT (   x)    ((x) > 3.402823466e+38F || (x) < -3.402823466e+38F)

◆ ON_IS_NAN

#define ON_IS_NAN (   x)    (!((x)==(x)))

◆ ON_IS_UNSET_DOUBLE

#define ON_IS_UNSET_DOUBLE (   x)    (ON_UNSET_VALUE == (x) || ON_UNSET_POSITIVE_VALUE == (x))

◆ ON_IS_UNSET_FLOAT

#define ON_IS_UNSET_FLOAT (   x)    (ON_UNSET_FLOAT == (x) || ON_UNSET_POSITIVE_FLOAT == (x))

◆ ON_IS_VALID

#define ON_IS_VALID (   x)    ((x) > ON_UNSET_VALUE && (x) < ON_UNSET_POSITIVE_VALUE)

◆ ON_IS_VALID_FLOAT

#define ON_IS_VALID_FLOAT (   x)    ((x) > ON_UNSET_FLOAT && (x) < ON_UNSET_POSITIVE_FLOAT)

◆ ON_KIND_ENVIRONMENT

#define ON_KIND_ENVIRONMENT   L"environment"

◆ ON_KIND_MATERIAL

#define ON_KIND_MATERIAL   L"material"

Strings returned by ON_RenderContent::Kind().

◆ ON_KIND_TEXTURE

#define ON_KIND_TEXTURE   L"texture"

◆ ON_LOG10

#define ON_LOG10   2.302585092994045684017991

◆ ON_LOG2

#define ON_LOG2   0.6931471805599453094172321

◆ ON_MATERIAL_ALPHA_TRANSPARENCY

#define ON_MATERIAL_ALPHA_TRANSPARENCY   L"alpha-transparency"

General parameters used by materials that simulate ON_Material.

◆ ON_MATERIAL_AMBIENT

#define ON_MATERIAL_AMBIENT   L"ambient"

◆ ON_MATERIAL_CLARITY_AMOUNT

#define ON_MATERIAL_CLARITY_AMOUNT   L"clarity-amount"

◆ ON_MATERIAL_DIFFUSE

#define ON_MATERIAL_DIFFUSE   L"diffuse"

◆ ON_MATERIAL_DISABLE_LIGHTING

#define ON_MATERIAL_DISABLE_LIGHTING   L"disable-lighting"

◆ ON_MATERIAL_EMISSION

#define ON_MATERIAL_EMISSION   L"emission"

◆ ON_MATERIAL_FLAMINGO_LIBRARY

#define ON_MATERIAL_FLAMINGO_LIBRARY   L"flamingo-library"

◆ ON_MATERIAL_FRESNEL_ENABLED

#define ON_MATERIAL_FRESNEL_ENABLED   L"fresnel-enabled"

◆ ON_MATERIAL_IOR

#define ON_MATERIAL_IOR   L"ior"

◆ ON_MATERIAL_IS_PHYSICALLY_BASED

#define ON_MATERIAL_IS_PHYSICALLY_BASED   L"is-physically-based"

◆ ON_MATERIAL_POLISH_AMOUNT

#define ON_MATERIAL_POLISH_AMOUNT   L"polish-amount"

◆ ON_MATERIAL_REFLECTIVITY_AMOUNT

#define ON_MATERIAL_REFLECTIVITY_AMOUNT   L"reflectivity"

◆ ON_MATERIAL_REFLECTIVITY_COLOR

#define ON_MATERIAL_REFLECTIVITY_COLOR   L"reflectivity-color"

◆ ON_MATERIAL_SHINE

#define ON_MATERIAL_SHINE   L"shine"

Value is 0.0..1.0, NOT ON_Material::MaxShine.

◆ ON_MATERIAL_SIM_REFLECTION_COLOR

#define ON_MATERIAL_SIM_REFLECTION_COLOR   L"reflection"

Used by simulation, not by Custom Material field.

◆ ON_MATERIAL_SIM_TRANSPARENT_COLOR

#define ON_MATERIAL_SIM_TRANSPARENT_COLOR   L"transparent"

Used by simulation, not by Custom Material field.

◆ ON_MATERIAL_SPECULAR

#define ON_MATERIAL_SPECULAR   L"specular"

◆ ON_MATERIAL_TRANSPARENCY_AMOUNT

#define ON_MATERIAL_TRANSPARENCY_AMOUNT   L"transparency"

◆ ON_MATERIAL_TRANSPARENCY_COLOR

#define ON_MATERIAL_TRANSPARENCY_COLOR   L"transparency-color"

◆ ON_MAX_SIZE_T

#define ON_MAX_SIZE_T   SIZE_MAX

◆ ON_MAXIMUM_WORLD_COORDINATE_VALUE

#define ON_MAXIMUM_WORLD_COORDINATE_VALUE   1.34217728e8

ON_MAXIMUM_VALUE = 2^27.

/ Bugs in geometry calculations involving world coordinates / values > ON_MAXIMUM_WORLD_COORDINATE_VALUE / will be a low priority.

◆ ON_MINIMUM_ANGLE_TOLERANCE

#define ON_MINIMUM_ANGLE_TOLERANCE   (ON_DEFAULT_ANGLE_TOLERANCE/10.0)

◆ ON_MSC_CDECL

#define ON_MSC_CDECL   ON_CALLBACK_CDECL

////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// / / BEGIN - fill in missing types and defines / / If you are using an old compiler, then define ON_NEED_* when / you define ON_COMPILER_* above. / ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// / / Validate ON_SIZEOF_WCHAR_T and set ON_WCHAR_T_ENCODING / ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// / / BEGIN - OBSOLETE defines / / These legacy defines will be removed from V6 /

◆ ON_NO_SLEEPLOCK_SUPPORT

#define ON_NO_SLEEPLOCK_SUPPORT

#error Need to fill in the following defines or comment out this error for single threaded applications

◆ ON_NOEXCEPT

#define ON_NOEXCEPT   noexcept

/ Compilers that do not support the C++ 11 noexcept keyword / or similar will change ON_NOEXCEPT accordingly.

◆ ON_NONSENSE_WORLD_COORDINATE_VALUE

#define ON_NONSENSE_WORLD_COORDINATE_VALUE   1.0e100

ON_NONSENSE_WORLD_COORDINATE_VALUE = 1.0e100.

/ Any 3d coordinate value >= ON_NONSENSE_WORLD_COORDINATE_VALUE / will be adjusted as needed. Any calculation creating 3d coordinates / with values >= ON_NONSENSE_WORLD_COORDINATE_VALUE should be / inspected for bugs.

◆ ON_OBJECT_DECLARE

#define ON_OBJECT_DECLARE (   cls)

All classes derived from ON_Object must have the declaration macro ON_OBJECT_DECLARE( <classname> ); as the first line in their class definition, must have a robust operator=(), should have a robust copy constructor, and must have exactly one of the following implementation macros in a .cpp file. Classes with a pure virtual function: ON_VIRTUAL_OBJECT_IMPLEMENT( <classname>, <basclassname>, <classuuid> ) Classes with an operator= and copy constructor. ON_OBJECT_IMPLEMENT( <classname>, <basclassname>, <classuuid> ) Classes with an operator=, but no copy constructor. ON_OBJECT_IMPLEMENT_NO_COPYCTOR( <classname>, <basclassname>, <classuuid> )

◆ ON_OBJECT_DECLARE_OVERRIDE [1/3]

#define ON_OBJECT_DECLARE_OVERRIDE   override

◆ ON_OBJECT_DECLARE_OVERRIDE [2/3]

#define ON_OBJECT_DECLARE_OVERRIDE

◆ ON_OBJECT_DECLARE_OVERRIDE [3/3]

#define ON_OBJECT_DECLARE_OVERRIDE   override

◆ ON_OBJECT_DECLARE_VIRTUAL [1/3]

#define ON_OBJECT_DECLARE_VIRTUAL

Every other use of ON_OBJECT_DECLARE() is in derived class.

◆ ON_OBJECT_DECLARE_VIRTUAL [2/3]

#define ON_OBJECT_DECLARE_VIRTUAL   virtual

Every other use of ON_OBJECT_DECLARE() is in derived class.

◆ ON_OBJECT_DECLARE_VIRTUAL [3/3]

#define ON_OBJECT_DECLARE_VIRTUAL

Every other use of ON_OBJECT_DECLARE() is in derived class.

◆ ON_OBJECT_IMPLEMENT

#define ON_OBJECT_IMPLEMENT (   cls,
  basecls,
  uuid 
)
Value:
void* cls::m_s_##cls##_ptr = nullptr; \
static ON_Object* CreateNew##cls() {return new cls();} \
const ON_ClassId cls::m_##cls##_class_rtti(#cls,#basecls,CreateNew##cls,uuid);\
cls * cls::Cast( ON_Object* p) {return(p&&p->IsKindOf(&cls::m_##cls##_class_rtti))?static_cast< cls *>(p):nullptr;} \
const cls * cls::Cast( const ON_Object* p) {return(p&&p->IsKindOf(&cls::m_##cls##_class_rtti))?static_cast<const cls *>(p):nullptr;} \
const ON_ClassId* cls::ClassId() const {return &cls::m_##cls##_class_rtti;} \
bool cls::CopyFrom( const ON_Object* src){const cls * s=cls::Cast(src); if ( nullptr != this && nullptr != s) {*this = *s; return true;}return false;} \
cls * cls::Duplicate() const {return static_cast< cls *>(this->Internal_DeepCopy());} \
ON_Object* cls::Internal_DeepCopy() const {return new cls (*this);}

Classes derived from ON_Object that have a valid default constructor, valid copy constructor, operator new and operator= can use ON_OBJECT_IMPLEMENT in their implementation. Classes implemented with ON_OBJECT_IMPLEMENT can be created from their run-time type information id and their Duplicate() function will use the class's copy constructor to create a deep copy.

◆ ON_OBJECT_IMPLEMENT_NO_COPY

#define ON_OBJECT_IMPLEMENT_NO_COPY (   cls,
  basecls,
  uuid 
)
Value:
void* cls::m_s_##cls##_ptr = nullptr; \
static ON_Object* CreateNew##cls() {return new cls();} \
const ON_ClassId cls::m_##cls##_class_rtti(#cls,#basecls,CreateNew##cls,uuid);\
cls * cls::Cast( ON_Object* p) {return(p&&p->IsKindOf(&cls::m_##cls##_class_rtti))?static_cast< cls *>(p):nullptr;} \
const cls * cls::Cast( const ON_Object* p) {return(p&&p->IsKindOf(&cls::m_##cls##_class_rtti))?static_cast<const cls *>(p):nullptr;} \
const ON_ClassId* cls::ClassId() const {return &cls::m_##cls##_class_rtti;} \
bool cls::CopyFrom( const ON_Object* src){return false;} \
cls * cls::Duplicate() const {return nullptr;} \
ON_Object* cls::Internal_DeepCopy() const { return nullptr;}

Classes derived from ON_Object that have a valid default constructor, operator new and operator=, but do not have a valid copy constructor or assignment operator, can use ON_OBJECT_IMPLEMENT_NO_COPY in their implementation. Classes implemented with ON_OBJECT_IMPLEMENT_NO_COPY can be created from their run-time type information id and their Duplicate() function will silently return a nullptr. CopyFrom will return false.

◆ ON_OBJECT_IMPLEMENT_NO_COPYCTOR

#define ON_OBJECT_IMPLEMENT_NO_COPYCTOR (   cls,
  basecls,
  uuid 
)
Value:
void* cls::m_s_##cls##_ptr = nullptr; \
static ON_Object* CreateNew##cls() {return new cls();} \
const ON_ClassId cls::m_##cls##_class_rtti(#cls,#basecls,CreateNew##cls,uuid);\
cls * cls::Cast( ON_Object* p) {return(p&&p->IsKindOf(&cls::m_##cls##_class_rtti))?static_cast< cls *>(p):nullptr;} \
const cls * cls::Cast( const ON_Object* p) {return(p&&p->IsKindOf(&cls::m_##cls##_class_rtti))?static_cast<const cls *>(p):nullptr;} \
const ON_ClassId* cls::ClassId() const {return &cls::m_##cls##_class_rtti;} \
bool cls::CopyFrom( const ON_Object* src){const cls* s=cls::Cast(src); if ( 0 != this && 0 != s) {*this = *s; return true;}return false;} \
cls * cls::Duplicate() const {return static_cast< cls *>(this->Internal_DeepCopy());} \
ON_Object* cls::Internal_DeepCopy() const { cls* p = new cls();if (p) {*p = *this; return p;}return nullptr;}

Classes derived from ON_Object that have a valid default constructor, operator new and operator=, but do not have a valid copy constructor, can use ON_OBJECT_IMPLEMENT_NO_COPYCTOR in their implementation. Classes implemented with ON_OBJECT_IMPLEMENT_NO_COPYCTOR can be created from their run-time type information id and their Duplicate() function will use the class's default constructor and operator= to create a deep copy.

◆ ON_origin

#define ON_origin   ON_3dPoint::Origin

OBSOLETE - use ON_3dPoint::Origin.

◆ ON_PARTICLE_SYSTEM_WIP

#define ON_PARTICLE_SYSTEM_WIP

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

◆ ON_PBR_MATERIAL_ALPHA

#define ON_PBR_MATERIAL_ALPHA   L"pbr-alpha"

◆ ON_PBR_MATERIAL_ANISOTROPIC

#define ON_PBR_MATERIAL_ANISOTROPIC   L"pbr-anisotropic"

◆ ON_PBR_MATERIAL_ANISOTROPIC_ROTATION

#define ON_PBR_MATERIAL_ANISOTROPIC_ROTATION   L"pbr-anisotropic-rotation"

◆ ON_PBR_MATERIAL_BASE_COLOR

#define ON_PBR_MATERIAL_BASE_COLOR   L"pbr-base-color"

◆ ON_PBR_MATERIAL_BRDF

#define ON_PBR_MATERIAL_BRDF   L"pbr-brdf"

◆ ON_PBR_MATERIAL_BRDF_GGX

#define ON_PBR_MATERIAL_BRDF_GGX   L"ggx"

◆ ON_PBR_MATERIAL_BRDF_WARD

#define ON_PBR_MATERIAL_BRDF_WARD   L"ward"

◆ ON_PBR_MATERIAL_CLEARCOAT

#define ON_PBR_MATERIAL_CLEARCOAT   L"pbr-clearcoat"

◆ ON_PBR_MATERIAL_CLEARCOAT_BUMP

#define ON_PBR_MATERIAL_CLEARCOAT_BUMP   L"pbr-clearcoat-bump"

◆ ON_PBR_MATERIAL_CLEARCOAT_ROUGHNESS

#define ON_PBR_MATERIAL_CLEARCOAT_ROUGHNESS   L"pbr-clearcoat-roughness"

◆ ON_PBR_MATERIAL_EMISSION_COLOR

#define ON_PBR_MATERIAL_EMISSION_COLOR   L"pbr-emission"

◆ ON_PBR_MATERIAL_EMISSION_MULTIPLIER

#define ON_PBR_MATERIAL_EMISSION_MULTIPLIER   L"emission-multiplier"

◆ ON_PBR_MATERIAL_METALLIC

#define ON_PBR_MATERIAL_METALLIC   L"pbr-metallic"

◆ ON_PBR_MATERIAL_OPACITY

#define ON_PBR_MATERIAL_OPACITY   L"pbr-opacity"

◆ ON_PBR_MATERIAL_OPACITY_IOR

#define ON_PBR_MATERIAL_OPACITY_IOR   L"pbr-opacity-ior"

◆ ON_PBR_MATERIAL_OPACITY_ROUGHNESS

#define ON_PBR_MATERIAL_OPACITY_ROUGHNESS   L"pbr-opacity-roughness"

◆ ON_PBR_MATERIAL_ROUGHNESS

#define ON_PBR_MATERIAL_ROUGHNESS   L"pbr-roughness"

◆ ON_PBR_MATERIAL_SHEEN

#define ON_PBR_MATERIAL_SHEEN   L"pbr-sheen"

◆ ON_PBR_MATERIAL_SHEEN_TINT

#define ON_PBR_MATERIAL_SHEEN_TINT   L"pbr-sheen-tint"

◆ ON_PBR_MATERIAL_SPECULAR

#define ON_PBR_MATERIAL_SPECULAR   L"pbr-specular"

◆ ON_PBR_MATERIAL_SPECULAR_TINT

#define ON_PBR_MATERIAL_SPECULAR_TINT   L"pbr-specular-tint"

◆ ON_PBR_MATERIAL_SUBSURFACE

#define ON_PBR_MATERIAL_SUBSURFACE   L"pbr-subsurface"

◆ ON_PBR_MATERIAL_SUBSURFACE_SCATTERING_COLOR

#define ON_PBR_MATERIAL_SUBSURFACE_SCATTERING_COLOR   L"pbr-subsurface-scattering-color"

◆ ON_PBR_MATERIAL_SUBSURFACE_SCATTERING_RADIUS

#define ON_PBR_MATERIAL_SUBSURFACE_SCATTERING_RADIUS   L"pbr-subsurface-scattering-radius"

◆ ON_PBR_MATERIAL_USE_BASE_COLOR_TEXTURE_ALPHA

#define ON_PBR_MATERIAL_USE_BASE_COLOR_TEXTURE_ALPHA   L"pbr-use-base-color-texture-alpha"

◆ ON_PI

#define ON_PI   3.141592653589793238462643

double precision ON_PI = 3.141592653589793238462643. ON_PI radians = 180 degrees

◆ ON_PLUS_MESH_INTERSECTION_INC_

#define ON_PLUS_MESH_INTERSECTION_INC_

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

◆ ON_PLUS_RECTPACK2_INC_

#define ON_PLUS_RECTPACK2_INC_

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

◆ ON_PointerSleepLock_Set

#define ON_PointerSleepLock_Set (   ptr_type,
  ptr,
  ptr_value 
)    (ptr_type*)(ptr); ((ptr)=(ptr_value));

◆ ON_PointerSleepLock_SuspendThisThread

#define ON_PointerSleepLock_SuspendThisThread (   n)    usleep(n)

Sleeps the THREAD not the PROCESS.

◆ ON_PointerSleepLock_Test

#define ON_PointerSleepLock_Test (   ptr_type,
  ptr 
)    (ptr_type*)(ON_Internal_CompareExchangePointer((void* volatile*)(&(ptr)),(void*)1,(void*)0))

◆ ON_PRAGMA_WARNING_AFTER_DIRTY_INCLUDE

#define ON_PRAGMA_WARNING_AFTER_DIRTY_INCLUDE   ON_PRAGMA_WARNING_POP

◆ ON_PRAGMA_WARNING_BEFORE_DIRTY_INCLUDE

#define ON_PRAGMA_WARNING_BEFORE_DIRTY_INCLUDE   ON_PRAGMA_WARNING_PUSH

◆ ON_PRAGMA_WARNING_DISABLE_CLANG

#define ON_PRAGMA_WARNING_DISABLE_CLANG (   ON_PRAGMA_WARNING_DISABLE_param)

◆ ON_PRAGMA_WARNING_DISABLE_GNU

#define ON_PRAGMA_WARNING_DISABLE_GNU (   ON_PRAGMA_WARNING_DISABLE_param)    GCC diagnostic ignored ON_PRAGMA_WARNING_DISABLE_param

Apple CLang warning disable.

◆ ON_PRAGMA_WARNING_DISABLE_MSC

#define ON_PRAGMA_WARNING_DISABLE_MSC (   ON_PRAGMA_WARNING_DISABLE_param)

These defines will be set to something more appropriate when opennurbs_system_compiler detects the compiler and platform.

◆ ON_PRAGMA_WARNING_POP

#define ON_PRAGMA_WARNING_POP   GCC diagnostic pop

Gnu gcc warning state pop.

◆ ON_PRAGMA_WARNING_PUSH

#define ON_PRAGMA_WARNING_PUSH   GCC diagnostic push

Gnu gcc warning state push.

/ Usage example - disables gcc warning xyz - See Gnu gcc docs for warning options #pragma ON_PRAGMA_WARNING_PUSH #pragma ON_PRAGMA_WARNING_DISABLE_CLANG("-Wxyx") ... #pragma ON_PRAGMA_WARNING_POP

◆ ON_PTR_SEMAPHORE1

#define ON_PTR_SEMAPHORE1   ((ON__UINT_PTR)8)

The ON_PTR_SEMAPHORE* values are used in rare cases when a special signal must be passed as a pointer argument. The values must be a multiple of 8 to suppress runtime pointer alignment checks. The values must never be a valid user heap or stack pointer value.

◆ ON_PTR_SEMAPHORE2

#define ON_PTR_SEMAPHORE2   ((ON__UINT_PTR)16)

◆ ON_PTR_SEMAPHORE3

#define ON_PTR_SEMAPHORE3   ((ON__UINT_PTR)24)

◆ ON_PTR_SEMAPHORE4

#define ON_PTR_SEMAPHORE4   ((ON__UINT_PTR)32)

◆ ON_PTR_SEMAPHORE_MAX

#define ON_PTR_SEMAPHORE_MAX   ((ON__UINT_PTR)32)

◆ ON_QSORT_CUTOFF

#define ON_QSORT_CUTOFF   8 /* testing shows that this is good value */

NOTE: 14 April 2011 Dale Lear: Replace this code with Mikko's "quacksort", once "quacksort" is fully debugged This code is based ont the VC 2010 crt qsort.c file and must not be released with public opennurbs. See opennurbs_sort.cpp for examples of using openurbs_qsort_template.c to define type specific quick sort functions.

◆ ON_QSORT_EQ

#define ON_QSORT_EQ (   A,
 
)    *A == *B

◆ ON_QSORT_GT

#define ON_QSORT_GT (   A,
 
)    *A > *B

ON_SORT_TEMPLATE_TYPE -> double, int, ....

use type compares

◆ ON_QSORT_LE

#define ON_QSORT_LE (   A,
 
)    *A <= *B

◆ ON_QSORT_SHORT_SORT_FNAME

#define ON_QSORT_SHORT_SORT_FNAME   ON__shortsort

The default name for the short sort helper function is ON__shortsort.

When opennurbs_qsort_template.h is included more than once in the same file for sorting the same type with different compare functions, then either 1) After the first include, define ON_SORT_TEMPLATE_HAVE_SHORT_SORT to prevent generation of an identical short-sort function or 2) Define different values of ON_QSORT_SHORT_SORT_FNAME to generate different short-sort helper functions.

◆ ON_QSORT_STKSIZ

#define ON_QSORT_STKSIZ   (8*sizeof(void*) - 2)

Note: the theoretical number of stack entries required is no more than 1 + log2(num). But we switch to insertion sort for CUTOFF elements or less, so we really only need 1 + log2(num) - log2(CUTOFF) stack entries. For a CUTOFF of 8, that means we need no more than 30 stack entries for 32 bit platforms, and 62 for 64-bit platforms.

◆ ON_QSORT_SWAP

#define ON_QSORT_SWAP (   A,
 
)    tmp = *A; *A = *B; *B = tmp

◆ ON_QUACKSORT_SWAP_FUNCS_DEFINED

#define ON_QUACKSORT_SWAP_FUNCS_DEFINED

In some files this template is used multiple times. The ON_QUACKSORT_SWAP_FUNCS_DEFINED define prevents multiple definitions of the static Swap*() functions.

◆ ON_RADIANS_TO_DEGREES

#define ON_RADIANS_TO_DEGREES   (180.0/ON_PI)

angle_in_radians = ON_RADIANS_TO_DEGREES*angle_in_degrees

◆ ON_RDK_BACKGROUND_ENVIRONMENT

#define ON_RDK_BACKGROUND_ENVIRONMENT   L"environment"

◆ ON_RDK_CURRENT_CONTENT

#define ON_RDK_CURRENT_CONTENT   L"content"

◆ ON_RDK_CURRENT_RENDER_PRESET

#define ON_RDK_CURRENT_RENDER_PRESET   L"current-preset"

◆ ON_RDK_CUSTOM_IMAGE_SIZE_IS_PRESET

#define ON_RDK_CUSTOM_IMAGE_SIZE_IS_PRESET   L"custom-image-size-is-preset"

◆ ON_RDK_CUSTOM_REFLECTIVE_ENVIRONMENT

#define ON_RDK_CUSTOM_REFLECTIVE_ENVIRONMENT   L"custom-env-for-refl-and-refr"

◆ ON_RDK_CUSTOM_REFLECTIVE_ENVIRONMENT_ON

#define ON_RDK_CUSTOM_REFLECTIVE_ENVIRONMENT_ON   L"custom-env-for-refl-and-refr-on"

◆ ON_RDK_DECAL

#define ON_RDK_DECAL   L"decal"

◆ ON_RDK_DECAL_CUSTOM

#define ON_RDK_DECAL_CUSTOM   L"custom"

◆ ON_RDK_DECAL_CUSTOM_PARAMS

#define ON_RDK_DECAL_CUSTOM_PARAMS   L"parameters"

◆ ON_RDK_DECAL_CUSTOM_RENDERER

#define ON_RDK_DECAL_CUSTOM_RENDERER   L"renderer"

◆ ON_RDK_DECAL_HEIGHT

#define ON_RDK_DECAL_HEIGHT   L"height"

◆ ON_RDK_DECAL_HORZ_SWEEP_END

#define ON_RDK_DECAL_HORZ_SWEEP_END   L"latitude-stop"

◆ ON_RDK_DECAL_HORZ_SWEEP_STA

#define ON_RDK_DECAL_HORZ_SWEEP_STA   L"latitude-start"

◆ ON_RDK_DECAL_INSTANCE_ID

#define ON_RDK_DECAL_INSTANCE_ID   L"instance-id"

◆ ON_RDK_DECAL_IS_TEMPORARY

#define ON_RDK_DECAL_IS_TEMPORARY   L"is-temporary"

◆ ON_RDK_DECAL_IS_VISIBLE

#define ON_RDK_DECAL_IS_VISIBLE   L"is-visible"

◆ ON_RDK_DECAL_MAP_TO_INSIDE_ON

#define ON_RDK_DECAL_MAP_TO_INSIDE_ON   L"map-to-inside-on"

◆ ON_RDK_DECAL_MAPPING

#define ON_RDK_DECAL_MAPPING   L"mapping"

◆ ON_RDK_DECAL_MAPPING_CYLINDRICAL

#define ON_RDK_DECAL_MAPPING_CYLINDRICAL   L"cylindrical"

◆ ON_RDK_DECAL_MAPPING_NONE

#define ON_RDK_DECAL_MAPPING_NONE   L"none"

◆ ON_RDK_DECAL_MAPPING_PLANAR

#define ON_RDK_DECAL_MAPPING_PLANAR   L"planar"

--— +++++++++++++++++++

◆ ON_RDK_DECAL_MAPPING_SPHERICAL

#define ON_RDK_DECAL_MAPPING_SPHERICAL   L"spherical"

◆ ON_RDK_DECAL_MAPPING_UV

#define ON_RDK_DECAL_MAPPING_UV   L"uv"

◆ ON_RDK_DECAL_MAX_U

#define ON_RDK_DECAL_MAX_U   L"max-u"

◆ ON_RDK_DECAL_MAX_V

#define ON_RDK_DECAL_MAX_V   L"max-v"

◆ ON_RDK_DECAL_MIN_U

#define ON_RDK_DECAL_MIN_U   L"min-u"

◆ ON_RDK_DECAL_MIN_V

#define ON_RDK_DECAL_MIN_V   L"min-v"

◆ ON_RDK_DECAL_ORIGIN

#define ON_RDK_DECAL_ORIGIN   L"origin"

◆ ON_RDK_DECAL_PROJECTION

#define ON_RDK_DECAL_PROJECTION   L"projection"

◆ ON_RDK_DECAL_PROJECTION_BACKWARD

#define ON_RDK_DECAL_PROJECTION_BACKWARD   L"backward"

◆ ON_RDK_DECAL_PROJECTION_BOTH

#define ON_RDK_DECAL_PROJECTION_BOTH   L"both"

◆ ON_RDK_DECAL_PROJECTION_FORWARD

#define ON_RDK_DECAL_PROJECTION_FORWARD   L"forward"

--— ++++++++++++++++++++++

◆ ON_RDK_DECAL_PROJECTION_NONE

#define ON_RDK_DECAL_PROJECTION_NONE   L"none"

◆ ON_RDK_DECAL_RADIUS

#define ON_RDK_DECAL_RADIUS   L"radius"

◆ ON_RDK_DECAL_TEXTURE_INSTANCE

#define ON_RDK_DECAL_TEXTURE_INSTANCE   L"texture-instance"

◆ ON_RDK_DECAL_TRANSPARENCY

#define ON_RDK_DECAL_TRANSPARENCY   L"transparency"

◆ ON_RDK_DECAL_VECTOR_ACROSS

#define ON_RDK_DECAL_VECTOR_ACROSS   L"vector-across"

◆ ON_RDK_DECAL_VECTOR_UP

#define ON_RDK_DECAL_VECTOR_UP   L"vector-up"

◆ ON_RDK_DECAL_VERT_SWEEP_END

#define ON_RDK_DECAL_VERT_SWEEP_END   L"longitude-stop"

◆ ON_RDK_DECAL_VERT_SWEEP_STA

#define ON_RDK_DECAL_VERT_SWEEP_STA   L"longitude-start"

◆ ON_RDK_DECALS

#define ON_RDK_DECALS   L"decals"

Decals (stored in object attributes user data).

◆ ON_RDK_DEFAULT_CONTENT_SECTION

#define ON_RDK_DEFAULT_CONTENT_SECTION   L"default-content-section"

◆ ON_RDK_DITHERING_ENABLED

#define ON_RDK_DITHERING_ENABLED   L"use-dithering"

◆ ON_RDK_DITHERING_METHOD

#define ON_RDK_DITHERING_METHOD   L"dithering"

◆ ON_RDK_DITHERING_METHOD_FLOYD_STEINBERG

#define ON_RDK_DITHERING_METHOD_FLOYD_STEINBERG   L"floyd-steinberg"

◆ ON_RDK_DITHERING_METHOD_SIMPLE_NOISE

#define ON_RDK_DITHERING_METHOD_SIMPLE_NOISE   L"simple-noise"

◆ ON_RDK_DOCUMENT

#define ON_RDK_DOCUMENT   L"render-content-manager-document"

This is the structure of the RDK document XML.

◆ ON_RDK_EMBED_SUPPORT_FILES_ON

#define ON_RDK_EMBED_SUPPORT_FILES_ON   L"embed-support-files-on"

◆ ON_RDK_EXCLUDED_RENDER_ENGINES

#define ON_RDK_EXCLUDED_RENDER_ENGINES   L"excluded-render-engines"

◆ ON_RDK_FILTERS

#define ON_RDK_FILTERS   L"filters"

◆ ON_RDK_GP_ALTITUDE

#define ON_RDK_GP_ALTITUDE   L"altitude"

◆ ON_RDK_GP_AUTO_ALTITUDE

#define ON_RDK_GP_AUTO_ALTITUDE   L"auto-altitude"

◆ ON_RDK_GP_ENABLED

#define ON_RDK_GP_ENABLED   L"on"

◆ ON_RDK_GP_MATERIAL_ID

#define ON_RDK_GP_MATERIAL_ID   L"material"

◆ ON_RDK_GP_SHADOW_ONLY

#define ON_RDK_GP_SHADOW_ONLY   L"shadow-only"

◆ ON_RDK_GP_SHOW_UNDERSIDE

#define ON_RDK_GP_SHOW_UNDERSIDE   L"show-underside"

◆ ON_RDK_GP_TEXTURE_OFFSET

#define ON_RDK_GP_TEXTURE_OFFSET   L"texture-offset"

◆ ON_RDK_GP_TEXTURE_OFFSET_LOCKED

#define ON_RDK_GP_TEXTURE_OFFSET_LOCKED   L"offset-lock"

Keep old string.

◆ ON_RDK_GP_TEXTURE_ROTATION

#define ON_RDK_GP_TEXTURE_ROTATION   L"texture-rotation"

◆ ON_RDK_GP_TEXTURE_SIZE

#define ON_RDK_GP_TEXTURE_SIZE   L"texture-size"

◆ ON_RDK_GP_TEXTURE_SIZE_LOCKED

#define ON_RDK_GP_TEXTURE_SIZE_LOCKED   L"repeat-lock"

Keep old string.

◆ ON_RDK_GROUND_PLANE

#define ON_RDK_GROUND_PLANE   L"ground-plane"

◆ ON_RDK_IMPORT

#define ON_RDK_IMPORT   L"import"

◆ ON_RDK_MISCELLANEOUS

#define ON_RDK_MISCELLANEOUS   L"miscellaneous"

◆ ON_RDK_NAME_COLLISION_SUPPRESS

#define ON_RDK_NAME_COLLISION_SUPPRESS   L"smart-merge-name-collision-suppress"

◆ ON_RDK_NAME_FILTER

#define ON_RDK_NAME_FILTER   L"name-filter"

◆ ON_RDK_NAME_FILTER_INVERT

#define ON_RDK_NAME_FILTER_INVERT   L"name-filter-invert"

◆ ON_RDK_NAMED_CPLANES

#define ON_RDK_NAMED_CPLANES   L"named-cplanes"

◆ ON_RDK_NAMED_POSITIONS

#define ON_RDK_NAMED_POSITIONS   L"named-positions"

◆ ON_RDK_NAMED_SNAPSHOTS

#define ON_RDK_NAMED_SNAPSHOTS   L"named-snapshots"

◆ ON_RDK_NAMED_VIEWS

#define ON_RDK_NAMED_VIEWS   L"named-views"

◆ ON_RDK_PASTE

#define ON_RDK_PASTE   L"paste"

◆ ON_RDK_PEP_ID

#define ON_RDK_PEP_ID   L"id"

◆ ON_RDK_PEP_LOCAL_NAME

#define ON_RDK_PEP_LOCAL_NAME   L"name"

◆ ON_RDK_PEP_ON

#define ON_RDK_PEP_ON   L"on"

◆ ON_RDK_PEP_PARAMS

#define ON_RDK_PEP_PARAMS   L"state"

This should really be 'params'.

◆ ON_RDK_PEP_PLUG_IN

#define ON_RDK_PEP_PLUG_IN   L"plug-in"

◆ ON_RDK_PEP_SELECTION

#define ON_RDK_PEP_SELECTION   L"selection"

◆ ON_RDK_PEP_SHOWN

#define ON_RDK_PEP_SHOWN   L"shown"

◆ ON_RDK_PEP_TYPE_EARLY

#define ON_RDK_PEP_TYPE_EARLY   L"early"

◆ ON_RDK_PEP_TYPE_LATE

#define ON_RDK_PEP_TYPE_LATE   L"late"

◆ ON_RDK_PEP_TYPE_TONE_MAPPING

#define ON_RDK_PEP_TYPE_TONE_MAPPING   L"tone-mapping"

◆ ON_RDK_POST_EFFECTS

#define ON_RDK_POST_EFFECTS   L"post-effects-new"

◆ ON_RDK_POST_PROCESS_GAMMA

#define ON_RDK_POST_PROCESS_GAMMA   L"gamma"

Keep original XML tag.

◆ ON_RDK_POST_PROCESS_GAMMA_ON

#define ON_RDK_POST_PROCESS_GAMMA_ON   L"use-post-process-gamma"

◆ ON_RDK_POSTFIX_SECTION

#define ON_RDK_POSTFIX_SECTION   L"-section"

◆ ON_RDK_PRE_PROCESS_GAMMA_ON

#define ON_RDK_PRE_PROCESS_GAMMA_ON   L"use-linear-workflow"

◆ ON_RDK_RCH_LIST

#define ON_RDK_RCH_LIST   L"list"

◆ ON_RDK_RCH_MODE

#define ON_RDK_RCH_MODE   L"mode"

◆ ON_RDK_RCH_MODE_AUTOMATIC

#define ON_RDK_RCH_MODE_AUTOMATIC   L"automatic"

◆ ON_RDK_RCH_MODE_CUSTOM

#define ON_RDK_RCH_MODE_CUSTOM   L"custom"

◆ ON_RDK_RENDER_CHANNELS

#define ON_RDK_RENDER_CHANNELS   L"render-channels"

◆ ON_RDK_RENDERING

#define ON_RDK_RENDERING   L"rendering"

◆ ON_RDK_SAFE_FRAME

#define ON_RDK_SAFE_FRAME   L"safe-frame"

◆ ON_RDK_SETTINGS

#define ON_RDK_SETTINGS   L"settings"

◆ ON_RDK_SF_4x3_FIELD_GRID_ON

#define ON_RDK_SF_4x3_FIELD_GRID_ON   L"field-display-on"

◆ ON_RDK_SF_ACTION_FRAME

#define ON_RDK_SF_ACTION_FRAME   L"action-frame"

◆ ON_RDK_SF_ENABLED

#define ON_RDK_SF_ENABLED   L"on"

◆ ON_RDK_SF_LIVE_FRAME

#define ON_RDK_SF_LIVE_FRAME   L"live-frame"

◆ ON_RDK_SF_PERSPECTIVE_ONLY

#define ON_RDK_SF_PERSPECTIVE_ONLY   L"perspective-only"

◆ ON_RDK_SF_TITLE_FRAME

#define ON_RDK_SF_TITLE_FRAME   L"title-frame"

◆ ON_RDK_SFF_LINK

#define ON_RDK_SFF_LINK   L"link"

◆ ON_RDK_SFF_ON

#define ON_RDK_SFF_ON   L"on"

◆ ON_RDK_SFF_XSCALE

#define ON_RDK_SFF_XSCALE   L"x-scale"

◆ ON_RDK_SFF_YSCALE

#define ON_RDK_SFF_YSCALE   L"y-scale"

◆ ON_RDK_SHOW_HIDDEN

#define ON_RDK_SHOW_HIDDEN   L"show-hidden-materials"

◆ ON_RDK_SHOW_REFERENCE

#define ON_RDK_SHOW_REFERENCE   L"show-reference-materials"

◆ ON_RDK_SHOW_UNASSIGNED

#define ON_RDK_SHOW_UNASSIGNED   L"show-unassigned-materials"

◆ ON_RDK_SHOW_V4

#define ON_RDK_SHOW_V4   L"show-v4-materials"

◆ ON_RDK_SORT_MODE

#define ON_RDK_SORT_MODE   L"sort-mode"

◆ ON_RDK_SORT_MODE_ASCENDING

#define ON_RDK_SORT_MODE_ASCENDING   L"ascending"

◆ ON_RDK_SORT_MODE_CUSTOM

#define ON_RDK_SORT_MODE_CUSTOM   L"custom"

◆ ON_RDK_SORT_MODE_DESCENDING

#define ON_RDK_SORT_MODE_DESCENDING   L"descending"

◆ ON_RDK_SUN

#define ON_RDK_SUN   L"sun"

◆ ON_RDK_SUN_ALTITUDE

#define ON_RDK_SUN_ALTITUDE   L"sun-altitude"

◆ ON_RDK_SUN_AZIMUTH

#define ON_RDK_SUN_AZIMUTH   L"sun-azimuth"

◆ ON_RDK_SUN_DATE_DAY

#define ON_RDK_SUN_DATE_DAY   L"day"

◆ ON_RDK_SUN_DATE_MONTH

#define ON_RDK_SUN_DATE_MONTH   L"month"

◆ ON_RDK_SUN_DATE_YEAR

#define ON_RDK_SUN_DATE_YEAR   L"year"

◆ ON_RDK_SUN_DAYLIGHT_SAVING_MINUTES

#define ON_RDK_SUN_DAYLIGHT_SAVING_MINUTES   L"daylight-saving-minutes"

◆ ON_RDK_SUN_DAYLIGHT_SAVING_ON

#define ON_RDK_SUN_DAYLIGHT_SAVING_ON   L"daylight-saving-on"

◆ ON_RDK_SUN_ENABLE_ALLOWED

#define ON_RDK_SUN_ENABLE_ALLOWED   L"enable-allowed"

◆ ON_RDK_SUN_ENABLE_ON

#define ON_RDK_SUN_ENABLE_ON   L"enable-on"

◆ ON_RDK_SUN_INTENSITY

#define ON_RDK_SUN_INTENSITY   L"intensity"

◆ ON_RDK_SUN_MANUAL_CONTROL_ALLOWED

#define ON_RDK_SUN_MANUAL_CONTROL_ALLOWED   L"manual-control-allowed"

◆ ON_RDK_SUN_MANUAL_CONTROL_ON

#define ON_RDK_SUN_MANUAL_CONTROL_ON   L"manual-control-on"

◆ ON_RDK_SUN_NORTH

#define ON_RDK_SUN_NORTH   L"north"

◆ ON_RDK_SUN_OBSERVER_LATITUDE

#define ON_RDK_SUN_OBSERVER_LATITUDE   L"observer-latitude"

◆ ON_RDK_SUN_OBSERVER_LONGITUDE

#define ON_RDK_SUN_OBSERVER_LONGITUDE   L"observer-longitude"

◆ ON_RDK_SUN_OBSERVER_TIMEZONE

#define ON_RDK_SUN_OBSERVER_TIMEZONE   L"observer-timezone"

◆ ON_RDK_SUN_SHADOW_INTENSITY

#define ON_RDK_SUN_SHADOW_INTENSITY   L"shadow-intensity"

◆ ON_RDK_SUN_SKYLIGHT_ENABLED

#define ON_RDK_SUN_SKYLIGHT_ENABLED   L"skylight-on"

◆ ON_RDK_SUN_SKYLIGHT_ENVIRONMENT_ID

#define ON_RDK_SUN_SKYLIGHT_ENVIRONMENT_ID   L"skylight-custom-environment"

◆ ON_RDK_SUN_SKYLIGHT_ENVIRONMENT_OVERRIDE

#define ON_RDK_SUN_SKYLIGHT_ENVIRONMENT_OVERRIDE   L"skylight-custom-environment-on"

◆ ON_RDK_SUN_SKYLIGHT_SHADOW_INTENSITY

#define ON_RDK_SUN_SKYLIGHT_SHADOW_INTENSITY   L"skylight-shadow-intensity"

◆ ON_RDK_SUN_TIME_HOURS

#define ON_RDK_SUN_TIME_HOURS   L"time"

◆ ON_RDK_UUIDS

#define ON_RDK_UUIDS   L"uuids"

◆ ON_RELATIVE_CURVATURE_TOLERANCE

#define ON_RELATIVE_CURVATURE_TOLERANCE   0.05

◆ ON_RELATIVE_TOLERANCE

#define ON_RELATIVE_TOLERANCE   2.27373675443232059478759765625e-13

ON_RELATIVE_TOLERANCE = 2^-42.

/ In cases when an relative "zero" tolerance is / required for comparing model space coordinates, / (fabs(a)+fabs(b))*ON_RELATIVE_TOLERANCE is used. / ON_RELATIVE_TOLERANCE should be larger than / ON_EPSILON and smaller than no larger than / ON_ZERO_TOLERANCE*2^-10. /

◆ ON_RENDER_CONTENT_AUTO_DELETE

#define ON_RENDER_CONTENT_AUTO_DELETE   L"auto-delete"

◆ ON_RENDER_CONTENT_CHILD_SLOT_NAME

#define ON_RENDER_CONTENT_CHILD_SLOT_NAME   L"child-slot-name"

◆ ON_RENDER_CONTENT_GROUP_ID

#define ON_RENDER_CONTENT_GROUP_ID   L"group-id"

◆ ON_RENDER_CONTENT_HIDDEN

#define ON_RENDER_CONTENT_HIDDEN   L"hidden"

◆ ON_RENDER_CONTENT_INSTANCE_ID

#define ON_RENDER_CONTENT_INSTANCE_ID   L"instance-id"

◆ ON_RENDER_CONTENT_INSTANCE_NAME

#define ON_RENDER_CONTENT_INSTANCE_NAME   L"instance-name"

◆ ON_RENDER_CONTENT_NOTES

#define ON_RENDER_CONTENT_NOTES   L"notes"

◆ ON_RENDER_CONTENT_PARAMETERS

#define ON_RENDER_CONTENT_PARAMETERS   L"parameters"

◆ ON_RENDER_CONTENT_PARAMETERS_V8

#define ON_RENDER_CONTENT_PARAMETERS_V8   L"parameters-v8"

◆ ON_RENDER_CONTENT_PLUG_IN_ID

#define ON_RENDER_CONTENT_PLUG_IN_ID   L"plug-in-id"

◆ ON_RENDER_CONTENT_REFERENCE

#define ON_RENDER_CONTENT_REFERENCE   L"reference"

◆ ON_RENDER_CONTENT_RENDER_ENGINE_ID

#define ON_RENDER_CONTENT_RENDER_ENGINE_ID   L"render-engine-id"

◆ ON_RENDER_CONTENT_SIMULATION

#define ON_RENDER_CONTENT_SIMULATION   L"simulation"

◆ ON_RENDER_CONTENT_TAGS

#define ON_RENDER_CONTENT_TAGS   L"tags"

◆ ON_RENDER_CONTENT_TYPE_ID

#define ON_RENDER_CONTENT_TYPE_ID   L"type-id"

◆ ON_RENDER_CONTENT_TYPE_NAME

#define ON_RENDER_CONTENT_TYPE_NAME   L"type-name"

Render Content.

◆ ON_RENDER_MATERIAL_TEXTURE_SIMULATION_AMOUNT

#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_AMOUNT   L"amount"

◆ ON_RENDER_MATERIAL_TEXTURE_SIMULATION_FILENAME

#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_FILENAME   L"filename"

◆ ON_RENDER_MATERIAL_TEXTURE_SIMULATION_FILTER

#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_FILTER   L"filter"

◆ ON_RENDER_MATERIAL_TEXTURE_SIMULATION_FORMAT

#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_FORMAT   L"Texture-%u-"

Material's texture simulation.

◆ ON_RENDER_MATERIAL_TEXTURE_SIMULATION_MODE

#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_MODE   L"mode"

◆ ON_RENDER_MATERIAL_TEXTURE_SIMULATION_ON

#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_ON   L"on"

◆ ON_RENDER_MATERIAL_TEXTURE_SIMULATION_TYPE

#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_TYPE   L"type"

◆ ON_RENDER_MATERIAL_TEXTURE_SIMULATION_UVW

#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_UVW   L"uvw"

◆ ON_RENDER_MATERIAL_TEXTURE_SIMULATION_WRAP_U

#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_WRAP_U   L"wrap-u"

◆ ON_RENDER_MATERIAL_TEXTURE_SIMULATION_WRAP_V

#define ON_RENDER_MATERIAL_TEXTURE_SIMULATION_WRAP_V   L"wrap-v"

◆ ON_RENDER_TEXTURE_FILENAME

#define ON_RENDER_TEXTURE_FILENAME   L"filename"

◆ ON_RTree_MAX_NODE_COUNT

#define ON_RTree_MAX_NODE_COUNT   6

◆ ON_RTree_MIN_NODE_COUNT

#define ON_RTree_MIN_NODE_COUNT   2

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. The opennurbs rtree code is a modified version of the free and unrestricted R-tree implementation obtained from http://www.superliminal.com/sources/sources.htm

The first lines on the website indicate the code is free and unrestricted:

Free Source Code Here are a few useful bits of free source code. You're completely free to use them for any purpose whatsoever. All I ask is that if you find one to be particularly valuable, then consider sending feedback. Please send bugs and suggestions too. Enjoy

The readme.txt file included with the R-tree source says

LICENSE: Entirely free for all uses. Enjoy!

The original authors are

AUTHORS 1983 Original algorithm and test code by Antonin Guttman and Michael Stonebraker, UC Berkely 1994 ANCI C ported from original test code by Melinda Green - melin.nosp@m.da@s.nosp@m.uperl.nosp@m.imin.nosp@m.al.co.nosp@m.m 1995 Sphere volume fix for degeneracy problem submitted by Paul Brook 2004 Templated C++ port by Greg Douglas

The opennurbs version adds some custom memory allocation and replaces the leaf iterator. The rest of the changes are cosmetic. Minimum and maximum number of elements in ON_RTreeNode::m_branch[]. must have ON_RTree_MAX_NODE_COUNT > ON_RTree_MIN_NODE_COUNT

◆ ON_SHUTLINING_AUTO_UPDATE

#define ON_SHUTLINING_AUTO_UPDATE   L"auto-update"

◆ ON_SHUTLINING_CURVE

#define ON_SHUTLINING_CURVE   L"curve"

◆ ON_SHUTLINING_CURVE_ENABLED

#define ON_SHUTLINING_CURVE_ENABLED   L"enabled"

◆ ON_SHUTLINING_CURVE_IS_BUMP

#define ON_SHUTLINING_CURVE_IS_BUMP   L"is-bump"

◆ ON_SHUTLINING_CURVE_PROFILE

#define ON_SHUTLINING_CURVE_PROFILE   L"profile"

◆ ON_SHUTLINING_CURVE_PULL

#define ON_SHUTLINING_CURVE_PULL   L"pull"

◆ ON_SHUTLINING_CURVE_RADIUS

#define ON_SHUTLINING_CURVE_RADIUS   L"radius"

◆ ON_SHUTLINING_CURVE_UUID

#define ON_SHUTLINING_CURVE_UUID   L"uuid"

◆ ON_SHUTLINING_FACETED

#define ON_SHUTLINING_FACETED   L"faceted"

◆ ON_SHUTLINING_FORCE_UPDATE

#define ON_SHUTLINING_FORCE_UPDATE   L"force-update"

◆ ON_SHUTLINING_ON

#define ON_SHUTLINING_ON   L"on"

◆ ON_SHUTLINING_ROOT

#define ON_SHUTLINING_ROOT   L"shut-lining-object-data"

◆ ON_SIN_PI_OVER_12

#define ON_SIN_PI_OVER_12   0.2588190451025207623488990

◆ ON_SleepLock_SuspendThisThread

#define ON_SleepLock_SuspendThisThread (   n)    usleep(n)

Sleeps the THREAD not the PROCESS.

◆ ON_SLEEPLOCK_USES_STD_ATOMIC_FLAG

#define ON_SLEEPLOCK_USES_STD_ATOMIC_FLAG

Use std::atomic_lock and std::this_thread::sleep_for(std::chrono::milliseconds(...))

◆ ON_SQRT2

#define ON_SQRT2   1.414213562373095048801689

◆ ON_SQRT3

#define ON_SQRT3   1.732050807568877293527446

◆ ON_SQRT3_OVER_2

#define ON_SQRT3_OVER_2   0.8660254037844386467637230

◆ ON_SQRT_EPSILON

#define ON_SQRT_EPSILON   1.490116119385000000e-8

◆ ON_SQRT_FLOAT_EPSILON

#define ON_SQRT_FLOAT_EPSILON   3.452669830725202719e-4

◆ ON_STATIC_ASSERT

#define ON_STATIC_ASSERT (   expr)    typedef char on_static_assert_t[(expr) != 0]

< C++17

////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// / / BEGIN - ON_COMPILER_* defines / / ON_COMPILER_* specifies the C/C++ compiler used. / At most one the ON_COMPILER_* should be defined. / / Compilers with a better static_assert declaration / may change ON_STATIC_ASSERT accordingly. < C++11

◆ ON_STATIC_ASSERT_MSG

#define ON_STATIC_ASSERT_MSG (   expr,
  msg 
)    typedef char on_static_assert_t[(expr) != 0]

◆ ON_TESTS_BUILD

#define ON_TESTS_BUILD

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. WARNING: DO NOT INCLUDE THIS FILE WITH THE DISTRIBUTION OF OPENNURBS OR IN THE RHINO SDK PURPOSE: this file is used to expose functions that are normally not part of the API of opennurbs, with the purpose of being able to unit tests such functions as part of the build.

USAGE: Include the function signatures prepended with ON_DECL to export the function in the opennurbs library. This will allow the tests to call the function directly.

DEFINES: This file defines the symbol ON_TESTS_BUILD which you can use to fine tune your code.

◆ ON_TEXT_BRACKET_FRACTION

#define ON_TEXT_BRACKET_FRACTION

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

◆ ON_TEXTURE_CHILD_SLOT_NAME_BITMAP_TEXTURE

#define ON_TEXTURE_CHILD_SLOT_NAME_BITMAP_TEXTURE   L"bitmap-texture"

Standard texture child slot names.

◆ ON_TEXTURE_CHILD_SLOT_NAME_BUMP_TEXTURE

#define ON_TEXTURE_CHILD_SLOT_NAME_BUMP_TEXTURE   L"bump-texture"

◆ ON_TEXTURE_CHILD_SLOT_NAME_ENVIRONMENT_TEXTURE

#define ON_TEXTURE_CHILD_SLOT_NAME_ENVIRONMENT_TEXTURE   L"environment-texture"

◆ ON_TEXTURE_CHILD_SLOT_NAME_TRANSPARENCY_TEXTURE

#define ON_TEXTURE_CHILD_SLOT_NAME_TRANSPARENCY_TEXTURE   L"transparency-texture"

◆ ON_TEXTURE_SIMULATION_BLEND_CONSTANT_A

#define ON_TEXTURE_SIMULATION_BLEND_CONSTANT_A   L"blend-constant-a"

◆ ON_TEXTURE_SIMULATION_FILENAME

#define ON_TEXTURE_SIMULATION_FILENAME   L"filename"

◆ ON_TEXTURE_SIMULATION_HAS_TRANSPARENT_COLOR

#define ON_TEXTURE_SIMULATION_HAS_TRANSPARENT_COLOR   L"has-trans-color"

◆ ON_TEXTURE_SIMULATION_MAG_FILTER

#define ON_TEXTURE_SIMULATION_MAG_FILTER   L"mag-filter"

◆ ON_TEXTURE_SIMULATION_MAPPING_CHANNEL

#define ON_TEXTURE_SIMULATION_MAPPING_CHANNEL   L"mapping-channel"

◆ ON_TEXTURE_SIMULATION_MIN_FILTER

#define ON_TEXTURE_SIMULATION_MIN_FILTER   L"min-filter"

◆ ON_TEXTURE_SIMULATION_MODE

#define ON_TEXTURE_SIMULATION_MODE   L"mode"

◆ ON_TEXTURE_SIMULATION_OFFSET

#define ON_TEXTURE_SIMULATION_OFFSET   L"offset"

◆ ON_TEXTURE_SIMULATION_ON

#define ON_TEXTURE_SIMULATION_ON   L"on"

Texture simulation.

◆ ON_TEXTURE_SIMULATION_PROJECTION_MODE

#define ON_TEXTURE_SIMULATION_PROJECTION_MODE   L"projection-mode"

◆ ON_TEXTURE_SIMULATION_REPEAT

#define ON_TEXTURE_SIMULATION_REPEAT   L"repeat"

◆ ON_TEXTURE_SIMULATION_ROTATION

#define ON_TEXTURE_SIMULATION_ROTATION   L"rotation"

◆ ON_TEXTURE_SIMULATION_TRANSPARENCY_TEXTURE_ID

#define ON_TEXTURE_SIMULATION_TRANSPARENCY_TEXTURE_ID   L"transparency-texture-id"

◆ ON_TEXTURE_SIMULATION_TRANSPARENT_COLOR

#define ON_TEXTURE_SIMULATION_TRANSPARENT_COLOR   L"trans-color"

◆ ON_TEXTURE_SIMULATION_TRANSPARENT_COLOR_SENSITIVITY

#define ON_TEXTURE_SIMULATION_TRANSPARENT_COLOR_SENSITIVITY   L"trans-color-sensitivity"

◆ ON_TEXTURE_SIMULATION_TREAT_AS_LINEAR

#define ON_TEXTURE_SIMULATION_TREAT_AS_LINEAR   L"treat-as-linear"

◆ ON_TEXTURE_SIMULATION_TYPE

#define ON_TEXTURE_SIMULATION_TYPE   L"type"

◆ ON_TEXTURE_SIMULATION_WRAP_TYPE

#define ON_TEXTURE_SIMULATION_WRAP_TYPE   L"wrap-type"

◆ ON_THICKENING_BOTH_SIDES

#define ON_THICKENING_BOTH_SIDES   L"both-sides"

◆ ON_THICKENING_DISTANCE

#define ON_THICKENING_DISTANCE   L"distance"

◆ ON_THICKENING_OFFSET_ONLY

#define ON_THICKENING_OFFSET_ONLY   L"offset-only"

◆ ON_THICKENING_ON

#define ON_THICKENING_ON   L"on"

◆ ON_THICKENING_ROOT

#define ON_THICKENING_ROOT   L"thickening-object-data"

Thickening

◆ ON_THICKENING_SOLID

#define ON_THICKENING_SOLID   L"solid"

◆ ON_UINT_FROM_ENUM

#define ON_UINT_FROM_ENUM (   e)    (static_cast<unsigned int>(e))

◆ ON_UINT_MAX

#define ON_UINT_MAX   (~(0U))

◆ ON_UNSET_COLOR

#define ON_UNSET_COLOR   0xFFFFFFFF

/ In cases where lazy evaluation of a color value is / performed, this value is used to indicate the value / has not been computed.

◆ ON_UNSET_FLOAT

#define ON_UNSET_FLOAT   -ON_UNSET_POSITIVE_FLOAT

◆ ON_UNSET_INT_INDEX

#define ON_UNSET_INT_INDEX   ((const int)-2147483647)

When signed int values are used in a context where 0 and small negative values are valid indices and there needs to be a value that indicates the index is not set, use ON_UNSET_INT_INDEX. This value is INT_MIN+1

◆ ON_unset_point

#define ON_unset_point   ON_3dPoint::UnsetPoint

OBSOLETE - use ON_3dPoint::UnsetPoint.

common points and vectors

ON_unset_point is obsolete - use ON_3dPoint::UnsetPoint

◆ ON_UNSET_POINT

#define ON_UNSET_POINT   ON_3dPoint::UnsetPoint

OBSOLETE - use ON_3dPoint::UnsetPoint.

◆ ON_UNSET_POSITIVE_FLOAT

#define ON_UNSET_POSITIVE_FLOAT   1.234321e+38f

/ ON_UNSET_FLOAT is used to indicate a texture coordinate / value cannot be calculated or is not well defined.
/ In hindsight, this value should have been ON_FLT_QNAN / because many calculation convert float texture coordinates / to doubles and the "unset"ness attribute is lost.

◆ ON_UNSET_POSITIVE_VALUE

#define ON_UNSET_POSITIVE_VALUE   1.23432101234321e+308

/ In cases where lazy evaluation of a double value is / performed, b-rep tolerances being a notable example, / this value is used to indicate the value has not been / computed. This value must be < -1.0e308. and > -ON_DBL_MAX / / The reasons ON_UNSET_VALUE is a valid finite number are: / / 1) It needs to round trip through fprintf/sscanf. / 2) It needs to persist unchanged through assignment / and not generate exceptions when assigned. / 3) ON_UNSET_VALUE == ON_UNSET_VALUE needs to be true. / 4) ON_UNSET_VALUE != ON_UNSET_VALUE needs to be false. / / Ideally, it would also have these SNaN attributes / * When used in a calculation, a floating point exception / occurs. / * No possibility of a valid calculation would generate / ON_UNSET_VALUE. / * float f = (float)ON_UNSET_VALUE would create an invalid / float and generate an exception.

◆ ON_UNSET_UINT_INDEX

#define ON_UNSET_UINT_INDEX   0xFFFFFFFFU

When unsigned int values are used in a context where 0 is a valid index and there needs to be a value that indicates the index is not set, use ON_UNSET_UINT_INDEX.

◆ ON_UNSET_VALUE

#define ON_UNSET_VALUE   -ON_UNSET_POSITIVE_VALUE

◆ ON_UNSET_VECTOR

#define ON_UNSET_VECTOR   ON_3dVector::UnsetVector

OBSOLETE - use ON_3dPoint::UnsetVector.

◆ ON_UUID_DEFINED

#define ON_UUID_DEFINED

ON_UUID is a 16 byte universally unique identifier.

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. This code also exists in version.h, but needs to be here to solve include ordering problems, and for standalone opennurbs.dll builds.

◆ ON_VARGS_FUNC_CDECL

#define ON_VARGS_FUNC_CDECL

/ Compilers that require special declaration of callback functions / will change ON_CALLBACK_CDECL accordingly.

◆ ON_VERSION_NUMBER_CTOR

#define ON_VERSION_NUMBER_CTOR (   major,
  minor,
  year,
  month,
  day_of_month,
  branch 
)
Value:
(0x80000000U \
+ ((((major)*0x080U + (minor)))*0x010000U \
+ ((ON_VERSION_NUMBER_TIME(year,month,day_of_month))))*0x04U \

ON_VERSION_NUMBER_CTOR(major,minor,year,month,day_of_month,branch) is a macro whose value is the opennurbs version number encoding for the specified major, minor, year, month and day_of_month values.

In almost every situation, it is best to used the function call ON_VersionNumberConstruct(major,minor,year,month,day_of_month,branch) to get this value. The ON_VERSION_NUMBER_CTOR macro is for rare and unusual situations where the C preprocessor needs this value.

◆ ON_VERSION_NUMBER_DAYOFYEAR

#define ON_VERSION_NUMBER_DAYOFYEAR (   year,
  month,
  day_of_month 
)
Value:
( (day_of_month) \
+ ((month) >= 2 ? 31 : 0) \
+ ((month) >= 3 ? ON_VERSION_NUMBER_FEBDAYS(year) : 0) \
+ ((month) >= 4 ? 31 : 0) \
+ ((month) >= 5 ? 30 : 0) \
+ ((month) >= 6 ? 31 : 0) \
+ ((month) >= 7 ? 30 : 0) \
+ ((month) >= 8 ? 31 : 0) \
+ ((month) >= 9 ? 31 : 0) \
+ ((month) >= 10 ? 30 : 0) \
+ ((month) >= 11 ? 31 : 0) \
+ ((month) >= 12 ? 30 : 0) \
)

ON_VERSION_NUMBER_DAYOFYEAR(year, month, day_of_month) is a macro whose value is the cardinal day of the year for the specified year, month and day_of_month.

In almost every situation, it is best to used the function call ON_DayOfGregorianYear(year,month,day_of_month) to get this value. The ON_VERSION_NUMBER_DAYOFYEAR macro is for rare and unusual situations where the C preprocessor needs this value.

◆ ON_VERSION_NUMBER_FEBDAYS

#define ON_VERSION_NUMBER_FEBDAYS (   year)
Value:
(((year) % 400) == 0 ? 29 : \
(((year) % 100) == 0 ? 28 : \
(((year) % 4) == 0 ? 29 : \
28)))

ON_VERSION_NUMBER_FEBDAYS(year) is a macro whose value is the number of days in the month of February in a specified year.

In almost every situation, it is best to used the function call ON_DaysInMonthOfGregorianYear(year,2) to get this value. The ON_VERSION_NUMBER_FEBDAYS macro is for rare and unusual situations where the C preprocessor needs this value.

◆ ON_VERSION_NUMBER_PLATFORM_ID

#define ON_VERSION_NUMBER_PLATFORM_ID (   branch)    (((branch) > 0x0U) ? (0x02U - ((branch) % 0x02U)) : 0x0U)

branch is 0 for developer builds, odd for windows builds, and even for Mac builds When compressed into 2 bits, the type of build (Commercial/Beta/WIP) is not encoded.

branch 0: developer build 1: Windows Commercial build 2: Mac Commercial build 3: Windows BETA build 4: Mac Beta build 5: Windows WIP build 6: Mac WIP build

ON_VERSION_NUMBER_PLATFORM_ID(branch) = = 0: developer build 1: Windows build 2: Mac build

NOTE WELL: ON_VERSION_NUMBER_PLATFORM_ID(branch) must be a value between 0 and 3.

◆ ON_VERSION_NUMBER_TIME

#define ON_VERSION_NUMBER_TIME (   year,
  month,
  day_of_month 
)    ((((year)-2000)*367) + (ON_VERSION_NUMBER_DAYOFYEAR(year,month,day_of_month)))

◆ ON_VIRTUAL_OBJECT_IMPLEMENT

#define ON_VIRTUAL_OBJECT_IMPLEMENT (   cls,
  basecls,
  uuid 
)
Value:
void* cls::m_s_##cls##_ptr = nullptr; \
const ON_ClassId cls::m_##cls##_class_rtti(#cls,#basecls,0,uuid);\
cls * cls::Cast( ON_Object* p) {return(p&&p->IsKindOf(&cls::m_##cls##_class_rtti))?static_cast< cls *>(p):nullptr;} \
const cls * cls::Cast( const ON_Object* p) {return(p&&p->IsKindOf(&cls::m_##cls##_class_rtti))?static_cast<const cls *>(p):nullptr;} \
const ON_ClassId* cls::ClassId() const {return &cls::m_##cls##_class_rtti;} \
bool cls::CopyFrom(const ON_Object*) {return false;} \
cls * cls::Duplicate() const {return static_cast< cls *>(this->Internal_DeepCopy());} \
ON_Object* cls::Internal_DeepCopy() const {return nullptr;}

Classes derived from ON_Object that are pure virtual classes, or do not have a valid default constructor, valid operator new or valid operator= must use ON_VIRTUAL_OBJECT_IMPLEMENT in their implementation. Classes implemented with ON_VIRTUAL_OBJECT_IMPLEMENT cannot be serialized using ON_BinaryArchive::ReadObject()/WriteObject() or duplicated using ON_Object::Duplicate(). The Cast() and ClassId() members work on classes implemented with ON_VIRTUAL_OBJECT_IMPLEMENT, ON_OBJECT_IMPLEMENT or ON_OBJECT_IMPLEMENT_NO_COPYCTOR

◆ ON_WARNING

#define ON_WARNING (   msg)    ON_WarningEx(__FILE__,__LINE__,OPENNURBS__FUNCTION__,msg)

◆ ON_WIP_CLASS

#define ON_WIP_CLASS   ON_CLASS

#endif

Functions with ON_WIP_DECL are works in progress. Classes with ON_WIP_CLASS are works in progress. Externals with ON_WIP_EXTERN_DECL are works in progress. These items can be seen and used in Rhino core code. These items are not part of the public SDK. These items can and will change or be removed at any time without notice. Any C++ code using ON_WIP_* features is likely to fail catastrophically at the most inconvenient time imaginable.

◆ ON_WIP_DECL

#define ON_WIP_DECL   ON_DECL

◆ ON_WIP_EXTERN_DECL

#define ON_WIP_EXTERN_DECL   ON_EXTERN_DECL

◆ ON_WIP_SDK

#define ON_WIP_SDK

Dale Lear 2024-March-14 Why are ON_WIP_SDK and ON_INTERNAL_SDK defined here? This seems exactly the opposite of what should happen. I think these should be wrapped in a #if defined(OPENNURBS_IN_RHINO) ... #endif block and that change needs extensive testing.

#if defined(OPENNURBS_IN_RHINO)

◆ ON_xaxis

#define ON_xaxis   ON_3dVector::XAxis

OBSOLETE - use ON_3dVector::XAxis.

◆ ON_XML_SLASH

#define ON_XML_SLASH   L"/"

◆ ON_yaxis

#define ON_yaxis   ON_3dVector::YAxis

OBSOLETE - use ON_3dVector::YAxis.

◆ ON_zaxis

#define ON_zaxis   ON_3dVector::ZAxis

OBSOLETE - use ON_3dVector::ZAxis.

◆ ON_ZERO_CURVATURE_TOLERANCE

#define ON_ZERO_CURVATURE_TOLERANCE   1.0e-8

/ The default test for deciding if a curvature value should be / treated as zero is / length(curvature) <= ON_ZERO_CURVATURE_TOLERANCE. / ON_ZERO_CURVATURE_TOLERANCE must be set so that / ON_ZERO_CURVATURE_TOLERANCE >= sqrt(3)*ON_ZERO_TOLERANCE / so that K.IsTiny() = true implies |K| <= ON_ZERO_CURVATURE_TOLERANCE

◆ ON_ZERO_TOLERANCE

#define ON_ZERO_TOLERANCE   2.3283064365386962890625e-10

/ In cases when an absolute "zero" tolerance / is required to compare model space coordinates, / ON_ZERO_TOLERANCE is used. The value of / ON_ZERO_TOLERANCE should be no smaller than / ON_EPSILON and should be several orders of / magnitude smaller than ON_SQRT_EPSILON / #define ON_ZERO_TOLERANCE 1.0e-12 ON_ZERO_TOLERANCE = 2^-32

◆ OPENNURBS__FUNCTION__

#define OPENNURBS__FUNCTION__   ""

For definition of PRIu64 to print 64-bit ints portably.

/ / END - OBSOLETE defines / ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// To debug linking pragma path issues, uncomment the following line pragma message( "OPENNURBS_OUTPUT_DIR = " OPENNURBS_PP2STR(OPENNURBS_OUTPUT_DIR) ) As of September, 2018 Freetype is not reliable on Windows, MacOS, and iOS. Its mapping from UNICODE code points to glyph indices is buggy. It does not support OpenType variable fonts like Windows 10 Bahnschrift. It does not support font simulation (Windows does a great job here.) Its support for multiple locale names is limited. Its support for PANOSE1 is limited. It does not support font substitution. Windows uses the Direct Write SDK for font and glyph calculations. MacOS and iOS use the Apple Core Text SDK for font and glyph calculations. not Windows, Apple, or Android To disable freetype support, comment out the following define. To enable freetype support, define OPENNURBS_FREETYPE_SUPPORT NOTE WELL: freetype is not delivered in a 32-bit version. Whenever possible use native OS tools for font and glyph support. Things like names, outlines, metrics, UNICODE mapping will generally work better align with user's experiences on that platform. Freetype is basically a platform neutral font file file reading toolkit and has all the limitations that arise from that approach to complex information modern OSs manage in complicated ways. #define OPENNURBS_FREETYPE_SUPPORT /////////////////////////////////////////////////////////////////////////////// / / Validate defines / / Validate ON_x_ENDIAN defines / Validate ON_xBIT_RUNTIME defines / Validate ON_SIZEOF_POINTER defines

◆ OPENNURBS_CURRENT_ARCHIVE_VERSION

#define OPENNURBS_CURRENT_ARCHIVE_VERSION   80

Jan 2017 November 2016 Rhino 7 WIP writes version 6 files. October 23 1019, Rhino 7 WIP writes version 7 files. May 17 2021, Rhino 8 WIP writes version 8 files.

More generally, in a stable release product, OPENNURBS_CURRENT_ARCHIVE_VERSION = OPENNURBS_VERSION_MAJOR*10. But for some period of time at the beginning of the Rhino (N+1) WIP development cycle, Rhino (N+1) WIP writes Rhino N files. That's why OPENNURBS_CURRENT_ARCHIVE_VERSION is sometimes (OPENNURBS_VERSION_MAJOR*10) and is sometimes ((OPENNURBS_VERSION_MAJOR-1)*10)

◆ OPENNURBS_GIT_BRANCH_NAME

#define OPENNURBS_GIT_BRANCH_NAME   RMA_GIT_BRANCH_NAME_STRING

◆ OPENNURBS_GIT_REVISION_HASH

#define OPENNURBS_GIT_REVISION_HASH   RMA_GIT_REVISION_HASH_STRING

The build process modifies version.h and sets RMA_SRC_SVN_REVISION = "<git revision SHA-1 hash>" before compiling applications.

◆ OPENNURBS_GL_INC_

#define OPENNURBS_GL_INC_

< Open GL utilities (for GL NURBS stuff)

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

Definitions of ON_GL() functions that demonstrate how to use GL to display OpenNURBS objects.
Unsupported compiler: Support for other compilers is not available < Open GL basic definitions

◆ OPENNURBS_INC_IN_PROGRESS

#define OPENNURBS_INC_IN_PROGRESS

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. Includes all openNURBS toolkit headers required to use the openNURBS toolkit library. See readme.txt for details.

◆ OPENNURBS_MAX_VERSION_MAJOR

#define OPENNURBS_MAX_VERSION_MAJOR   0x03F

◆ OPENNURBS_MAX_VERSION_MINOR

#define OPENNURBS_MAX_VERSION_MINOR   0x07F

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. Values that identify the version are defined below.

The function ON_VersionNumberConstruct(major,minor,year,month,day_of_month,branch) creates a 4-byte unsigned integer that encodes the version information.

The function ON_GetVersionNumberStringConstruct() creates a "major.minor.yyddd.hhmmb" version string where ddd = day of year (1 to 366).

The function ON_GetVersionNumberQuarted() returns an array of 4 unsigned short values (major,minor,yyddd,hhmmb) where ddd = day of year (1 to 366). All McNeel Rhino build version information is in ../version.h The McNeel Rhino build process automatically creates ../version.h and it specifies all version information in all code used by Rhino.

When opennurbs is released as a public source code library, a file named opennurbs_public_version.h is created in the folder containing opennurbs.h. it is a verbatim copy of the ../version.h file that is current at that time.

◆ OPENNURBS_PLUS_INC_

#define OPENNURBS_PLUS_INC_

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

◆ OPENNURBS_PLUS_SILHOUETTE_INC_

#define OPENNURBS_PLUS_SILHOUETTE_INC_

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

◆ OPENNURBS_PLUS_SLEEPLOCK_INC_

#define OPENNURBS_PLUS_SLEEPLOCK_INC_

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

◆ OPENNURBS_PP2STR

#define OPENNURBS_PP2STR (   s)    OPENNURBS_PP2STR_HELPER(s)

◆ OPENNURBS_PP2STR_HELPER

#define OPENNURBS_PP2STR_HELPER (   s)    #s

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. Includes all system headers required to use the openNURBS toolkit.

◆ OPENNURBS_PUBLIC

#define OPENNURBS_PUBLIC

◆ OPENNURBS_PUBLIC_INC_IN_PROGRESS

#define OPENNURBS_PUBLIC_INC_IN_PROGRESS

Copyright (c) 1993-2024 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. Includes all openNURBS toolkit headers required to use the openNURBS toolkit library. See readme.txt for details.

◆ OPENNURBS_SLEEPLOCK_AVAILABLE

#define OPENNURBS_SLEEPLOCK_AVAILABLE

◆ OPENNURBS_SLEEPLOCK_INC_

#define OPENNURBS_SLEEPLOCK_INC_

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

◆ OPENNURBS_STRING_VALUE_INC_

#define OPENNURBS_STRING_VALUE_INC_

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

◆ OPENNURBS_SUBD_DATA_INC_

#define OPENNURBS_SUBD_DATA_INC_

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING

The definitions in opennurbs_subd_data.h change randomly and unpredictably. Never include this file in any code you write, even as a hack. If you ignore this warning, your code will crash randomly and unpredictably

◆ OPENNURBS_SUBD_PLUS_INC_

#define OPENNURBS_SUBD_PLUS_INC_

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

◆ OPENNURBS_VERSION_BRANCH

#define OPENNURBS_VERSION_BRANCH   RMA_VERSION_BRANCH

branch => 0 Use ON::VersionBranch() to get this value. This number identifies the branch used in the build.

The build system automatically sets the value before compiling any code.

The file checked into the source code repository always has branch set to 0.

RMA_VERSION_BRANCH is defined in opennurbs_version.h 0: developer build 1: Windows Commercial build 2: Mac Commercial build 3: Windows BETA build 4: Mac Beta build 5: Windows WIP build 6: Mac WIP build define OPENNURBS_VERSION_BRANCH 0

◆ OPENNURBS_VERSION_DAY_OF_MONTH

#define OPENNURBS_VERSION_DAY_OF_MONTH   RMA_VERSION_DATE

◆ OPENNURBS_VERSION_HOUR

#define OPENNURBS_VERSION_HOUR   RMA_VERSION_HOUR

◆ OPENNURBS_VERSION_MAJOR

#define OPENNURBS_VERSION_MAJOR   RMA_VERSION_MAJOR

Major version number >= 0 and <= 63 Minor version number >= 0 and <= 127

◆ OPENNURBS_VERSION_MINOR

#define OPENNURBS_VERSION_MINOR   RMA_VERSION_MINOR

◆ OPENNURBS_VERSION_MINUTE

#define OPENNURBS_VERSION_MINUTE   RMA_VERSION_MINUTE

◆ OPENNURBS_VERSION_MONTH

#define OPENNURBS_VERSION_MONTH   RMA_VERSION_MONTH

◆ OPENNURBS_VERSION_NUMBER

#define OPENNURBS_VERSION_NUMBER
Value:

OPENNURBS_VERSION_NUMBER is a macro whose value is the opennurbs version number.

Always use ON::Version() when you need this value. The OPENNURBS_VERSION_NUMBER macro is for rare and unusual situations where the C preprocessor needs this value.

◆ OPENNURBS_VERSION_QUARTET_STRING

#define OPENNURBS_VERSION_QUARTET_STRING   RMA_VERSION_WITH_PERIODS_STRING

OPENNURBS_VERSION_QUARTET_STRING is a macro whose value is the opennurbs version quartet as a string.

◆ OPENNURBS_VERSION_QUARTET_WITH_COMMAS

#define OPENNURBS_VERSION_QUARTET_WITH_COMMAS   VERSION_WITH_COMMAS

◆ OPENNURBS_VERSION_QUARTET_WITH_PERIODS

#define OPENNURBS_VERSION_QUARTET_WITH_PERIODS   VERSION_WITH_PERIODS

◆ OPENNURBS_VERSION_QUARTET_WSTRING

#define OPENNURBS_VERSION_QUARTET_WSTRING   RMA_VERSION_WITH_PERIODS_WSTRING

◆ OPENNURBS_VERSION_YEAR

#define OPENNURBS_VERSION_YEAR   RMA_VERSION_YEAR

The five OPENNURBS_VERSION_... time defines are set automatically by the build system as the first step in each build.

◆ RTFFIRSTCHAR

#define RTFFIRSTCHAR

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

◆ Swap

#define Swap (   a,
 
)    m_swapfunc(a,b,m_width)

◆ TCODE_ANALYSIS_MESH

#define TCODE_ANALYSIS_MESH   (TCODE_GEOMETRY | 0x0018)

◆ TCODE_ANGULAR_DIMENSION

#define TCODE_ANGULAR_DIMENSION   (TCODE_ANNOTATION | 0x0007)

◆ TCODE_ANNOTATION

#define TCODE_ANNOTATION   0x00200000

◆ TCODE_ANNOTATION_LEADER

#define TCODE_ANNOTATION_LEADER   (TCODE_ANNOTATION | 0x0005)

◆ TCODE_ANNOTATION_SETTINGS

#define TCODE_ANNOTATION_SETTINGS   (TCODE_ANNOTATION | 0x0001)

/////////////////////////////////////////////////////////////////////////////////// / / TCODE_OPENNURBS_CLASS / length of entire openNURBS class object chunk / / TCODE_OPENNURBS_CLASS_UUID / length of uuid (16 byte UUID + 4 byte CRC) / 16 byte UUID ( a.k.a. GUID ) openNURBS class ID - determines specific openNURBS class / 4 bytes (32 bit CRC of the UUID) / / TCODE_OPENNURBS_CLASS_DATA / length of object data / ... data that defines object / use ON_classname::Read() to read this data and ON_classname::Write() / to write this data / 4 bytes (32 bit CRC of the object data) / / TCODE_OPENNURBS_CLASS_USERDATA ( 0 or more user data chunks) / / TCODE_OPENNURBS_CLASS_END / 4 bytes = 0 / /////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////// / / / The TCODEs below were used in the version 1 file format and are needed so that / the these files can be read and (optionally) written by the current OpenNURBS / toolkit. / / ///////////////////////////////////////////////////////////////////////////////////

◆ TCODE_ANONYMOUS_CHUNK

#define TCODE_ANONYMOUS_CHUNK   (TCODE_USER | TCODE_CRC | 0x0000 )

◆ TCODE_BITMAP_RECORD

#define TCODE_BITMAP_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0090) /* bitmap table record derived from ON_Bitmap */

records in bitmap table

◆ TCODE_BITMAP_TABLE

#define TCODE_BITMAP_TABLE   (TCODE_TABLE | 0x0016) /* embedded bitmaps */

◆ TCODE_BITMAPPREVIEW

#define TCODE_BITMAPPREVIEW   (TCODE_INTERFACE | 0x0014)

◆ TCODE_BUMPMAP

#define TCODE_BUMPMAP   (TCODE_DISPLAY | 0x0003)

◆ TCODE_COMMENTBLOCK

#define TCODE_COMMENTBLOCK   0x00000001

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. 3dm defines, structs and typedefs Typecode format 4 bytes long

x xxxxxxxxxxxxxxx,x xxx xxxx xxxx x x xx | | | | | | | | | | | | | | | +— "stuff" bit | | | | | | | +– specific codes | | | | | +– RESERVED - DO NOT USE (should be 0) (will be used to control CRC on/off) | | | +– category:_000 0000 0000 0001 Legacy geometry TCODE_LEGACY_GEOMETRY | _000 0000 0000 0010 openNURBS object TCODE_OPENNURBS_OBJECT | _000 0000 0000 0100 – RESERVED - DO NOT USE (should be 0 in any typecode) – | _000 0000 0000 1000 – RESERVED - DO NOT USE (should be 0 in any typecode) –
| _000 0000 0001 0000 Geometry TCODE_GEOMETRY | _000 0000 0010 0000 Annotation | _000 0000 0100 0000 Display Attributes TCODE_DISPLAY | _000 0000 1000 0000 Rendering TCODE_RENDER
| _000 0001 0000 0000
| _000 0010 0000 0000 Interface TCODE_INTERFACE | _000 0100 0000 0000 – RESERVED - DO NOT USE (should be 0 in any typecode) – | _000 1000 0000 0000 Tolerances TCODE_TOLERANCE | _001 0000 0000 0000 Tables TCODE_TABLE
| _010 0000 0000 0000 Table record TCODE_TABLEREC | _100 0000 0000 0000 User information TCODE_USER | +– format: 0 - data size in header - data block follows TCODE_SHORT 1 - data in header - no data block follows / The TCODE_COMMENTBLOCK is the first chunk in the file, starts 32 bytes into / the file, and contains text information terminated with a ^Z. This ^Z and / contents of this chunk were expanded in February 2000. Files written with / code released earlier than this will not have the ^Z. / / The TCODE_ENDOFFILE is the last chunk in the file and the first 4 bytes / of information in this chunk is an integer that contains the file length. / This chunk was added in February 2000 and files written with code released / earlier than this will not have this termination block.

◆ TCODE_COMPRESSED_MESH_GEOMETRY

#define TCODE_COMPRESSED_MESH_GEOMETRY   (TCODE_GEOMETRY | 0x0017)

◆ TCODE_CPLANE

#define TCODE_CPLANE   (TCODE_INTERFACE | 0x0003)

◆ TCODE_CRC

#define TCODE_CRC   0x8000

◆ TCODE_CURRENTLAYER

#define TCODE_CURRENTLAYER   (TCODE_SHORT | TCODE_DISPLAY | 0x0025 )

◆ TCODE_DICTIONARY

#define TCODE_DICTIONARY   (TCODE_USER | TCODE_CRC | 0x0010)

◆ TCODE_DICTIONARY_END

#define TCODE_DICTIONARY_END   (TCODE_USER | TCODE_SHORT | 0x0013)

◆ TCODE_DICTIONARY_ENTRY

#define TCODE_DICTIONARY_ENTRY   (TCODE_USER | TCODE_CRC | 0x0012)

◆ TCODE_DICTIONARY_ID

#define TCODE_DICTIONARY_ID   (TCODE_USER | TCODE_CRC | 0x0011)

◆ TCODE_DIMSTYLE_RECORD

#define TCODE_DIMSTYLE_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0075)

records in dimension style table

◆ TCODE_DIMSTYLE_TABLE

#define TCODE_DIMSTYLE_TABLE   (TCODE_TABLE | 0x0020) /* annotation dimension style table */

◆ TCODE_DISP_AM_RESOLUTION

#define TCODE_DISP_AM_RESOLUTION   (TCODE_SHORT | TCODE_DISPLAY | 0x0005)

◆ TCODE_DISP_CPLINES

#define TCODE_DISP_CPLINES   (TCODE_SHORT | TCODE_DISPLAY | 0x0022)

◆ TCODE_DISP_MAXLENGTH

#define TCODE_DISP_MAXLENGTH   (TCODE_DISPLAY | 0x0023)

◆ TCODE_DISPLAY

#define TCODE_DISPLAY   0x00400000

◆ TCODE_ENDOFFILE

#define TCODE_ENDOFFILE   0x00007FFF

◆ TCODE_ENDOFFILE_GOO

#define TCODE_ENDOFFILE_GOO
Value:
0x00007FFE /*
/// this typecode is returned when
/// a rogue eof marker is found
/// Some v1 3dm file writers put
/// these markers in a "goo".
/// Simply skip these chunks and continue.
*/

◆ TCODE_ENDOFTABLE

#define TCODE_ENDOFTABLE   0xFFFFFFFF

◆ TCODE_FONT_RECORD

#define TCODE_FONT_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0074)

records in font table

◆ TCODE_FONT_TABLE

#define TCODE_FONT_TABLE   (TCODE_TABLE | 0x0019) /* annotation font table */

◆ TCODE_GEOMETRY

#define TCODE_GEOMETRY   0x00100000

◆ TCODE_GROUP_RECORD

#define TCODE_GROUP_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0073)

records in group table

◆ TCODE_GROUP_TABLE

#define TCODE_GROUP_TABLE   (TCODE_TABLE | 0x0018) /* group table */

◆ TCODE_HATCHPATTERN_RECORD

#define TCODE_HATCHPATTERN_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0077)

records in hatch pattern table

◆ TCODE_HATCHPATTERN_TABLE

#define TCODE_HATCHPATTERN_TABLE   (TCODE_TABLE | 0x0022) /* hatch pattern table */

◆ TCODE_HIDE_TRACE

#define TCODE_HIDE_TRACE   (TCODE_INTERFACE | 0x000E)

◆ TCODE_HISTORYRECORD_RECORD

#define TCODE_HISTORYRECORD_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x007B)

records in history record pattern table

◆ TCODE_HISTORYRECORD_TABLE

#define TCODE_HISTORYRECORD_TABLE   (TCODE_TABLE | 0x0026) /* history records */

◆ TCODE_INSTANCE_DEFINITION_RECORD

#define TCODE_INSTANCE_DEFINITION_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0076)

records in instance definition table

◆ TCODE_INSTANCE_DEFINITION_TABLE

#define TCODE_INSTANCE_DEFINITION_TABLE   (TCODE_TABLE | 0x0021) /* instance definition table */

◆ TCODE_INTERFACE

#define TCODE_INTERFACE   0x02000000

◆ TCODE_LAYER

#define TCODE_LAYER   (TCODE_DISPLAY | 0x0010)

◆ TCODE_LAYER_OBSELETE_1

#define TCODE_LAYER_OBSELETE_1   (TCODE_SHORT | TCODE_DISPLAY | 0x0013)

obsolete layer typecodes from earlier betas - not used anymore

◆ TCODE_LAYER_OBSELETE_2

#define TCODE_LAYER_OBSELETE_2   (TCODE_SHORT | TCODE_DISPLAY | 0x0014)

◆ TCODE_LAYER_OBSELETE_3

#define TCODE_LAYER_OBSELETE_3   (TCODE_SHORT | TCODE_DISPLAY | 0x0015)

◆ TCODE_LAYER_RECORD

#define TCODE_LAYER_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0050) /* layer table record derived from ON_Layer */

records in layer table

◆ TCODE_LAYER_TABLE

#define TCODE_LAYER_TABLE   (TCODE_TABLE | 0x0011) /* layers */

◆ TCODE_LAYERINDEX

#define TCODE_LAYERINDEX   (TCODE_SHORT | TCODE_DISPLAY | 0x0034)

◆ TCODE_LAYERLOCKED

#define TCODE_LAYERLOCKED   (TCODE_SHORT | TCODE_DISPLAY | 0x0018)

◆ TCODE_LAYERMATERIALINDEX

#define TCODE_LAYERMATERIALINDEX   (TCODE_SHORT | TCODE_DISPLAY | 0x0035)

◆ TCODE_LAYERNAME

#define TCODE_LAYERNAME   (TCODE_DISPLAY | 0x0011)

◆ TCODE_LAYERON

#define TCODE_LAYERON   (TCODE_SHORT | TCODE_DISPLAY | 0x0016)

these were only ever used by AccuModel and never by Rhino

◆ TCODE_LAYERPICKABLE

#define TCODE_LAYERPICKABLE   (TCODE_SHORT | TCODE_DISPLAY | 0x0030)

◆ TCODE_LAYERREF

#define TCODE_LAYERREF   (TCODE_SHORT | TCODE_TABLEREC | 0x0001)

◆ TCODE_LAYERRENDERABLE

#define TCODE_LAYERRENDERABLE   (TCODE_SHORT | TCODE_DISPLAY | 0x0032)

◆ TCODE_LAYERSNAPABLE

#define TCODE_LAYERSNAPABLE   (TCODE_SHORT | TCODE_DISPLAY | 0x0031)

◆ TCODE_LAYERSTATE

#define TCODE_LAYERSTATE   (TCODE_SHORT | TCODE_DISPLAY | 0x0033)

use LAYERSTATE ( 0 = LAYER_ON, 1 = LAYER_OFF, 2 = LAYER_LOCKED ) instead of above individual toggles

◆ TCODE_LAYERTABLE

#define TCODE_LAYERTABLE   (TCODE_SHORT | TCODE_TABLE | 0x0001) /* obsolete - do not use */

◆ TCODE_LAYERTHAWED

#define TCODE_LAYERTHAWED   (TCODE_SHORT | TCODE_DISPLAY | 0x0017)

◆ TCODE_LAYERVISIBLE

#define TCODE_LAYERVISIBLE   (TCODE_SHORT | TCODE_DISPLAY | 0x0012)

◆ TCODE_LEGACY_ASM

#define TCODE_LEGACY_ASM   (TCODE_LEGACY_GEOMETRY | 0x0001)

legacy objects from Rhino 1.x

◆ TCODE_LEGACY_ASMSTUFF

#define TCODE_LEGACY_ASMSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_ASM)

◆ TCODE_LEGACY_BND

#define TCODE_LEGACY_BND   (TCODE_LEGACY_GEOMETRY | 0x0005)

◆ TCODE_LEGACY_BNDSTUFF

#define TCODE_LEGACY_BNDSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_BND)

◆ TCODE_LEGACY_CRV

#define TCODE_LEGACY_CRV   (TCODE_LEGACY_GEOMETRY | 0x0008)

◆ TCODE_LEGACY_CRVSTUFF

#define TCODE_LEGACY_CRVSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_CRV)

◆ TCODE_LEGACY_FAC

#define TCODE_LEGACY_FAC   (TCODE_LEGACY_GEOMETRY | 0x0004)

◆ TCODE_LEGACY_FACSTUFF

#define TCODE_LEGACY_FACSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_FAC)

◆ TCODE_LEGACY_GEOMETRY

#define TCODE_LEGACY_GEOMETRY   0x00010000

◆ TCODE_LEGACY_PNT

#define TCODE_LEGACY_PNT   (TCODE_LEGACY_GEOMETRY | 0x000A)

◆ TCODE_LEGACY_PNTSTUFF

#define TCODE_LEGACY_PNTSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_PNT)

◆ TCODE_LEGACY_PRT

#define TCODE_LEGACY_PRT   (TCODE_LEGACY_GEOMETRY | 0x0002)

◆ TCODE_LEGACY_PRTSTUFF

#define TCODE_LEGACY_PRTSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_PRT)

◆ TCODE_LEGACY_SHL

#define TCODE_LEGACY_SHL   (TCODE_LEGACY_GEOMETRY | 0x0003)

◆ TCODE_LEGACY_SHLSTUFF

#define TCODE_LEGACY_SHLSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_SHL)

◆ TCODE_LEGACY_SPL

#define TCODE_LEGACY_SPL   (TCODE_LEGACY_GEOMETRY | 0x0009)

◆ TCODE_LEGACY_SPLSTUFF

#define TCODE_LEGACY_SPLSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_SPL)

◆ TCODE_LEGACY_SRF

#define TCODE_LEGACY_SRF   (TCODE_LEGACY_GEOMETRY | 0x0007)

◆ TCODE_LEGACY_SRFSTUFF

#define TCODE_LEGACY_SRFSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_SRF)

◆ TCODE_LEGACY_TOL_ANGLE

#define TCODE_LEGACY_TOL_ANGLE   (TCODE_TOLERANCE | 0x0002)

◆ TCODE_LEGACY_TOL_FIT

#define TCODE_LEGACY_TOL_FIT   (TCODE_TOLERANCE | 0x0001)

◆ TCODE_LEGACY_TRM

#define TCODE_LEGACY_TRM   (TCODE_LEGACY_GEOMETRY | 0x0006)

◆ TCODE_LEGACY_TRMSTUFF

#define TCODE_LEGACY_TRMSTUFF   (TCODE_LEGACY_GEOMETRY | TCODE_STUFF | TCODE_LEGACY_TRM)

◆ TCODE_LIGHT_RECORD

#define TCODE_LIGHT_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0060) /* light table record derived from ON_Light */

records in light table

◆ TCODE_LIGHT_RECORD_ATTRIBUTES

#define TCODE_LIGHT_RECORD_ATTRIBUTES   (TCODE_INTERFACE | TCODE_CRC | 0x0061) /* ON_3dmObjectAttributes chunk */

◆ TCODE_LIGHT_RECORD_ATTRIBUTES_USERDATA

#define TCODE_LIGHT_RECORD_ATTRIBUTES_USERDATA   (TCODE_INTERFACE | 0x0062) /* ON_3dmObjectAttributes userdata chunk */

◆ TCODE_LIGHT_RECORD_END

#define TCODE_LIGHT_RECORD_END   (TCODE_INTERFACE | TCODE_SHORT | 0x006F)

◆ TCODE_LIGHT_TABLE

#define TCODE_LIGHT_TABLE   (TCODE_TABLE | 0x0012) /* rendering lights */

◆ TCODE_LINEAR_DIMENSION

#define TCODE_LINEAR_DIMENSION   (TCODE_ANNOTATION | 0x0006)

◆ TCODE_LINETYPE_RECORD

#define TCODE_LINETYPE_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0078)

records in linetye pattern table

◆ TCODE_LINETYPE_TABLE

#define TCODE_LINETYPE_TABLE   (TCODE_TABLE | 0x0023) /* linetype table */

◆ TCODE_MATERIAL_RECORD

#define TCODE_MATERIAL_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0040) /* material table record derived from ON_Material */

records in material table

◆ TCODE_MATERIAL_TABLE

#define TCODE_MATERIAL_TABLE   (TCODE_TABLE | 0x0010) /* rendering materials */

The openNURBS toolkit allows users to write all openNURBS classed that are / derived from ON_Object using using TCODE_OPENNURBS_CLASS chunks. / In the .3dm file these TCODE_OPENNURBS_CLASS chunks are always have the / following format. tables added 17 February 2000

◆ TCODE_MAXIMIZED_VIEWPORT

#define TCODE_MAXIMIZED_VIEWPORT   (TCODE_SHORT | TCODE_INTERFACE | 0x0011)

◆ TCODE_MESH_OBJECT

#define TCODE_MESH_OBJECT   (TCODE_GEOMETRY | 0x0015)

◆ TCODE_MODEL_ATTRIBUTES_CHUNK

#define TCODE_MODEL_ATTRIBUTES_CHUNK   (TCODE_USER | TCODE_CRC | 0x0002 )

◆ TCODE_NAME

#define TCODE_NAME   (TCODE_INTERFACE | 0x0001)

◆ TCODE_NAMED_CPLANE

#define TCODE_NAMED_CPLANE   (TCODE_INTERFACE | 0x0004)

◆ TCODE_NAMED_VIEW

#define TCODE_NAMED_VIEW   (TCODE_INTERFACE | 0x0005)

◆ TCODE_NEAR_CLIP_PLANE

#define TCODE_NEAR_CLIP_PLANE   (TCODE_INTERFACE | 0x000D)

◆ TCODE_NOTES

#define TCODE_NOTES   (TCODE_INTERFACE | 0x000F)

◆ TCODE_OBJECT_RECORD

#define TCODE_OBJECT_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0070)

records in object table

◆ TCODE_OBJECT_RECORD_ATTRIBUTES

#define TCODE_OBJECT_RECORD_ATTRIBUTES   (TCODE_INTERFACE | TCODE_CRC | 0x0072) /* ON_3dmObjectAttributes chunk */

◆ TCODE_OBJECT_RECORD_ATTRIBUTES_USERDATA

#define TCODE_OBJECT_RECORD_ATTRIBUTES_USERDATA   (TCODE_INTERFACE | 0x0073) /* ON_3dmObjectAttributes userdata chunk */

◆ TCODE_OBJECT_RECORD_END

#define TCODE_OBJECT_RECORD_END   (TCODE_INTERFACE | TCODE_SHORT | 0x007F)

◆ TCODE_OBJECT_RECORD_HISTORY

#define TCODE_OBJECT_RECORD_HISTORY   (TCODE_INTERFACE | TCODE_CRC | 0x0074) /* construction history */

◆ TCODE_OBJECT_RECORD_HISTORY_DATA

#define TCODE_OBJECT_RECORD_HISTORY_DATA   (TCODE_INTERFACE | TCODE_CRC | 0x0076) /* construction history data */

◆ TCODE_OBJECT_RECORD_HISTORY_HEADER

#define TCODE_OBJECT_RECORD_HISTORY_HEADER   (TCODE_INTERFACE | TCODE_CRC | 0x0075) /* construction history header*/

◆ TCODE_OBJECT_RECORD_TYPE

#define TCODE_OBJECT_RECORD_TYPE   (TCODE_INTERFACE | TCODE_SHORT | 0x0071) /* ON::object_type value */

◆ TCODE_OBJECT_TABLE

#define TCODE_OBJECT_TABLE   (TCODE_TABLE | 0x0013) /* geometry and annotation */

◆ TCODE_OBSOLETE_LAYERSET_RECORD

#define TCODE_OBSOLETE_LAYERSET_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x0079)

OBSOLETE records in layer set table

◆ TCODE_OBSOLETE_LAYERSET_TABLE

#define TCODE_OBSOLETE_LAYERSET_TABLE   (TCODE_TABLE | 0x0024) /* obsolete layer set table */

◆ TCODE_OLD_FULLMESH

#define TCODE_OLD_FULLMESH   (TCODE_GEOMETRY | 0x0014)

◆ TCODE_OLD_MESH_UV

#define TCODE_OLD_MESH_UV   (TCODE_GEOMETRY | 0x0013)

◆ TCODE_OLD_MESH_VERTEX_NORMALS

#define TCODE_OLD_MESH_VERTEX_NORMALS   (TCODE_GEOMETRY | 0x0012)

◆ TCODE_OLD_RH_TRIMESH

#define TCODE_OLD_RH_TRIMESH   (TCODE_GEOMETRY | 0x0011)

◆ TCODE_OPENNURBS_BUFFER

#define TCODE_OPENNURBS_BUFFER   (TCODE_OPENNURBS_OBJECT | TCODE_CRC | 0x0100) /* chunk stores ON_Buffer classes */

OpenNURBS classes the require a unique tcode

◆ TCODE_OPENNURBS_CLASS

#define TCODE_OPENNURBS_CLASS   (TCODE_OPENNURBS_OBJECT | 0x7FFA)

/////////////////////////////////////////////////////////////////////////////////// / / TCODE_OBJECT_RECORD / 4 byte length of entire object record / / TCODE_OBJECT_RECORD_TYPE required - used to quickly filter and skip unwanted objects / 4 byte ON::object_type / / TCODE_OPENNURBS_CLASS / 4 byte length / TCODE_OPENNURBS_CLASS_UUID / 4 byte length = 20 / value of ON_ClassId::m_uuid for this class / 4 byte CRC / TCODE_OPENNURBS_CLASS_DATA / 4 byte length / class specific data for geometry or annotation object / 4 byte CRC / TCODE_OPENNURBS_CLASS_USERDATA (1 chunk per piece of user data) / 4 byte length / 2 byte chunk version 2.1 / TCODE_OPENNURBS_CLASS_USERDATA_HEADER / 4 byte length / 16 byte value of ON_ClassId::m_uuid for this child class of ON_UserData / 16 byte value of ON_UserData::m_userdata_uuid / 4 byte value of ON_UserData::m_userdata_copycount / 128 byte value of ON_UserData::m_userdata_xform / 16 byte value of ON_UserData::m_application_uuid (in ver 2.1 chunks) / TCODE_ANONYMOUS_CHUNK / 4 byte length / specific user data / TCODE_OPENNURBS_CLASS_END / / TCODE_OBJECT_RECORD_ATTRIBUTES (optional) / 4 byte length / ON_3dmObjectAttributes information / 4 byte crc / / TCODE_OBJECT_RECORD_ATTRIBUTES_USERDATA (optional) / 4 byte length / TCODE_OPENNURBS_CLASS_USERDATA (1 chunk per piece of user data) / 4 byte length / 2 byte chunk version 2.1 / TCODE_OPENNURBS_CLASS_USERDATA_HEADER / 4 byte length / 16 byte value of ON_ClassId::m_uuid for this child class of ON_UserData / 16 byte value of ON_UserData::m_userdata_uuid / 4 byte value of ON_UserData::m_userdata_copycount / 128 byte value of ON_UserData::m_userdata_xform / 16 byte value of ON_UserData::m_application_uuid (in ver 2.1 chunks) / TCODE_ANONYMOUS_CHUNK / 4 byte length / specific user data / / TCODE_OBJECT_RECORD_HISTORY (optional) construction history / 4 byte length / 2 byte chunk version / TCODE_OBJECT_RECORD_HISTORY_HEADER / 4 byte length / 2 byte chunk version / ... / 4 byte crc / TCODE_OBJECT_RECORD_HISTORY_DATA / 4 byte length / 2 byte chunk version / ... / 4 byte crc / / TCODE_OBJECT_RECORD_END required - marks end of object record / ///////////////////////////////////////////////////////////////////////////////////

◆ TCODE_OPENNURBS_CLASS_DATA

#define TCODE_OPENNURBS_CLASS_DATA   (TCODE_OPENNURBS_OBJECT | TCODE_CRC | 0x7FFC)

◆ TCODE_OPENNURBS_CLASS_END

#define TCODE_OPENNURBS_CLASS_END   (TCODE_OPENNURBS_OBJECT | TCODE_SHORT | 0x7FFF)

◆ TCODE_OPENNURBS_CLASS_USERDATA

#define TCODE_OPENNURBS_CLASS_USERDATA   (TCODE_OPENNURBS_OBJECT | 0x7FFD)

◆ TCODE_OPENNURBS_CLASS_USERDATA_HEADER

#define TCODE_OPENNURBS_CLASS_USERDATA_HEADER   (TCODE_OPENNURBS_OBJECT | TCODE_CRC | 0x7FF9)

◆ TCODE_OPENNURBS_CLASS_UUID

#define TCODE_OPENNURBS_CLASS_UUID   (TCODE_OPENNURBS_OBJECT | TCODE_CRC | 0x7FFB)

◆ TCODE_OPENNURBS_OBJECT

#define TCODE_OPENNURBS_OBJECT   0x00020000

◆ TCODE_PROPERTIES_APPLICATION

#define TCODE_PROPERTIES_APPLICATION   (TCODE_TABLEREC | TCODE_CRC | 0x0024)

◆ TCODE_PROPERTIES_AS_FILE_NAME

#define TCODE_PROPERTIES_AS_FILE_NAME   (TCODE_TABLEREC | TCODE_CRC | 0x0027 )

◆ TCODE_PROPERTIES_COMPRESSED_PREVIEWIMAGE

#define TCODE_PROPERTIES_COMPRESSED_PREVIEWIMAGE   (TCODE_TABLEREC | TCODE_CRC | 0x0025)

◆ TCODE_PROPERTIES_NOTES

#define TCODE_PROPERTIES_NOTES   (TCODE_TABLEREC | TCODE_CRC | 0x0022)

◆ TCODE_PROPERTIES_OPENNURBS_VERSION

#define TCODE_PROPERTIES_OPENNURBS_VERSION   (TCODE_TABLEREC | TCODE_SHORT | 0x0026)

◆ TCODE_PROPERTIES_PREVIEWIMAGE

#define TCODE_PROPERTIES_PREVIEWIMAGE   (TCODE_TABLEREC | TCODE_CRC | 0x0023)

◆ TCODE_PROPERTIES_REVISIONHISTORY

#define TCODE_PROPERTIES_REVISIONHISTORY   (TCODE_TABLEREC | TCODE_CRC | 0x0021)

records in properties table

◆ TCODE_PROPERTIES_TABLE

#define TCODE_PROPERTIES_TABLE
Value:
(TCODE_TABLE | 0x0014) /* model properties:
/// revision history
/// notes
/// preview image
*/

◆ TCODE_RADIAL_DIMENSION

#define TCODE_RADIAL_DIMENSION   (TCODE_ANNOTATION | 0x0008)

◆ TCODE_RENDER

#define TCODE_RENDER   0x00800000

◆ TCODE_RENDER_MATERIAL_ID

#define TCODE_RENDER_MATERIAL_ID   (TCODE_DISPLAY | 0x0007) /* id for render material */

◆ TCODE_RENDERMESHPARAMS

#define TCODE_RENDERMESHPARAMS   (TCODE_DISPLAY | 0x0020) /* block of parameters for render meshes */

◆ TCODE_RGB

#define TCODE_RGB   (TCODE_SHORT | TCODE_DISPLAY | 0x0001)

◆ TCODE_RGBDISPLAY

#define TCODE_RGBDISPLAY   (TCODE_SHORT | TCODE_DISPLAY | 0x0006) /* will be used for color by object */

◆ TCODE_RH_POINT

#define TCODE_RH_POINT   (TCODE_GEOMETRY | 0x0001)

legacy objects from Rhino 1.x

◆ TCODE_RH_SPOTLIGHT

#define TCODE_RH_SPOTLIGHT   (TCODE_RENDER | 0x0001)

◆ TCODE_RHINOIO_OBJECT_BREP

#define TCODE_RHINOIO_OBJECT_BREP   (TCODE_OPENNURBS_OBJECT | 0x000B) /* old CRhinoBrep */

◆ TCODE_RHINOIO_OBJECT_DATA

#define TCODE_RHINOIO_OBJECT_DATA   (TCODE_OPENNURBS_OBJECT | 0xFFFE) /* obsolete - don't confuse with TCODE_OPENNURBS_OBJECT_DATA */

◆ TCODE_RHINOIO_OBJECT_END

#define TCODE_RHINOIO_OBJECT_END   (TCODE_OPENNURBS_OBJECT | 0xFFFF) /* obsolete - don't confuse with TCODE_OPENNURBS_OBJECT_END */

◆ TCODE_RHINOIO_OBJECT_NURBS_CURVE

#define TCODE_RHINOIO_OBJECT_NURBS_CURVE   (TCODE_OPENNURBS_OBJECT | 0x0008) /* old CRhinoNurbsCurve */

old RhinoIO toolkit (pre February 2000) defines

◆ TCODE_RHINOIO_OBJECT_NURBS_SURFACE

#define TCODE_RHINOIO_OBJECT_NURBS_SURFACE   (TCODE_OPENNURBS_OBJECT | 0x0009) /* old CRhinoNurbsSurface */

◆ TCODE_SETTINGS__NEVER__USE__THIS

#define TCODE_SETTINGS__NEVER__USE__THIS   (TCODE_TABLEREC | TCODE_CRC | 0x003E)

◆ TCODE_SETTINGS_ANALYSISMESH

#define TCODE_SETTINGS_ANALYSISMESH   (TCODE_TABLEREC | TCODE_CRC | 0x0033)

◆ TCODE_SETTINGS_ANNOTATION

#define TCODE_SETTINGS_ANNOTATION   (TCODE_TABLEREC | TCODE_CRC | 0x0034)

◆ TCODE_SETTINGS_ATTRIBUTES

#define TCODE_SETTINGS_ATTRIBUTES   (TCODE_TABLEREC | TCODE_CRC | 0x0134)

added 29 October 2002 as a chunk to hold new and future ON_3dmSettings information

◆ TCODE_SETTINGS_CURRENT_COLOR

#define TCODE_SETTINGS_CURRENT_COLOR   (TCODE_TABLEREC | TCODE_CRC | 0x003A)

◆ TCODE_SETTINGS_CURRENT_DIMSTYLE_INDEX

#define TCODE_SETTINGS_CURRENT_DIMSTYLE_INDEX   (TCODE_TABLEREC | TCODE_SHORT | 0x0133)

◆ TCODE_SETTINGS_CURRENT_FONT_INDEX

#define TCODE_SETTINGS_CURRENT_FONT_INDEX   (TCODE_TABLEREC | TCODE_SHORT | 0x0132)

◆ TCODE_SETTINGS_CURRENT_LAYER_INDEX

#define TCODE_SETTINGS_CURRENT_LAYER_INDEX   (TCODE_TABLEREC | TCODE_SHORT | 0x0038)

◆ TCODE_SETTINGS_CURRENT_MATERIAL_INDEX

#define TCODE_SETTINGS_CURRENT_MATERIAL_INDEX   (TCODE_TABLEREC | TCODE_CRC | 0x0039)

◆ TCODE_SETTINGS_CURRENT_WIRE_DENSITY

#define TCODE_SETTINGS_CURRENT_WIRE_DENSITY   (TCODE_TABLEREC | TCODE_SHORT | 0x003C)

◆ TCODE_SETTINGS_GRID_DEFAULTS

#define TCODE_SETTINGS_GRID_DEFAULTS   (TCODE_TABLEREC | TCODE_CRC | 0x003F)

◆ TCODE_SETTINGS_MODEL_URL

#define TCODE_SETTINGS_MODEL_URL   (TCODE_TABLEREC | TCODE_CRC | 0x0131)

◆ TCODE_SETTINGS_NAMED_CPLANE_LIST

#define TCODE_SETTINGS_NAMED_CPLANE_LIST   (TCODE_TABLEREC | TCODE_CRC | 0x0035)

◆ TCODE_SETTINGS_NAMED_VIEW_LIST

#define TCODE_SETTINGS_NAMED_VIEW_LIST   (TCODE_TABLEREC | TCODE_CRC | 0x0036)

◆ TCODE_SETTINGS_PLUGINLIST

#define TCODE_SETTINGS_PLUGINLIST   (TCODE_TABLEREC | TCODE_CRC | 0x0135)

records in settings table

◆ TCODE_SETTINGS_RENDER

#define TCODE_SETTINGS_RENDER   (TCODE_TABLEREC | TCODE_CRC | 0x003D)

◆ TCODE_SETTINGS_RENDER_USERDATA

#define TCODE_SETTINGS_RENDER_USERDATA   (TCODE_TABLEREC | TCODE_CRC | 0x0136)

2016-Nov-28 RH-33298 ON_3dmRenderSettings user data in ON_3dmSettings.m_RenderSettings

◆ TCODE_SETTINGS_RENDERMESH

#define TCODE_SETTINGS_RENDERMESH   (TCODE_TABLEREC | TCODE_CRC | 0x0032)

◆ TCODE_SETTINGS_TABLE

#define TCODE_SETTINGS_TABLE
Value:
(TCODE_TABLE | 0x0015) /* file properties including,
/// units, tolerancess,
/// annotation defaults,
/// render mesh defaults,
/// current layer,
/// current material,
/// current color,
/// named construction planes,
/// named viewports,
/// current viewports,
*/

◆ TCODE_SETTINGS_UNITSANDTOLS

#define TCODE_SETTINGS_UNITSANDTOLS   (TCODE_TABLEREC | TCODE_CRC | 0x0031)

◆ TCODE_SETTINGS_VIEW_LIST

#define TCODE_SETTINGS_VIEW_LIST   (TCODE_TABLEREC | TCODE_CRC | 0x0037)

◆ TCODE_SHORT

#define TCODE_SHORT   0x80000000

◆ TCODE_SHOWGRID

#define TCODE_SHOWGRID   (TCODE_SHORT | TCODE_INTERFACE | 0x0007)

◆ TCODE_SHOWGRIDAXES

#define TCODE_SHOWGRIDAXES   (TCODE_SHORT | TCODE_INTERFACE | 0x0008)

◆ TCODE_SHOWWORLDAXES

#define TCODE_SHOWWORLDAXES   (TCODE_SHORT | TCODE_INTERFACE | 0x0009)

◆ TCODE_SNAPSIZE

#define TCODE_SNAPSIZE   (TCODE_INTERFACE | 0x000C)

◆ TCODE_STUFF

#define TCODE_STUFF   0x0100

◆ TCODE_SUMMARY

#define TCODE_SUMMARY   (TCODE_INTERFACE | 0x0013)

◆ TCODE_TABLE

#define TCODE_TABLE   0x10000000

◆ TCODE_TABLEREC

#define TCODE_TABLEREC   0x20000000

◆ TCODE_TEXT_BLOCK

#define TCODE_TEXT_BLOCK   (TCODE_ANNOTATION | 0x0004)

◆ TCODE_TEXTURE_MAPPING_RECORD

#define TCODE_TEXTURE_MAPPING_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x007A)

records in linetye pattern table

◆ TCODE_TEXTURE_MAPPING_TABLE

#define TCODE_TEXTURE_MAPPING_TABLE   (TCODE_TABLE | 0x0025) /* texture mappings */

◆ TCODE_TEXTUREMAP

#define TCODE_TEXTUREMAP   (TCODE_DISPLAY | 0x0002)

◆ TCODE_TOLERANCE

#define TCODE_TOLERANCE   0x08000000

◆ TCODE_TRANSPARENCY

#define TCODE_TRANSPARENCY   (TCODE_SHORT | TCODE_DISPLAY | 0x0004)

◆ TCODE_UNIT_AND_TOLERANCES

#define TCODE_UNIT_AND_TOLERANCES   (TCODE_INTERFACE | 0x0010)

◆ TCODE_USER

#define TCODE_USER   0x40000000

◆ TCODE_USER_RECORD

#define TCODE_USER_RECORD   (TCODE_TABLEREC | 0x0081)

information saved by the plug-in is in a TCODE_USER_RECORD chunk

◆ TCODE_USER_TABLE

#define TCODE_USER_TABLE   (TCODE_TABLE | 0x0017) /* user table */

◆ TCODE_USER_TABLE_RECORD_HEADER

#define TCODE_USER_TABLE_RECORD_HEADER   (TCODE_TABLEREC | TCODE_CRC | 0x0082)

the user record header was added in 200910190 and is inside the TCODE_USER_TABLE_UUID chunk

◆ TCODE_USER_TABLE_UUID

#define TCODE_USER_TABLE_UUID   (TCODE_TABLEREC | TCODE_CRC | 0x0080)

records in user table Each user table entry has two top level chunks, a TCODE_USER_TABLE_UUID chunk and a TCODE_USER_RECORD chunk. The TCODE_USER_TABLE_UUID chunk contains the plug-in id and, if the archive is V5 or later and was written by an opennurbs with version >= 200910190, a TCODE_USER_TABLE_RECORD_HEADER chunk.

◆ TCODE_UTF8_STRING_CHUNK

#define TCODE_UTF8_STRING_CHUNK   (TCODE_USER | TCODE_CRC | 0x0001 )

◆ TCODE_VIEW

#define TCODE_VIEW   (TCODE_INTERFACE | 0x0002)

◆ TCODE_VIEW_ATTRIBUTES

#define TCODE_VIEW_ATTRIBUTES   (TCODE_TABLEREC | TCODE_CRC | 0x0C3B)

added 29 October 2002 as a chunk to hold new and future ON_3dmView information

◆ TCODE_VIEW_CPLANE

#define TCODE_VIEW_CPLANE   (TCODE_TABLEREC | TCODE_CRC | 0x013B)

subrecords if view record

◆ TCODE_VIEW_NAME

#define TCODE_VIEW_NAME   (TCODE_TABLEREC | TCODE_CRC | 0x0A3B)

◆ TCODE_VIEW_POSITION

#define TCODE_VIEW_POSITION   (TCODE_TABLEREC | TCODE_CRC | 0x0B3B)

◆ TCODE_VIEW_RECORD

#define TCODE_VIEW_RECORD   (TCODE_TABLEREC | TCODE_CRC | 0x003B)

views are subrecords in the settings table

◆ TCODE_VIEW_SHOWCONAXES

#define TCODE_VIEW_SHOWCONAXES   (TCODE_TABLEREC | TCODE_SHORT | 0x043B)

◆ TCODE_VIEW_SHOWCONGRID

#define TCODE_VIEW_SHOWCONGRID   (TCODE_TABLEREC | TCODE_SHORT | 0x033B)

◆ TCODE_VIEW_SHOWWORLDAXES

#define TCODE_VIEW_SHOWWORLDAXES   (TCODE_TABLEREC | TCODE_SHORT | 0x053B)

◆ TCODE_VIEW_TARGET

#define TCODE_VIEW_TARGET   (TCODE_TABLEREC | TCODE_CRC | 0x083B)

◆ TCODE_VIEW_TRACEIMAGE

#define TCODE_VIEW_TRACEIMAGE   (TCODE_TABLEREC | TCODE_CRC | 0x063B)

◆ TCODE_VIEW_V3_DISPLAYMODE

#define TCODE_VIEW_V3_DISPLAYMODE   (TCODE_TABLEREC | TCODE_SHORT | 0x093B)

◆ TCODE_VIEW_VIEWPORT

#define TCODE_VIEW_VIEWPORT   (TCODE_TABLEREC | TCODE_CRC | 0x023B)

◆ TCODE_VIEW_VIEWPORT_USERDATA

#define TCODE_VIEW_VIEWPORT_USERDATA   (TCODE_TABLEREC | TCODE_CRC | 0x0D3B)

added 27 June 2008 as a chunk to hold userdata on ON_Viewports saved in named view list

◆ TCODE_VIEW_WALLPAPER

#define TCODE_VIEW_WALLPAPER   (TCODE_TABLEREC | TCODE_CRC | 0x073B)

◆ TCODE_VIEW_WALLPAPER_V3

#define TCODE_VIEW_WALLPAPER_V3   (TCODE_TABLEREC | TCODE_CRC | 0x074B)

◆ TCODE_VIEWPORT

#define TCODE_VIEWPORT   (TCODE_INTERFACE | 0x0006)

◆ TCODE_VIEWPORT_POSITION

#define TCODE_VIEWPORT_POSITION   (TCODE_INTERFACE | 0x000A)

◆ TCODE_VIEWPORT_TRACEINFO

#define TCODE_VIEWPORT_TRACEINFO   (TCODE_INTERFACE | 0x000B)

◆ TCODE_VIEWPORT_V1_DISPLAYMODE

#define TCODE_VIEWPORT_V1_DISPLAYMODE   (TCODE_SHORT | TCODE_INTERFACE | 0x0015)

◆ TCODE_VIEWPORT_WALLPAPER

#define TCODE_VIEWPORT_WALLPAPER   (TCODE_INTERFACE | 0x0012)

◆ TCODE_XDATA

#define TCODE_XDATA   (TCODE_USER | 0x0001)

◆ Z_PREFIX

#define Z_PREFIX

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. If you are using opennurbs as a statically linked library, then you may make calls to the same zlib that opennurbs uses. This zlib is compiled with z_ symbol projectection. All the necessary header files are included by opennurbs.h.

If you are using opennurbs as a DLL or writing a Rhino plug-in and you want to use the same zlib that opennurbs uses, then compile opennurbs_zlib_memory.cpp into your application and statically link with the zlib library. All the necessary header files are included by opennurbs.h. decorates zlib functions with a "z_" prefix to prevent symbol collision.

Typedef Documentation

◆ CRASHTEST__FUNCTION__POINTER__

typedef int(* CRASHTEST__FUNCTION__POINTER__) (int)

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. / This code defines a global function call MyGlobalCrashTestFunction / that you can call from a release build to test your program's / behavior when it crashes. #define ON_CRASH_TEST_STATICS #include "opennurbs_plus_crashtest.h" #undef ON_CRASH_TEST_STATICS int MyGlobalCrashTestFunction( int crash_type, ON_TextLog& textlog ) { /crash_type / 0 = NullPtrDeRef / 1 = BogusPtrDeRef / 2 = CallNullFuncPtr / 3 = CallBogusFuncPtr / 4 = Call CRT _abort / 5 = Call CRT _exit99 / 6 = DivideByDoubleZero / 7 = DivideByFloatZero / 8 = DivideByIntZero / 9 = log(negative number) / 10 = double overflow exception / 11 = calling throw(123) return CrashTestHelper(crash_type,textlog); ///< static function defined in opennurbs_plus_crashtest.h } For testing crash handling.

◆ GET_TEXMAP_FROM_DOCUMENT

typedef ON_TextureMapping( * GET_TEXMAP_FROM_DOCUMENT) (const class CRhinoDoc &, const ON_MappingChannel *)

◆ ON__INT16

typedef int16_t ON__INT16

◆ ON__INT32

typedef int32_t ON__INT32

◆ ON__INT64

typedef int64_t ON__INT64

◆ ON__INT8

typedef int8_t ON__INT8

/ To print the value of a preprocessor macro, do something like: / / #pragma message( "MY_MACRO = " OPENNURBS_PP2STR(MY_MACRO) ) / / Typically something mysterious is defining a macro whose value / you would like to see at compile time so you can fix a issue / involving the preprocessor macro's value. / Define ON_NO_WINDOWS if you are compiling on a Windows system but want / to explicitly exclude inclusion of windows.h. compiler choice

◆ ON__UINT16

typedef uint16_t ON__UINT16

◆ ON__UINT32

typedef uint32_t ON__UINT32

◆ ON__UINT64

typedef uint64_t ON__UINT64

◆ ON__UINT8

typedef uint8_t ON__UINT8

◆ ON_Buffer_ErrorHandler

typedef void(* ON_Buffer_ErrorHandler) (class ON_Buffer *)

◆ ON_CRT_locale_t

typedef ON__UINT_PTR ON_CRT_locale_t

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

◆ ON_CurveRegion

A list of region boundaries that bound a single connected region of the plane. The first boundary is always the outer boundary.

◆ ON_CurveRegionBoundary

A list of curve subdomains that form a closed boundary with active space on the left.

◆ ON_FontKey

typedef struct tagFontKey ON_FontKey

◆ ON_FontPtrCompareFunc

typedef int(* ON_FontPtrCompareFunc) (ON_Font const *const *lhs, ON_Font const *const *rhs)

◆ ON_memory_error_handler

typedef int(* ON_memory_error_handler) (int)

/////////////////////////////////////////////////////////////////////////// / / ALL memory management in the openNURBS toolkit is done through calls to / onmalloc(), oncalloc(), onrealloc(), onfree(), / onmemdup(), onstrdup(), ..., and the / new and delete operators / The on*() functions are all declared in opennurbs_memory.h and defined / in opennurbs_memory.c. The new and delete operators that use onmalloc() / and onfree() are defined in opennurbs_plus_memory_new.cpp. / / You may OPTIONALLY provide your own memory management functions. See / opennurbs_memory.c for details. / /////////////////////////////////////////////////////////////////////////// / / Details: / / void* onmalloc( site_t sz ); / / If sz is zero, nullptr is returned. / If sz is positive and there is not enough memory to satisfy / the allocation request, the ON_memory_error_handler(0) is called / and nullptr is returned.
/ / If you have implemented multiple memory pools in a custom manager, / the request is sent to the current pool. /
/ / void* oncalloc( size_t num, size_t sz ); / / If sz or num is zero, nullptr is returned. / If sz and num are positive and there is not enough memory to satisfy / the allocation request, the ON_memory_error_handler(0) is called / and nullptr is returned. / / If you have implemented multiple memory pools in a custom manager, / the request is sent to the current pool. /
/
/ void* onrealloc( void* p, size_t sz ); / / If p is nullptr, then onmalloc(sz) is called. / If sz is zero, then onfree(p) is called and / nullptr is returned. / If p is not nullptr, sz is positive, and there is not / enough memory to to satisfy the allocation request, / the ON_memory_error_handler(0) is called and nullptr is returned. / If p is not nullptr and is known to be invalid, then / ON_memory_error_handler(1) is called. / / If you have implemented multiple memory pools in a custom manager, / the request is sent to the current pool. / / NOTE WELL: Microsoft's VC 6.0 realloc() contains a bug that can cause / crashes and should be avoided. See MSDN Knowledge Base / article ID Q225099 for more information. / / / void onfree( void* p ); / / nullptr p is tolerated but considered poor style. / If p is not nullptr and is known to be invalid, then / ON_memory_error_handler(2) is called. / / void* onmemdup( const void* src, size_t sz ); / / If src is not nullptr and sz is positive, then onmalloc( sz ) / is called to get memory, sz bytes of src are copied into this / memory, and the pointer to this memory is returned. / If onmalloc() returns nullptr, then nullptr is returned. / If src is nullptr or sz is zero, then nullptr is returned. /
/ / char* onstrdup( const char* src ); / / If src is not nullptr, then onmemdup( sc, (strlen(src)+1)*sizeof(src[0]) ) / is called. If onmemdup() returns nullptr, then nullptr is returned. / If src is nullptr, then nullptr is returned. /
/ / ON_register_memory_error_handler( ON_memory_error_handler my_handler ); / / Use this function to specify the error handler function that will be called / if an error occurs. See the description of ON_memory_error_handler() for the / error handler function specification. / / int ON_memory_error_handler( int error_number ); / / This function is called when an error occurs. The values of error_number / are: / / 0: There is not enough memory to satisfy an onmalloc() or onrealloc() / request. / / If ON_memory_error_handler() returns 0, then onmalloc() or onrealloc() / returns nullptr. If ON_memory_error_handler() returns 1, the allocation / is attempted again. / / 1: An invalid pointer was passed to onrealloc(). / / If ON_memory_error_handler() returns 0, then onrealloc() returns nullptr. / If ON_memory_error_handler() returns 1, the reallocation is attempted / again; / / 2: An invalid pointer was passed to onfree(). / / If ON_memory_error_handler() returns 0, then free() returns. / If ON_memory_error_handler() returns 1, the deallocation is / attempted again; / ^^^ see comments above for details ^^^ /////////////////////////////////////////////////////////// / / Memory error handler - the default handler does nothing. / / / See opennurbs_memory.c for instructions on using / custom memory managers. / / ON_memory_error_register_handler() returns a pointer to / the handler you are replacing. If you pass a nullptr, / the default memory error handler is used. The default / memory error handler returns 0 for all errors. / / The input to ON_memory_error_handler(int) is: / / 0: malloc/calloc/realloc request returned nullptr / 1: invalid pointer passed to realloc() / 2: invalid pointer passed to free() / 3: msize query returned zero or 0xFFFFFFFF / / If ON_memory_error_handler(int) returns / / 0: The malloc()/calloc()/realloc()/msize() request returns 0. / 1: The call to malloc()/calloc()/realloc()/msize() is repeated. /
error handling

◆ ON_PLUS_FUNCTION_BendBrepFace

typedef class ON_NurbsSurface*(* ON_PLUS_FUNCTION_BendBrepFace) (const class ON_BrepFace *face0, const ON_SimpleArray< ON_BendFaceConstraint > *, double, double, class ON_NurbsSurface *, ON_TextLog *)

◆ ON_PLUS_FUNCTION_BezierCurve_GetLocalClosestPoint

typedef bool(* ON_PLUS_FUNCTION_BezierCurve_GetLocalClosestPoint) (const class ON_BezierCurve *, ON_3dPoint, double, double *, const ON_Interval *)

Used by ON_BezierCurve::

◆ ON_PLUS_FUNCTION_BezierCurve_GetTightBoundingBox

typedef bool(* ON_PLUS_FUNCTION_BezierCurve_GetTightBoundingBox) (const class ON_BezierCurve *, ON_BoundingBox *, bool, const ON_Xform *)

Used by ON_BezierCurve::

◆ ON_PLUS_FUNCTION_BezierCurve_LocalIntersectCurve

typedef bool(* ON_PLUS_FUNCTION_BezierCurve_LocalIntersectCurve) (const class ON_BezierCurve *, const class ON_BezierCurve *, double *, const ON_Interval *, const ON_Interval *)

Used by ON_BezierCurve::

◆ ON_PLUS_FUNCTION_BezierCurve_LocalIntersectSurface

typedef bool(* ON_PLUS_FUNCTION_BezierCurve_LocalIntersectSurface) (const class ON_BezierCurve *, const class ON_BezierSurface *, double *, const ON_Interval *, const ON_Interval *, const ON_Interval *)

Used by ON_BezierCurve::

◆ ON_PLUS_FUNCTION_BezierSurface_GetClosestPoint

typedef bool(* ON_PLUS_FUNCTION_BezierSurface_GetClosestPoint) (const class ON_BezierSurface *, ON_3dPoint, double, double, double *, double *, const ON_Interval *, const ON_Interval *)

◆ ON_PLUS_FUNCTION_Brep_GetEdgeOrTrimParameter

typedef bool(* ON_PLUS_FUNCTION_Brep_GetEdgeOrTrimParameter) (const ON_Brep &, int, double, double *, bool)

◆ ON_PLUS_FUNCTION_Brep_IsPointInsideHelper

typedef bool(* ON_PLUS_FUNCTION_Brep_IsPointInsideHelper) (const ON_Brep &, ON_3dPoint, double, bool)

Used by ON_Brep::

◆ ON_PLUS_FUNCTION_Brep_MassProperties

typedef int(* ON_PLUS_FUNCTION_Brep_MassProperties) (const ON_Brep &, void *, int, ON_3dPoint, ON_MassProperties &, bool, bool, bool, bool, double, double)

Used by ON_Brep::

◆ ON_PLUS_FUNCTION_Brep_MergeBrepsHelper

typedef ON_Brep*(* ON_PLUS_FUNCTION_Brep_MergeBrepsHelper) (const ON_Brep &, const ON_Brep &, double)

Used by ON_Brep::

◆ ON_PLUS_FUNCTION_Brep_Mesh

typedef int(* ON_PLUS_FUNCTION_Brep_Mesh) (const ON_Brep &, const ON_MeshParameters &, ON_SimpleArray< ON_Mesh * > &)

Used by ON_Brep::

◆ ON_PLUS_FUNCTION_Brep_RegionTopologyHelper

typedef bool(* ON_PLUS_FUNCTION_Brep_RegionTopologyHelper) (const ON_Brep &, ON_BrepRegionTopology &)

Used by ON_Brep::

◆ ON_PLUS_FUNCTION_Brep_Silhouette

typedef bool(* ON_PLUS_FUNCTION_Brep_Silhouette) (const ON_SilhouetteParameters, const ON_Brep &, const ON_PlaneEquation *, size_t, ON_ClassArray< ON_SIL_EVENT > &, ON_ProgressReporter *, ON_Terminator *)

◆ ON_PLUS_FUNCTION_Brep_SplitFaces

typedef bool(* ON_PLUS_FUNCTION_Brep_SplitFaces) (ON_Brep &, bool, int, const int *, const int *, const double *)

Used by ON_Brep::

◆ ON_PLUS_FUNCTION_BrepCloseTrimGap

typedef bool(* ON_PLUS_FUNCTION_BrepCloseTrimGap) (class ON_Brep *, class ON_BrepTrim *, class ON_BrepTrim *)

◆ ON_PLUS_FUNCTION_BrepFace_Mesh

typedef ON_Mesh*(* ON_PLUS_FUNCTION_BrepFace_Mesh) (const ON_BrepFace &, const ON_MeshParameters &, ON_Mesh *)

Used by ON_BrepFace::

◆ ON_PLUS_FUNCTION_BrepFace_Silhouette

typedef bool(* ON_PLUS_FUNCTION_BrepFace_Silhouette) (const ON_SilhouetteParameters, const ON_BrepFace &, const ON_PlaneEquation *, size_t, ON_ClassArray< ON_SIL_EVENT > &, ON_ProgressReporter *, ON_Terminator *)

◆ ON_PLUS_FUNCTION_BrepFaceGetIsoIntervals

typedef bool(* ON_PLUS_FUNCTION_BrepFaceGetIsoIntervals) (const class ON_BrepFace *, int, double, ON_SimpleArray< ON_Interval > *, ON_SimpleArray< ON_Curve * > *, ON_SimpleArray< struct ON_BrepFaceIsoInterval > *)

◆ ON_PLUS_FUNCTION_Check2dPatternHasMapBackInfo

typedef bool(* ON_PLUS_FUNCTION_Check2dPatternHasMapBackInfo) (const ON_Geometry *geom)

◆ ON_PLUS_FUNCTION_CreateSquisherImpl

typedef ON_SquisherImpl*(* ON_PLUS_FUNCTION_CreateSquisherImpl) ()

\

Used by ON_Squisher::Create()

◆ ON_PLUS_FUNCTION_Curve_CreateCubicLoft

typedef ON_NurbsCurve*(* ON_PLUS_FUNCTION_Curve_CreateCubicLoft) (int, int, int, const double *, double, int, ON::cubic_loft_end_condition, ON::cubic_loft_end_condition, ON_NurbsCurve *)

◆ ON_PLUS_FUNCTION_Curve_MassProperties

typedef int(* ON_PLUS_FUNCTION_Curve_MassProperties) (const ON_Curve &, void *, int, ON_3dPoint, ON_3dVector, ON_MassProperties &, bool, bool, bool, bool, double, double)

◆ ON_PLUS_FUNCTION_Curve_Mesh

typedef class ON_PolylineCurve*(* ON_PLUS_FUNCTION_Curve_Mesh) (const ON_Curve *, const ON_MeshCurveParameters *, class ON_PolylineCurve *, bool, const ON_Interval *)

◆ ON_PLUS_FUNCTION_CurveTreeNode_GetClosestPoint

typedef const class ON_CurveTreeNode*(* ON_PLUS_FUNCTION_CurveTreeNode_GetClosestPoint) (const class ON_CurveTreeNode *, ON_3dPoint, double *, ON_3dPoint *, double, const ON_Interval *)

Used by ON_CurveTreeNode::

◆ ON_PLUS_FUNCTION_CurveTreeNode_IntersectCurveTree

typedef int(* ON_PLUS_FUNCTION_CurveTreeNode_IntersectCurveTree) (const class ON_CurveTreeNode *, const class ON_CurveTreeNode *, ON_SimpleArray< ON_X_EVENT > &, double, double, const ON_Interval *, const ON_Interval *)

Used by ON_CurveTreeNode::

◆ ON_PLUS_FUNCTION_CurveTreeNode_IntersectPlane

typedef int(* ON_PLUS_FUNCTION_CurveTreeNode_IntersectPlane) (const class ON_CurveTreeNode *, const class ON_PlaneEquation &, ON_SimpleArray< ON_X_EVENT > &, double, double, const ON_Interval *)

Used by ON_CurveTreeNode::

◆ ON_PLUS_FUNCTION_CurveTreeNode_IntersectSelf

typedef int(* ON_PLUS_FUNCTION_CurveTreeNode_IntersectSelf) (const class ON_CurveTreeNode *, ON_SimpleArray< ON_X_EVENT > &, double, const ON_Interval *)

Used by ON_CurveTreeNode::

◆ ON_PLUS_FUNCTION_CurveTreeNode_IntersectSurfaceTree

typedef int(* ON_PLUS_FUNCTION_CurveTreeNode_IntersectSurfaceTree) (const class ON_CurveTreeNode *, const class ON_SurfaceTreeNode *, ON_SimpleArray< ON_X_EVENT > &, double, double, const ON_Interval *, const ON_Interval *, const ON_Interval *)

Used by ON_CurveTreeNode::

◆ ON_PLUS_FUNCTION_DumpSquishInfoText

typedef void(* ON_PLUS_FUNCTION_DumpSquishInfoText) (const ON_Geometry *geom, ON_TextLog &text_log, const wchar_t *objid_locale_str, const wchar_t *meshcount_locale_str)

◆ ON_PLUS_FUNCTION_Extrusion_Pullback

typedef ON_Curve*(* ON_PLUS_FUNCTION_Extrusion_Pullback) (const ON_Extrusion &, const ON_Curve &, double, const ON_Interval *, ON_3dPoint, ON_3dPoint, ON_FitResult *)

◆ ON_PLUS_FUNCTION_Extrusion_Pushup

typedef ON_Curve*(* ON_PLUS_FUNCTION_Extrusion_Pushup) (const ON_Extrusion &, const ON_Curve &, double, const ON_Interval *, ON_FitResult *)

◆ ON_PLUS_FUNCTION_GetMatrixSVD

typedef int(* ON_PLUS_FUNCTION_GetMatrixSVD) (int, int, int, double const *const *, double **&, double *&, double **&)

◆ ON_PLUS_FUNCTION_GetNew_HiddenLineDrawing

typedef ON_HiddenLineDrawingImplBase*(* ON_PLUS_FUNCTION_GetNew_HiddenLineDrawing) (ON_SimpleArray< class ON_HLDFullCurve * > &, ON_SimpleArray< class ON_HLDCurve * > &, ON_SimpleArray< const class ON_HLD_Object * > &)

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. Used by ON_HiddenLineDrawing constructors

◆ ON_PLUS_FUNCTION_Integrate1

typedef double(* ON_PLUS_FUNCTION_Integrate1) (double(*f)(ON__UINT_PTR context, int limit_direction, double t), ON__UINT_PTR f_context, const ON_SimpleArray< double > &limits, double relative_tolerance, double absolute_tolerance, double *error_bound)

Used by ON_Integrate() for one variable functions

◆ ON_PLUS_FUNCTION_Integrate2

typedef double(* ON_PLUS_FUNCTION_Integrate2) (double(*f)(ON__UINT_PTR context, int limit_direction, double s, double t), ON__UINT_PTR f_context, const ON_SimpleArray< double > &limits1, const ON_SimpleArray< double > &limits2, double relative_tolerance, double absolute_tolerance, double *error_bound)

Used by ON_Integrate() for two variable functions

◆ ON_PLUS_FUNCTION_IsPointListPlanar

typedef int(* ON_PLUS_FUNCTION_IsPointListPlanar) (bool, int, int, const double *, const double *, const double *, double, ON_PlaneEquation *)

◆ ON_PLUS_FUNCTION_MapBackCurve

typedef class ON_PolylineCurve*(* ON_PLUS_FUNCTION_MapBackCurve) (const ON_Mesh &mesh0, double mesh0_edge_length, const ON_3fPoint *V1, const ON_Curve &curve0, ON_PolylineCurve *curve1)

Used by ON_MapBackCurve()

◆ ON_PLUS_FUNCTION_MapBackPoint

typedef bool(* ON_PLUS_FUNCTION_MapBackPoint) (const ON_Mesh &mesh0, const ON_3fPoint *V1, ON_3dPoint P0, ON_MESH_POINT &P1)

Used by ON_MapBackPoint()

◆ ON_PLUS_FUNCTION_Mesh2dPolygon

typedef int(* ON_PLUS_FUNCTION_Mesh2dPolygon) (int, int, const double *, int, int *)

◆ ON_PLUS_FUNCTION_Mesh2dRegion

typedef int(* ON_PLUS_FUNCTION_Mesh2dRegion) (unsigned int, unsigned int, const double *, unsigned int, unsigned int, const unsigned int *, unsigned int, const unsigned char *, bool, bool, bool, ON_SimpleArray< ON_3dex > &, ON_SimpleArray< ON_2dPoint > *)

Used by ON_Triangulate2dRegion::

◆ ON_PLUS_FUNCTION_Mesh_IsPointInside

typedef bool(* ON_PLUS_FUNCTION_Mesh_IsPointInside) (const ON_Mesh &, ON_3dPoint, double, bool)

◆ ON_PLUS_FUNCTION_Mesh_MassProperties

typedef int(* ON_PLUS_FUNCTION_Mesh_MassProperties) (const ON_Mesh &, void *, int, ON_3dPoint, ON_MassProperties &, bool, bool, bool, bool, double, double)

Used by ON_Mesh::

◆ ON_PLUS_FUNCTION_Mesh_Silhouette

typedef bool(* ON_PLUS_FUNCTION_Mesh_Silhouette) (const ON_SilhouetteParameters, const ON_Mesh &, const ON_PlaneEquation *, size_t, ON_ClassArray< ON_SIL_EVENT > &, ON_ProgressReporter *, ON_Terminator *)

◆ ON_PLUS_FUNCTION_Mesh_SolidOrientation

typedef int(* ON_PLUS_FUNCTION_Mesh_SolidOrientation) (const ON_Mesh &)

◆ ON_PLUS_FUNCTION_MeshClashSearch

typedef void(* ON_PLUS_FUNCTION_MeshClashSearch) (int, const class ON_Mesh *const *, int, const class ON_Mesh *const *, const class ON_Mesh *, const class ON_RTree *, const class ON_Mesh *, const class ON_RTree *, double, bool, int, ON_SimpleArray< class ON_ClashEvent > &)

◆ ON_PLUS_FUNCTION_Minimize

typedef double(* ON_PLUS_FUNCTION_Minimize) (unsigned n, double(*f)(ON__UINT_PTR context, const double *t, double *grad), ON__UINT_PTR context, const ON_Interval search_domain[], const double t0[], double terminate_value, double relative_tolerance, double zero_tolerance, unsigned maximum_iterations, double t[], bool *bConverged)

Used by ON_Minimize()

◆ ON_PLUS_FUNCTION_NurbsSurface_Mesh

typedef ON_Mesh*(* ON_PLUS_FUNCTION_NurbsSurface_Mesh) (const ON_NurbsSurface &, const ON_MeshParameters &, ON_Mesh *)

◆ ON_PLUS_FUNCTION_OldMeshBooleansPickTwoSides

typedef bool(* ON_PLUS_FUNCTION_OldMeshBooleansPickTwoSides) (class ON_Mesh *, int, class ON_SimpleArray< int > *, class ON_Mesh *, bool)

Used by New mesh booleans.

◆ ON_PLUS_FUNCTION_ON_NurbsCurve_RemoveKnots

typedef bool(* ON_PLUS_FUNCTION_ON_NurbsCurve_RemoveKnots) (ON_NurbsCurve *, int, int, double)

◆ ON_PLUS_FUNCTION_ON_NurbsGrevilleInterpolate

typedef bool(* ON_PLUS_FUNCTION_ON_NurbsGrevilleInterpolate) (int, int, int, int, double *, const double *, int, int, int, const double *)

◆ ON_PLUS_FUNCTION_ON_NurbsSurface_RemoveKnots

typedef bool(* ON_PLUS_FUNCTION_ON_NurbsSurface_RemoveKnots) (ON_NurbsSurface *, int, int, int)

◆ ON_PLUS_FUNCTION_Outline_GetOutlineMesh

typedef unsigned int(* ON_PLUS_FUNCTION_Outline_GetOutlineMesh) (const class ON_Outline &, double, double, ON_SimpleArray< ON_2dPoint > &, ON_SimpleArray< ON_3udex > &, double *, double *, class ONX_ErrorCounter *)

◆ ON_PLUS_FUNCTION_PlaneSurface_Mesh

typedef ON_Mesh*(* ON_PLUS_FUNCTION_PlaneSurface_Mesh) (const ON_PlaneSurface &, const ON_MeshParameters &, ON_Mesh *)

◆ ON_PLUS_FUNCTION_RevSurface_Mesh

typedef ON_Mesh*(* ON_PLUS_FUNCTION_RevSurface_Mesh) (const ON_RevSurface &, const ON_MeshParameters &, ON_Mesh *)

◆ ON_PLUS_FUNCTION_SimpleCreate2dMesh

typedef int(* ON_PLUS_FUNCTION_SimpleCreate2dMesh) (const ON_SimpleArray< ON_2dPoint > &points, const ON_SimpleArray< ON_2udex > &edges, const ON_SimpleArray< unsigned char > &dirs, ON_SimpleArray< ON_3dex > &triangulation, ON_SimpleArray< ON_2dPoint > &new_pts, ON_TextLog *text_log)

Used by mesh intersections to tessellate

◆ ON_PLUS_FUNCTION_SquishBack2dMarks

typedef bool(* ON_PLUS_FUNCTION_SquishBack2dMarks) (const ON_Geometry *squished_geometry, const ON_SimpleArray< const ON_Geometry * > *marks, ON_SimpleArray< ON_Geometry * > *squishedback_marks)

◆ ON_PLUS_FUNCTION_SquishMesh

typedef class ON_Mesh*(* ON_PLUS_FUNCTION_SquishMesh) (const class ON_Mesh *, const class ON_SquishParameters *, const ON_SimpleArray< const ON_Geometry * > *, ON_SimpleArray< ON_Geometry * > *, class ON_Mesh *)

Used by ON_SquishMesh()

◆ ON_PLUS_FUNCTION_SquishSurface

typedef class ON_Brep*(* ON_PLUS_FUNCTION_SquishSurface) (const class ON_Surface *, const class ON_SquishParameters *, const ON_SimpleArray< const ON_Geometry * > *, ON_SimpleArray< ON_Geometry * > *, class ON_Brep *)

◆ ON_PLUS_FUNCTION_SumSurface_Mesh

typedef ON_Mesh*(* ON_PLUS_FUNCTION_SumSurface_Mesh) (const ON_SumSurface &, const ON_MeshParameters &, ON_Mesh *)

◆ ON_PLUS_FUNCTION_Surface_CreateCubicLoft

typedef ON_NurbsSurface*(* ON_PLUS_FUNCTION_Surface_CreateCubicLoft) (int, const ON_Curve *const *, double, int, ON::cubic_loft_end_condition, ON::cubic_loft_end_condition, ON_NurbsSurface *)

◆ ON_PLUS_FUNCTION_Surface_CreateLinearLoft

typedef ON_NurbsSurface*(* ON_PLUS_FUNCTION_Surface_CreateLinearLoft) (int, const ON_Curve *const *, double, int, ON_NurbsSurface *)

◆ ON_PLUS_FUNCTION_Surface_MassProperties

typedef int(* ON_PLUS_FUNCTION_Surface_MassProperties) (const ON_Surface &, void *, int, ON_3dPoint, ON_MassProperties &, bool, bool, bool, bool, double, double)

◆ ON_PLUS_FUNCTION_Surface_Silhouette

typedef bool(* ON_PLUS_FUNCTION_Surface_Silhouette) (const ON_SilhouetteParameters, const ON_Surface &, const ON_Interval *, const ON_Interval *, const ON_PlaneEquation *, size_t, ON_ClassArray< ON_SIL_EVENT > &, ON_ProgressReporter *, ON_Terminator *)

◆ ON_PLUS_FUNCTION_SurfaceTreeNode_GetClosestPoint

typedef const class ON_SurfaceTreeNode*(* ON_PLUS_FUNCTION_SurfaceTreeNode_GetClosestPoint) (const class ON_SurfaceTreeNode *, ON_3dPoint, double *, double *, ON_3dPoint *, double, const ON_Interval *, const ON_Interval *)

Used by ON_SurfaceTreeNode::

◆ ON_PLUS_FUNCTION_SurfaceTreeNode_IntersectSurfaceTree

typedef int(* ON_PLUS_FUNCTION_SurfaceTreeNode_IntersectSurfaceTree) (const class ON_SurfaceTreeNode *, const class ON_SurfaceTreeNode *, ON_ClassArray< ON_SSX_EVENT > &, double, double, double, const ON_Interval *, const ON_Interval *, const ON_Interval *, const ON_Interval *)

Used by ON_SurfaceTreeNode::

◆ ON_PLUS_FUNCTION_TransformBrepComponents

typedef bool(* ON_PLUS_FUNCTION_TransformBrepComponents) (ON_Brep *, int, const ON_COMPONENT_INDEX *, ON_Xform, double, double, bool)

◆ ON_SSLMTC_PROC

typedef void(* ON_SSLMTC_PROC) (int msg_type, const ON_wString *pClass, const ON_wString *pEventDesc, const ON_wString *pMessage)

◆ ON_StreamCallbackFunction

typedef bool(* ON_StreamCallbackFunction) (void *context, ON__UINT32 size, const void *buffer)

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

◆ ON_UUID

typedef struct ON_UUID_struct ON_UUID

ON_UUID is a 16 byte universally unique identifier.

◆ ON_Vtable_func

typedef int(* ON_Vtable_func) (void)

◆ ON_XMeshEventComponentString

typedef ON_wString ON_XMeshEventComponentString[2]

◆ ON_XMLRecurseChildrenCallback

typedef bool(* ON_XMLRecurseChildrenCallback) (class ON_XMLNode *, void *)

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

◆ TEXMAP_BREP_FACE_CLOSEST_POINT

typedef bool( * TEXMAP_BREP_FACE_CLOSEST_POINT) (const ON_BrepFace *, const ON_3dPoint *, ON_3dPoint &)

◆ TEXMAP_INTERSECT_LINE_SURFACE

typedef int( * TEXMAP_INTERSECT_LINE_SURFACE) (const ON_Line *, const ON_BrepFace *, ON_SimpleArray< ON_X_EVENT > &)

Enumeration Type Documentation

◆ eXMeshOverlapType

enum eXMeshOverlapType : unsigned int
strong
Enumerator
unknown 
not_overlap 
same_normal 
opposite_normal 
overlap 

◆ eXMeshPoolStatus

enum eXMeshPoolStatus : unsigned int
strong
Enumerator
unknown 
active 
returned 

◆ ON_3dmArchiveTableType

enum ON_3dmArchiveTableType : unsigned int
strong
Enumerator
Unset 

The values of the table_type enums must increase in the order the corresponding tables appear in well formed 3dm archives and the bitwise or of distinct values must be zero because bitfield filters are used in some reading operations.

start_section 

First section in any 3dm archive.

properties_table 
settings_table 
bitmap_table 
texture_mapping_table 
material_table 
linetype_table 
layer_table 
group_table 
text_style_table 
leader_style_table 
dimension_style_table 
light_table 
hatchpattern_table 
instance_definition_table 
object_table 
historyrecord_table 
user_table 
end_mark 

Last section in any 3dm archive.

◆ ON_ChainDirection

enum ON_ChainDirection : unsigned char
strong
Enumerator
Unset 

summary> Search for chain links before the current link. /summary>

Previous 

summary> Search for chain links after the current link. /summary>

Next 

summary> Search for chain links before and after the current link. /summary>

Both 

◆ ON_ComponentState

enum ON_ComponentState : unsigned char
strong

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. ON_ComponentState and ON_ComponentStatus

Provides a set of values describing component state.

para>This is not a bit field.

para>Some of these values are mutually exclusive and should not be combined.

Enumerator
Unset 

summary>Not a valid status.

summary>This is a default component state.

Clear 

summary>This is a default component state, but not selected.

NotSelected 

summary>This component is selected.

Selected 

summary>This component is selected persistently.

SelectedPersistent 

summary>This is a default component state, but not highlighted.

NotHighlighted 

summary>This component is highlighted.

Highlighted 

summary>This is a default component state, but not hidden.

NotHidden 

summary>This component is hidden.

Hidden 

summary>This is a default component state, but not locked.

NotLocked 

summary>This component is locked.

Locked 

summary>This is a default component state, but not damaged.

NotDamaged 

summary>This component is damaged.

Damaged 

summary>This component is not deleted.

NotDeleted 

summary>This component is deleted.

Deleted 

summary>This runtime mark is clear.

RuntimeMarkClear 

summary>This runtime mark is set.

RuntimeMarkSet 

◆ ON_DateFormat

enum ON_DateFormat : int
strong
Enumerator
Unset 
Omit 

summary> February 1st, 2001 = 2001-2-1 /summary>

YearMonthDay 

summary> February 1st, 2001 = 2001-1-2 /summary>

YearDayMonth 

summary> February 1st, 2001 = 2-1-2001 /summary>

MonthDayYear 

summary> February 1st, 2001 = 1-2-2001 /summary>

DayMonthYear 

summary> February 1st, 2001 = 2001-32 /summary>

YearDayOfYear 

◆ ON_FitResult

enum ON_FitResult : unsigned int
strong

Return codes to be used in operations that attempt to fit to a tolerance.
For example ON_Surface::Pullback() and ON_Surface::PushUp().

Enumerator
unknown 
in_tolerance 
not_in_tolerance 

◆ ON_FocalBlurModes

enum ON_FocalBlurModes : unsigned int
strong
Enumerator
None 

No focal blur.

Automatic 

Autofocus on selected objects.

Manual 

Fully manual focus.

◆ ON_GradientType

enum ON_GradientType : int
strong
Enumerator
None 

summary>No gradient

summary>Linear (or axial) gradient between two points

Linear 

summary>Radial (or spherical) gradient using a center point and a radius

Radial 

summary>Disabled linear gradient. Useful for keeping gradient information around, but not having it displayed

LinearDisabled 

summary>Disabled radial gradient. Useful for keeping gradient information around, but not having it displayed

RadialDisabled 

◆ ON_LogMessageType

enum ON_LogMessageType : int
strong

#include "opennurbs_plus_validate.h"

Enumerator
unknown 
information 
warning 
error 
assert 

◆ ON_PickType

enum ON_PickType : unsigned char
strong

ON_PickType specifies what type of pick is occurring.

Enumerator
Unset 

summary> Type has not been set. /summary> summary> A point pick is centered on a ray in the view frustum. Often the pick region is a small frustum centered on the pick ray defined by a mouse click in viewport. The size of the frustum is typically a few pixels in diameter at the most likely depth the user is focused on. An object must intersect the pick region for it to be considered. /summary>

PointPick 

summary> The pick region for a window pick is a rectangular frustum inside the view frustum. An object must be completely inside the frustum for it to be considered. The pick frustum is defined by a rectangle in the view plane. The size of the rectangle has varies widely in aspect and size. /summary>

WindowPick 

summary> The pick region for a crossing pick is a rectangular frustum inside the view frustum. An object must intersect the frustum for it to be considered. The pick frustum is defined by a rectangle in the view plane. The size of the rectangle has varies widely in aspect and size. /summary>

CrossingPick 

◆ ON_SDFQueryResult

enum ON_SDFQueryResult : int
strong
Enumerator
Unknown 

undefined result

Disjoint 

SDF has no overlap.

Intersects 

SDF has overlap.

◆ ON_SquishDeformation

enum ON_SquishDeformation : int
strong

The types of deformation allowed in the squish process

0 = free 1 = stretch mostly 2 = stretch only (no compression) 3 = compress mostly 4 = compress only (no stretching) 5 = custom

Enumerator
Free 

No preference for compression or stretching.

StretchMostly 

Strong bias for expansion when the pattern is deformed into the 3-D shape.

StretchOnly 

Absolutely no compression when the pattern is deformed into the 3-D shape.

CompressMostly 

Strong bias for compression when the pattern is deformed into the 3-D shape.

CompressOnly 

Absolutely no expansion when the pattern is deformed into the 3-D shape.

Custom 

The Custom option lets you set the parameters used by the custom deformations. There are four parameters you can set: BndStretch, BndCompress, InteriorStretch, InteriorCompress The default value for these parameters is 1 and they can be set to any positive number. A larger value reduces the amount of the specified deformation compared to what happens when all four parameters are equal. For example, if you want to severely limit interior expansion, you could do something like: BndStretch = 1 BndCompress = 1 InteriorStretch = 1 InteriorCompress = 100 If you want to preserve boundary lengths you could use the settings: BndStretch = 10 BndCompress = 10 InteriorStretch = 1 InteriorCompress = 1

◆ ON_SquishFlatteningAlgorithm

enum ON_SquishFlatteningAlgorithm : unsigned int
strong

Represents the type of flattening to use

Enumerator
Geometric 

geometric flattening algorithm: (scale independent)the "spring" constant is proportional to 1/L^2 and the result is independent of scale.

PhysicalStress 

physical stress flattening algorithm: (scale dependent) the "spring" constant is proportional to 1/L.

◆ ON_StringMapOrdinalType

enum ON_StringMapOrdinalType : int
strong
Enumerator
Identity 
UpperOrdinal 
LowerOrdinal 
MinimumOrdinal 

◆ ON_StringMapType

enum ON_StringMapType : int
strong
Enumerator
Identity 
UpperCase 
LowerCase 

◆ ON_SubDComponentLocation

enum ON_SubDComponentLocation : unsigned char
strong

The ON_SubDComponentLocation enum is used when an ON_SubD component is referenced and it is important to distinguish between the component's location in the SubD control net and its location in the SubD limit surface.

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

Enumerator
Unset 

summary> Not a valid component location and used to indicate the value is not initialized. Note well: This value is saved in 3dm archives and cannot be changed. /summary> summary> The component's location in the SubD control net. Note well: This value is saved in 3dm archives and cannot be changed. /summary>

ControlNet 

summary> The component's location in the SubD limit surface. Note well: This value is saved in 3dm archives and cannot be changed. /summary>

Surface 

◆ ON_SubDEdgeTag

enum ON_SubDEdgeTag : unsigned char
strong

ON_SubDEdgeTag identifies the type of subdivision edge. Different tags use different subdivision algorithms to calculate the subdivision point.


Enumerator
Unset 

summary> Not a valid edge tag and the default value for ON_SubDEdge.m_edge_tag. This encourages developers to thoughtfully initialize ON_SubDEdge.m_edge_tag. or use ON_SubD.UpdateAllTagsAndSectorCoefficients() to automatically set the m_edge_tag values at an appropriate time. /summary> summary> At least one the edge's vertices must be tagged as ON_SubDVertexTag::Smooth. The edge must have exactly two faces. The edge's subdivision point is (A1 + A2 + S(f1) + S(f2))/4, where Ai = ON_SubDEdge.Vertex(i)->ControlNetPoint() and S(fi) = ON_SubDEdge.Face(i)->SubdivisionPoint(). /summary>

Smooth 

summary> Both of the edge's vertices must be tagged as ON_SubDVertexTag::Dart, ON_SubDVertexTag::Crease, or ON_SubDVertexTag::Corner. (The vertex tags can be different.) The edge can have any number of faces. The edge's subdivision point is (A1+A2)/2 where Ai = ON_SubDEdge.Vertex(i)->ControlNetPoint(). /summary>

Crease 

summary> This tag appears only on level 0 edges that have exactly two neighboring faces and both of the edge's vertices are tagged as ON_SubDVertexTag::Dart, ON_SubDVertexTag::Crease, or ON_SubDVertexTag::Corner. The level 1 subdivision point for a level 0 edge tagged as ON_SubDEdgeTag::SmoothX is the standard smooth edge subdivision point. When subdivided, the new subdivision vertex will be tagged as ON_SubDVertexTag::Smooth and the subdivided edges will be tagged as ON_SubDEdgeTag::Smooth.
The tag ON_SubDEdgeTag::SmoothX can only appear on a level 0 edge. This tag exists because the ON_SubD subdivision algorithm requires any edge with both end vertices tagged as not smooth must be subdivided at its midpoint. Sector iterators treat "SmoothX" edges as smooth. Both edge m_sector_coefficient[] values must be set so the smooth subdivided edges will be valid. /summary>

SmoothX 

◆ ON_SubDEdgeType

enum ON_SubDEdgeType : unsigned char
strong

ON_SubDEdgeType describes a subdivision edge. ON_SubDEdgeType is typically used when generating text descriptions or filtering edges during selection processes. Do not confuse ON_SubDEdgeType and ON_SubDEdgeTag. The unique types are single bits and suitable for use in bitwise logic.


Enumerator
Unset 

summary> Type is unset or the edge is not valid. /summary> summary> The edge has zero faces and the tag is ON_SubDEdgeTag::Crease. /summary>

Wire 

summary> The edge has one face and the tag is ON_SubDEdgeTag::Crease. /summary>

Boundary 

summary> The edge has two faces, the tag is ON_SubDEdgeTag::Smooth or ON_SubDEdgeTag::SmoothX, and the edge sharpness is zero. Note that ON_SubEdge::IsSmoothNotSharp() returns true if and only if ON_SubEdge::EdgeType() is InteriorSmooth. /summary>

InteriorSmooth 

summary> The edge has two faces, the tag is ON_SubDEdgeTag::Smooth or ON_SubDEdgeTag::SmoothX, and the edge sharpness is nonzero. Note that ON_SubEdge::IsSharp() returns true if and only if ON_SubEdge::EdgeType() is InteriorSharp. /summary>

InteriorSharp 

summary> The edge has two faces and the tag is ON_SubDEdgeTag::Crease. /summary>

InteriorCrease 

summary> The edge has three or more faces and the tag is ON_SubDEdgeTag::Crease. /summary>

Nonmanifold 

summary> The edge has an invalid combination of face count, tag, and sharpness properties. /summary>

Invalid 

summary> A mask for all interior edge types. Interior edges have 2 faces. /summary>

InteriorMask 

summary> A mask for all valid edge types. /summary>

ValidTypesMask 

◆ ON_SubDEndCapStyle

enum ON_SubDEndCapStyle : unsigned char
strong

ON_SubDEndCapStyle enumerates the type of end caps functions like ON_SubD::CreateCylinder will create. Use ON_SubDEndCapStyleFromUnsigned(integer value) to convert integer values to an ON_SubDEndCapStyle. Use ON_SubDEndCapStyleToString(end_cap_style) to convert ON_SubDEndCapStyle values to string descriptions.

Enumerator
Unset 

Used to indicate the end cap style is not set.

None 

Ends are not capped.

Triangles 

Ends are capped with triangles.

Quads 

When the end has an even number of edges, is will be capped with quads. Otherwise it will be capped with triangles.

Ngon 

Ends are capped with a n-gon. This is a poor choice when there are a large number of edges in the end boundary.

◆ ON_SubDGetControlNetMeshPriority

enum ON_SubDGetControlNetMeshPriority : unsigned char
strong

ON_SubDGetControlNetMeshPriority specifies what type of ON_SubD information is most important to transfer to the ON_Mesh.

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. Definition of subdivision surface

Enumerator
Geometry 

summary> Create a mesh that can be used to reliably transfer SubD control net geometry, topology, and interior edge crease information. Use this option when the mesh will be used to create a Catmull-Clark subdivision surface. SubD texture coordinates cannot be recovered from the mesh. /summary> summary> Create a mesh that has the shape of the SubD control net and includes SubD texture coordinate information. Use this option when the mesh will be used to create an image of the SubD control net that relies on texture coordinates. SubD interior edge crease information cannot be recovered from the mesh. Most applications will not be able to use the mesh to recreate a Catmull-Clark subdivision surface. /summary>

TextureCoordinates 

◆ ON_SubDHashType

enum ON_SubDHashType : unsigned char
strong

ON_SubDHashType used used to specify what type of SubD information is hashed (topology or geometry).

Enumerator
Unset 

Unset indicates the hash type still needs to be selected. It is not a valid type for calculating a hash.

Topology 

The Topology hash includes component ids, and all topological relationships between vertices, edges, and faces. If two SubDs have the same topology hash, then the the have identical labeled control net topology.

TopologyAndEdgeCreases 

The TopologyAndEdgeCreases includes all information in a Topology hash. The TopologyAndEdgeCreases adds edge crease/smooth attributes. Many contexts, including face packing and exploding, take edge creases into account when partitioning a SubD into regions.

Geometry 

A geometry hash includes all information in a TopologyAndEdgeCreases hash. The Geometry hash adds vertex tags, vertex control net points, and nonzero subdivision displacements on vertices, edges, and faces. If two SubDs have the same geometry hash, then they have identical surface geometry.

◆ ON_SubDTextureCoordinateType

enum ON_SubDTextureCoordinateType : unsigned char
strong

ON_SubDTextureCoordinateType identifies the way ON_SubDMeshFragment texture coordinates are set from an ON_SubDFace.

Enumerator
Unset 

summary> Texture domains are not set. /summary> summary> Each SubDFace uses the unit square in texture space. /summary>

Unpacked 

summary> The face's pack rect is used to set fragment texture coordinates. When possible, adjacent quads with the same ON_SubDFace::PackId() value are assigned adjacent rectangles in texture space. /summary>

Packed 

summary> All ON_SubDMeshFragment texture coordinate values are zero. /summary>

Zero 

summary> All ON_SubDMeshFragment texture coordinate values are ON_DBL_QNAN. /summary>

Nan 

summary> All ON_SubDMeshFragment texture coordinate values are set by barycentric interpolation of ON_SubDFace.TexturePoint() values. /summary>

FromFaceTexturePoints 

summary> Texture coordinates are set from an ON_TextureMapping and transformation specified by ON_SubD::TextureMappingTag(). In all other cases, ON_SubD::TextureMappingTag() can be set, but is ignored. /summary>

FromMapping 

◆ ON_SubDVertexTag

enum ON_SubDVertexTag : unsigned char
strong

ON_SubDVertexTag identifies the type of subdivision vertex. Different tags use different subdivision algorithms to determine where the subdivision point and limit point are located. There are topological constraints that restrict which tags can be assigned.

Enumerator
Unset 

summary> Not a valid vertex tag and the default value for ON_SubDVertex.m_vertex_tag. This encourages developers to thoughtfully initialize ON_SubDVertex.m_vertex_tag or use ON_SubD.UpdateAllTagsAndSectorCoefficients() to automatically set the m_vertex_tag values at an appropriate time. /summary> summary> Must be an interior vertex. All edges attached to a smooth vertex must be tagged as ON_SubDEdgeTag::Smooth and must have 2 faces. /summary>

Smooth 

summary> Can be an interior or a boundary vertex. Exactly two edges ending at a crease vertex must be tagged as ON_SubDEdgeTag::Crease and may have 1 or 2 faces. All other edges ending at a crease must be tagged as tagON_SubD::EdgeTag::Smooth and have 2 faces. Below P = ON_SubDVertex.ControlNetPoint() and Ai = ON_SubDVertex.Edge(i)->OtherEndVertex()->ControlNetPoint(). A crease vertex subdivision point is (6*P + A1 + A2)/8. A crease vertex limit surface point is (4*P + A1 + A2)/6. /summary>

Crease 

summary> Can be an interior, boundary, nonmanifold, or isolated vertex. The location of a corner vertex is fixed. The all subdivision points and the limit point are at the initial vertex location. The edges ending at a corner vertex can be smooth or crease edges. A corner vertex subdivision point is P where P = ON_SubDVertex.ControlNetPoint(). A corner vertex limit surface point is P where P = ON_SubDVertex.ControlNetPoint(). /summary>

Corner 

summary> Must be an interior vertex.
Every edge attached to a dart vertex must have 2 faces. Exactly one edge attached to a dart vertex must be tagged as ON_SubDEdgeTag::Crease and every other attached edge must be tagged as ON_SubDEdgeTag::smooth. /summary>

Dart 

◆ ON_TimeFormat

enum ON_TimeFormat : int
strong
Enumerator
Unset 
Omit 
HourMinute12 
HourMinuteSecond12 
HourMinute24 
HourMinuteSecond24 

◆ ON_UnicodeCodePoint

Unicode code point values for that are hard to include in code or are useful for testing encoding and glyph rendering. Code points >= U+0080 require UTF-8 multiple byte encodings. Code points >= U+10000 require UTF-16 surrogate pair encodings.

UTF-8 encodings: The UTF-8 encoding for codepoint values from 0 to 127 is a single single byte (char).
The UTF-8 encoding for codepoint values >= 128 require multiple bytes. UTF-16 encodings: The UTF-16 encoding of every codepoint in this enum except Wastebasket is a single word (unsigned short).

Enumerator
ON_NullCodePoint 

nullptr control U+0000

ON_Backspace 

BACKSPACE control U+0008

ON_Tab 

CHARACTER TABULATION control U+0009

ON_LineFeed 

LINE FEED control U+000A

ON_VerticalTab 

LINE TABULATION control U+000B

ON_FormFeed 

FORM FEED control U+000C

ON_CarriageReturn 

CARRIAGE RETURN control U+000D

ON_Escape 

ESCAPE control U+001B

ON_Space 

SPACE U+0020

ON_Delete 

DELETE U+007F

ON_NoBreakSpace 

NO-BREAK SPACE (NBSP) U+00A0

ON_OghamSpaceMark 

OGHAM SPACE MARK U+1680

ON_EnQuad 

EN QUAD SPACE U+2000

ON_EmQuad 

EM QUAD SPACE U+2001

ON_EnSpace 

EN SPACE U+2002 Also known as a nut. (About 1/2 EM SPACE)

ON_EmSpace 

EM SPACE U+2003 Also known as a mutton.

ON_ThreePerEmSpace 

3 per EM SPACE U+2004 (1/3 EM SPACE)

ON_FourPerEmSpace 

4 per EM SPACE U+2005 (1/4 EM SPACE)

ON_SixPerEmSpace 

6 per EM SPACE U+2006 (1/6 EM SPACE)

ON_FigureSpace 

FIGURE SPACE U+2007 Average digit width.

ON_PunctuationSpace 

PUNCTUATION SPACE U+2008

ON_ThinSpace 

THIN SPACE U+2009 (1/5 to 1/6 EM SPACE)

ON_HairSpace 

HAIR SPACE U+200A (Narrower than THIN SPACE)

ON_ZeroWidthSpace 

ZERO WIDTH SPACE (ZWSP) U+200B

ON_MediumMathematicalSpace 

MEDIUM MATHEMATICAL SPACE U+2025 (about 2/9 EM SPACE)

ON_IdeographicSpace 

IDEOGRAPHIC SPACE U+3000 The width of ideographic (Chinese, Japanese, Korean) characters.

ON_ZeroWidthNonJoiner 

zero with non-joiner (ZWNJ) U+200C

ON_ZeroWidthJoiner 

zero with joiner (ZWJ) U+200D

ON_NarrowNoBreakSpace 

NARROW NO-BREAK SPACE (NNBSP) U+202F

ON_QuotationMark 

QUOTATION MARK U+0022 (")

ON_NumberSign 

NUMBER SIGN U+0023 (#)

ON_PercentSign 

PERCENT SIGN U+0025 (%)

ON_Ampersand 

AMPERSAND U+0026 (&)

ON_Apostrophe 

APOSTROPHE U+0027 (')

ON_Comma 

COMMA U+002C (,)

ON_HyphenMinus 

HYPHEN-MINUS U+002D (-)

ON_UnambiguousHyphen 

UNAMBIGUOUS HYPHEN U+2010 (&#x2010;)

ON_NoBreakHyphen 

NON-BREAKING HYPHEN U+2011

ON_SmallHyphen 

SMALL HYPHEN U+FE63 (&#xFE63;)

ON_UnambiguousMinus 

UNAMBIGUOUS MINUS U+2212 (&#x2212;)

ON_FigureDash 

UNAMBIGUOUS MINUS U+2012 (&#x2012;)

ON_EnDash 

EN DASH U+2013 (&#x2013;)

ON_EmDash 

EM DASH U+2014 (&#x2014;)

ON_Period 

PERIOD U+002E (decimal 46) (.)

ON_Slash 

SOLIDUS U+002F (&#x2f;)

ON_FractionSlash 

FRACTION SLASH U+2044 (&#x2044;)

ON_DivisionSlash 

DIVISION SLASH U+2215 (&#x2215;)

ON_MathimaticalSlash 

MATHEMATICAL RISING DIAGONAL U+27CB (&#x27CB;)

ON_Colon 

COLON U+003A (:)

ON_Semicolon 

SEMICOLON U+003B (;)

ON_LessThanSign 

LESS-THAN SIGN U+003C (&#x3c;)

ON_GreaterThanSign 

GREATER-THAN SIGN U+003E (&#x3e;)

ON_Backslash 

REVERSE SOLIDUS U+005C (&#x5c;)

ON_Underscore 

///< Unicode LOW LINE U+005F (_)

ON_Pipe 

VERTICAL LINE U+007C (&#x7c;)

ON_Tilde 

TILDE U+007E (&#x7e;)

ON_NextLine 

NEXT LINE (NEL) control U+0085

ON_RadiusSymbol 

LATIN CAPITAL LETTER R U+0052 (decimal 82) (Rhino annotation radius symbol)

ON_DegreeSymbol 

DEGREE SIGN U+00B0 (X&#xb0;) (Rhino annotation degree symbol)

ON_PlusMinusSymbol 

PLUS-MINUS SIGN U+00B1 (&#xb1;) (Rhino annotation plus/minus symbol)

ON_Superscript2 

SUPERSCRIPT TWO U+00B2 (X&#xb2;) (Rhino annotation length squared symbol)

ON_Superscript3 

SUPERSCRIPT THREE U+00B3 (X&#xb3;) (Rhino annotation length cubed symbol)

ON_DiameterSymbol 

LATIN CAPITAL LETTER O WITH STROKE U+00D8 (&#xd8;) (Rhino annotation diametersymbol)

ON_LineSeparator 

LINE SEPARATOR U+2028 unambiguous line separator

ON_ParagraphSeparator 

PARAGRAPH SEPARATOR U+2028 unambiguous paragraph separator

ON_GreekCapitalAlpha 

GREEK CAPITAL LETTER ALPHA U+0391 (&#x391;)

ON_GreekAlpha 

GREEK SMALL LETTER ALPHA U+03B1 (&#x3b1;)

ON_GreekCapitalSigma 

GREEK CAPITAL LETTER SIGMA U+03A3 (&#x3a3;)

ON_GreekSigma 

GREEK SMALL LETTER SIGMA U+03C3 (&#x3c3;)

ON_GreekCapitalOmega 

GREEK CAPITAL LETTER OMEGA U+03A9 (&#x3a9;)

ON_GreekOmega 

GREEK SMALL LETTER OMEGA U+03C9 (&#x3c9;)

ON_CyrillicCapitalYu 

CYRILLIC CAPITAL LETTER YU U+042E (&#x42e;) (Used in Cyrillic code point tests)

ON_PlaceOfInterestSign 

Place of interest sign/looped square. (Used to indicate the command key on Mac)

ON_SimplifiedChineseTree 

Simplified Chinese logogram for tree U+6881 (&#x6881;) (Used in CJK code point tests)

ON_TraditionalChineseTree 

Traditional Chinese logogram for tree U+6A39 (&#x6a39;) (Used in CJK code point tests)

ON_JapaneseRhinoceros 

Japanese logogram for rhinoceros U+7280 (&#x7280;) (Used in CJK code point tests)

ON_JapaneseTree 

Japanese logogram for tree U+6728 (&#x6728;) (Used in CJK code point tests)

ON_KoreanHan 

Korean HAN U+D55C (&#xd55c;) (Used in CJK code point tests)

ON_KoreanJeong 

Korean JEONG U+C815 (&#xc815;) (Used in CJK code point tests)

ON_DollarSign 

DOLLAR SIGN U+0024 ($)

ON_CentSign 

CENT SIGN U+00A2 (&#xa2;)

ON_PoundSign 

POUND SIGN U+00A3 (&#xa3;)

ON_CurrencySign 

CURRENCY SIGN U+00A4 (&#xa4;)

ON_YenSign 

YEN SIGN U+00A5 (Chinese yuan, Japanese yen) (&#xa5;)

ON_EuroSign 

EURO SIGN U+20AC (&#x20ac;)

ON_PesoSign 

PESO SIGN U+20B1 (&#x20b1;)

ON_RubleSign 

RUBLE SIGN U+20BD (&#x20bd;)

ON_InfinitySymbol 

INFINITY SYMBOL U+221E (&#x221e;)

ON_RecyclingSymbol 

UNIVERSAL RECYCLING SYMBOL U+2672 (&#x2672;) This is a good cold point for testing glyph substitution.

ON_BlackRecyclingSymbol 

BLACK UNIVERSAL RECYCLING SYMBOL U+267B (&#x267b;) This is a good cold point for testing glyph substitution.

ON_WarningSign 

WARNING SIGN U+26A0 (&#x26a0;)

ON_CheckMark 

CHECK MARK U+2713 (&#x2713;)

ON_ReplacementCharacter 

REPLACEMENT CHARACTER U+FFFD (&#xfffd;) By convention, U+FFFD is used to mark string elements where an invalid UTF code point encoding was encountered.

ON_ByteOrderMark 

BYTE ORDER MARK (BOM) U+FEFF 0xFEFF is used at the beginning of UTF encoded text to indicate the byte order being used. It is valid for UTF-8 encoded text to begin with the UTF-8 encoding of U+FEFF (0xEF,0xBB,0xBF). This sometimes used to mark a char string as UTF-8 encoded. and also occurs when UTF-16 and UTF-32 encoded text with a byte order mark is converted to UTF-8 encoded text. The Unicode specification states that the 0xFFFE is &ltnot a character&gt.

ON_Wastebasket 

WASTEBASKET U+1F5D1 (&#x1f5d1;) The wastebasket is a good code point to test glyph rendering and UTF-16 surrogate pair encodings. UTF-8 encoding = (0xF0, 0x9F, 0x97, 0x91) UTF-16 encoding = ( 0xD83D, 0xDDD1 ) (UTF-16surrogate pair)

ON_MaximumCodePoint 

The maximum valid unicode code point value is 0x10FFFF. The Unicode specification states that 0x10FFFF is &ltnot a character&gt.

ON_InvalidCodePoint 

The maximum valid unicode code point value is 0x10FFFF. See ON_IsValidUnicodeCodepoint() for additional restrictions.

◆ ON_UnicodeEncoding

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

Enumerator
ON_UTF_unset 
ON_not_UTF 

not a UTF encoding

ON_UTF_8 

UTF-8 big endian byte order.

ON_UTF_16 

UTF-16 in native CPU byte order.

ON_UTF_16BE 

UTF-16 big endian byte order.

ON_UTF_16LE 

UTF-16 little endian byte order.

ON_UTF_32 

UTF-32 in native CPU byte order.

ON_UTF_32BE 

UTF-32 big endian byte order.

ON_UTF_32LE 

UTF-32 little endian CPU byte order.

Function Documentation

◆ ON_ClassArray() [1/3]

template<class T >
ON_ClassArray< T >::ON_ClassArray

construction ////////////////////////////////////////////////////////

◆ ON_ClassArray() [2/3]

template<class T >
ON_ClassArray< T >::ON_ClassArray ( const ON_ClassArray< T > &  src)

Copy constructor.

< operator= defined below

◆ ON_ClassArray() [3/3]

template<class T >
ON_ClassArray< T >::ON_ClassArray ( size_t  c)

size_t parameter = initial capacity

◆ ON_ObjectArray() [1/3]

template<class T >
ON_ObjectArray< T >::ON_ObjectArray

Class ON_ObjectArray<>

◆ ON_ObjectArray() [2/3]

template<class T >
ON_ObjectArray< T >::ON_ObjectArray ( const ON_ObjectArray< T > &  src)

◆ ON_ObjectArray() [3/3]

template<class T >
ON_ObjectArray< T >::ON_ObjectArray ( size_t  c)

size_t parameter = initial capacity

◆ ON_SimpleArray() [1/3]

template<class T >
ON_SimpleArray< T >::ON_SimpleArray

construction ////////////////////////////////////////////////////////

These constructors create an array that uses onrealloc() to manage the array memory.

◆ ON_SimpleArray() [2/3]

template<class T >
ON_SimpleArray< T >::ON_SimpleArray ( const ON_SimpleArray< T > &  src)

Copy constructor.

< operator= defined below

◆ ON_SimpleArray() [3/3]

template<class T >
ON_SimpleArray< T >::ON_SimpleArray ( size_t  c)

size_t parameter = initial capacity

◆ ON_SimpleFixedSizePool()

construction ////////////////////////////////////////////////////////

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

◆ ON_SimpleFixedSizePoolIterator() [1/2]

template<class T >
ON_SimpleFixedSizePoolIterator< T >::ON_SimpleFixedSizePoolIterator ( const class ON_SimpleFixedSizePool< T > &  fsp)

◆ ON_SimpleFixedSizePoolIterator() [2/2]

template<class T >
ON_SimpleFixedSizePoolIterator< T >::ON_SimpleFixedSizePoolIterator ( const class ON_SimpleFixedSizePoolIterator< T > &  fsp_it)

◆ ~ON_ClassArray()

template<class T >
ON_ClassArray< T >::~ON_ClassArray
virtual

override for struct member deallocation, etc.

◆ ~ON_ObjectArray()

template<class T >
ON_ObjectArray< T >::~ON_ObjectArray

override for struct member deallocation, etc.

◆ ~ON_SimpleArray()

template<class T >
ON_SimpleArray< T >::~ON_SimpleArray
virtual

◆ ~ON_SimpleFixedSizePool()

◆ ActiveElementCount()

template<class T >
size_t ON_SimpleFixedSizePool< T >::ActiveElementCount

Returns: Number of active elements. (Elements that have been returned are not active.)

◆ AllocateElement()

template<class T >
T * ON_SimpleFixedSizePool< T >::AllocateElement

Returns: A pointer to sizeof_element bytes. The memory is zeroed.

◆ Append() [1/4]

template<class T >
void ON_SimpleArray< T >::Append ( const T &  x)

Append copy of element. Increments count by 1.

26 Sep 2005 Dale Lear x is in the block of memory about to be reallocated.

◆ Append() [2/4]

template<class T >
void ON_ClassArray< T >::Append ( const T &  x)

Append copy of element. Increments count by 1.

< (int) cast is for 64 bit pointers

26 Sep 2005 Dale Lear User passed in an element of the m_a[] that will get reallocated by the call to Reserve(newcapacity).

< ON_*Array<> templates do not require robust copy constructor.

< ON_*Array<> templates require a robust operator=.

◆ Append() [3/4]

template<class T >
void ON_SimpleArray< T >::Append ( int  count,
const T *  buffer 
)

Append copy of an array T[count].

buffer is in the block of memory about to be reallocated

◆ Append() [4/4]

template<class T >
void ON_ClassArray< T >::Append ( int  count,
const T *  p 
)

Append copy of an array T[count].

◆ AppendNew() [1/2]

template<class T >
T & ON_SimpleArray< T >::AppendNew

array operations ////////////////////////////////////////////////////

Most efficient way to add a new element to the array. Increases count by 1. Returned element is memset to zero.

◆ AppendNew() [2/2]

template<class T >
T & ON_ClassArray< T >::AppendNew

array operations ////////////////////////////////////////////////////

Most efficient way to add a new class to the array. Increases count by 1.

First destroy what's there ..

and then get a properly initialized element

◆ Array() [1/2]

template<class T >
const T * ON_SimpleArray< T >::Array

The Array() function return the.

◆ Array() [2/2]

template<class T >
const T * ON_ClassArray< T >::Array

The Array() function return the.

◆ At() [1/16]

template<class T >
T * ON_SimpleArray< T >::At ( int  i)

At(index) returns nullptr if index < 0 or index >= count.

◆ At() [2/16]

template<class T >
T * ON_ClassArray< T >::At ( int  i)

At(index) returns nullptr if index < 0 or index >= count.

◆ At() [3/16]

template<class T >
const T * ON_SimpleArray< T >::At ( int  i) const

◆ At() [4/16]

template<class T >
const T * ON_ClassArray< T >::At ( int  i) const

◆ At() [5/16]

template<class T >
T * ON_SimpleArray< T >::At ( ON__INT64  i)

◆ At() [6/16]

template<class T >
T * ON_ClassArray< T >::At ( ON__INT64  i)

◆ At() [7/16]

template<class T >
const T * ON_SimpleArray< T >::At ( ON__INT64  i) const

◆ At() [8/16]

template<class T >
const T * ON_ClassArray< T >::At ( ON__INT64  i) const

◆ At() [9/16]

template<class T >
T * ON_SimpleArray< T >::At ( ON__UINT64  i)

◆ At() [10/16]

template<class T >
T * ON_ClassArray< T >::At ( ON__UINT64  i)

◆ At() [11/16]

template<class T >
const T * ON_SimpleArray< T >::At ( ON__UINT64  i) const

◆ At() [12/16]

template<class T >
const T * ON_ClassArray< T >::At ( ON__UINT64  i) const

◆ At() [13/16]

template<class T >
T * ON_SimpleArray< T >::At ( unsigned int  i)

◆ At() [14/16]

template<class T >
T * ON_ClassArray< T >::At ( unsigned int  i)

◆ At() [15/16]

template<class T >
const T * ON_SimpleArray< T >::At ( unsigned int  i) const

◆ At() [16/16]

template<class T >
const T * ON_ClassArray< T >::At ( unsigned int  i) const

◆ BinarySearch() [1/4]

template<class T >
int ON_SimpleArray< T >::BinarySearch ( const T *  key,
int(*)(const T *, const T *)  compar 
) const

See Also: ON_CompareIncreasing<T> and ON_CompareDeccreasing<T>

BinarySearch( p, compare ) does a fast search of a sorted array and returns the smallest index "i" of the element that satisfies 0==compare(p,&array[i]).

BinarySearch( p, compare, count ) does a fast search of the first count element sorted array and returns the smallest index "i" of the element that satisfies 0==compare(p,&array[i]). The version that takes a "count" is useful when elements are being appended during a calculation and the appended elements are not sorted.

If the search is successful, BinarySearch() returns the index of the element (>=0). If the search is not successful, BinarySearch() returns -1.
Use QuickSort( compare ) or, in rare cases and after meaningful performance testing using optimzed release builds, HeapSort( compare ) to sort the array.

This worked on a wide range of 32 bit compilers.

Convert "found" pointer to array index.

In an ideal world, return ((int)(found - m_a)) would work everywhere. In practice, this should work any 32 bit compiler and we can hope the optimzer generates efficient code.

"key" not found

◆ BinarySearch() [2/4]

template<class T >
int ON_ClassArray< T >::BinarySearch ( const T *  key,
int(*)(const T *, const T *)  compar 
) const

See Also: ON_CompareIncreasing<T> and ON_CompareDeccreasing<T>

BinarySearch( p, compare ) does a fast search of a sorted array and returns the smallest index "i" of the element that satisfies 0==compare(p,&array[i]).

BinarySearch( p, compare, count ) does a fast search of the first count element sorted array and returns the smallest index "i" of the element that satisfies 0==compare(p,&array[i]). The version that takes a "count" is useful when elements are being appended during a calculation and the appended elements are not sorted.

If the search is successful, BinarySearch() returns the index of the element (>=0). If the search is not successful, BinarySearch() returns -1. Use QuickSort( compare ) or, in rare cases and after meaningful performance testing using optimzed release builds, HeapSort( compare ) to sort the array.

◆ BinarySearch() [3/4]

template<class T >
int ON_SimpleArray< T >::BinarySearch ( const T *  key,
int(*)(const T *, const T *)  compar,
int  count 
) const

This worked on a wide range of 32 bit compilers.

Convert "found" pointer to array index.

In an ideal world, return ((int)(found - m_a)) would work everywhere. In practice, this should work any 32 bit compiler and we can hope the optimzer generates efficient code.

"key" not found

◆ BinarySearch() [4/4]

template<class T >
int ON_ClassArray< T >::BinarySearch ( const T *  key,
int(*)(const T *, const T *)  compar,
int  count 
) const

◆ BinarySearchPtr() [1/2]

template<class T >
const T * ON_SimpleArray< T >::BinarySearchPtr ( const T *  key,
int(*)(const T *, const T *)  compar 
) const

◆ BinarySearchPtr() [2/2]

template<class T >
const T * ON_SimpleArray< T >::BinarySearchPtr ( const T *  key,
int(*)(const T *, const T *)  compar,
int  count 
) const

◆ Capacity() [1/2]

template<class T >
int ON_SimpleArray< T >::Capacity

capacity of array

◆ Capacity() [2/2]

template<class T >
int ON_ClassArray< T >::Capacity

capacity of array

◆ ConstructDefaultElement()

template<class T >
void ON_ClassArray< T >::ConstructDefaultElement ( T *  p)
protected

use placement ( new(size_t,void*) ) to construct T in supplied memory

◆ Count() [1/2]

template<class T >
int ON_SimpleArray< T >::Count

query ///////////////////////////////////////////////////////////////

number of elements in array

◆ Count() [2/2]

template<class T >
int ON_ClassArray< T >::Count

query ///////////////////////////////////////////////////////////////

number of elements in array

◆ CrashTestHelper()

static int CrashTestHelper ( int  crash_type,
ON_TextLog textlog 
)
static

Description: Create a condition that should result in a crash. The intended use is for testing application crash handling. Parameters: crash_type - [in] 0: dereference nullptr data pointer 1: dereference bogus data pointer (0xCACAF00D) 2: dereference nullptr function pointer 3: dereference bogus function pointer (0xCACAF00D) 4: call abort() 5: call exit(99); 6: double divide by 0.0 - FPU exception well designed apps will mask the exception but detect the error 7: float divide by 0.0 - FPU exception well designed apps will mask the exception but detect the error 8: int divide by 0 - will crash 9: log(-1.0) - should call math error handler 10: double overflow - FPU exception well designed apps will mask the exception but detect the error 11: throw(123) - well designed apps with catch the exception before crashing Returns: Value of crash_type parameter.

Note: The code and calls are intentionally obtuse so that it is difficult for an optimizer to not perform the calculation.

< dereference nullptr pointer

< dereference bogus pointer

< call nullptr function pointer

< divide by zero

◆ CrashTestHelper_AllocationFailure()

static bool CrashTestHelper_AllocationFailure ( ON_TextLog textlog,
size_t  sz 
)
static

◆ CrashTestHelper_CallBoguslFuncPtr()

static int CrashTestHelper_CallBoguslFuncPtr ( ON_TextLog textlog,
int  crash_type,
int *  stack_ptr 
)
static

< sets ptr = nullptr

< dereferences bogus function pointer and crashes

◆ CrashTestHelper_CallNullFuncPtr()

static int CrashTestHelper_CallNullFuncPtr ( ON_TextLog textlog,
int  crash_type,
int *  stack_ptr 
)
static

< sets ptr = nullptr

< dereferences nullptr function pointer and crashes

◆ CrashTestHelper_DerefBogusIntPtr()

static int CrashTestHelper_DerefBogusIntPtr ( ON_TextLog textlog,
int  crash_type,
int *  stack_ptr 
)
static

< sets ptr = 0xCACAF00D

< dereferences bogus pointer and crashes

◆ CrashTestHelper_DerefNullIntPtr()

static int CrashTestHelper_DerefNullIntPtr ( ON_TextLog textlog,
int  crash_type,
int *  stack_ptr 
)
static

< sets ptr = nullptr

< dereferences nullptr pointer and crashes

◆ CrashTestHelper_DivideByDoubleZero()

static bool CrashTestHelper_DivideByDoubleZero ( ON_TextLog textlog,
const char *  zero 
)
static

◆ CrashTestHelper_DivideByFloatZero()

static bool CrashTestHelper_DivideByFloatZero ( ON_TextLog textlog,
const char *  zero 
)
static

◆ CrashTestHelper_DivideByIntZero()

static bool CrashTestHelper_DivideByIntZero ( ON_TextLog textlog,
const char *  zero 
)
static

◆ CrashTestHelper_DoubleOverflow()

static bool CrashTestHelper_DoubleOverflow ( ON_TextLog textlog,
const char *  sx,
const char *  sy 
)
static

◆ CrashTestHelper_GetBogusFuncPtr()

static void CrashTestHelper_GetBogusFuncPtr ( CRASHTEST__FUNCTION__POINTER__ pp)
static

◆ CrashTestHelper_GetBogusIntPtr()

static void CrashTestHelper_GetBogusIntPtr ( int **  pp)
static

◆ CrashTestHelper_GetNullFuncPtr()

static void CrashTestHelper_GetNullFuncPtr ( CRASHTEST__FUNCTION__POINTER__ pp)
static

◆ CrashTestHelper_GetNullIntPrt()

static void CrashTestHelper_GetNullIntPrt ( int **  pp)
static

◆ CrashTestHelper_LogNegativeNumber()

static bool CrashTestHelper_LogNegativeNumber ( ON_TextLog textlog,
const char *  minus_one 
)
static

◆ CrashTestHelper_StackOverflow()

static bool CrashTestHelper_StackOverflow ( ON_TextLog textlog,
int  depth = 0 
)
static

◆ CrashTestHelper_Throw()

static bool CrashTestHelper_Throw ( ON_TextLog textlog,
const char *  si 
)
static

◆ Create()

template<class T >
bool ON_SimpleFixedSizePool< T >::Create ( size_t  element_count_estimate,
size_t  block_element_count 
)

Description: Create a fixed size memory pool. Parameters: element_count_estimate - [in] (0 = good default) If you know how many elements you will need, pass that number here. It is better to slightly overestimate than to slightly underestimate. If you do not have a good estimate, then use zero. block_element_count - [in] (0 = good default) If block_element_count is zero, Create() will calculate a block size that is efficient for most applications. If you are an expert user and want to specify the number of blocks, then pass the number of elements per block here. When block_element_count > 0 and element_count_estimate > 0, the first block will be large enough element_count_estimate*sizeof(T) bytes; in this case do not ask for extraordinarily large amounts of contiguous heap. Remarks: You must call Create() on an unused ON_FixedSizePool or call Destroy() before calling create. Returns: True if successful and the pool can be used.

◆ CurrentElement()

template<class T >
T * ON_SimpleFixedSizePoolIterator< T >::CurrentElement

Returns: The most recently returned value from a call to FirstElement() or NextElement(). Remarks: Do not make any calls to FirstBlock() or NextBlock() when using FirstElement() and NextElement() to iterate through elements.

◆ DataCRC() [1/2]

template<class T >
ON__UINT32 ON_SimpleArray< T >::DataCRC ( ON__UINT32  current_remainder) const

◆ DataCRC() [2/2]

template<class T >
ON__UINT32 ON_ObjectArray< T >::DataCRC ( ON__UINT32  current_remainder) const

The "this->" in this->m_count and this->m_a are needed for gcc 4 to compile.

◆ Destroy() [1/3]

template<class T >
void ON_SimpleArray< T >::Destroy

onfree any memory and set count and capacity to zero

◆ Destroy() [2/3]

template<class T >
void ON_ClassArray< T >::Destroy

onfree any memory and set count and capacity to zero

◆ Destroy() [3/3]

template<class T >
void ON_SimpleFixedSizePool< T >::Destroy

Description: Destroy the pool and free all the heap. The pool cannot be used again until Create() is called.

◆ DestroyElement()

template<class T >
void ON_ClassArray< T >::DestroyElement ( T &  x)
protected

◆ Element()

template<class T >
T * ON_SimpleFixedSizePool< T >::Element ( size_t  element_index) const

Description: Get the i-th element in the pool. Parameters: element_index - [in] Returns: A pointer to the i-th element. The first element has index = 0 and is the element returned by the first call to AllocateElement(). The last element has index = ElementCount()-1. If i is out of range, null is returned. Remarks: It is faster to use FirstElement() and NextElement() to iterate through the entire list of elements. This function is relatively efficient when there are a few large blocks in the pool or element_index is small compared to the number of elements in the first few blocks.

If ReturnElement() is not used or AllocateElement() calls to are made after any use of ReturnElement(), then the i-th element is the one returned by the (i+1)-th call to AllocateElement().

◆ ElementIndex()

template<class T >
size_t ON_SimpleFixedSizePool< T >::ElementIndex ( T *  element_ptr) const

◆ EmergencyDestroy() [1/2]

template<class T >
void ON_SimpleArray< T >::EmergencyDestroy ( void  )

emergency bailout ///////////////////////////////////////////////////

emergency destroy ///////////////////////////////////////////////////

call only when memory used by this array may have become invalid for reasons beyond your control. EmergencyDestroy() zeros anything that could possibly cause ~ON_SimpleArray() to crash.

◆ EmergencyDestroy() [2/2]

template<class T >
void ON_ClassArray< T >::EmergencyDestroy ( void  )

emergency bailout ///////////////////////////////////////////////////

emergency destroy ///////////////////////////////////////////////////

call only when memory used by this array may have become invalid for reasons beyond your control. EmergencyDestroy() zeros anything that could possibly cause ~ON_ClassArray() to crash.

◆ Empty() [1/2]

template<class T >
void ON_SimpleArray< T >::Empty

Sets count to 0, leaves capacity untouched.

Removes elements for which predicate returns true. Decrements count by removed items. Does not change capacity

◆ Empty() [2/2]

template<class T >
void ON_ClassArray< T >::Empty

Sets count to 0, leaves capacity untouched.

This call to memset is ok even when T has a vtable because in-place construction is used later.

◆ First() [1/2]

template<class T >
const T * ON_SimpleArray< T >::First

◆ First() [2/2]

template<class T >
const T * ON_ClassArray< T >::First

◆ FirstBlock()

template<class T >
T * ON_SimpleFixedSizePoolIterator< T >::FirstBlock ( size_t *  block_element_count)

Description: Get a pointer to the first element in the first block. Parameters: block_element_count - [out] (can be null) If not null, the number of elements allocated from the first block is returned in block_element_count. Note that if you have used ReturnElement(), some of these elements may have been returned. Example: The loop will iterate through all the blocks.

/ iterate through all blocks in the pool size_t block_element_count = 0; for ( void* p = FirstBlock(&block_element_count); 0 != p; p = NextBlock(&block_element_count) ) { ElementType* e = (ElementType*)p; for ( size_t i = 0; i < block_element_count; i++, e = ((const char*)e) + SizeofElement() ) { ... } }

Returns: The first block when iterating the list of blocks. Remarks: The heap for a fixed size memory pool is simply a linked list of blocks. FirstBlock() and NextBlock() can be used to iterate through the list of blocks.

Do not make any calls to FirstElement() or NextElement() when using FirstBlock() and NextBlock() to iterate through blocks.

◆ FirstElement() [1/2]

template<class T >
T * ON_SimpleFixedSizePoolIterator< T >::FirstElement

Description: Get the first element when iterating through the list of elements. Parameters: element_index - [in] If you use the version of FirstElement() that has an element_index parameter, then the iteration begins at that element. Example: The loop will iterate through all the elements returned from AllocateElement(), including any that have be returned to the pool using ReturnElement().

/ iterate through all elements in the pool / This iteration will go through TotalElements() items. for ( void* p = FirstElement(); 0 != p; p = NextElement() ) { / If you are not using ReturnElement(), then you may process / "p" immediately. If you have used ReturnElement(), then you / must check some value in p located after the first sizeof(void*) / bytes to see if p is active. if ( p is not active ) continue;

... process p }

Returns: The first element when iterating through the list of elements. Remarks: FirstElement() and NextElement() will return elements that have been returned to the pool using ReturnElement(). If you use ReturnElement(), then be sure to mark the element so it can be identified and skipped.

Do not make any calls to FirstBlock() or NextBlock() when using FirstElement() and NextElement() to iterate through elements.

◆ FirstElement() [2/2]

template<class T >
T * ON_SimpleFixedSizePoolIterator< T >::FirstElement ( size_t  element_index)

◆ HeapSort() [1/3]

template<class T >
bool ON_SimpleArray< T >::HeapSort ( int(*)(const T *, const T *)  compar)

Sorts the array using the heap sort algorithm. QuickSort() is generally the better choice.

◆ HeapSort() [2/3]

template<class T >
bool ON_ClassArray< T >::HeapSort ( int(*)(const T *, const T *)  compar)
virtual

◆ HeapSort() [3/3]

template<class T >
bool ON_ObjectArray< T >::HeapSort ( int(*)(const T *, const T *)  compar)
virtual

virtual ON_ClassArray<T> override that calls MemoryRelocate on each element after the heap sort. QuickSort() is generally the better choice.

The "this->" in this->m_count and this->m_a are needed for gcc 4 to compile.

The MemoryRelocate step is required to synch userdata back pointers so the user data destructor will work correctly.

Reimplemented from ON_ClassArray< T >.

◆ Insert() [1/2]

template<class T >
void ON_SimpleArray< T >::Insert ( int  i,
const T &  x 
)

Insert copy of element. Uses memmove() to perform any necessary moving. Increases count by 1.

x is in the block of memory about to be reallocated.

◆ Insert() [2/2]

template<class T >
void ON_ClassArray< T >::Insert ( int  i,
const T &  x 
)

Insert called with a reference uses operator =.

Insert copy of element. Uses memmove() to perform any necessary moving. Increases count by 1.

This call to memset is ok even when T has a vtable because in-place construction is used later.

< uses T::operator=() to copy x to array

◆ InsertInSortedList() [1/4]

template<class T >
int ON_SimpleArray< T >::InsertInSortedList ( const T &  e,
int(*)(const T *, const T *)  compar 
)

◆ InsertInSortedList() [2/4]

template<class T >
int ON_ClassArray< T >::InsertInSortedList ( const T &  e,
int(*)(const T *, const T *)  compar 
)

◆ InsertInSortedList() [3/4]

template<class T >
int ON_SimpleArray< T >::InsertInSortedList ( const T &  e,
int(*)(const T *, const T *)  compar,
int  count 
)

◆ InsertInSortedList() [4/4]

template<class T >
int ON_ClassArray< T >::InsertInSortedList ( const T &  e,
int(*)(const T *, const T *)  compar,
int  count 
)

◆ KeepArray() [1/2]

template<class T >
T * ON_SimpleArray< T >::KeepArray

Description: Expert user tool to take charge of the memory used by the dynamic array. Returns: A pointer to the array and zeros out this class. The returned pointer is on the heap and must be deallocated by calling onfree().

◆ KeepArray() [2/2]

template<class T >
T * ON_ClassArray< T >::KeepArray

returns pointer to array and zeros out this class. Caller is responsible for calling destructor on each element and then using onfree() to release array memory. E.g.,

for (int i=capacity;i>=0;i–) { array[i].~T(); } onfree(array);

◆ Last() [1/2]

template<class T >
const T * ON_SimpleArray< T >::Last

◆ Last() [2/2]

template<class T >
const T * ON_ClassArray< T >::Last

◆ MemSet()

template<class T >
void ON_SimpleArray< T >::MemSet ( unsigned char  value)

Sets all bytes in array memory to value. Count and capacity are not changed.

◆ Move() [1/2]

template<class T >
void ON_SimpleArray< T >::Move ( int  dest_i,
int  src_i,
int  ele_cnt 
)
protected

implementation //////////////////////////////////////////////////////

array operations ////////////////////////////////////////////////////

private function for moving blocks of array memory caller is responsible for updating m_count.

◆ Move() [2/2]

template<class T >
void ON_ClassArray< T >::Move ( int  dest_i,
int  src_i,
int  ele_cnt 
)
protected

implementation //////////////////////////////////////////////////////

array operations ////////////////////////////////////////////////////

private function for moving blocks of array memory caller is responsible for updating m_count and managing destruction/creation.

This call to memmove is ok, even when T is a class with a vtable because the it doesn't change the vtable for the class. Classes that have back pointers, like ON_UserData, are handled elsewhere and cannot be in ON_ClassArray<>s.

◆ NewCapacity() [1/2]

template<class T >
int ON_SimpleArray< T >::NewCapacity

is < current Count(), then count is reduced to value. When the dynamic array needs to grow, this calculates the new value for m_capacity.

Note: This code appears in ON_SimpleArray<T>::NewCapacity() and ON_ClassArray<T>::NewCapacity(). Changes made to either function should be made to both functions. Because this code is template code that has to support dynamic linking and the code is defined in a header, I'm using copy-and-paste rather than a static.

This function returns 2*m_count unless that will result in an additional allocation of more than cap_size bytes. The cap_size concept was added in January 2010 because some calculations on enormous models were slightly underestimating the initial Reserve() size and then wasting gigabytes of memory.

cap_size = 128 MB on 32-bit os, 256 MB on 64 bit os

Growing the array will increase the memory use by more than cap_size.

◆ NewCapacity() [2/2]

template<class T >
int ON_ClassArray< T >::NewCapacity

is < current Count(), then count is reduced to value. When the dynamic array needs to grow, this calculates the new value for m_capacity.

Note: This code appears in ON_SimpleArray<T>::NewCapacity() and ON_ClassArray<T>::NewCapacity(). Changes made to either function should be made to both functions. Because this code is template code that has to support dynamic linking and the code is defined in a header, I'm using copy-and-paste rather than a static.

This function returns 2*m_count unless that will result in an additional allocation of more than cap_size bytes. The cap_size concept was added in January 2010 because some calculations on enormous models were slightly underestimating the initial Reserve() size and then wasting gigabytes of memory.

cap_size = 128 MB on 32-bit os, 256 MB on 64 bit os

Growing the array will increase the memory use by more than cap_size.

◆ NextBlock()

template<class T >
T * ON_SimpleFixedSizePoolIterator< T >::NextBlock ( size_t *  block_element_count)

Description: Get the next block when iterating through the blocks. Parameters: block_element_count - [out] (can be null) If not null, the number of elements allocated from the block is returned in block_element_count. Note that if you have used ReturnElement(), some of these elements may have been returned. Example: See the FirstBlock() documentation. Returns: The next block when iterating through the blocks. Remarks: Do not make any calls to FirstElement() or NextElement() when using FirstBlock() and NextBlock() to iterate through blocks.

◆ NextElement()

template<class T >
T * ON_SimpleFixedSizePoolIterator< T >::NextElement

Description: Get the next element when iterating through the list of elements. If FirstElement() is not called, then the first call to NextElement() returns the first element. Example: See the FirstElement() documentation. Returns: The next element when iterating through the list of elements. Remarks: FirstElement() and NextElement() will return elements that have been returned to the pool using ReturnElement(). If you use ReturnElement(), then be sure to mark the element so it can be identified and skipped.

Do not make any calls to FirstBlock() or NextBlock() when using FirstElement() and NextElement() to iterate through elements.

◆ ON_2ndDerFromCurvature()

ON_DECL ON_3dVector ON_2ndDerFromCurvature ( ON_3dVector  D1,
ON_3dVector  K 
)

Description: Given the first derivative and a curvature, calculate the shortest possible second derivative such that a curve with the input first derivative and calculated second derivative would have the specified curvature. Parameters: D1 - [in] first derivative K - [in] curvature Returns: 2nd derivative. Remarks: You can add any multiple of the tangent to the returned second derivative without changing the curvature.

◆ ON_3rdDerFromJerk()

ON_DECL ON_3dVector ON_3rdDerFromJerk ( ON_3dVector  D1,
ON_3dVector  D2,
ON_3dVector  J 
)

Description: Given the first derivative, second derivative, and a jerk, calculate the shortest possible third derivative such that a curve with the input first derivative, input second derivative, and calculated third derivative would have the specified jerk. Parameters: D1 - [in] first derivative D2 - [in] second derivative J - [in] jerk Returns: 3rdd derivative. Remarks: You can add any multiple of the tangent to the returned third derivative without changing the jerk.

◆ ON_4thDerFromYank()

ON_DECL ON_3dVector ON_4thDerFromYank ( ON_3dVector  D1,
ON_3dVector  D2,
ON_3dVector  D3,
ON_3dVector  Y 
)

Description: Given the first derivative, second derivative, third derivative, and a yank, calculate the shortest possible forth derivative such that a curve with the input first derivative, input second derivative, input third derivative and calculated forth derivative would have the specified yank Parameters: D1 - [in] first derivative D2 - [in] second derivative D3 - [in] second derivative Y - [in] yank Returns: 4th derivative. Remarks: You can add any multiple of the tangent to the returned forth derivative without changing the yank.

◆ ON__PackTextureRectangles1()

bool ON__PackTextureRectangles1 ( ON_PackedTextureRectangle top,
const class ON_PackTextureRectanglesParameters packing_parameters 
)

do not export this function or declare it in a header file

◆ ON__PackTextureRectangles2()

bool ON__PackTextureRectangles2 ( ON_PackedTextureRectangle top,
const class ON_PackTextureRectanglesParameters packing_parameters 
)

do not export this function or declare it in a header file

◆ ON_AddIdPrefixToString()

const ON_DECL ON_wString ON_AddIdPrefixToString ( const ON_UUID  id,
const wchar_t *  separator,
const wchar_t *  source 
)

◆ ON_AddIdSuffixToString()

const ON_DECL ON_wString ON_AddIdSuffixToString ( const wchar_t *  source,
const wchar_t *  separator,
const ON_UUID  id 
)

◆ ON_Adjust2ndPointToDomain()

ON_DECL bool ON_Adjust2ndPointToDomain ( const ON_2dPoint First,
ON_2dPoint Second,
const ON_Interval  dom[2] 
)

Adjust the second point to be within the domains, when the first point is on the edge of on of the domains and some other conditions hold. This function is here because it is needed in several places. It is not meant for general use.

◆ ON_ArePointsOnLine()

ON_DECL int ON_ArePointsOnLine ( int  ,
bool  ,
int  ,
int  ,
const double *  ,
const ON_BoundingBox ,
const ON_Line ,
double   
)

returns 0 = no, 1 = yes, 2 = points are coincident and on line

◆ ON_ArePointsOnPlane()

ON_DECL int ON_ArePointsOnPlane ( int  ,
bool  ,
int  ,
int  ,
const double *  ,
const ON_BoundingBox ,
const ON_Plane ,
double   
)

returns 0 = no, 1 = yes, 2 = points are coincident and on line

◆ ON_Array_aA_plus_B() [1/2]

ON_DECL void ON_Array_aA_plus_B ( int  ,
double  ,
const double *  ,
const double *  ,
double *   
)

◆ ON_Array_aA_plus_B() [2/2]

ON_DECL void ON_Array_aA_plus_B ( int  ,
float  ,
const float *  ,
const float *  ,
float *   
)

◆ ON_ArrayDistance()

ON_DECL double ON_ArrayDistance ( int  ,
const double *  ,
const double *   
)

◆ ON_ArrayDistanceSquared()

ON_DECL double ON_ArrayDistanceSquared ( int  ,
const double *  ,
const double *   
)

◆ ON_ArrayDotDifference()

ON_DECL double ON_ArrayDotDifference ( int  ,
const double *  ,
const double *  ,
const double *   
)

◆ ON_ArrayDotProduct() [1/2]

ON_DECL double ON_ArrayDotProduct ( int  ,
const double *  ,
const double *   
)

◆ ON_ArrayDotProduct() [2/2]

ON_DECL float ON_ArrayDotProduct ( int  ,
const float *  ,
const float *   
)

◆ ON_ArrayMagnitude()

ON_DECL double ON_ArrayMagnitude ( int  ,
const double *   
)

◆ ON_ArrayMagnitudeSquared()

ON_DECL double ON_ArrayMagnitudeSquared ( int  ,
const double *   
)

◆ ON_ArrayScale() [1/2]

ON_DECL void ON_ArrayScale ( int  ,
double  ,
const double *  ,
double *   
)

◆ ON_ArrayScale() [2/2]

ON_DECL void ON_ArrayScale ( int  ,
float  ,
const float *  ,
float *   
)

◆ ON_Base32ToString() [1/3]

ON_DECL bool ON_Base32ToString ( const ON_SimpleArray< unsigned char > &  base32_digits,
ON_String sBase32 
)

Description: Convert a list of base32 digits into a string form. Parameters: base32_digits - [in] base32_digit_count - [in] base32_digits[] is an array of length base32_digit_count. Each element is in the range 0 to 31. sBase32 - [out] sBase32[] must be an array of length base32_digit_count+1 or 2, whichever is greater. The string representation of the base 32 number will be put in this string. A hash mark symbol (#) is used to indicate an error in the input value. The returned string is null terminated. Returns True if the input is valid. False if the input is not valid, in which case hash marks indicate the invalid entries.

◆ ON_Base32ToString() [2/3]

ON_DECL bool ON_Base32ToString ( const ON_SimpleArray< unsigned char > &  base32_digits,
ON_wString sBase32 
)

◆ ON_Base32ToString() [3/3]

ON_DECL bool ON_Base32ToString ( const unsigned char *  base32_digits,
int  base32_digit_count,
char *  sBase32 
)

◆ ON_BendBrepFace()

ON_DECL ON_NurbsSurface* ON_BendBrepFace ( const ON_BrepFace face0,
const ON_SimpleArray< ON_BendFaceConstraint > &  constraints,
double  tolerance,
double  time_limit,
ON_NurbsSurface bent_surface,
ON_TextLog text_log = 0 
)

Description: Calculate a surface that can be used to deform a brep face so that is has a new boundary. Parameters: face0 - [in] existing valid face constraints - [in] Desired face boundary locations, surface singularities, and closed/periodic surface constraints. tolerance - [in] Desired tolerance time_limit - [in] If the deformation is extreme, it can take a long time to calculate the result. If time_limit > 0, then the value specifies the maximum amount of time in seconds you want to spend before giving up. bent_surface - [in] If bent_surface is not null, the result will be stored in this surface.

If bent_surface is null or is not a valid NURBS surface, then the face0->NurbForm() will be used as the starting surface.

If bent_surface is not null and a valid NURBS surface, then it will be used as the starting surface. In this case the knots must be set and the domain must include the range of all face0's trim curves. text_log - [in] optional parameter to use when debugging Returns: A surface that can be used to update face0.

◆ ON_BeyondSinglePrecision()

ON_DECL bool ON_BeyondSinglePrecision ( const ON_BoundingBox bbox,
ON_Xform xform 
)

Description: Determine if an object is too large or too far from the origin for single precision coordinates to be useful. Parameters: bbox - [in] Bounding box of an object with single precision coordinates. An ON_Mesh is an example of an object with single precision coordinates. xform - [out] If this function returns false and xform is not null, then the identity transform is returned. If this function returns true and xform is not null, then the transform moves the region contained in bbox to a location where single precision coordinates will have enough information for the object to be useful. Returns: true: The region contained in bbox is too large or too far from the origin for single precision coordinates to be useful. false: A single precision object contained in bbox will be satisfactory for common calculations.

◆ ON_BinarySearch2dexArray()

const ON_DECL ON_2dex* ON_BinarySearch2dexArray ( int  key_i,
const ON_2dex base,
size_t  nel 
)

◆ ON_BinarySearch2udexArray()

const ON_DECL ON_2udex* ON_BinarySearch2udexArray ( unsigned int  key_i,
const ON_2udex base,
size_t  nel 
)

◆ ON_BinarySearchArrayFirst2udex()

const ON_DECL void* ON_BinarySearchArrayFirst2udex ( ON_2udex  key,
const void *  base,
size_t  count,
size_t  sizeof_element,
size_t  key_offset 
)

◆ ON_BinarySearchArrayFirstUnsignedInt()

const ON_DECL void* ON_BinarySearchArrayFirstUnsignedInt ( unsigned int  key,
const void *  base,
size_t  count,
size_t  sizeof_element,
size_t  key_offset 
)

◆ ON_BinarySearchArrayForUnsingedInt()

const ON_DECL void* ON_BinarySearchArrayForUnsingedInt ( unsigned int  key,
const void *  base,
size_t  count,
size_t  sizeof_element,
size_t  key_offset 
)

◆ ON_BinarySearchDoubleArray()

const ON_DECL double* ON_BinarySearchDoubleArray ( double  key,
const double *  base,
size_t  nel 
)

◆ ON_BinarySearchIntArray()

const ON_DECL int* ON_BinarySearchIntArray ( int  key,
const int *  base,
size_t  nel 
)

◆ ON_BinarySearchUnsignedIntArray()

const ON_DECL unsigned int* ON_BinarySearchUnsignedIntArray ( unsigned int  key,
const unsigned int *  base,
size_t  nel 
)

◆ ON_BinomialCoefficient()

ON_DECL double ON_BinomialCoefficient ( int  i,
int  j 
)

Description: Compute a binomial coefficient. Parameters: i - [in] j - [in] Returns: (i+j)!/(i!j!), if 0 <= i and 0 <= j, and 0 otherwise. See Also: ON_TrinomialCoefficient() Remarks: If (i+j) <= 52, this function is fast and returns the exact value of the binomial coefficient.

For (i+j) > 52, the coefficient is computed recursively using the formula bc(i,j) = bc(i-1,j) + bc(i,j-1). For (i+j) much larger than 60, this is inefficient. If you need binomial coefficients for large i and j, then you should probably be using something like Stirling's Formula.
(Look up "Stirling" or "Gamma function" in a calculus book.)

◆ ON_BoundingBoxTolerance()

ON_DECL double ON_BoundingBoxTolerance ( int  dim,
const double *  bboxmin,
const double *  bboxmax 
)

◆ ON_BrepBox()

ON_DECL ON_Brep* ON_BrepBox ( const ON_3dPoint box_corners,
ON_Brep pBrep = nullptr 
)

Description: Get an ON_Brep definition of a box. Parameters: box_corners - [in] 8 points defining the box corners arranged as the vN labels indicate.

 v7_______e6_____v6
  |\             |\
  | e7           | e5
  |  \ ______e4_____\ 
 e11  v4         |   v5
  |   |        e10   |
  |   |          |   |
 v3---|---e2----v2   e9
  \   e8         \   |
   e3 |           e1 |
    \ |            \ |
     \v0_____e0_____\v1

pBrep - [in] if not nullptr, this brep will be used and returned. Returns: An ON_Brep representation of the box with topology

edge vertices m_E[ 0] m_V[0], m_V[1] m_E[ 1] m_V[1], m_V[2] m_E[ 2] m_V[2], m_V[3] m_E[ 3] m_V[3], m_V[0] m_E[ 4] m_V[4], m_V[5] m_E[ 5] m_V[5], m_V[6] m_E[ 6] m_V[6], m_V[7] m_E[ 7] m_V[7], m_V[4] m_E[ 8] m_V[0], m_V[4] m_E[ 9] m_V[1], m_V[5] m_E[10] m_V[2], m_V[6] m_E[11] m_V[3], m_V[7]

face boundary edges m_F[0] +m_E[0] +m_E[9] -m_E[4] -m_E[8] m_F[1] +m_E[1] +m_E[10] -m_E[5] -m_E[9] m_F[2] +m_E[2] +m_E[11] -m_E[6] -m_E[10] m_F[3] +m_E[3] +m_E[8] -m_E[7] -m_E[11] m_F[4] -m_E[3] -m_E[2] -m_E[1] -m_E[0] / m_F[5] +m_E[4] +m_E[5] +m_E[6] +m_E[7]

◆ ON_BrepCone()

ON_DECL ON_Brep* ON_BrepCone ( const ON_Cone cone,
bool  bCapBottom,
ON_Brep pBrep = nullptr 
)

Description: Get an ON_Brep definition of a cone. Parameters: cylinder - [in] cylinder.IsFinite() must be true bCapBase - [in] if true the base of the cone should be capped. pBrep - [in] if not nullptr, this brep will be used and returned. Returns: An ON_Brep representation of the cone with a single face for the cone, an edge along the cone seam, and vertices at the base and apex ends of this seam edge. The optional cap is a single face with one circular edge starting and ending at the base vertex.

◆ ON_BrepConeEdge()

ON_DECL int ON_BrepConeEdge ( ON_Brep brep,
int  edge_index,
ON_3dPoint  apex_point 
)

Description: Cone an edge in a brep. Parameters: brep - [in/out] edge_index - [in] index of face to extrude. apex_point - [in] apex of cone. Returns: @untitled table 0 failure 1 successful See Also: ON_BrepExtrudeFace ON_BrepExtrudeLoop ON_BrepExtrudeEdge ON_BrepExtrudeVertex ON_BrepConeFace ON_BrepConeLoop ON_BrepConeEdge Remarks: The new face is appended to brep.m_F[].

◆ ON_BrepConeFace()

ON_DECL int ON_BrepConeFace ( ON_Brep brep,
int  face_index,
ON_3dPoint  apex_point 
)

Description: Cone a face in a brep. Parameters: brep - [in/out] face_index - [in] index of face to extrude. apex_point - [in] apex of cone. Returns: @untitled table 0 failure 1 successful See Also: ON_BrepExtrudeFace ON_BrepExtrudeLoop ON_BrepExtrudeEdge ON_BrepExtrudeVertex ON_BrepConeFace ON_BrepConeLoop ON_BrepConeEdge Remarks: The new faces are appended to brep.m_F[].

◆ ON_BrepConeLoop()

ON_DECL bool ON_BrepConeLoop ( ON_Brep brep,
int  loop_index,
ON_3dPoint  apex_point 
)

Description: Cone a loop in a brep. Parameters: brep - [in/out] loop_index - [in] index of face to extrude. apex_point - [in] apex of cone. Returns: @untitled table 0 failure 1 successful See Also: ON_BrepExtrudeFace ON_BrepExtrudeLoop ON_BrepExtrudeEdge ON_BrepExtrudeVertex ON_BrepConeFace ON_BrepConeLoop ON_BrepConeEdge Remarks: The new faces are appended to brep.m_F[].

◆ ON_BrepCylinder()

ON_DECL ON_Brep* ON_BrepCylinder ( const ON_Cylinder cylinder,
bool  bCapBottom,
bool  bCapTop,
ON_Brep pBrep = nullptr 
)

Description: Get an ON_Brep definition of a cylinder. Parameters: cylinder - [in] cylinder.IsFinite() must be true bCapBottom - [in] if true end at cylinder.m_height[0] should be capped bCapTop - [in] if true end at cylinder.m_height[1] should be capped pBrep - [in] if not nullptr, this brep will be used and returned. Returns: An ON_Brep representation of the cylinder with a single face for the cylinder, an edge along the cylinder seam, and vertices at the bottom and top ends of this seam edge. The optional bottom/top caps are single faces with one circular edge starting and ending at the bottom/top vertex.

◆ ON_BrepExtrude()

ON_DECL bool ON_BrepExtrude ( ON_Brep brep,
const ON_Curve path_curve,
bool  bCap = true 
)

Description: Extrude a brep Parameters: brep - [in/out] path_curve - [in] path to extrude along. bCap - [in] if true, the extrusion is capped with a translation of the input brep. Returns: True if successful. See Also: ON_BrepExtrudeFace ON_BrepExtrudeLoop ON_BrepExtrudeEdge ON_BrepExtrudeVertex ON_BrepConeFace ON_BrepConeLoop ON_BrepConeEdge Remarks: The new faces are appended to brep.m_F[]. It is the caller's responsibility to insure the result does not self intersect.

◆ ON_BrepExtrudeEdge()

ON_DECL int ON_BrepExtrudeEdge ( ON_Brep brep,
int  edge_index,
const ON_Curve path_curve 
)

Description: Extrude an edge in a brep. Parameters: brep - [in/out] edge_index - [in] index of face to extrude. path_curve - [in] path to extrude along. Returns: @untitled table 0 failure 1 successful See Also: ON_BrepExtrude ON_BrepExtrudeFace ON_BrepExtrudeLoop ON_BrepExtrudeVertex ON_BrepConeFace ON_BrepConeLoop ON_BrepConeEdge Remarks: The new face is appended to brep.m_F[].

◆ ON_BrepExtrudeFace()

ON_DECL int ON_BrepExtrudeFace ( ON_Brep brep,
int  face_index,
const ON_Curve path_curve,
bool  bCap = true 
)

Description: Extrude a face in a brep. Parameters: brep - [in/out] face_index - [in] index of face to extrude. path_curve - [in] path to extrude along. bCap - [in] if true, the extrusion is capped with a translation of the face being extruded. Example: Extrude a face along a vector.

    ON_Brep brep = ...;
    int face_index = ...;
    ON_3dVector v = ...;
    ON_LineCurve line_curve( ON_Line( ON_3dPoint::Origin, vector ) );
    ON_BrepExtrudeFace( brep, face_index, line_curve, true );

Returns: @untitled table 0 failure 1 successful - no cap added 2 successful - cap added as last face See Also: ON_BrepExtrude ON_BrepExtrudeLoop ON_BrepExtrudeEdge ON_BrepExtrudeVertex ON_BrepConeFace ON_BrepConeLoop ON_BrepConeEdge Remarks: The new faces are appended to brep.m_F[]. If a cap is requested it is the last face in the returned brep.m_F[]

◆ ON_BrepExtrudeLoop()

ON_DECL int ON_BrepExtrudeLoop ( ON_Brep brep,
int  loop_index,
const ON_Curve path_curve,
bool  bCap = true 
)

Description: Extrude a loop in a brep. Parameters: brep - [in/out] loop_index - [in] index of face to extrude. path_curve - [in] path to extrude along. bCap - [in] if true and the loop is closed, the extrusion is capped. Returns: @untitled table 0 failure 1 successful - no cap added 2 successful - cap added as last face See Also: ON_BrepExtrude ON_BrepExtrudeFace ON_BrepExtrudeEdge ON_BrepExtrudeVertex ON_BrepConeFace ON_BrepConeLoop ON_BrepConeEdge Remarks: The new faces are appended to brep.m_F[]. If a cap is requested it is the last face in the returned brep.m_F[]

◆ ON_BrepExtrudeVertex()

ON_DECL int ON_BrepExtrudeVertex ( ON_Brep brep,
int  vertex_index,
const ON_Curve path_curve 
)

Description: Extrude a vertex in a brep. Parameters: brep - [in/out] vertex_index - [in] index of vertex to extrude. path_curve - [in] path to extrude along. Returns: @untitled table 0 failure 1 successful See Also: ON_BrepExtrude ON_BrepExtrudeFace ON_BrepExtrudeLoop ON_BrepExtrudeEdge ON_BrepConeFace ON_BrepConeLoop ON_BrepConeEdge Remarks: The new vertex is appended to brep.m_V[] and the new edge is appended to brep.m_E[].

◆ ON_BrepFromMesh()

ON_DECL ON_Brep* ON_BrepFromMesh ( const ON_MeshTopology mesh_topology,
bool  bTrimmedTriangles = true,
ON_Brep pBrep = nullptr 
)

brep construction tools Description: Create a brep representation of a mesh. Parameters: mesh_topology - [in] bTrimmedTriangles - [in] if true, triangles in the mesh will be represented by trimmed planes in the brep. If false, triangles in the mesh will be represented by untrimmed singular bilinear NURBS surfaces in the brep. pBrep - [in] If not nullptr, this the mesh representation will be put into this brep. Example:

      ON_Mesh mesh = ...;
      ON_Brep* pBrep = ON_BrepFromMesh( mesh.Topology() );
      ...
      delete pBrep;

See Also ON_BrepFromMesh( const ON_Mesh& mesh, ... );

◆ ON_BrepFromMeshWithNgons()

ON_DECL ON_Brep* ON_BrepFromMeshWithNgons ( const ON_MeshTopology mesh_topology,
bool  bTrimmedTriangles,
bool  bUseNgonsIfTheyExist,
double  tolerance,
ON_Brep pBrep = nullptr 
)

Description: Create a brep representation of a mesh. Parameters: mesh_topology - [in] bTrimmedTriangles - [in] if true, triangles in the mesh will be represented by trimmed planes in the brep. If false, triangles in the mesh will be represented by untrimmed singular bilinear NURBS surfaces in the brep. bUseNgonsIfTheyExist - [in] if the mesh has ngons and bUseNgonsIfTheyExist is true then trimmed planes will be created for the ngons regardless of bTrimmedTriangles. tolerance - [in] used to determine if an ngon is planar. pBrep - [in] If not nullptr, this the mesh representation will be put into this brep. Example:

      ON_Mesh mesh = ...;
      ON_Brep* pBrep = ON_BrepFromMesh( mesh.Topology() );
      ...
      delete pBrep;

See Also ON_BrepFromMesh( const ON_Mesh& mesh, ... );

◆ ON_BrepMergeAllEdges()

ON_DECL void ON_BrepMergeAllEdges ( ON_Brep B)

Merges all possible edges.

◆ ON_BrepMergeFaces() [1/2]

ON_DECL bool ON_BrepMergeFaces ( ON_Brep B)

◆ ON_BrepMergeFaces() [2/2]

ON_DECL int ON_BrepMergeFaces ( ON_Brep B,
int  fid0,
int  fid1 
)

These merge adjacent faces that have the same underlying surface.

◆ ON_BrepQuadSphere()

ON_DECL ON_Brep* ON_BrepQuadSphere ( const ON_3dPoint Center,
double  radius,
ON_Brep pBrep = nullptr 
)

Description: Get an ON_Brep definition of a sphere. Parameters: Center - [in] Center of sphere radius - [int] Radius of sphere pBrep - [in] if not nullptr, this brep will be used and returned. Returns: An ON_Brep representation of the sphere with six similar faces, each an untrimmed rational quadratic surface

◆ ON_BrepRemoveSlits()

ON_DECL bool ON_BrepRemoveSlits ( ON_BrepFace F)

This removes all slit trims from F that are not joined to another face. Unlike ON_Brep::RemoveSlits(), this will remove slit pairs from a loop in cases that will result in the creation of more loops. Caller is responsible for calling ON_Brep::Compact() to get rid of deleted trims and loops.

◆ ON_BrepRevSurface()

ON_DECL ON_Brep* ON_BrepRevSurface ( ON_RevSurface *&  pRevSurface,
bool  bCapStart,
bool  bCapEnd,
ON_Brep pBrep = nullptr 
)

Description: Get an ON_Brep form of a surface of revolution. Parameters: pRevSurface - [in] pointer to a surface of revolution. The brep will manage this pointer and delete it in ~ON_Brep. bCapStart - [in] if true, the start of the revolute is not on the axis of revolution, and the surface of revolution is closed, then a circular cap will be added to close of the hole at the start of the revolute. bCapEnd - [in] if true, the end of the revolute is not on the axis of revolution, and the surface of revolution is closed, then a circular cap will be added to close of the hole at the end of the revolute. pBrep - [in] if not nullptr, this brep will be used and returned. Returns: @untitled table true successful false brep cannot be created from this surface. Remarks: The surface class must be created with new because it will be destroyed with the delete operator in ~ON_Brep.

◆ ON_BrepSphere()

ON_DECL ON_Brep* ON_BrepSphere ( const ON_Sphere sphere,
ON_Brep pBrep = nullptr 
)

Description: Get an ON_Brep definition of a sphere. Parameters: sphere - [in] pBrep - [in] if not nullptr, this brep will be used and returned. Returns: An ON_Brep representation of the sphere with a single face, a single edge along the seam, and vertices at the north and south poles.

◆ ON_BrepTorus()

ON_DECL ON_Brep* ON_BrepTorus ( const ON_Torus torus,
ON_Brep pBrep = nullptr 
)

Description: Get an ON_Brep definition of a torus. Parameters: torus - [in] pBrep - [in] if not nullptr, this brep will be used and returned. Returns: An ON_Brep representation of the torus with a single face a two edges along the seams.

◆ ON_BrepTrimmedPlane() [1/2]

ON_DECL ON_Brep* ON_BrepTrimmedPlane ( const ON_Plane plane,
const ON_Curve boundary,
ON_Brep pBrep = nullptr 
)

Description: Create an ON_Brep trimmed plane. Parameters: plane - [in] plane that will be trimmed. boundary - [in] a simple (no self intersections) closed curve that defines the outer boundary of the trimmed plane. This curve is copied for use in the brep. pBrep - [in] if not nullptr, this brep will be used and returned. Returns: An ON_Brep representation of the trimmed plane with a single face. See Also: ON_Brep::NewPlanarFaceLoop()

◆ ON_BrepTrimmedPlane() [2/2]

ON_DECL ON_Brep* ON_BrepTrimmedPlane ( const ON_Plane plane,
ON_SimpleArray< ON_Curve * > &  boundary,
bool  bDuplicateCurves = true,
ON_Brep pBrep = nullptr 
)

Description: Get an ON_Brep definition of a trimmed plane. Parameters: plane - [in] plane that will be trimmed. boundary - [in] a list of 3d curves that form a simple (no self intersections) closed curve that defines the outer boundary of the trimmed plane. bDuplicateCurves - [in] if true, duplicates of the curves in the boundary array are used in the brep. If false the curves in the boundary array are used in the brep and the brep's destructor will delete the curves. pBrep - [in] if not nullptr, this brep will be used and returned. Returns: An ON_Brep representation of the trimmed plane with a single face. See Also: ON_Brep::NewPlanarFaceLoop()

◆ ON_BrepWedge()

ON_DECL ON_Brep* ON_BrepWedge ( const ON_3dPoint corners,
ON_Brep pBrep = nullptr 
)

Description: Get an ON_Brep definition of a wedge. Parameters: corners - [in] 6 points defining the box corners arranged as the vN labels indicate.

            /v5    
           /|\       
          / | \     
         e5 |  e4   
        /   e8  \     
       /__e3_____\  
     v3|    |    |v4     
       |    |    |       
       |    /v2  |   
       e6  / \   e7   
       |  /   \  |   
       | e2    e1|   
       |/       \|     
       /____e0___\  
     v0           v1

pBrep - [in] if not nullptr, this brep will be used and returned. Returns: An ON_Brep representation of the wedge with topology

edge vertices m_E[ 0] m_V[0], m_V[1] m_E[ 1] m_V[1], m_V[2] m_E[ 2] m_V[2], m_V[0] m_E[ 3] m_V[3], m_V[4] m_E[ 4] m_V[4], m_V[5] m_E[ 5] m_V[5], m_V[0] m_E[ 6] m_V[0], m_V[3] m_E[ 7] m_V[1], m_V[4] m_E[ 8] m_V[2], m_V[5]

face boundary edges m_F[0] +m_E[0] +m_E[7] -m_E[3] -m_E[6] m_F[1] +m_E[1] +m_E[8] -m_E[4] -m_E[7] m_F[2] +m_E[2] +m_E[6] -m_E[5] -m_E[8] m_F[3] +m_E[3] +m_E[8] -m_E[7] -m_E[11] m_F[4] -m_E[2] -m_E[1] -m_E[0] m_F[5] +m_E[3] +m_E[4] +m_E[5]

◆ ON_BsplineControlPointSpans()

const ON_DECL ON_2dex ON_BsplineControlPointSpans ( int  order,
int  control_point_count,
int  control_point_index 
)

Get the indices of the B-spline spans where the specified control point is active. Note that a B-spline with n control points has (n-degree) many spans. If 0 &lt= span_index < (n-degree), then CV(span_index), ..., CV(span_index+degree) and {knot[span_index], ..., knot[span_index+2*degree-1]} are the control points and knots that are active in that span. The domain of the span is [knot[span_index+degree-1], knot[span_index+degree]].

Parameters
orderB-spline order. order >= 2 (order = degree + 1)
control_point_countNumber of B-spline control points. control_point_count >= order
control_point_index0 <= control_point_index < control_point_count
Returns
If the input is valid, then the spans whose index satisfies ON_2dex.i <= span_index < ON_2dex.j use the specified control point. If the iput is not valid, then ON_2dex(0,0) is returned.

◆ ON_BsplineControlPointSupport()

const ON_DECL ON_Interval ON_BsplineControlPointSupport ( int  order,
int  control_point_count,
const double *  knots,
int  control_point_index 
)

Get the interval in the B-spline domain where the control point is active. The domain = [knots[order-2], knots[control_point_count-1]]. The returned interval will be in domain and are the parameters where the control point influnces the value of the B-spline.

Parameters
orderOrder of the B-spline knot vector. order >= 2 (order = degree + 1)
control_point_countNumber of B-spline control points. control_point_count >= order
knotsknots[] is the B-spline knot vector and is an array of (order + control_point_count - 2) doubles.
control_point_index0 <= control_point_index < control_point_count
Returns
The interval in the domain where the control point is active.

◆ ON_ChangeRationalBezierCurveWeights()

ON_DECL bool ON_ChangeRationalBezierCurveWeights ( int  dim,
int  order,
int  cvstride,
double *  cv,
int  i0,
double  w0,
int  i1,
double  w1 
)

Description: Use a combination of scaling and reparameterization to set two rational Bezier weights to specified values. Parameters: dim - [in] order - [in] cvstride - [in] ( >= dim+1) cv - [in/out] homogeneous rational control points i0 - [in] w0 - [in] i1 - [in] w1 - [in] The i0-th cv will have weight w0 and the i1-th cv will have weight w1. If v0 and v1 are the cv's input weights, then v0, v1, w0 and w1 must all be nonzero, and w0*v0 and w1*v1 must have the same sign. Returns: true if successful Remarks: The equations s * r^i0 = w0/v0 s * r^i1 = w1/v1 determine the scaling and reparameterization necessary to change v0,v1 to w0,w1.

If the input Bezier has control vertices {B_0, ..., B_d}, then the output Bezier has control vertices {s*B_0, ... s*r^i * B_i, ..., s*r^d * B_d}.

◆ ON_ChangeRationalNurbsCurveEndWeights()

ON_DECL bool ON_ChangeRationalNurbsCurveEndWeights ( int  dim,
int  order,
int  cv_count,
int  cvstride,
double *  cv,
double *  knot,
double  w0,
double  w1 
)

Description: Use a combination of scaling and reparameterization to set the end weights to the specified values. This Parameters: dim - [in] order - [in] cvstride - [in] (>=dim+1) cv - [in/out] homogeneous rational control points knot - in/out w0 - [in] w1 - [in] The first cv will have weight w0 and the last cv will have weight w1. If v0 and v1 are the cv's input weights, then v0, v1, w0 and w1 must all be nonzero, and w0*v0 and w1*v1 must have the same sign. Returns: true if successful See Also: ON_ReparameterizeRationalNurbsCurve

◆ ON_ClampKnotVector() [1/2]

ON_DECL bool ON_ClampKnotVector ( int  ,
int  ,
double *  ,
int   
)

◆ ON_ClampKnotVector() [2/2]

ON_DECL bool ON_ClampKnotVector ( int  ,
int  ,
int  ,
int  ,
double *  ,
double *  ,
int   
)

◆ ON_ClassVtable()

ON_DECL struct ON_Vtable* ON_ClassVtable ( void *  p)

Description: Expert user function to get a pointer to a class's vtable. Parameters: pClass - [in] a class that has a vtable. If you pass a class that does not have a vtable, then the returned pointer is garbage. Returns: A pointer to the vtable.

◆ ON_ClearWorkerThreadContext()

ON_DECL ON__UINT64 ON_ClearWorkerThreadContext ( )

Description: Clear all worker thread context information. Returns: 0: No worker thread context was set. >0: Serial number of the worker thread context that was cleared.

◆ ON_ClosedCurveOrientation() [1/2]

ON_DECL int ON_ClosedCurveOrientation ( const ON_Curve curve,
const ON_Plane plane 
)

◆ ON_ClosedCurveOrientation() [2/2]

ON_DECL int ON_ClosedCurveOrientation ( const ON_Curve curve,
const ON_Xform xform 
)

Description: Determine the orientation (counterclockwise or clockwise) of a closed planar curve. Parameters: curve - [in] simple (no self intersections) closed planar curve xform - [in] Transformation to map the curve to the xy plane. If the curve is parallel to the xy plane, you may pass nullptr. plane - [in] If curve is on plane then determine the orientation in relation to plane's orientation. Returns: +1: The curve's orientation is counter clockwise in the xy plane. -1: The curve's orientation is clockwise in the xy plane. 0: Unable to compute the curve's orientation.

◆ ON_ClosestPointAngle()

ON_DECL double ON_ClosestPointAngle ( const ON_Line ,
const ON_Curve ,
ON_Interval  ,
const ON_3dPoint ,
ON_3dPoint ,
double *  ,
double *   
)

◆ ON_ClosestPointBetweenQuads()

ON_DECL bool ON_ClosestPointBetweenQuads ( const ON_3dPoint  A[4],
const ON_3dPoint  B[4],
double  a[4],
double  b[4] 
)

Description: Finds the barycentric coordinates of a pair of points on two triangles that are as close as any other pair. Parameters: A - [in] first quad corners, in order around the quad B - [in] second quad corners, in order around the quad a - [out] barycentric coordinates for quad A b - [out] barycentric coordinates for quad B

  If ON_ClosestPointBetweenQuads() returns true, then
  (a[0])*A[0] + (a[1])*A[1] + (a[2])*A[2] + (a[3])*A[3] is the point on  
  quad A and  (b[0])*B[0] + (b[1])*B[1] + (b[2])*B[2] + (b[3])*B[3] is
  the point on quad B.  It is 
  always the case that a[0]+a[1]+a[2]+a[3] = 1, a[0]>=0, a[1]>0, a[2]>0, a[3]>0.
  b[0]+b[1]+b[2]+b[3] = 1, b[0]>=0, b[1]>0, b[2]>0, b[3]>0
  The surface of Quad is defined to be the two triangle surfaces, 
  <Quad[0], Quad[1], Quad[2]> and <Quad[2], Quad[3], Quad[0]>.  It will always be
  the case that either q[1]=0 or q[3]=0.

Returns: True if successful.

◆ ON_ClosestPointBetweenTriangleAndQuad()

ON_DECL bool ON_ClosestPointBetweenTriangleAndQuad ( const ON_3dPoint  Tri[3],
const ON_3dPoint  Quad[4],
double  t[3],
double  q[4] 
)

Description: Finds the barycentric coordinates of a pair of points on two triangles that are as close as any other pair. Parameters: Tri - [in] triangle corners Quad - [in] quad corners in order around the quad t - [out] barycentric coordinates for Tri q - [out] barycentric coordinates for Quad

  If ON_ClosestPointBetweenTriangleAndQuad() returns true, then
  (t[0])*Tri[0] + (t[1])*Tri[1] + (t[2])*Tri[2] is the point on  
  Tri and  (q[0])*Quad[0] + (q[1])*Quad[1] + (q[2])*Quad[2] + (q[3])*Quad[3] is
  the point on Quad.  It is 
  always the case that t[0]+t[1]+t[2] = 1, t[0]>=0, t[1]>0, t[2]>0,
  q[0]+q[1]+q[2]+q[3] = 1, q[0]>=0, q[1]>0, q[2]>0, q[3].
  The surface of Quad is defined to be the two triangle surfaces, 
  <Quad[0], Quad[1], Quad[2]> and <Quad[2], Quad[3], Quad[0]>.  It will always be
  the case that either q[1]=0 or q[3]=0.

Returns: True if successful.

◆ ON_ClosestPointBetweenTriangles()

ON_DECL bool ON_ClosestPointBetweenTriangles ( const ON_3dPoint  A[3],
const ON_3dPoint  B[3],
double  a[3],
double  b[3] 
)

Description: Finds the barycentric coordinates of a pair of points on two triangles that are as close as any other pair. Parameters: A - [in] first triangle corners B - [in] second triangle corners a - [out] barycentric coordinates for triangle A b - [out] barycentric coordinates for triangle B

  If ON_ClosestPointBetweenTriangles() returns true, then
  (a[0])*A[0] + (a[1])*A[1] + (a[2])*A[2] is the point on  
  triangle A and  (b[0])*B[0] + (b[1])*B[1] + (b[2])*B[2] is
  the point on triangle B.  It is 
  always the case that a[0]+a[1]+a[2] = 1, a[0]>=0, a[1]>0, a[2]>0,
  b[0]+b[1]+b[2] = 1, b[0]>=0, b[1]>0, b[2]>0

Returns: True if successful.

◆ ON_ClosestPointToTriangle()

ON_DECL bool ON_ClosestPointToTriangle ( ON_3dPoint  A,
ON_3dPoint  B,
ON_3dPoint  C,
ON_3dPoint  P,
double *  a,
double *  b,
double *  c 
)

Description: Finds the barycentric coordinates of the point on a triangle that is closest to P. Parameters: A - [in] triangle corner B - [in] triangle corner C - [in] triangle corner P - [in] point to test a - [out] barycentric coordinate b - [out] barycentric coordinate c - [out] barycentric coordinate If ON_ClosestPointToTriangle() returns true, then (*a)*A + (*b)*B + (*c)*C is the point on the triangle's plane that is closest to P. It is always the case that *a + *b + *c = 1, but this function will return negative barycentric coordinate if the point on the plane is not inside the triangle. Returns: True if the triangle is not degenerate. False if the triangle is degenerate; in this case the returned closest point is the input point that is closest to P.

◆ ON_ClosestPointToTriangleFast()

ON_DECL bool ON_ClosestPointToTriangleFast ( const ON_3dPoint A,
const ON_3dPoint B,
const ON_3dPoint C,
ON_3dPoint  P,
double *  a,
double *  b,
double *  c 
)

Description: Finds the barycentric coordinates of the point on a triangle that is closest to P. Parameters: A - [in] triangle corner B - [in] triangle corner C - [in] triangle corner P - [in] point to test a - [out] barycentric coordinate b - [out] barycentric coordinate c - [out] barycentric coordinate If ON_ClosestPointToTriangle() returns true, then (*a)*A + (*b)*B + (*c)*C is the point on the triangle's plane that is closest to P. It is always the case that *a + *b + *c = 1, but this function will return negative barycentric coordinate if the point on the plane is not inside the triangle. Returns: True if the triangle is not degenerate. False if the triangle is degenerate; in this case the returned closest point is the input point that is closest to P.

◆ ON_CombineShortSegments()

ON_DECL bool ON_CombineShortSegments ( ON_Curve crv,
double  tolerance 
)

Description: Looks for segments that are shorter than tolerance that can be combined. For NURBS of degree greater than 1, spans are combined by removing knots. Similarly for NURBS segments of polycurves. Otherwise, crv.RemoveShortSegments() is called. Does not change the domain, but it will change the relative parameterization. Parameters: tolerance - [in] Returns: True if short segments were combined or removed. False otherwise.

◆ ON_Compare2dex()

ON_DECL int ON_Compare2dex ( const ON_2dex a,
const ON_2dex b 
)

◆ ON_Compare2udex()

ON_DECL int ON_Compare2udex ( const ON_2udex a,
const ON_2udex b 
)

◆ ON_Compare3dex()

ON_DECL int ON_Compare3dex ( const ON_3dex a,
const ON_3dex b 
)

◆ ON_Compare4dex()

ON_DECL int ON_Compare4dex ( const ON_4dex a,
const ON_4dex b 
)

◆ ON_CompareDecreasing()

template<class T >
static int ON_CompareDecreasing ( const T *  a,
const T *  b 
)
static

Description: Compare function for Sort and Search methods. Returns: -1 if *b < *a is true 1 if *a < *b is true 0 if neither *a < *b nor *b < *a is true Details: Use this template functions to sort ON_SimpleArray and ON_ClassArray objects into decreasing order. The elements of the arrays must be a type with an operator < defined. In particular it works with built in types like double, int and pointers. Example:

      class C
      {
      public:
        ...
        bool operator<(const C&) const;
      };
      ...
      ON_ClassArray<C> A;
      A = ...;

/ Sort A in descrasing order A.QuickSort( ON_CompareDecreasing<C> );

See Also: ON_CompareIncreasing

◆ ON_CompareDouble()

ON_DECL int ON_CompareDouble ( double  a,
double  b 
)

Returns: -1: a < b or a is not a nan and b is a nan +1: a > b or a is a nan and b is a not nan 0: a == b or both a and b are nans

◆ ON_CompareDoubleArray()

ON_DECL int ON_CompareDoubleArray ( size_t  count,
const double *  a,
const double *  b 
)

◆ ON_CompareFloat()

ON_DECL int ON_CompareFloat ( float  a,
float  b 
)

Returns: -1: a < b or a is not a nan and b is a nan +1: a > b or a is a nan and b is a not nan 0: a == b or both a and b are nans

◆ ON_CompareIncreasing()

template<class T >
static int ON_CompareIncreasing ( const T *  a,
const T *  b 
)
static

Description: Compare function for Sort and Search methods. Returns: -1 if *a < *b is true 1 if *b < *a is true 0 if neither *a <*b nor *b<*a is true Details: Use this template functions to sort ON_SimpleArray and ON_ClassArray objects into increasing order. The elements of the arrays must be a type with an operator < defined. In particular it works with built in types like double, int and pointers. Example:

      ON_SimpleArray<int> A;
      A = ...;

/ Sort A in increasing order A.QuickSort( ON_CompareIncreasing<double> );

See Also: ON_CompareDecreasing

◆ ON_CompareKnotVector()

ON_DECL int ON_CompareKnotVector ( int  ,
int  ,
const double *  ,
int  ,
int  ,
const double *   
)

◆ ON_ComparePoint()

ON_DECL int ON_ComparePoint ( int  dim,
bool  israt,
const double *  cv0,
const double *  cv1 
)
Parameters
dimreturns -1: first < second 0: first == second +1: first > second dim (>=0)
israttrue for rational CVs
cv0first CV
cv1second CV

◆ ON_ComparePointList()

ON_DECL int ON_ComparePointList ( int  ,
bool  ,
int  ,
int  ,
const double *  ,
int  ,
const double *   
)

◆ ON_ComponentStateFromUnsigned()

ON_DECL ON_ComponentState ON_ComponentStateFromUnsigned ( unsigned int  state_as_unsigned)

◆ ON_ControlPolygonMesh()

ON_DECL ON_Mesh* ON_ControlPolygonMesh ( const ON_NurbsSurface nurbs_surface,
bool  bCleanMesh,
ON_Mesh input_mesh = nullptr 
)

Description: Calculate a mesh representation of the NURBS surface's control polygon. Parameters: nurbs_surface - [in] bCleanMesh - [in] If true, then degenerate quads are cleaned up to be triangles. Surfaces with singular sides are a common source of degenerate qauds. input_mesh - [in] If nullptr, then the returned mesh is created by a class to new ON_Mesh(). If not null, then this mesh will be used to store the control polygon. Returns: If successful, a pointer to a mesh.

◆ ON_ConvertMSMBCPToWideChar()

ON_DECL int ON_ConvertMSMBCPToWideChar ( ON__UINT32  windows_code_page,
const char *  sMBCS,
int  sMBCS_count,
wchar_t *  sWideChar,
int  sWideChar_capacity,
unsigned int *  error_status 
)

Description: Convert a string from a Microsoft multibyte code page encoding to a wide string using UTF-8 / UTF-16 / UTF-32 encoding (depending on the size of wchar_t). This function is designed to be used to parse portions of rich text RTF in ON_TextContent, strings from outside sources with known MBCS encodings, and some user interface code.

Opennurbs assumes all other char strings are UTF-8 encoded.

If 1 = sizeof(wchar_t), then UTF-8 encoding is used for the output string.

If 2 = sizeof(wchar_t), then UTF-16 encoding is used for the output string. This is the case with current versions of Microsoft Windows.

If 4 = sizeof(wchar_t), then UTF-32 encoding is used for the output string. This is the case with current versions of Apple OSX.

Parameters: windows_code_page - [in] The windows code page specifies the encoding of the sMBCS string.

sMBCS - [in] Windows multibyte string with encoding identified by windows_code_page.

sMBCS_count - [in] If sMBCS_count >= 0, then it specifies the number of char elements (bytes) in sMBCS[] to convert.

If sMBCS_count == -1, then sMBCS must be a null terminated string and all the elements up to the first null element are converted.

sWideChar - [out] If sWideChar is not null and sWideChar_count > 0, then the output string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count of returned by this function. The converted string is in the CPU's native byte order. No byte order mark is prepended.

sWideChar_capacity - [in] If sWideChar_capacity > 0, then it specifies the number of available wchar_t elements in the sWideChar[] buffer.

If sWideChar_count == 0, then the sWideChar parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 16: An illegal encoding sequence occurred. The illegal sequence is replaced with a single ON_wString::ReplacementCharacter in the output string and parsing continues.

Returns: If sWideChar_capacity > 0, the return value is the number of wchar_t elements written to sWideChar[]. When the return value < sWideChar_capacity, a null terminator is written to sWideChar[return value].

If sWideChar_count == 0, the return value is the minimum number of wchar_t elements that are needed to hold the converted string. The return value does not include room for a null terminator.
Increment the return value by one if you want to have an element to use for a null terminator.

◆ ON_ConvertNurbSpanToBezier()

ON_DECL void ON_ConvertNurbSpanToBezier ( int  ,
int  ,
int  ,
double *  ,
const double *  ,
double  ,
double   
)

◆ ON_ConvertUTF16ToUTF16()

ON_DECL int ON_ConvertUTF16ToUTF16 ( int  bTestByteOrder,
const ON__UINT16 sInputUTF16,
int  sInputUTF16_count,
ON__UINT16 sOutputUTF16,
int  sOutputUTF16_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const ON__UINT16 **  sNextInputUTF16 
)

Description: Convert a unicode string from a UTF-16 encoded ON__UINT16 array into a UTF-16 encoded ON__UINT16 array. This is not simply a copy in the case when the input has a byte order mark (BOM), different byte ordering or contains errors. This function can be used to validate UTF-16 encoded strings.

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sInputUTF16 - [in] UTF-16 encoded string to convert.

sInputUTF16_count - [in] If sInputUTF16_count >= 0, then it specifies the number of ON__UINT16 elements in sInputUTF16[] to convert.

If sInputUTF16_count == -1, then sInputUTF16 must be a null terminated array and all the elements up to the first null element are converted.

sOutputUTF16 - [out] If sOutputUTF16 is not null and sOutputUTF16_count > 0, then the output UTF-16 encoded string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count returned by this function. No byte order mark is prepended.

sOutputUTF16_count - [in] If sOutputUTF16_count > 0, then it specifies the number of available ON__UINT16 elements in the sOutputUTF16[] buffer.

If sOutputUTF16_count == 0, then the sOutputUTF16 parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. ON_UnicodeCodePoint::ON_ReplacementCharacter (U+FFFD) is a popular choice for the error_code_point value.

sNextInputUTF16 - [out] If sNextInputUTF16 is not null, then *sNextInputUTF16 points to the first element in the input sInputUTF16[] buffer that was not converted.

If an error occurs and is not masked, then *sNextInputUTF16 points to the element of sInputUTF16[] where the conversion failed. If no errors occur or all errors are masked, then sNextInputUTF16 points to sInputUTF16 + sInputUTF16_count.

Returns: If sOutputUTF16_count > 0, the return value is the number of ON__UINT16 elements written to sOutputUTF16[]. When the return value < sOutputUTF16_count, a null terminator is written to sOutputUTF16[return value].

If sOutputUTF16_count == 0, the return value is the minimum number of ON__UINT16 elements that are needed to hold the converted string. The return value does not include room for a null terminator.
Increment the return value by one if you want to have an element to use for a null terminator.

◆ ON_ConvertUTF16ToUTF32()

ON_DECL int ON_ConvertUTF16ToUTF32 ( int  bTestByteOrder,
const ON__UINT16 sUTF16,
int  sUTF16_count,
unsigned int *  sUTF32,
int  sUTF32_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const ON__UINT16 **  sNextUTF16 
)

Description: Convert a unicode string from a UTF-16 encoded ON__UINT16 array into a UTF-32 encoded ON__UINT32 array.

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sUTF16 - [in] UTF-16 string to convert.

If bTestByteOrder is true and the first element of sUTF16[] is 0xFEFF, then this element is skipped and it is assumed that sUTF16[] is in the CPU's native byte order.

If bTestByteOrder is true and the first element of sUTF16[] is 0xFFFE, then this element is skipped and it is assumed that sUTF16[] is not in the CPU's native byte order and bytes are swapped before characters are converted.

If bTestByteOrder is false or the first character of sUTF16[] is neither 0xFEFF nor 0xFFFE, then the sUTF16 string must match the CPU's byte order.

sUTF16_count - [in] If sUTF16_count >= 0, then it specifies the number of ON__UINT16 elements in sUTF16[] to convert.

If sUTF16_count == -1, then sUTF16 must be a null terminated string and all the elements up to the first null element are converted.

sUTF32 - [out] If sUTF32 is not null and sUTF32_count > 0, then the UTF-32 encoded string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count of returned by this function. The converted string is in the CPU's native byte order. No byte order mark is prepended.

sUTF32_count - [in] If sUTF32_count > 0, then it specifies the number of available ON__UINT32 elements in the sUTF32[] buffer.

If sUTF32_count == 0, then the sUTF32 parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. ON_UnicodeCodePoint::ON_ReplacementCharacter (U+FFFD) is a popular choice for the error_code_point value.

sNextUTF16 - [out] If sNextUTF16 is not null, then *sNextUTF16 points to the first element in the input sUTF16[] buffer that was not converted.

If an error occurs and is not masked, then *sNextUTF16 points to the element of sUTF16[] where the conversion failed. If no errors occur or all errors are masked, then *sNextUTF16 points to sUTF16 + sUTF16_count.

Returns: If sUTF32_count > 0, the return value is the number of ON__UINT32 elements written to sUTF32[]. When the return value < sUTF32_count, a null terminator is written to sUTF32[return value].

If sUTF32_count == 0, the return value is the minimum number of ON__UINT32 elements that are needed to hold the converted string. The return value does not include room for a null terminator.
Increment the return value by one if you want to have an element to use for a null terminator.

◆ ON_ConvertUTF16ToUTF8()

ON_DECL int ON_ConvertUTF16ToUTF8 ( int  bTestByteOrder,
const ON__UINT16 sUTF16,
int  sUTF16_count,
char *  sUTF8,
int  sUTF8_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const ON__UINT16 **  sNextUTF16 
)

Description: Convert a unicode string from a UTF-16 encoded ON__UINT16 array into a UTF-8 encoded char array.

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sUTF16 - [in] UTF-16 string to convert.

If bTestByteOrder is true and the first element of sUTF16[] is 0xFEFF, then this element is skipped and it is assumed that sUTF16[] is in the CPU's native byte order.

If bTestByteOrder is true and the first element of sUTF16[] is 0xFFFE, then this element is skipped and it is assumed that sUTF16[] is not in the CPU's native byte order and bytes are swapped before characters are converted.

If bTestByteOrder is false or the first character of sUTF16[] is neither 0xFEFF nor 0xFFFE, then the sUTF16 string must match the CPU's byte order.

sUTF16_count - [in] If sUTF16_count >= 0, then it specifies the number of ON__UINT16 elements in sUTF16[] to convert.

If sUTF16_count == -1, then sUTF16 must be a null terminated string and all the elements up to the first null element are converted.

sUTF8 - [out] If sUTF8 is not null and sUTF8_count > 0, then the UTF-8 encoded string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count of returned by this function. The converted string is in the CPU's native byte order. No byte order mark is prepended.

sUTF8_count - [in] If sUTF8_count > 0, then it specifies the number of available char elements in the sUTF8[] buffer.

If sUTF8_count == 0, then the sUTF8 parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. ON_UnicodeCodePoint::ON_ReplacementCharacter (U+FFFD) is a popular choice for the error_code_point value.

sNextUTF16 - [out] If sNextUTF16 is not null, then *sNextUTF16 points to the first element in the input sUTF16[] buffer that was not converted.

If an error occurs and is not masked, then *sNextUTF16 points to the element of sUTF16[] where the conversion failed. If no errors occur or all errors are masked, then *sNextUTF16 points to sUTF16 + sUTF16_count.

Returns: If sUTF8_count > 0, the return value is the number of char elements written to sUTF8[]. When the return value < sUTF8_count, a null terminator is written to sUTF8[return value].

If sUTF8_count == 0, the return value is the minimum number of char elements that are needed to hold the converted string. The return value does not include room for a null terminator.
Increment the return value by one if you want to have an element to use for a null terminator.

◆ ON_ConvertUTF16ToWideChar()

ON_DECL int ON_ConvertUTF16ToWideChar ( int  bTestByteOrder,
const ON__UINT16 sUTF16,
int  sUTF16_count,
wchar_t *  sWideChar,
int  sWideChar_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const ON__UINT16 **  sNextUTF16 
)

Description: Convert a UTF-16 encoded string to wchar_t string using the native platform's most common encoding.

If 1 = sizeof(wchar_t), then UTF-8 encoding is used for the output string.

If 2 = sizeof(wchar_t), then UTF-16 encoding is used for the output string. This is the case with current versions of Microsoft Windows.

If 4 = sizeof(wchar_t), then UTF-32 encoding is used for the output string. This is the case with current versions of Apple OSX.

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sUTF16 - [in] UTF-16 string to convert.

sUTF16_count - [in] If sUTF16_count >= 0, then it specifies the number of ON__UINT16 elements in sUTF16[] to convert.

If sUTF16_count == -1, then sUTF16 must be a null terminated string and all the elements up to the first null element are converted.

sWideChar - [out] If sWideChar is not null and sWideChar_count > 0, then the output string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count of returned by this function. The converted string is in the CPU's native byte order. No byte order mark is prepended.

sWideChar_count - [in] If sWideChar_count > 0, then it specifies the number of available wchar_t elements in the sWideChar[] buffer.

If sWideChar_count == 0, then the sWideChar parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. ON_UnicodeCodePoint::ON_ReplacementCharacter (U+FFFD) is a popular choice for the error_code_point value.

sNextUTF16 - [out] If sNextUTF16 is not null, then *sNextUTF16 points to the first element in the input sUTF16[] buffer that was not converted.

If an error occurs and is not masked, then *sNextUTF8 points to the element of sUTF16[] where the conversion failed. If no errors occur or all errors are masked, then *sNextUTF16 points to sUTF16 + sUTF16_count.

Returns: If sWideChar_count > 0, the return value is the number of wchar_t elements written to sWideChar[]. When the return value < sWideChar_count, a null terminator is written to sWideChar[return value].

If sWideChar_count == 0, the return value is the minimum number of wchar_t elements that are needed to hold the converted string. The return value does not include room for a null terminator.
Increment the return value by one if you want to have an element to use for a null terminator.

◆ ON_ConvertUTF32ToUTF16()

ON_DECL int ON_ConvertUTF32ToUTF16 ( int  bTestByteOrder,
const ON__UINT32 sUTF32,
int  sUTF32_count,
ON__UINT16 sUTF16,
int  sUTF16_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const ON__UINT32 **  sNextUTF32 
)

Description: Convert a unicode string from a UTF-32 encoded ON__UINT32 array into a UTF-16 encoded ON__UINT16 array.

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sUTF32 - [in] UTF-32 string to convert.

If bTestByteOrder is true and the first element of sUTF32[] is 0x0000FEFF, then this element is skipped and it is assumed that sUTF32[] is in the CPU's native byte order.

If bTestByteOrder is true and the first element of sUTF32[] is 0xFFFE0000, then this element is skipped and it is assumed that sUTF32[] is not in the CPU's native byte order and bytes are swapped before characters are converted.

If bTestByteOrder is false or the first character of sUTF32[] is neither 0x0000FEFF nor 0xFFFE0000, then the sUTF32 string must match the CPU's byte order.

sUTF32_count - [in] If sUTF32_count >= 0, then it specifies the number of ON__UINT32 elements in sUTF32[] to convert.

If sUTF32_count == -1, then sUTF32 must be a null terminated string and all the elements up to the first null element are converted.

sUTF16 - [out] If sUTF16 is not null and sUTF16_count > 0, then the UTF-16 encoded string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count of returned by this function. The converted string is in the CPU's native byte order. No byte order mark is prepended.

sUTF16_count - [in] If sUTF16_count > 0, then it specifies the number of available ON__UINT16 elements in the sUTF16[] buffer.

If sUTF16_count == 0, then the sUTF16 parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. ON_UnicodeCodePoint::ON_ReplacementCharacter (U+FFFD) is a popular choice for the error_code_point value.

sNextUnicode - [out] If sNextUnicode is not null, then *sNextUnicode points to the first byte in the input sNextUnicode[] buffer that was not converted.

If an error occurs and is not masked, then this unsigned int will be an illegal unicode code point value.

If an error does not occur, then (*sNextUnicode - sUnicode) is the number of values converted.

Returns: If sUTF16_count > 0, the return value is the number of ON__UINT16 elements written to sUTF16[]. When the return value < sUTF16_count, a null terminator is written to sUTF16[return value].

If sUTF16_count == 0, the return value is the minimum number of ON__UINT16 elements that are needed to hold the converted string. The return value does not include room for a null terminator.
Increment the return value by one if you want to have an element to use for a null terminator.

◆ ON_ConvertUTF32ToUTF32()

ON_DECL int ON_ConvertUTF32ToUTF32 ( int  bTestByteOrder,
const ON__UINT32 sInputUTF32,
int  sInputUTF32_count,
ON__UINT32 sOuputUTF32,
int  sOutputUTF32_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const ON__UINT32 **  sNextInputUTF32 
)

Description: Convert a unicode string from a UTF-32 encoded ON__UINT32 array into a UTF-32 encoded ON__UINT32 array. This is not simply a copy in the case when the input has a byte order mark (BOM), different byte ordering or contains errors. This function can be used to validate UTF-32 encoded strings.

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sInputUTF32 - [in] UTF-32 string to convert.

If bTestByteOrder is true and the first element of sInputUTF32[] is 0x0000FEFF, then this element is skipped and it is assumed that sInputUTF32[] is in the CPU's native byte order.

If bTestByteOrder is true and the first element of sInputUTF32[] is 0xFFFE0000, then this element is skipped and it is assumed that sInputUTF32[] is not in the CPU's native byte order and bytes are swapped before characters are converted.

If bTestByteOrder is false or the first character of sUTF32[] is neither 0x0000FEFF nor 0xFFFE0000, then the sUTF32 string must match the CPU's byte order.

sInputUTF32_count - [in] If sInputUTF32_count >= 0, then it specifies the number of ON__UINT32 elements in sInputUTF32[] to convert.

If sInputUTF32_count == -1, then sInputUTF32 must be a null terminated string and all the elements up to the first null element are converted.

sOutputUTF32 - [out] If sOutputUTF32 is not null and sOutputUTF32_count > 0, then the UTF-32 encoded string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count of returned by this function. The converted string is in the CPU's native byte order. No byte order mark is prepended.

sOutputUTF32_count - [in] If sOutputUTF32_count > 0, then it specifies the number of available ON__UINT32 elements in the sOutputUTF32[] buffer.

If sOutputUTF32_count == 0, then the sOutputUTF32 parameter is ignored. This is useful when you want to validate a UTF-32 formatted string.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. ON_UnicodeCodePoint::ON_ReplacementCharacter (U+FFFD) is a popular choice for the error_code_point value.

sNextInputUTF32 - [out] If sNextInputUTF32 is not null, then *sNextInputUTF32 points to the first element in the input sInputUTF32[] buffer that was not converted.

If an error occurs and is not masked, then this unsigned int will be an illegal unicode code point value.

If an error does not occur, then (*sNextInputUTF32 - sInputUTF32) is the number of values converted.

Returns: If sOutputUTF32_count > 0, the return value is the number of ON__UINT32 elements written to sOutputUTF32[].
When the return value < sOutputUTF32_count, a null terminator is written to sOutputUTF32[return value].

If sOutputUTF32_count == 0, the return value is the minimum number of ON__UINT32 elements that are needed to hold the converted string. The return value does not include room for a null terminator.
Increment the return value by one if you want to have an element to use for a null terminator.

◆ ON_ConvertUTF32ToUTF8()

ON_DECL int ON_ConvertUTF32ToUTF8 ( int  bTestByteOrder,
const ON__UINT32 sUTF32,
int  sUTF32_count,
char *  sUTF8,
int  sUTF8_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const ON__UINT32 **  sNextUTF32 
)

Description: Convert a unicode string from a UTF-32 encoded ON__UINT32 array into a UTF-8 encoded char array.

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sUTF32 - [in] UTF-32 string to convert.

If bTestByteOrder is true and the first element of sUTF32[] is 0x0000FEFF, then this element is skipped and it is assumed that sUTF32[] is in the CPU's native byte order.

If bTestByteOrder is true and the first element of sUTF32[] is 0xFFFE0000, then this element is skipped and it is assumed that sUTF32[] is not in the CPU's native byte order and bytes are swapped before characters are converted.

If bTestByteOrder is false or the first character of sUTF32[] is neither 0x0000FEFF nor 0xFFFE0000, then the sUTF32 string must match the CPU's byte order.

sUTF32_count - [in] If sUTF32_count >= 0, then it specifies the number of ON__UINT32 elements in sUTF32[] to convert.

If sUTF32_count == -1, then sUTF32 must be a null terminated string and all the elements up to the first null element are converted.

sUTF8 - [out] If sUTF8 is not null and sUTF8_count > 0, then the UTF-8 encoded string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count of returned by this function. The converted string is in the CPU's native byte order. No byte order mark is prepended.

sUTF8_count - [in] If sUTF8_count > 0, then it specifies the number of available char elements in the sUTF8[] buffer.

If sUTF8_count == 0, then the sUTF8 parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. ON_UnicodeCodePoint::ON_ReplacementCharacter (U+FFFD) is a popular choice for the error_code_point value.

sNextUTF32 - [out] If sNextUTF32 is not null, then *sNextUTF32 points to the first element in the input sUTF32[] buffer that was not converted.

If an error occurs and is not masked, then *sNextUTF32 points to the element of sUTF32[] where the conversion failed. If no errors occur or all errors are masked, then *sNextUTF32 points to sUTF32 + sUTF32_count.

Returns: If sUTF8_count > 0, the return value is the number of char elements written to sUTF8[]. When the return value < sUTF8_count, a null terminator is written to sUTF8[return value].

If sUTF8_count == 0, the return value is the minimum number of char elements that are needed to hold the converted string. The return value does not include room for a null terminator.
Increment the return value by one if you want to have an element to use for a null terminator.

◆ ON_ConvertUTF32ToWideChar()

ON_DECL int ON_ConvertUTF32ToWideChar ( int  bTestByteOrder,
const ON__UINT32 sUTF32,
int  sUTF32_count,
wchar_t *  sWideChar,
int  sWideChar_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const ON__UINT32 **  sNextUTF32 
)

Description: Convert a UTF-32 encoded string to wchar_t string using the native platform's most common encoding.

If 1 = sizeof(wchar_t), then UTF-8 encoding is used for the output string.

If 2 = sizeof(wchar_t), then UTF-16 encoding is used for the output string. This is the case with current versions of Microsoft Windows.

If 4 = sizeof(wchar_t), then UTF-32 encoding is used for the output string. This is the case with current versions of Apple OSX.

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sUTF32 - [in] UTF-32 string to convert.

sUTF32_count - [in] If sUTF32_count >= 0, then it specifies the number of ON__UINT32 elements in sUTF32[] to convert.

If sUTF32_count == -1, then sUTF32 must be a null terminated string and all the elements up to the first null element are converted.

sWideChar - [out] If sWideChar is not null and sWideChar_count > 0, then the output string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count of returned by this function. The converted string is in the CPU's native byte order. No byte order mark is prepended.

sWideChar_count - [in] If sWideChar_count > 0, then it specifies the number of available wchar_t elements in the sWideChar[] buffer.

If sWideChar_count == 0, then the sWideChar parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. ON_UnicodeCodePoint::ON_ReplacementCharacter (U+FFFD) is a popular choice for the error_code_point value.

sNextUTF32 - [out] If sNextUTF32 is not null, then *sNextUTF32 points to the first element in the input sUTF32[] buffer that was not converted.

If an error occurs and is not masked, then *sNextUTF8 points to the element of sUTF32[] where the conversion failed. If no errors occur or all errors are masked, then *sNextUTF32 points to sUTF32 + sUTF32_count.

Returns: If sWideChar_count > 0, the return value is the number of wchar_t elements written to sWideChar[]. When the return value < sWideChar_count, a null terminator is written to sWideChar[return value].

If sWideChar_count == 0, the return value is the minimum number of wchar_t elements that are needed to hold the converted string. The return value does not include room for a null terminator.
Increment the return value by one if you want to have an element to use for a null terminator. See Also: ON_wString::FromUnicodeCodePoints()

◆ ON_ConvertUTF8ToUTF16()

ON_DECL int ON_ConvertUTF8ToUTF16 ( int  bTestByteOrder,
const char *  sUTF8,
int  sUTF8_count,
ON__UINT16 sUTF16,
int  sUTF16_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const char **  sNextUTF8 
)

Description: Convert a unicode string from a UTF-8 encoded char array into a UTF-16 encoded ON__UINT16 array.

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sUTF8 - [in] UTF-8 string to convert.

sUTF8_count - [in] If sUTF8_count >= 0, then it specifies the number of char elements in sUTF8[] to convert.

If sUTF8_count == -1, then sUTF8 must be a null terminated string and all the elements up to the first null element are converted.

sUTF16 - [out] If sUTF16 is not null and sUTF16_count > 0, then the UTF-16 encoded string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count of returned by this function. The converted string is in the CPU's native byte order. No byte order mark is prepended.

sUTF16_count - [in] If sUTF16_count > 0, then it specifies the number of available ON__UINT16 elements in the sUTF16[] buffer.

If sUTF16_count == 0, then the sUTF16 parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. ON_UnicodeCodePoint::ON_ReplacementCharacter (U+FFFD) is a popular choice for the error_code_point value.

sNextUTF8 - [out] If sNextUTF8 is not null, then *sNextUTF8 points to the first element in the input sUTF8[] buffer that was not converted.

If an error occurs and is not masked, then *sNextUTF8 points to the element of sUTF8[] where the conversion failed. If no errors occur or all errors are masked, then *sNextUTF8 points to sUTF8 + sUTF8_count.

Returns: If sUTF16_count > 0, the return value is the number of ON__UINT16 elements written to sUTF16[]. When the return value < sUTF16_count, a null terminator is written to sUTF16[return value].

If sUTF16_count == 0, the return value is the minimum number of ON__UINT16 elements that are needed to hold the converted string. The return value does not include room for a null terminator.
Increment the return value by one if you want to have an element to use for a null terminator.

◆ ON_ConvertUTF8ToUTF32()

ON_DECL int ON_ConvertUTF8ToUTF32 ( int  bTestByteOrder,
const char *  sUTF8,
int  sUTF8_count,
ON__UINT32 sUTF32,
int  sUTF32_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const char **  sNextUTF8 
)

Description: Convert a unicode string from a UTF-8 encoded char array into a UTF-32 encoded ON__UINT32 array.

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sUTF8 - [in] UTF-8 string to convert.

sUTF8_count - [in] If sUTF8_count >= 0, then it specifies the number of char elements in sUTF8[] to convert.

If sUTF8_count == -1, then sUTF8 must be a null terminated string and all the elements up to the first null element are converted.

sUTF32 - [out] If sUTF32 is not null and sUTF32_count > 0, then the UTF-32 encoded string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count of returned by this function. The converted string is in the CPU's native byte order. No byte order mark is prepended.

sUTF32_count - [in] If sUTF32_count > 0, then it specifies the number of available ON__UINT32 elements in the sUTF32[] buffer.

If sUTF32_count == 0, then the sUTF32 parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. ON_UnicodeCodePoint::ON_ReplacementCharacter (U+FFFD) is a popular choice for the error_code_point value.

sNextUTF8 - [out] If sNextUTF8 is not null, then *sNextUTF8 points to the first element in the input sUTF8[] buffer that was not converted.

If an error occurs and is not masked, then *sNextUTF8 points to the element of sUTF8[] where the conversion failed. If no errors occur or all errors are masked, then *sNextUTF8 points to sUTF8 + sUTF8_count.

Returns: If sUTF32_count > 0, the return value is the number of ON__UINT32 elements written to sUTF32[]. When the return value < sUTF32_count, a null terminator is written to sUTF32[return value].

If sUTF32_count == 0, the return value is the minimum number of ON__UINT32 elements that are needed to hold the converted string. The return value does not include room for a null terminator.
Increment the return value by one if you want to have an element to use for a null terminator.

◆ ON_ConvertUTF8ToUTF8()

ON_DECL int ON_ConvertUTF8ToUTF8 ( int  bTestByteOrder,
const char *  sInputUTF8,
int  sInputUTF8_count,
char *  sOutputUTF8,
int  sOutputUTF8_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const char **  sNextInputUTF8 
)

Description: Convert a unicode string from a UTF-8 encoded char array into a UTF-8 encoded char array. This function can be used to clean UTF-8 strings that have a leading byte-order-mark (BOM) or contain encoding errors.

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sInputUTF8 - [in] UTF-8 encoded string to convert.

sInputUTF8_count - [in] If sInputUTF8_count >= 0, then it specifies the number of char elements in sInputUTF8[] to convert.

If sInputUTF8_count == -1, then sInputUTF8 must be a null terminated string and all the elements up to the first null element are converted.

sOutputUTF8 - [out] If sOutputUTF8 is not null and sOutputUTF8_count > 0, then the output UTF-8 encoded string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count returned by this function. No byte order mark is prepended.

sOutputUTF8_count - [in] If sOutputUTF8_count > 0, then it specifies the number of available char elements in the sOutputUTF8[] buffer.

If sOutputUTF8_count == 0, then the sOutputUTF8 parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. ON_UnicodeCodePoint::ON_ReplacementCharacter (U+FFFD) is a popular choice for the error_code_point value.

sNextInputUTF8 - [out] If sNextInputUTF8 is not null, then *sNextInputUTF8 points to the first element in the input sInputUTF8[] buffer that was not converted.

If an error occurs and is not masked, then *sNextInputUTF8 points to the element of sInputUTF8[] where the conversion failed. If no errors occur or all errors are masked, then sNextInputUTF8 points to sInputUTF8 + sInputUTF8_count.

Returns: If sOutputUTF8_count > 0, the return value is the number of char elements written to sOutputUTF8[]. When the return value < sOutputUTF8_count, a null terminator is written to sOutputUTF8[return value].

If sOutputUTF8_count == 0, the return value is the minimum number of char elements that are needed to hold the converted string. The return value does not include room for a null terminator.
Increment the return value by one if you want to have an element to use for a null terminator.

◆ ON_ConvertUTF8ToWideChar()

ON_DECL int ON_ConvertUTF8ToWideChar ( int  bTestByteOrder,
const char *  sUTF8,
int  sUTF8_count,
wchar_t *  sWideChar,
int  sWideChar_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const char **  sNextUTF8 
)

Description: Convert a UTF-8 encoded char string to wchar_t string using the native platform's most common encoding.

If 1 = sizeof(wchar_t), then UTF-8 encoding is used for the output string.

If 2 = sizeof(wchar_t), then UTF-16 encoding is used for the output string. This is the case with current versions of Microsoft Windows.

If 4 = sizeof(wchar_t), then UTF-32 encoding is used for the output string. This is the case with current versions of Apple OSX.

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sUTF8 - [in] UTF-8 string to convert.

sUTF8_count - [in] If sUTF8_count >= 0, then it specifies the number of char elements in sUTF8[] to convert.

If sUTF8_count == -1, then sUTF8 must be a null terminated string and all the elements up to the first null element are converted.

sWideChar - [out] If sWideChar is not null and sWideChar_count > 0, then the output string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count of returned by this function. The converted string is in the CPU's native byte order. No byte order mark is prepended.

sWideChar_count - [in] If sWideChar_count > 0, then it specifies the number of available wchar_t elements in the sWideChar[] buffer.

If sWideChar_count == 0, then the sWideChar parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. ON_UnicodeCodePoint::ON_ReplacementCharacter (U+FFFD) is a popular choice for the error_code_point value.

sNextUTF8 - [out] If sNextUTF8 is not null, then *sNextUTF8 points to the first element in the input sUTF8[] buffer that was not converted.

If an error occurs and is not masked, then *sNextUTF8 points to the element of sUTF8[] where the conversion failed. If no errors occur or all errors are masked, then *sNextUTF8 points to sUTF8 + sUTF8_count.

Returns: If sWideChar_count > 0, the return value is the number of wchar_t elements written to sWideChar[]. When the return value < sWideChar_count, a null terminator is written to sWideChar[return value].

If sWideChar_count == 0, the return value is the minimum number of wchar_t elements that are needed to hold the converted string. The return value does not include room for a null terminator.
Increment the return value by one if you want to have an element to use for a null terminator.

◆ ON_ConvertWideCharToMSMBCP()

ON_DECL int ON_ConvertWideCharToMSMBCP ( const wchar_t *  sWideChar,
int  sWideChar_count,
ON__UINT32  windows_code_page,
char *  sMBCS,
int  sMBCS_capacity,
unsigned int *  error_status 
)

Description: Convert a string from UTF-8/UTF=16/UTF-32 encoding (depending on size of wchar_t) to a Microsoft multibyte code page encoding.

This function is designed to be used to create strings that will be used write files that require non-UTF encoded char strings.

Opennurbs assumes all other char strings are UTF-8 encoded.

If 1 = sizeof(wchar_t), then sWideChar must be UTF-8 encoded.

If 2 = sizeof(wchar_t), then sWideChar must be UTF-16 encoded.

If 4 = sizeof(wchar_t), then sWideChar must be UTF-16 or UTF-32 encoded.

Parameters: windows_code_page - [in] THe windows code page specifies the encoding of the sMBCS string.

sWideChar - [out] The input UTF encoded string. If sWideChar_count is -1, this string must be null terminated. If sWideChar_count > 0, the string must has sWideChar_count wchar_t elements that are a UTF encoding.

sWideChar_count - [in] If sWideChar_capacity > 0, then it specifies the number of wchar_t elements in the sWideChar[] to convert.

If sWideChar_count == -1, then sWideChar must be a null terminated string and all the elements up to the first null element are converted.

sMBCS - [out] If sMBCS is not null and sMBCS_count > 0, then the output MBCS encoded string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count of returned by this function.

sMBCS_capacity - [in] If sWideChar_capacity > 0, then it specifies the number of available char elements (bytes) in the sMBCS[] buffer.

If sMBCS_capacity == 0, then the sMBCS parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion. When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 16: An illegal encoding sequence occurred or a UNICODE codepoint was encountered that cannot be encoded in the code page specified by windows_code_page. In either case, a a single question mark (?) in the output string and parsing continues.

Returns: If sMBCS_capacity > 0, the return value is the number MBCS encoded char elements written to sWideChar[]. When the return value < sMBCSChar_capacity, a null terminator is written to sWideChar[return value].

If sMBCS_count == 0, the return value is the minimum number of char elements that are needed to hold the MBCS encode string. The return value does not include room for a null terminator. Increment the return value by one if you want to have an element to use for a null terminator.

◆ ON_ConvertWideCharToUTF16()

ON_DECL int ON_ConvertWideCharToUTF16 ( int  bTestByteOrder,
const wchar_t *  sWideChar,
int  sWideChar_count,
ON__UINT16 sUTF16,
int  sUTF16_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const wchar_t **  sNextWideChar 
)

Description: Convert a wchar_t string using the native platform's most common encoding into a unicode string encoded as a UTF-16 ON__UINT16 array.

If 1 = sizeof(wchar_t), then the wchar_t array is assumed to be a UTF-8 encoded string.

If 2 = sizeof(wchar_t), then the wchar_t array is assumed to be a UTF-16 encoded string. This is the case with current versions of Microsoft Windows.

If 4 = sizeof(wchar_t), then the wchar_t array is assumed to be a UTF-32 encoded string. This is the case with current versions of Apple OS X.

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sWideChar - [in] wchar_t input string to convert.

sWideChar_count - [in] If sWideChar_count >= 0, then it specifies the number of wchar_t elements in sWideChar[] to convert.

If sWideChar_count == -1, then sWideChar must be a null terminated array and all the elements up to the first null element are converted.

sUTF16 - [out] If sUTF16 is not null and sUTF16_count > 0, then the UTF-16 encoded string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count of returned by this function. The converted string is in the CPU's native byte order. No byte order mark is prepended.

sUTF16_count - [in] If sUTF16_count > 0, then it specifies the number of available ON__UINT16 elements in the sUTF16[] buffer.

If sUTF16_count == 0, then the sUTF16 parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. ON_UnicodeCodePoint::ON_ReplacementCharacter (U+FFFD) is a popular choice for the error_code_point value.

sNextWideChar - [out] If sNextWideChar is not null, then *sNextWideChar points to the first element in the input sWideChar[] buffer that was not converted.

If an error occurs and is not masked, then *sNextWideChar points to the element of sWideChar[] where the conversion failed. If no errors occur or all errors are masked, then *sNextWideChar points to sWideChar + sWideChar_count.

If sUTF16_count > 0, the return value is the number of ON__UINT16 elements written to sUTF16[]. When the return value < sUTF16_count, a null terminator is written to sUTF16[return value].

If sUTF16_count == 0, the return value is the minimum number of ON__UINT16 elements that are needed to hold the converted string. The return value does not include room for a null terminator.
Increment the return value by one if you want to have an element to use for a null terminator.

◆ ON_ConvertWideCharToUTF32()

ON_DECL int ON_ConvertWideCharToUTF32 ( int  bTestByteOrder,
const wchar_t *  sWideChar,
int  sWideChar_count,
ON__UINT32 sUTF32,
int  sUTF32_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const wchar_t **  sNextWideChar 
)

Description: Convert a wchar_t string using the native platform's most common encoding into a unicode string encoded as a UTF-32 char array.

If 1 = sizeof(wchar_t), then the wchar_t array is assumed to be a UTF-8 encoded string.

If 2 = sizeof(wchar_t), then the wchar_t array is assumed to be a UTF-16 encoded string. This is the case with current versions of Microsoft Windows.

If 4 = sizeof(wchar_t), then the wchar_t array is assumed to be a UTF-32 encoded string. This is the case with current versions of Apple OSX.

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sWideChar - [in] wchar_t string to convert.

sWideChar_count - [in] If sWideChar_count >= 0, then it specifies the number of wchar_t elements in sWideChar[] to convert.

If sWideChar_count == -1, then sWideChar must be a null terminated string and all the elements up to the first null element are converted.

sUTF32 - [out] If sUTF32 is not null and sUTF32_count > 0, then the UTF-32 encoded string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count of returned by this function. The converted string is in the CPU's native byte order. No byte order mark is prepended.

sUTF32_count - [in] If sUTF32_count > 0, then it specifies the number of available ON__UINT32 elements in the sUTF32[] buffer.

If sUTF32_count == 0, then the sUTF32 parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. ON_UnicodeCodePoint::ON_ReplacementCharacter (U+FFFD) is a popular choice for the error_code_point value.

sNextWideChar - [out] If sNextWideChar is not null, then *sNextWideChar points to the first element in the input sWideChar[] buffer that was not converted.

If an error occurs and is not masked, then *sNextWideChar points to the element of sWideChar[] where the conversion failed. If no errors occur or all errors are masked, then *sNextWideChar points to sWideChar + sWideChar_count.

If sUTF32_count > 0, the return value is the number of ON__UINT32 elements written to sUTF32[]. When the return value < sUTF32_count, a null terminator is written to sUTF32[return value].

If sUTF32_count == 0, the return value is the minimum number of ON__UINT32 elements that are needed to hold the converted string. The return value does not include room for a null terminator.
Increment the return value by one if you want to have an element to use for a null terminator.

◆ ON_ConvertWideCharToUTF8()

ON_DECL int ON_ConvertWideCharToUTF8 ( int  bTestByteOrder,
const wchar_t *  sWideChar,
int  sWideChar_count,
char *  sUTF8,
int  sUTF8_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const wchar_t **  sNextWideChar 
)

Description: Convert a wchar_t string using the native platform's most common encoding into a unicode string encoded as a UTF-8 char array.

If 1 = sizeof(wchar_t), then the wchar_t array is assumed to be a UTF-8 encoded string.

If 2 = sizeof(wchar_t), then the wchar_t array is assumed to be a UTF-16 encoded string. This is the case with current versions of Microsoft Windows.

If 4 = sizeof(wchar_t), then the wchar_t array is assumed to be a UTF-32 encoded string. This is the case with current versions of Apple OSX.

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sWideChar - [in] wchar_t input string to convert.

sWideChar_count - [in] If sWideChar_count >= 0, then it specifies the number of wchar_t elements in sWideChar[] to convert.

If sWideChar_count == -1, then sWideChar must be a null terminated array and all the elements up to the first null element are converted.

sUTF8 - [out] If sUTF8 is not null and sUTF8_count > 0, then the UTF-8 encoded string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count of returned by this function. The converted string is in the CPU's native byte order. No byte order mark is prepended.

sUTF8_count - [in] If sUTF8_count > 0, then it specifies the number of available char elements in the sUTF8[] buffer.

If sUTF8_count == 0, then the sUTF8 parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. ON_UnicodeCodePoint::ON_ReplacementCharacter (U+FFFD) is a popular choice for the error_code_point value.

sNextWideChar - [out] If sNextWideChar is not null, then *sNextWideChar points to the first element in the input sWideChar[] buffer that was not converted.

If an error occurs and is not masked, then *sNextWideChar points to the element of sWideChar[] where the conversion failed. If no errors occur or all errors are masked, then *sNextWideChar points to sWideChar + sWideChar_count.

If sUTF8_count > 0, the return value is the number of char elements written to sUTF8[]. When the return value < sUTF8_count, a null terminator is written to sUTF8[return value].

If sUTF8_count == 0, the return value is the minimum number of char elements that are needed to hold the converted string. The return value does not include room for a null terminator.
Increment the return value by one if you want to have an element to use for a null terminator.

◆ ON_ConvexHull2d()

ON_DECL int ON_ConvexHull2d ( const ON_SimpleArray< ON_2dPoint > &  Pnt,
ON_SimpleArray< ON_2dPoint > &  Hull,
ON_SimpleArray< int > *  PntInd = nullptr 
)

Compute Convex hull of 2d points Parameters: Pnt - array of points. HUll - the sequence Hull[0], HUll[1]... ,*Hull.Last() == Hull[0] defines the convex hull with a positive orientation when returns 2. PntInd - optional array to be filled in so that Hull[i] = Pnt[ PntInd[i]] . Returns dimension of the convex hull 2 - Hull is 2 dimensional 1 - Hull is a line segment 0 - hull is a point <0 error

◆ ON_CorrectBase32StringTypos() [1/3]

ON_DECL int ON_CorrectBase32StringTypos ( const char *  sBase32,
char *  sBase32clean 
)

◆ ON_CorrectBase32StringTypos() [2/3]

ON_DECL int ON_CorrectBase32StringTypos ( const char *  sBase32,
ON_String sBase32clean 
)

◆ ON_CorrectBase32StringTypos() [3/3]

ON_DECL int ON_CorrectBase32StringTypos ( const wchar_t *  sBase32,
ON_wString sBase32clean 
)

Description: Fixt a common typos in sBase32 string. Lower case letters are converted to upper case. The letters 'I', 'L', 'O' and 'S' are converted to '1' (one), '1' (one) '0' zero and '5' (five). Parameters: sBase32 - [in] sBase32clean - [out] (can be the same string as sBase32) Returns: If the input is valid, the length of the converted string is returned. If the input is not valid, 0 is returned.

◆ ON_CrashTest()

ON_DECL int ON_CrashTest ( int  crash_type,
ON_TextLog text_log 
)

◆ ON_CRC16()

ON_BEGIN_EXTERNC ON_DECL ON__UINT16 ON_CRC16 ( ON__UINT16  current_remainder,
size_t  sizeof_buffer,
const void *  buffer 
)

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. Description: Continues 16 bit CRC calculation to include the buffer.

Parameters: current_remainder - [in] sizeof_buffer - [in] number of bytes in buffer buffer - [in]

Example: 16 bit CRC calculations are typically done something like this:

    const ON__UINT16 crc_seed = 0; ///< or 1, or your favorite starting value

/ Compute CRC on "good" data unsigned ON__UINT16 first_crc = crc_seed; first_crc = ON_CRC16( first_crc, size1, buffer1 ); ... first_crc = ON_CRC16( first_crc, sizeN, bufferN ); unsigned char two_zero_bytes[2] = (0,0); first_crc = ON_CRC16( first_crc, 2, two_zero_bytes );

/ make sure 16 bit CRC calculation is valid ON__UINT16 check_crc_calculation = ON_CRC16( first_crc, 2, &first_crc ); if ( check_crc_calculation != 0 ) { printf("ON_CRC16() calculated a bogus 16 bit CRC\n"); }

/ Do something that may potentially change the values in / the buffers (like storing them on a faulty disk).

/ Compute CRC on "suspect" data ON__UINT16 second_crc = crc_seed; second_crc = ON_CRC16( second_crc, size1, buffer1 ); ... second_crc = ON_CRC16( second_crc, sizeN, bufferN ); if ( 0 != ON_CRC16( second_crc, 2, &first_crc ) ) { printf( "The value of at least one byte has changed.\n" ); }

◆ ON_CRC32()

ON_DECL ON__UINT32 ON_CRC32 ( ON__UINT32  current_remainder,
size_t  sizeof_buffer,
const void *  buffer 
)

Description: Continues 32 bit CRC calculation to include the buffer

ON_CRC32() is a slightly altered version of zlib 1.3.3's crc32() and the zlib "legal stuff" is reproduced below.

ON_CRC32() and zlib's crc32() compute the same values. ON_CRC32() was renamed so it wouldn't clash with the other crc32()'s that are out there and the argument order was switched to match that used by the legacy ON_CRC16().

Parameters: current_remainder - [in] sizeof_buffer - [in] number of bytes in buffer buffer - [in]

Example: 32 bit CRC calculations are typically done something like this:

    const ON__UINT32 crc_seed = 0; ///< or 1, or your favorite starting value

/Compute CRC on "good" data ON__UINT32 first_crc = crc_seed; first_crc = ON_CRC32( first_crc, size1, buffer1 ); ... first_crc = ON_CRC32( first_crc, sizeN, bufferN );

/ Do something that may potentially change the values in / the buffers (like storing them on a faulty disk).

/ Compute CRC on "suspect" data ON__UINT32 second_crc = crc_seed; second_crc = ON_CRC32( second_crc, size1, buffer1 ); ... second_crc = ON_CRC32( second_crc, sizeN, bufferN ); if ( second_crc != first_crc ) { printf( "The value of at least one byte has changed.\n" ); }

◆ ON_CreateId()

ON_DECL ON_UUID ON_CreateId ( )

◆ ON_CreateUuid()

ON_END_EXTERNC ON_DECL bool ON_CreateUuid ( ON_UUID uuid)

Description: Creates a new uuid.(&a,&b) compares two uuids. Parameters: new_uuid - [out] Returns: True if successful.

◆ ON_CrossProduct() [1/7]

ON_DECL ON_3dVector ON_CrossProduct ( const double *  ,
const double *   
)

◆ ON_CrossProduct() [2/7]

ON_DECL ON_3fVector ON_CrossProduct ( const float *  ,
const float *   
)

◆ ON_CrossProduct() [3/7]

ON_DECL ON_3dVector ON_CrossProduct ( const ON_2dVector ,
const ON_2dVector  
)

◆ ON_CrossProduct() [4/7]

ON_DECL ON_3fVector ON_CrossProduct ( const ON_2fVector ,
const ON_2fVector  
)

◆ ON_CrossProduct() [5/7]

ON_DECL ON_3dVector ON_CrossProduct ( const ON_3dVector ,
const ON_3dVector  
)

◆ ON_CrossProduct() [6/7]

ON_DECL ON_3fVector ON_CrossProduct ( const ON_3fVector ,
const ON_3fVector  
)

◆ ON_CrossProduct() [7/7]

ON_DECL ON_Quaternion ON_CrossProduct ( const ON_Quaternion p,
const ON_Quaternion q 
)

Returns: The vector cross product of p and q = (0,x,y,z) where (x,y,z) = ON_CrossProduct(p.Vector(),q.Vector())

This is NOT the same as the quaternion product p*q.

◆ ON_CSXFirstOrderNecessaryConditions()

ON_DECL bool ON_CSXFirstOrderNecessaryConditions ( ON_TextLog text_log,
const ON_X_EVENT xevent,
int  end_index,
const ON_Interval curve_domain,
const ON_Interval surface_domain0,
const ON_Interval surface_domain1 
)

Check First Order Necessary Conditions for CSX result Curve surface intersection solves an optimization problem. This code verifies that the solution point, either a csx_point or the end of a csx_overlap, satisfies what are called first order necessary conditions for the point being a local minimum relative to the specified problem domain Parameters: text_log - (in)optional text log.If false is returned the problem description is logged. xevent - (in)CSX event result must be a csx_point or csx_overlap event type end_index - (in)If xevent is an overlap then end_index should be 0 or 1

These are the parameters that we used to call Curve::IntersectSurface() curve_domain(in) surface_domain - (in) Return : true if the point satisfies the first order necessary conditions for this point being a local minimum

◆ ON_CurveOrientationArea()

ON_DECL double ON_CurveOrientationArea ( const ON_Curve curve,
const ON_Interval domain,
const ON_Xform xform,
bool  bReverseCurve 
)

Description: Get a crude approximation of the signed area of the region in the x-y plane traced out by the curve. This is useful for calculating the orientation of projections of loops to planes when you have more than one curve. Parameters: curve - [in] domain - [in] optional sub-domain. (null if entire curve should be used). xform - [in] Transformation to map the curve to the xy plane. If the curve is parallel to the xy plane, you may pass nullptr. bReverseCurve - [in] Returns: 1/2 the sum of (p[i].x-p[i+1].x)*(p[i].y+p[i+1].y), where p[i] is a series of sampled points on the curve.

◆ ON_CvxHullFromLeafBox()

ON_DECL bool ON_CvxHullFromLeafBox ( ON_ConvexHullPoint2 Hull,
const ON_SurfaceLeafBox leaf 
)

◆ ON_DayOfGregorianYear()

ON_DECL unsigned int ON_DayOfGregorianYear ( unsigned int  year,
unsigned int  month,
unsigned int  day_of_month 
)

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. Description: Get the day of the year from the year, month and day_of_month. Parameters: year - [in] >= 1582 month - [in] >= 1 and <= 12 day_of_month - [in] >= 1 and <= last valid day_of_month of the month Returns: 0: Invalid input 1 to 366: Day of Gregorian year.

◆ ON_DaysInGregorianYear()

ON_DECL unsigned int ON_DaysInGregorianYear ( unsigned int  year)

Parameters: year - [in] >= 1582 Returns: 0: Invalid input 365: If the year is a common year in the Gregorian calendar 366: If the year is a leap year in the Gregorian calendar

◆ ON_DaysInMonthOfGregorianYear()

ON_DECL unsigned int ON_DaysInMonthOfGregorianYear ( unsigned int  year,
unsigned int  month 
)

Description: Get the number of days in a Gregorian month. Parameters: year - [in] >= 1582 month - [in] >= 1 and <= 12 Returns: 0: Invalid input 28, 29, 30 or 31: number of days in the specified month.

◆ ON_DBL_SNAN()

ON_DECL void ON_DBL_SNAN ( double *  x)

Description: Parameters: x - [out] returned value of x is an SNan (signalling not a number). Remarks: Any time an SNaN passes through an Intel FPU, the result is a QNaN (quiet nan) and the invalid operation exception flag is set. If this exception is not masked, then the exception handler is invoked.

double x, y; ON_DBL_SNAN(&x); y = x; ///< y = QNAN and invalid op exception occurs z = sin(x) ///< z = QNAN and invalid op exception occurs

So, if you want to reliably initialize doubles to SNaNs, you must use memcpy() or some other method that does not use the Intel FPU.

◆ ON_DebugWriteObject()

ON_DECL int ON_DebugWriteObject ( const class ON_Object pObject)

Description: ON_DebugWriteObject is a debugging utility that can be called from a debugger's evaluate expression window to dump objects for future inspection. Parameters: pObject - [in] Returns: If successful, an integer N > 0 which indicates the object was saved in a file named debug_file_XXXXX.3dm, where XXXXX is a %05d format of N. The file is in the directory named ON_DebugWriteObjectDirectory(). See Also: ON_SetDebugWriteObjectDirectory(); ON_DebugWritePoint() ON_DebugWriteObjects() ON_DebugWriteObjectArray()

◆ ON_DebugWriteObjectArray()

ON_DECL int ON_DebugWriteObjectArray ( const ON_SimpleArray< const class ON_Object * > &  object_list)

Description: ON_DebugWriteObjectArray is a debugging utility that can be called from C++ or from a debugger's evaluate expression window to dump objects for future inspection. Parameters: object_list - [in] object list Returns: If successful, an integer N > 0 which indicates the object was saved in a file named debug_file_XXXXX.3dm, where XXXXX is a %05d format of N. The file is in the directory named ON_DebugWriteObjectDirectory(). See Also: ON_DebugWriteObject() ON_SetDebugWriteObjectDirectory();

◆ ON_DebugWriteObjectDirectory()

const ON_DECL wchar_t* ON_DebugWriteObjectDirectory ( )

Description: Get the directory where ON_DebugWriteObject() will write the .3dm file. Returns: The directory name or null if the name has not been set.

◆ ON_DebugWriteObjects()

ON_DECL int ON_DebugWriteObjects ( size_t  object_list_count,
const ON_Object *const *  object_list 
)

Description: ON_DebugWriteObjects is a debugging utility that can be called from C++ or from a debugger's evaluate expression window to dump objects for future inspection. Parameters: object_list_count - [in] explicit object list count object_list - [in] object list Returns: If successful, an integer N > 0 which indicates the object was saved in a file named debug_file_XXXXX.3dm, where XXXXX is a %05d format of N. The file is in the directory named ON_DebugWriteObjectDirectory(). See Also: ON_DebugWriteObject() ON_SetDebugWriteObjectDirectory();

◆ ON_DebugWritePoint()

ON_DECL int ON_DebugWritePoint ( const class ON_3dPoint p3dPoint)

Description: ON_DebugWritePoint is a debugging utility that can be called from C++ or from a debugger's evaluate expression window to dump 3d points for future inspection. Parameters: p3dPoint - [in] Returns: If successful, an integer N > 0 which indicates the object was saved in a file named debug_file_XXXXX.3dm, where XXXXX is a %05d format of N. The file is in the directory named ON_DebugWriteObjectDirectory(). See Also: ON_DebugWriteObject() ON_SetDebugWriteObjectDirectory()

◆ ON_DebugWritePoints()

ON_DECL int ON_DebugWritePoints ( const double *  pPoint,
int  dim,
bool  is_rat,
int  count 
)

Description: ON_DebugWritePoints is a debugging utility that can be called from C++ or from a debugger's evaluate expression window to dump an array of points as a 3d ON_PointCloud for future inspection. Parameters: pPoint - [in] dim - [in] dimension of points must be 2 or 3 is_rat -[in] true if points are homogeneous count - [in] number of points Returns: If successful, an integer N > 0 which indicates the object was saved in a file named debug_file_XXXXX.3dm, where XXXXX is a %05d format of N. The file is in the directory named ON_DebugWriteObjectDirectory(). See Also: ON_DebugWriteObject() ON_SetDebugWriteObjectDirectory()

◆ ON_DecalCRCFromNode()

ON__UINT32 ON_DECL ON_DecalCRCFromNode ( const ON_XMLNode node)

For internal use only.

◆ ON_DecimalHoursFromHMS()

ON_DECL double ON_DecimalHoursFromHMS ( int  hour,
int  minute,
int  second 
)

Description: Converts a time specified as hour, minute and second to a decimal hours value. Example: hour=9, minute=30, second=0 -> result is 9.5 Parameters: hour - [in] The hour value of the time. minute - [in] The minute value of the time. second - [in] The second value of the time. Returns: The decimal hours value corresponding to the hour, minute and second.

◆ ON_DecimalHoursToHMS() [1/2]

ON_DECL void ON_DecimalHoursToHMS ( double  hours,
int &  hour,
int &  minute,
int &  second 
)

Description: Converts a time specified as decimal hours to hour, minute and second. Guaranteed to produce a valid hour, minute and second result. Example: hours=9.5 -> result is hour=9, minute=30, second=0.

Parameters: hours - [in] The decimal hours value of the time. If not in range 0..23 it will be 'unwound' to be in range. hour - [out] The hour value of the time specified by 'hours'. minute - [out] The minute value of the time specified by 'hours'. second - [out] The second value of the time specified by 'hours'.

◆ ON_DecimalHoursToHMS() [2/2]

ON_DECL void ON_DecimalHoursToHMS ( double  hours,
int &  hour,
int &  minute,
int &  second,
int &  year,
int &  month,
int &  day 
)

Description: Converts a time specified as decimal hours to hour, minute and second. Guaranteed to produce a valid hour, minute and second result. Example: hours=9.5 -> result is hour=9, minute=30, second=0. Because of rounding, a value such as 23.99999 will come out as midnight the next day. Therefore, the year, month and day are also passed in so that they can be adjusted if necessary. Example: hours=23.99999 -> result is hour=0, minute=0, second=0 and date is incremented by one day.

Parameters: hours - [in] The decimal hours value of the time. If not in range 0..23 it will be 'unwound' to be in range. hour - [out] The hour value of the time specified by 'hours'. minute - [out] The minute value of the time specified by 'hours'. second - [out] The second value of the time specified by 'hours'. year - [in/out] The year value of the date, adjusted if necessary. month - [in/out] The month value of the date, adjusted if necessary. day - [in/out] The day value of the date, adjusted if necessary.

◆ ON_DecodeSwapByteUTF16()

ON_DECL int ON_DecodeSwapByteUTF16 ( const ON__UINT16 sUTF16,
int  sUTF16_count,
struct ON_UnicodeErrorParameters e,
ON__UINT32 unicode_code_point 
)

Description: Decode a UTF-16 encode string whose elements have byte order opposite native byte order to get a single unicode code point. Parameters: sUTF16 - [in] UTF-16 string to convert with byte order opposite the CPU's native byte order.

sUTF16_count - [in] number of ON__UINT16 elements in sUTF16[].

e - [in/out] If e is null, errors are not masked and parsing is performed to the point where the first error occurs. If e is not null, all errors are reported by setting the appropriate e->m_error_status bits and errors are handled as described in the definition of the ON_UnicodeErrorParameters struct.

ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::MaskErrors; or ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::FailOnErrors; are good ways to initialize the input values.

unicode_code_point - [out] The unicode_code_point pointer must not be null. If a nonzero value is returned, then *unicode_code_point is a valid unicode code point value in the CPU's native byte order. Returns: Number of elements of sUTF16 that were parsed. 0: Nothing was decoded. The input value of *unicode_code_point is not changed. See e->m_error_status. 1: If no error occurred, then sUTF16[0] was decoded as a valid UTF-16 singleton. See e for masked errors. 2: If no error occurred, then sUTF16[0],sUTF16[1] was decoded as a valid UTF-16 surrogate pair. See e for masked errors. n >= 3: sUTF16[0],..,sUTF16[n-1] did not forma valid UTF-16 encoding and were parsed as reasonably as possible. See e for masked errors.

◆ ON_DecodeSwapByteUTF32()

ON_DECL int ON_DecodeSwapByteUTF32 ( const ON__UINT32 sUTF32,
int  sUTF32_count,
struct ON_UnicodeErrorParameters e,
ON__UINT32 unicode_code_point 
)

Description: Decode a UTF-32 string whose elements have byte order opposite the native CPU's to get a single unicode code point. Parameters: sUTF32 - [in] UTF-32 string to convert with byte order opposite the CPU's native byte order.

sUTF32_count - [in] number of ON__UINT32 elements in sUTF32[].

e - [in/out] If e is null, errors are not masked and parsing is performed to the point where the first error occurs. If e is not null, all errors are reported by setting the appropriate e->m_error_status bits and errors are handled as described in the definition of the ON_UnicodeErrorParameters struct.

ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::MaskErrors; or ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::FailOnErrors; are good ways to initialize the input values.

unicode_code_point - [out] The unicode_code_point pointer must not be null. If a nonzero value is returned, then *unicode_code_point is a valid unicode code point value in the CPU's native byte order. Returns: Number of elements of sUTF32 that were parsed. 0: Nothing was decoded. The input value of *unicode_code_point is not changed. See e->m_error_status. 1: If no error occurred, then sUTF32[0] was decoded was a valid UTF-32 value. See e for masked errors. 2: sUTF32[0],sUTF32[1] had values of a valid UTF-16 surrogate pair and e indicated to mask this error. The UTF-16 code point value was returned and e was set to indicate the error occurred.

◆ ON_DecodeUTF16()

ON_DECL int ON_DecodeUTF16 ( const ON__UINT16 sUTF16,
int  sUTF16_count,
struct ON_UnicodeErrorParameters e,
ON__UINT32 unicode_code_point 
)

Description: Decode a UTF-16 string in native byte order to get a single unicode code point. Parameters: sUTF16 - [in] UTF-16 string in native byte order to convert.

sUTF16_count - [in] number of ON__UINT16 elements in sUTF16[].

e - [in/out] If e is null, errors are not masked and parsing is performed to the point where the first error occurs. If e is not null, all errors are reported by setting the appropriate e->m_error_status bits and errors are handled as described in the definition of the ON_UnicodeErrorParameters struct.

ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::MaskErrors; or ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::FailOnErrors; are good ways to initialize the input values.

unicode_code_point - [out] The unicode_code_point pointer must not be null. If a nonzero value is returned, then *unicode_code_point is a valid unicode code point value in the CPU's native byte order. Returns: Number of elements of sUTF16 that were parsed. 0: Nothing was decoded. The input value of *unicode_code_point is not changed. See e->m_error_status. 1: If no error occurred, then sUTF16[0] was decoded as a valid UTF-16 singleton. See e for masked errors. 2: If no error occurred, then sUTF16[0],sUTF16[1] was decoded as a valid UTF-16 surrogate pair. See e for masked errors. n >= 3: sUTF16[0],..,sUTF16[n-1] did not form a valid UTF-16 encoding and were parsed as reasonably as possible. See e for masked errors.

◆ ON_DecodeUTF16BE()

ON_DECL int ON_DecodeUTF16BE ( const ON__UINT16 sUTF16,
int  sUTF16_count,
struct ON_UnicodeErrorParameters e,
ON__UINT32 unicode_code_point 
)

Description: Decode a UTF-16 big endian byte order string to get a single unicode code point. Parameters: sUTF16 - [in] UTF-16 big endian byte order string to convert.

sUTF16_count - [in] number of ON__UINT16 elements in sUTF16[].

e - [in/out] If e is null, errors are not masked and parsing is performed to the point where the first error occurs. If e is not null, all errors are reported by setting the appropriate e->m_error_status bits and errors are handled as described in the definition of the ON_UnicodeErrorParameters struct.

ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::MaskErrors; or ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::FailOnErrors; are good ways to initialize the input values.

unicode_code_point - [out] The unicode_code_point pointer must not be null. If a nonzero value is returned, then *unicode_code_point is a valid unicode code point value in the CPU's native byte order. Returns: Number of elements of sUTF16 that were parsed. 0: Nothing was decoded. The input value of *unicode_code_point is not changed. See e->m_error_status. 1: If no error occurred, then sUTF16[0] was decoded as a valid UTF-16 singleton. See e for masked errors. 2: If no error occurred, then sUTF16[0],sUTF16[1] was decoded as a valid UTF-16 surrogate pair. See e for masked errors. n >= 3: sUTF16[0],..,sUTF16[n-1] did not form a valid UTF-16 encoding and were parsed as reasonably as possible. See e for masked errors.

◆ ON_DecodeUTF16LE()

ON_DECL int ON_DecodeUTF16LE ( const ON__UINT16 sUTF16,
int  sUTF16_count,
struct ON_UnicodeErrorParameters e,
ON__UINT32 unicode_code_point 
)

Description: Decode a UTF-16 little endian byte order string to get a single unicode code point. Parameters: sUTF16 - [in] UTF-16 little endian byte order string to convert.

sUTF16_count - [in] number of ON__UINT16 elements in sUTF16[].

e - [in/out] If e is null, errors are not masked and parsing is performed to the point where the first error occurs. If e is not null, all errors are reported by setting the appropriate e->m_error_status bits and errors are handled as described in the definition of the ON_UnicodeErrorParameters struct.

ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::MaskErrors; or ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::FailOnErrors; are good ways to initialize the input values.

unicode_code_point - [out] The unicode_code_point pointer must not be null. If a nonzero value is returned, then *unicode_code_point is a valid unicode code point value in the CPU's native byte order. Returns: Number of elements of sUTF16 that were parsed. 0: Nothing was decoded. The input value of *unicode_code_point is not changed. See e->m_error_status. 1: If no error occurred, then sUTF16[0] was decoded as a valid UTF-16 singleton. See e for masked errors. 2: If no error occurred, then sUTF16[0],sUTF16[1] was decoded as a valid UTF-16 surrogate pair. See e for masked errors. n >= 3: sUTF16[0],..,sUTF16[n-1] did not form a valid UTF-16 encoding and were parsed as reasonably as possible. See e for masked errors.

◆ ON_DecodeUTF16SurrogatePair()

ON_DECL unsigned int ON_DecodeUTF16SurrogatePair ( unsigned int  u1,
unsigned int  u2,
unsigned int  error_code_point 
)

Parameters: w1 - [in] w2 - in] error_code_point - [in] Value returned when (w1,w2) is not a value UTF-16 surrogate pair. Depending on what you are doing, good choices are 0, ON_UnicodeCodePoint::ON_ReplacementCharacter, and and ON_UnicodeCodePoint::ON_InvalidCodePoint Returns: If (w1,w2) is a valid UTF-16 surrogate pair, the corresponding unicode code point is returned. This value is always > 0. Otherwise, error_code_point is returned.

◆ ON_DecodeUTF32()

ON_DECL int ON_DecodeUTF32 ( const ON__UINT32 sUTF32,
int  sUTF32_count,
struct ON_UnicodeErrorParameters e,
ON__UINT32 unicode_code_point 
)

Description: Decode a UTF-32 native byte order string to get a single unicode code point. Parameters: sUTF32 - [in] UTF-32 native byte order string to convert.

sUTF32_count - [in] number of ON__UINT32 elements in sUTF32[].

e - [in/out] If e is null, errors are not masked and parsing is performed to the point where the first error occurs. If e is not null, all errors are reported by setting the appropriate e->m_error_status bits and errors are handled as described in the definition of the ON_UnicodeErrorParameters struct.

ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::MaskErrors; or ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::FailOnErrors; are good ways to initialize the input values.

unicode_code_point - [out] The unicode_code_point pointer must not be null. If a nonzero value is returned, then *unicode_code_point is a valid unicode code point value in the CPU's native byte order. Returns: Number of elements of sUTF32 that were parsed. 0: Nothing was decoded. The input value of *unicode_code_point is not changed. See e->m_error_status. 1: If no error occurred, then sUTF32[0] was decoded was a valid UTF-32 value. See e for masked errors. 2: sUTF32[0],sUTF32[1] had values of a valid UTF-16 surrogate pair and e indicated to mask this error. The UTF-16 code point value was returned and e was set to indicate the error occurred.

◆ ON_DecodeUTF32BE()

ON_DECL int ON_DecodeUTF32BE ( const ON__UINT32 sUTF32,
int  sUTF32_count,
struct ON_UnicodeErrorParameters e,
ON__UINT32 unicode_code_point 
)

Description: Decode a UTF-32 big endian byte order string to get a single unicode code point. Parameters: sUTF32 - [in] UTF-32 big byte order string to convert.

sUTF32_count - [in] number of ON__UINT32 elements in sUTF32[].

e - [in/out] If e is null, errors are not masked and parsing is performed to the point where the first error occurs. If e is not null, all errors are reported by setting the appropriate e->m_error_status bits and errors are handled as described in the definition of the ON_UnicodeErrorParameters struct.

ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::MaskErrors; or ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::FailOnErrors; are good ways to initialize the input values.

unicode_code_point - [out] The unicode_code_point pointer must not be null. If a nonzero value is returned, then *unicode_code_point is a valid unicode code point value in the CPU's native byte order. Returns: Number of elements of sUTF32 that were parsed. 0: Nothing was decoded. The input value of *unicode_code_point is not changed. See e->m_error_status. 1: If no error occurred, then sUTF32[0] was decoded was a valid UTF-32 value. See e for masked errors. 2: sUTF32[0],sUTF32[1] had values of a valid UTF-16 surrogate pair and e indicated to mask this error. The UTF-16 code point value was returned and e was set to indicate the error occurred.

◆ ON_DecodeUTF32LE()

ON_DECL int ON_DecodeUTF32LE ( const ON__UINT32 sUTF32,
int  sUTF32_count,
struct ON_UnicodeErrorParameters e,
ON__UINT32 unicode_code_point 
)

Description: Decode a UTF-32 little endian byte order string to get a single unicode code point. Parameters: sUTF32 - [in] UTF-32 little byte order string to convert.

sUTF32_count - [in] number of ON__UINT32 elements in sUTF32[].

e - [in/out] If e is null, errors are not masked and parsing is performed to the point where the first error occurs. If e is not null, all errors are reported by setting the appropriate e->m_error_status bits and errors are handled as described in the definition of the ON_UnicodeErrorParameters struct.

ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::MaskErrors; or ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::FailOnErrors; are good ways to initialize the input values.

unicode_code_point - [out] The unicode_code_point pointer must not be null. If a nonzero value is returned, then *unicode_code_point is a valid unicode code point value in the CPU's native byte order. Returns: Number of elements of sUTF32 that were parsed. 0: Nothing was decoded. The input value of *unicode_code_point is not changed. See e->m_error_status. 1: If no error occurred, then sUTF32[0] was decoded was a valid UTF-32 value. See e for masked errors. 2: sUTF32[0],sUTF32[1] had values of a valid UTF-16 surrogate pair and e indicated to mask this error. The UTF-16 code point value was returned and e was set to indicate the error occurred.

◆ ON_DecodeUTF8()

ON_DECL int ON_DecodeUTF8 ( const char *  sUTF8,
int  sUTF8_count,
struct ON_UnicodeErrorParameters e,
ON__UINT32 unicode_code_point 
)

Description: Decode a UTF-8 encode string to get a single unicode code point. Parameters: sUTF8 - [in] UTF-8 string to convert.

sUTF8_count - [in] number of char elements in sUTF8[].

e - [in/out] If e is null, errors are not masked and parsing is performed to the point where the first error occurs. If e is not null, all errors are reported by setting the appropriate e->m_error_status bits and errors are handled as described in the definition of the ON_UnicodeErrorParameters struct.

ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::MaskErrors; or ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::FailOnErrors; are good ways to initialize the input values.

unicode_code_point - [out] The unicode_code_point pointer must not be null. If a nonzero value is returned, then *unicode_code_point is a valid unicode code point value. Returns: Number of elements of sUTF8 that were parsed. 0 indicates failure.

◆ ON_DecodeWideChar()

ON_DECL int ON_DecodeWideChar ( const wchar_t *  sWideChar,
int  sWideChar_count,
struct ON_UnicodeErrorParameters e,
ON__UINT32 unicode_code_point 
)

Description: Decode a UTF-16 encode string whose elements have byte order opposite the native CPU's to get a single unicode code point. Parameters: sWideChar - [in] wchar_t string to convert.

sWideChar_count - [in] number of wchar_t elements in sWideChar[].

e - [in/out] If e is null, errors are not masked and parsing is performed to the point where the first error occurs. If e is not null, all errors are reported by setting the appropriate e->m_error_status bits and errors are handled as described in the definition of the ON_UnicodeErrorParameters struct.

ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::MaskErrors; or ON_UnicodeErrorParameters e = ON_UnicodeErrorParameters::FailOnErrors; are good ways to initialize the input values.

unicode_code_point - [out] The unicode_code_point pointer must not be null. If a nonzero value is returned, then *unicode_code_point is a valid unicode code point value in the CPU's native byte order. Returns: Number of elements of sUTF16 that were parsed. 0: Nothing was decoded. The input value of *unicode_code_point is not changed. See e->m_error_status. 1: If no error occurred, then sWideChar[0] was decoded as a valid wchar_t singleton. See e for masked errors. n>=2: If no error occurred, then sWideChar[0],..,sWideChar[n-1] was decoded as a valid wchar_t multi-element encoding. Typically, UTF-16 surrogate pair or UTF-8 multi-byte sequence. See e for masked errors.

◆ ON_DecomposeVector()

ON_DECL int ON_DecomposeVector ( const ON_3dVector V,
const ON_3dVector A,
const ON_3dVector B,
double *  x,
double *  y 
)

Description: Finds scalars x and y so that the component of V in the plane of A and B is x*A + y*B. Parameters: V - [in] A - [in] nonzero and not parallel to B B - [in] nonzero and not parallel to A x - [out] y - [out] Returns: 1 - The rank of the problem is 2. The decomposition is unique. 0 - The rank less than 2. Either there is no solution or there are infinitely many solutions.

See Also: ON_Solve2x2

◆ ON_DegreesFromRadians()

ON_DECL double ON_DegreesFromRadians ( double  angle_in_radians)

Parameters: angle_in_radians - [in] Angle measure in radians Returns: Angle measure in degrees

◆ ON_Disableonmalloc()

ON_DECL void ON_Disableonmalloc ( )

◆ ON_DollyExtents()

ON_DECL bool ON_DollyExtents ( const ON_Viewport current_vp,
ON_BoundingBox  camcoord_bbox,
ON_Viewport zoomed_vp 
)

Dolly the camera location and so that the view frustum contains camcoord_bbox and the volume of camcoord_bbox fills the frustum. If the projection is perspective, the camera angle is not changed. Parameters: current_vp - [in] Current projection, must be valid. camcoord_bbox - [in] Valid bounding box in current_vp camera coordinates. zoomed_vp - [out] Can be the same as current_vp projection. Returns: True if successful.

◆ ON_DomainTolerance()

ON_DECL double ON_DomainTolerance ( double  ,
double   
)

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

◆ ON_DotProduct() [1/4]

ON_DECL double ON_DotProduct ( const ON_2dVector ,
const ON_2dVector  
)

ON_2dVector utilities

◆ ON_DotProduct() [2/4]

ON_DECL float ON_DotProduct ( const ON_2fVector ,
const ON_2fVector  
)

ON_2fVector utilities

◆ ON_DotProduct() [3/4]

ON_DECL double ON_DotProduct ( const ON_3dVector ,
const ON_3dVector  
)

ON_3dVector utilities

◆ ON_DotProduct() [4/4]

ON_DECL float ON_DotProduct ( const ON_3fVector ,
const ON_3fVector  
)

ON_3fVector utilities

◆ ON_DoubleFromFloat()

ON_DECL double ON_DoubleFromFloat ( float  x)

Returns: ON_UNSET_VALUE, if x = ON_UNSET_FLOAT. ON_UNSET_POSITIVE_VALUE, if x = ON_UNSET_POSITIVE_FLOAT. (double)x, otherwise.

◆ ON_DumpSquishInfoText()

ON_DECL void ON_DumpSquishInfoText ( const ON_Geometry squished_geometry,
ON_TextLog text_log,
const wchar_t *  objid_locale_str,
const wchar_t *  meshcount_locale_str 
)

◆ ON_DuplicateCurveTreeBezier()

ON_DECL ON_CurveTreeBezier* ON_DuplicateCurveTreeBezier ( const ON_CurveTreeBezier src)

◆ ON_DuplicateSurfaceTreeBezier()

ON_DECL ON_SurfaceTreeBezier* ON_DuplicateSurfaceTreeBezier ( const ON_SurfaceTreeBezier src)

◆ ON_EigenvectorPrecision()

ON_DECL double ON_EigenvectorPrecision ( const unsigned int  N,
const double *const *  M,
bool  bTransposeM,
double  lambda,
const double *  eigenvector 
)

◆ ON_EnableDebugBreak()

ON_DECL void ON_EnableDebugBreak ( int  bEnableDebugBreak)

◆ ON_EnableDebugBreakOnFirstError()

ON_DECL void ON_EnableDebugBreakOnFirstError ( int  bEnableDebugBreak)

◆ ON_EnableDebugErrorMessage()

ON_DECL void ON_EnableDebugErrorMessage ( int  bEnableDebugErrorMessage)

◆ ON_EncodeUTF16()

ON_DECL int ON_EncodeUTF16 ( ON__UINT32  unicode_code_point,
ON__UINT16  sUTF16[2] 
)

Description: Convert a 4 byte unicode code point value to its UTF-16 form. Parameters: unicode_code_point - [in] 4 byte unicode code point value in the CPU's native byte order. Valid values are in the interval [0,0xD7FF] or the interval [0xE000,0x10FFFF]. sUTF16 - [out] sUTF16 is buffer of 2 ON__UINT16 elements. If the UTF-16 form is a single value, it is returned in sUTF16[0]. If the UTF-16 is a surrogate pair, the first code unit (high surrogate) is returned sUTF16[0] and the second unit (low surrogate) is returned in sUTF16[1]. The returned values are in the CPU's native byte order. Returns: 0: u is not a valid Unicode code point. No changes are made to the sUTF16[] values. 1: u is a valid Unicode code point with a UTF-16 form consisting of the single value returned in sUTF16[0]. 2: u is a valid Unicode code point with a UTF-16 form consisting of a surrogate pair returned in sUTF16[0] and sUTF16[1].

◆ ON_EncodeUTF8()

ON_DECL int ON_EncodeUTF8 ( ON__UINT32  u,
char  sUTF8[6] 
)

Description: Convert valid unicode code point values to its UTF-8 form and use the same encoding calculation for other integers with values <= 0x7FFFFFFF. When strict UTF-8 encoding is desired, the caller is responsible for insuring the value of u is a valid unicode codepoint. Parameters: u - [in] Integer in the CPU's native byte order in the interval [0,2147483647]. sUTF8 - [out] sUTF8 is a buffer of 6 char elements and the UTF-8 form is returned in sUTF8[]. The returned value specifies how many elements of sUTF8[] are set. Returns: 0: u is too large (>=2^31) to be encode. No changes are made to the sUTF8[] values. 1: the UTF-8 form of u is 1 byte returned in sUTF8[0]. 2: the UTF-8 form of u is 2 bytes returned in sUTF8[0],sUTF8[1]. 3: the UTF-8 form of u is 3 bytes returned in sUTF8[0],sUTF8[1],sUTF8[2]. 4: the UTF-8 form of u is 4 bytes returned in sUTF8[0],sUTF8[1],sUTF8[2],sUTF8[3]. Note: The maximum valid unicode codepoint is 0x10FFFF. Values of u > 0x10FFFF and u <= 0x1FFFFF are encoded to 4 bytes using the same algorithm. 5: the Universal Character Set form of u is 5 bytes returned in sUTF8[0],sUTF8[1],sUTF8[2],sUTF8[3],sUTF8[4]. 6: the Universal Character Set form of u is 6 bytes returned in sUTF8[0],sUTF8[1],sUTF8[2],sUTF8[3],sUTF8[4],sUTF8[5]. For return values requiring less than 6 bytes, no changes are made to the unused bytes in sUTF8[]. Remarks: Any integer in the range 0 to 2^31 - 1 can be encoded. When a unicode string is being encoded take steps to ensure that u is a valid unicode code point value.
The function ON_IsValidUnicodeCodePoint() can be used to determine if u is a valid unicode code point value.

◆ ON_EncodeWideChar()

ON_DECL int ON_EncodeWideChar ( ON__UINT32  code_point,
size_t  w_capacity,
wchar_t *  w 
)

Description: Convert unicode code point values to its wide char form. Parameters: code_point - [in] Unicode code point in the CPU's native byte order. w_capacity - [in] If the platform wchar_t encoding is UTF-32, then w_capacity >= 1 is sufficient. If the platform wchar_t encoding is UTF-16, then w_capacity >= 2 is sufficient. If the platform wchar_t encoding is UTF-8, then w_capacity >= 6 is sufficient. w - [out] w is a buffer of w_capacity wchar_t elements and the wide char encoding of code_point is returned in w[]. The returned value specifies how many elements of w[] are set. When w_capacity > the returned value, the encoding is null terminated. Returns: 0: Invalid input (code_point is not a valid Unicode code point or w is nullptr). No changes are made to the w[] values. 1: the wchar_t encoding of code_point is 1 wchar_t element returned in w[0]. 2: the wchar_t encoding form of code_point is 2 wchar_t element returned in w[0],w[1]. 3: the UTF-8 wchar_t encoding form of code_point is 3 wchar_t element returned in w[0],w[1],w[2]. 4: the UTF-8 wchar_t encoding form of code_point is 4 wchar_t element returned in w[0],w[1],w[2],w[3]. 5: the UTF-8 wchar_t encoding form of code_point is 5 wchar_t element returned in w[0],w[1],w[2],w[3],w[4]. 6: the UTF-8 wchar_t encoding form of code_point is 6 wchar_t element returned in w[0],w[1],w[2],w[3],w[4],w[5].

◆ ON_Error()

ON_DECL void ON_VARGS_FUNC_CDECL ON_Error ( const char *  file_name,
int  line_number,
const char *  format,
  ... 
)

◆ ON_ErrorEx()

ON_DECL void ON_VARGS_FUNC_CDECL ON_ErrorEx ( const char *  file_name,
int  line_number,
const char *  function_name,
const char *  format,
  ... 
)

◆ ON_ErrorMessage()

ON_BEGIN_EXTERNC ON_DECL void ON_ErrorMessage ( int  ,
const char *   
)

/ All error/warning messages are sent to ON_ErrorMessage(). Replace the / default handler (defined in opennurbs_error_message.cpp) with something / that is appropriate for debugging your application.

◆ ON_EvaluateBernsteinBasis()

ON_DECL double ON_EvaluateBernsteinBasis ( int  ,
int  ,
double   
)

◆ ON_EvaluateBezier()

ON_DECL bool ON_EvaluateBezier ( int  ,
bool  ,
int  ,
int  ,
const double *  ,
double  ,
double  ,
int  ,
double  ,
int  ,
double *   
)

◆ ON_EvaluatedeCasteljau()

ON_DECL void ON_EvaluatedeCasteljau ( int  ,
int  ,
int  ,
int  ,
double *  ,
double   
)

◆ ON_EvaluateNurbsBasis()

ON_DECL bool ON_EvaluateNurbsBasis ( int  order,
const double *  knot,
double  t,
double *  N 
)

Description: Evaluate B-spline basis functions

Parameters: order - [in] order >= 1 d = degree = order - 1 knot - [in] array of length 2*d.
Generally, knot[0] <= ... <= knot[d-1] < knot[d] <= ... <= knot[2*d-1]. These are the knots that are active for the span being evaluated. t - [in] Evaluation parameter. Typically knot[d-1] <= t <= knot[d]. In general t may be outside the interval knot[d-1],knot[d]. This can happen when some type of extrapolation is being used and is almost always a bad idea in practical situations.

N - [out] double array with capacity order*order. The returned values are:

If "N" were declared as double N[order][order], then

           k

N[d-k][i] = N (t) = value of i-th degree k basis function at t. i where 0 <= k <= d and k <= i <= d.

In particular, N[0], ..., N[d] - values of degree d basis functions. The "lower left" triangle is not initialized.

Actually, the above is true when knot[d-1] <= t < knot[d]. Otherwise, the value returned is the value of the polynomial that agrees with N_i^k on the half open domain [ knot[d-1], knot[d] )

COMMENTS: If a degree d NURBS has n control points, then the OpenNURBS knot vector for the entire NURBS curve has length d+n-1. The knot[] parameter to this function points to the 2*d knots active for the span being evaluated.

Most literature, including DeBoor and The NURBS Book, duplicate the Opennurbs start and end knot values and have knot vectors of length d+n+1. The extra two knot values are completely superfluous when degree >= 1.

Assume C is a B-spline of degree d (order=d+1) with n control vertices (n>=d+1) and knot[] is its knot vector. Then

C(t) = Sum( 0 <= i < n, N_{i}(t) * C_{i} )

where N_{i} are the degree d b-spline basis functions and C_{i} are the control vertices. The knot[] array length d+n-1 and satisfies

knot[0] <= ... <= knot[d-1] < knot[d] knot[n-2] < knot[n-1] <= ... <= knot[n+d-2] knot[i] < knot[d+i] for 0 <= i < n-1 knot[i] <= knot[i+1] for 0 <= i < n+d-2

The domain of C is [ knot[d-1], knot[n-1] ].

The support of N_{i} is [ knot[i-1], knot[i+d] ).

If d-1 <= k < n-1 and knot[k] <= t < knot[k+1], then N_{i}(t) = 0 if i <= k-d = 0 if i >= k+2 = B[i-k+d-1] if k-d+1 <= i <= k+1, where B[] is computed by the call ON_EvaluateNurbsBasis( d+1, knot+k-d+1, t, B );

If 0 <= j < n-d, 0 <= m <= d, knot[j+d-1] <= t < knot[j+d], and B[] is computed by the call ON_EvaluateNurbsBasis( d+1, knot+j, t, B ), then N_{j+m}(t) = B[m].

◆ ON_EvaluateNurbsBasisDerivatives()

ON_DECL bool ON_EvaluateNurbsBasisDerivatives ( int  order,
const double *  knot,
int  der_count,
double *  N 
)

Description: Calculate derivatives of B-spline basis functions. INPUT: order - [in] order >= 1 d = degree = order - 1 knot - [in] array of length 2*d.
Generally, knot[0] <= ... <= knot[d-1] < knot[d] <= ... <= knot[2*d-1]. These are the knots that are active for the span being evaluated. der_count - [in] 1 <= der_count < order Number of derivatives. Note all B-spline basis derivatives with der_count >= order are identically zero.

N - [in] The input value of N[] should be the results of the call ON_EvaluateNurbsBasis( order, knot, t, N );

N - [out] If "N" were declared as double N[order][order], then

                            d

N[d-k][i] = k-th derivative of N (t) i

where 0 <= k <= d and 0 <= i <= d.

In particular, N[0], ..., N[d] - values of degree d basis functions. N[order], ..., N[order_d] - values of first derivative.

◆ ON_EvaluateNurbsBlossom()

ON_DECL bool ON_EvaluateNurbsBlossom ( int  ,
int  ,
int  ,
const double *  ,
const double *  ,
const double *  ,
double *   
)

◆ ON_EvaluateNurbsCageSpan()

ON_DECL bool ON_EvaluateNurbsCageSpan ( int  dim,
bool  is_rat,
int  order0,
int  order1,
int  order2,
const double *  knot0,
const double *  knot1,
const double *  knot2,
int  cv_stride0,
int  cv_stride1,
int  cv_stride2,
const double *  cv,
int  der_count,
double  t0,
double  t1,
double  t2,
int  v_stride,
double *  v 
)

Description: Evaluate a NURBS cage trispan. Parameters: dim - [in] >0 is_rat - [in] true of false order0 - [in] >= 2 order1 - [in] >= 2 order2 - [in] >= 2 knot0 - [in] NURBS knot vector with 2*(order0-1) knots, knot0[order0-2] != knot0[order0-1] knot1 - [in] NURBS knot vector with 2*(order1-1) knots, knot1[order1-2] != knot1[order1-1] knot2 - [in] NURBS knot vector with 2*(order1-1) knots, knot2[order2-2] != knot2[order2-1] cv_stride0 - [in] cv_stride1 - [in] cv_stride2 - [in] cv - [in] For 0 <= i < order0, 0 <= j < order1, and 0 <= k < order2, the (i,j,k)-th control vertex is

  cv[n],...,cv[n+(is_rat?dim:dim+1)], 

where n = i*cv_stride0 + j*cv_stride1 *k*cv_stride2.
If is_rat is true the cv is in homogeneous form.

der_count - [in] (>=0) r - [in] s - [in] t - [in] (r,s,t) is the evaluation parameter v_stride - [in] (>=dim) v - [out] An array of length v_stride*(der_count+1)*(der_count+2)*(der_count+3)/6. The evaluation results are stored in this array.

P = v[0],...,v[m_dim-1] Dr = v[v_stride],... Ds = v[2*v_stride],... Dt = v[3*v_stride],... Drr = v[4*v_stride],... Drs = v[5*v_stride],... Drt = v[6*v_stride],... Dss = v[7*v_stride],... Dst = v[8*v_stride],... Dtt = v[9*v_stride],...

In general, Dr^i Ds^j Dt^k is returned in v[n],...,v[n+dim-1], where

d = (i+j+k) n = v_stride*( d*(d+1)*(d+2)/6 + (j+k)*(j+k+1)/2 + k)

Returns: True if successful. See Also: ON_NurbsCage::Evaluate ON_EvaluateNurbsSpan ON_EvaluateNurbsSurfaceSpan

◆ ON_EvaluateNurbsDeBoor()

ON_DECL bool ON_EvaluateNurbsDeBoor ( int  ,
int  ,
int  ,
double *  ,
const double *  ,
int  ,
double  ,
double   
)

◆ ON_EvaluateNurbsSpan()

ON_DECL bool ON_EvaluateNurbsSpan ( int  dim,
bool  is_rat,
int  order,
const double *  knot,
int  cv_stride,
const double *  cv,
int  der_count,
double  t,
int  v_stride,
double *  v 
)

Description: Evaluate a NURBS curve span. Parameters: dim - [in] dimension (> 0). is_rat - [in] true or false. order - [in] order=degree+1 (order>=2) knot - [in] NURBS knot vector. NURBS knot vector with 2*(order-1) knots, knot[order-2] != knot[order-1] cv_stride - [in] cv - [in] For 0 <= i < order the i-th control vertex is

  cv[n],...,cv[n+(is_rat?dim:dim+1)], 

where n = i*cv_stride. If is_rat is true the cv is in homogeneous form. der_count - [in] number of derivatives to evaluate (>=0) t - [in] evaluation parameter v_stride - [in] v - [out] An array of length v_stride*(der_count+1). The evaluation results are returned in this array.

      P = v[0],...,v[m_dim-1]
      Dt = v[v_stride],...
      Dtt = v[2*v_stride],...
      ...

    In general, Dt^i returned in v[n],...,v[n+m_dim-1], where

      n = v_stride*i.

Returns: True if successful. See Also: ON_NurbsCurve::Evaluate ON_EvaluateNurbsSurfaceSpan ON_EvaluateNurbsCageSpan

◆ ON_EvaluateNurbsSurfaceSpan()

ON_DECL bool ON_EvaluateNurbsSurfaceSpan ( int  dim,
bool  is_rat,
int  order0,
int  order1,
const double *  knot0,
const double *  knot1,
int  cv_stride0,
int  cv_stride1,
const double *  cv,
int  der_count,
double  s,
double  t,
int  v_stride,
double *  v 
)

Description: Evaluate a NURBS surface bispan. Parameters: dim - [in] >0 is_rat - [in] true of false order0 - [in] >= 2 order1 - [in] >= 2 knot0 - [in] NURBS knot vector with 2*(order0-1) knots, knot0[order0-2] != knot0[order0-1] knot1 - [in] NURBS knot vector with 2*(order1-1) knots, knot1[order1-2] != knot1[order1-1] cv_stride0 - [in] cv_stride1 - [in] cv - [in] For 0 <= i < order0 and 0 <= j < order1, the (i,j) control vertex is

  cv[n],...,cv[n+(is_rat?dim:dim+1)], 

where n = i*cv_stride0 + j*cv_stride1. If is_rat is true the cv is in homogeneous form.

der_count - [in] (>=0) s - [in] t - [in] (s,t) is the evaluation parameter v_stride - [in] (>=dim) v - [out] An array of length v_stride*(der_count+1)*(der_count+2)/2. The evaluation results are stored in this array.

P = v[0],...,v[m_dim-1] Ds = v[v_stride],... Dt = v[2*v_stride],... Dss = v[3*v_stride],... Dst = v[4*v_stride],... Dtt = v[5*v_stride],...

In general, Ds^i Dt^j is returned in v[n],...,v[n+m_dim-1], where

n = v_stride*( (i+j)*(i+j+1)/2 + j).

Returns: True if successful. See Also: ON_NurbsSurface::Evaluate ON_EvaluateNurbsSpan ON_EvaluateNurbsCageSpan

◆ ON_EvaluateQuotientRule()

ON_DECL bool ON_EvaluateQuotientRule ( int  dim,
int  der_count,
int  v_stride,
double *  v 
)

Description: Use the quotient rule to compute derivatives of a one parameter rational function F(t) = X(t)/W(t), where W is a scalar and F and X are vectors of dimension dim. Parameters: dim - [in] der_count - [in] number of derivative (>=0) v_stride - [in] (>= dim+1) v - [in/out] v[] is an array of length (der_count+1)*v_stride. The input v[] array contains derivatives of the numerator and denominator functions in the order (X, W), (Xt, Wt), (Xtt, Wtt), ... In general, the (dim+1) coordinates of the d-th derivative are in (v[n],...,v[n+dim]) where n = d*v_stride. In the output v[] array the derivatives of X are replaced with the derivatives of F and the derivatives of W are divided by w = v[dim]. Returns: True if input is valid; i.e., v[dim] != 0. See Also: ON_EvaluateQuotientRule2 ON_EvaluateQuotientRule3

◆ ON_EvaluateQuotientRule2()

ON_DECL bool ON_EvaluateQuotientRule2 ( int  dim,
int  der_count,
int  v_stride,
double *  v 
)

Description: Use the quotient rule to compute partial derivatives of a two parameter rational function F(s,t) = X(s,t)/W(s,t), where W is a scalar and F and X are vectors of dimension dim. Parameters: dim - [in] der_count - [in] number of derivative (>=0) v_stride - [in] (>= dim+1) v - [in/out] v[] is an array of length (der_count+2)*(der_count+1)*v_stride. The input array contains derivatives of the numerator and denominator functions in the order X, W, Xs, Ws, Xt, Wt, Xss, Wss, Xst, Wst, Xtt, Wtt, ... In general, the (i,j)-th derivatives are in the (dim+1) entries of v[] v[k], ..., answer[k+dim], where k = ((i+j)*(i+j+1)/2 + j)*v_stride. In the output v[] array the derivatives of X are replaced with the derivatives of F and the derivatives of W are divided by w = v[dim]. Returns: True if input is valid; i.e., v[dim] != 0. See Also: ON_EvaluateQuotientRule ON_EvaluateQuotientRule3

◆ ON_EvaluateQuotientRule3()

ON_DECL bool ON_EvaluateQuotientRule3 ( int  dim,
int  der_count,
int  v_stride,
double *  v 
)

Description: Use the quotient rule to compute partial derivatives of a 3 parameter rational function F(r,s,t) = X(r,s,t)/W(r,s,t), where W is a scalar and F and X are vectors of dimension dim. Parameters: dim - [in] der_count - [in] number of derivative (>=0) v_stride - [in] (>= dim+1) v - [in/out] v[] is an array of length v_stride*(der_count+1)*(der_count+2)*(der_count+3)/6. The input v[] array contains derivatives of the numerator and denominator functions in the order (X, W), (Xr, Wr), (Xs, Ws), (Xt, Wt), (Xrr, Wrr), (Xrs, Wrs), (Xrt, Wrt), (Xss, Wss), (Xst, Wst), (Xtt, Wtt), ... In general, the (dim+1) coordinates of the derivative (Dr^i Ds^j Dt^k, i+j+k=d) are at v[n], ..., v[n+dim] where n = v_stride*( d*(d+1)*(d+2)/6 + (d-i)*(d-i+1)/2 + k ). In the output v[] array the derivatives of X are replaced with the derivatives of F and the derivatives of W are divided by w = v[dim]. Returns: True if input is valid; i.e., v[dim] != 0. See Also: ON_EvaluateQuotientRule ON_EvaluateQuotientRule2

◆ ON_EvaluateSurfaceSectionalCurvature()

ON_DECL void ON_EvaluateSurfaceSectionalCurvature ( const class ON_Surface surface,
const class ON_SectionAnalysisAppearance appearance,
ON_PlaneEquation  plane_eqn,
unsigned int  uv_point_count,
size_t  uv_point_stride,
const double *  uv_points,
ON_SimpleArray< ON_3dPoint > &  points,
ON_SimpleArray< ON_3dVector > &  curvatures,
ON_SimpleArray< ON_2dPoint > *  refined_uv_points 
)

Description: Evaluate the surface to set the ps.m_points[] and ps.m_curvatures[] values.

◆ ON_EvCurvature()

ON_DECL bool ON_EvCurvature ( const ON_3dVector ,
const ON_3dVector ,
ON_3dVector ,
ON_3dVector  
)

returns false if first derivative is zero

◆ ON_EvCurvature1Der()

ON_DECL bool ON_EvCurvature1Der ( const ON_3dVector D1,
const ON_3dVector D2,
const ON_3dVector D3,
ON_3dVector T,
ON_3dVector K,
double *  kprime,
double *  torsion 
)

torsion

Compute derivative of curvature as well as curvature and torsion. Returns false if either kprime or torsion are not well defined.

Parameters
D1first derivative of curve
D2second derivative of curve
D3third derivative of curve
TUnit tangent returned here
Kcurvature vector(k*N). curvature k = K.Length() and Normal N=K.Unitize()
kprimefirst derivative of k

◆ ON_EvJacobian()

ON_DECL bool ON_EvJacobian ( double  ,
double  ,
double  ,
double *   
)

return false if determinant is (nearly) singular

◆ ON_EvJerk()

ON_DECL bool ON_EvJerk ( ON_3dVector  D1,
ON_3dVector  D2,
ON_3dVector  D3,
ON_3dVector T,
ON_3dVector K,
ON_3dVector J 
)

Description: Evaluate the tangent, curvature and jerk from the first three curve derivatives. Parameters: D1 - [in] first derivative D2 - [in] second derivative D3 - [in] third derivative T - [out] unit tangent K - [out] curvature J - [out] jerk Returns: True if D1 is not zero and T,K,J can be properly calculated False if D1 is zero. Remarks: K = dT/ds = derivative of unit tangent with respect to arc length parameterization J = dK/ds = derivative of curvature with with respect to arc length parameterization

◆ ON_EvNormal()

ON_DECL bool ON_EvNormal ( int  ,
const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector ,
ON_3dVector  
)

◆ ON_EvNormalPartials()

ON_DECL bool ON_EvNormalPartials ( const ON_3dVector ds,
const ON_3dVector dt,
const ON_3dVector dss,
const ON_3dVector dst,
const ON_3dVector dtt,
ON_3dVector ns,
ON_3dVector nt 
)

Description: Evaluate partial derivatives of surface unit normal Parameters: ds - [in] dt - [in] surface first partial derivatives dss - [in] dst - [in] dtt - [in] surface second partial derivatives ns - [out] nt - [out] First partial derivatives of surface unit normal (If the Jacobian is degenerate, ns and nt are set to zero.) Returns: true if Jacobian is nondegenerate false if Jacobian is degenerate

◆ ON_EvNormalYank()

ON_DECL int ON_EvNormalYank ( const ON_Surface srf,
double  u,
double  v,
ON_3dVector  srfDirection,
ON_3dVector T,
ON_3dVector K,
ON_3dVector J,
ON_3dVector Y 
)

Description: Evaluate the normal tangent, curvature, jerk, and yank to a surface at a given parameter. Parameters: srf - [in] surface u - [in] surface parameter v - [in] surface parameter srfDirection - [in] a nonzero 3d vector that is not perpendicular to srf at (u,v) T - [out] unit tangent to surface (in the direction of the projection of srfDirection to the tangent plane at (u,v)). K - [out] normal curvature in direction of T J - [out] normal jerk Y - [out] normal yank Returns: 1 if T,K,J,Y can be properly calculated. 0 for failure -1 if srf is singular at u,v

◆ ON_EvPrincipalCurvatures() [1/2]

ON_DECL bool ON_EvPrincipalCurvatures ( const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector ,
double *  ,
double *  ,
double *  ,
double *  ,
ON_3dVector ,
ON_3dVector  
)

◆ ON_EvPrincipalCurvatures() [2/2]

ON_DECL bool ON_EvPrincipalCurvatures ( const ON_3dVector ,
const ON_3dVector ,
double  l,
double  m,
double  n,
const ON_3dVector ,
double *  ,
double *  ,
double *  ,
double *  ,
ON_3dVector ,
ON_3dVector  
)
Parameters
lDss*N Second fundamental form coefficients
mDst*N,
nDtt*N,

◆ ON_EvSectionalCurvature()

ON_DECL bool ON_EvSectionalCurvature ( const ON_3dVector S10,
const ON_3dVector S01,
const ON_3dVector S20,
const ON_3dVector S11,
const ON_3dVector S02,
const ON_3dVector planeNormal,
ON_3dVector K 
)

Description: Evaluate sectional curvature from surface derivatives and section plane normal. Parameters: S10, S01 - [in] surface 1st partial derivatives S20, S11, S02 - [in] surface 2nd partial derivatives planeNormal - [in] unit normal to section plane K - [out] Sectional curvature Curvature of the intersection curve of the surface and plane through the surface point where the partial derivatives were evaluated. Returns: True if successful. False if first partials are not linearly independent, in which case the K is set to zero.

◆ ON_EvTangent()

ON_DECL bool ON_EvTangent ( const ON_3dVector ,
const ON_3dVector ,
ON_3dVector  
)

returns false if the returned tangent is zero

◆ ON_EvYank()

ON_DECL bool ON_EvYank ( ON_3dVector  D1,
ON_3dVector  D2,
ON_3dVector  D3,
ON_3dVector  D4,
ON_3dVector T,
ON_3dVector K,
ON_3dVector J,
ON_3dVector Y 
)

Description: Evaluate the tangent, curvature, jerk, and yank from the first four curve derivatives. Parameters: D1 - [in] first derivative D2 - [in] second derivative D3 - [in] third derivative D3 - [in] forth derivative T - [out] unit tangent K - [out] curvature J - [out] jerk Y - [out] yank Returns: True if D1 is not zero and T,K,J,Y can be properly calculated False if D1 is zero. Remarks: K = dT/ds = derivative of unit tangent with respect to arc length parameterization J = dK/ds = derivative of curvature with respect to arc length parameterization Y = dJ/ds = derivative of jerk with respect to arc length parameterization

◆ ON_FindLocalMinimum()

int ON_FindLocalMinimum ( int(*)(void *, double, double *, double *)  ,
void *  ,
double  ,
double  ,
double  ,
double  ,
double  ,
int  ,
double *   
)

find a local minimum of a 1 parameter function

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

◆ ON_FindMeshMeshIntersectionSets()

ON_DECL bool ON_FindMeshMeshIntersectionSets ( ON_SimpleArray< ON_MMX_POINT > &  pArray,
double  tol 
)

This function is soon going to be deprecated. It always uses the old code.

◆ ON_FixBrepLoop()

ON_DECL bool ON_FixBrepLoop ( ON_Brep B,
int  loop_id,
bool  bCompact = true 
)

Fix problems found in ON_ValidateBrepLoop. Returns true if something changed. If bCompact is true and something has changed, the result will be compacted. NOTE: This may add to B.m_L, so any refs or pointers to loops should be reset. Any added loops will go to the end of the array, so indices of existing loops, other than loop_id, will still be valid.

◆ ON_FixBrepLoops()

ON_DECL bool ON_FixBrepLoops ( ON_Brep B,
ON_SimpleArray< int > *  loop_ids = 0 
)

Repair problems found in ON_ValidateBrepLoops(). Returns true if something changed. If loop_ids !=0, it is the list of loops to fix (they will not be checked first). Otherwise, all loops will be checked and repaired

◆ ON_FixNurbsSurfacePole()

ON_DECL void ON_FixNurbsSurfacePole ( ON_NurbsSurface srf,
int  side,
const ON_3dPoint pPole 
)

◆ ON_FixNurbsSurfaceSeam()

ON_DECL void ON_FixNurbsSurfaceSeam ( ON_NurbsSurface srf,
int  dir,
bool  bMakeG1 
)

◆ ON_FloatCeil()

ON_DECL float ON_FloatCeil ( double  x)

Description: Convert a double x to the smallest float f such that the mathematical value of f is at least the value of x. Parameters: x - [in] Returns The smallest float f such that the mathematical value of f is at least the value of x.

◆ ON_FloatFloor()

ON_DECL float ON_FloatFloor ( double  x)

Description: Convert a double x to the largest float f such that the mathematical value of f is at most the value of x. Parameters: x - [in] Returns The largest float f such that the mathematical value of f is at most the value of x.

◆ ON_FloatFromDouble()

ON_DECL float ON_FloatFromDouble ( double  x)

Returns: ON_UNSET_FLOAT, if x = ON_UNSET_VALUE. ON_UNSET_POSITIVE_FLOAT, if x = ON_UNSET_POSITIVE_VALUE. (float)x, otherwise.

◆ ON_FLT_SNAN()

ON_DECL void ON_FLT_SNAN ( float *  x)

◆ ON_ForceMatchCurveEnds()

ON_DECL bool ON_ForceMatchCurveEnds ( ON_Curve Crv0,
int  end0,
ON_Curve Crv1,
int  end1 
)

Description: Move ends of curves to a common point. Neither curve can be closed or an ON_CurveProxy. If one is an arc or polycurve with arc at end to change, and the other is not, then the arc is left unchanged and the other curve is moved to the arc endpoint. Otherwise, both are moved to the midpoint of the segment between the ends. Parameters: Crv0 - [in] first curve to modify. [out] with one endpoint possibly changed. end0 - [in] if 0, change start of Crv0. Otherwise change end. Crv1 - [in] second curve to modify. [out] with one endpoint possibly changed. end1 - [in] if 0, change start of Crv1. Otherwise change end. Returns: true if the endpoints match. False otherwise,

◆ ON_FPU_AfterDotNetJITUse()

ON_DECL bool ON_FPU_AfterDotNetJITUse ( void  )

Description: The .NET JIT (just in-time compiler) has a bug that causes a floating point overflow exception if there is any double constant that whose absolute value is greater than 3.402823466e+38 (=FLT_MAX).

The following .NET C# program demonstrates the bug in the Microsoft JIT compiler.

class Program
{
  static bool IsBigDouble(double x)
  {

/ Note: 3.402823466e+38 is the maximum value of a 32 bit IEEE float /return x == 3.402823466e+38; ///< JIT does not generate overflow exception /return x == 3.5e+38; ///< JIT generates overflow exception return x == double.MaxValue; ///< JIT generates overflow exception } static void Main(string[] args) { double x = 1.0; / When the JIT compiles IsBigDouble(), it will generate / an FPU overflow exception if the constant in IsBigDouble() / is larger than the maximum 32 bit IEEE float. bool rc = IsBigDouble(x); if ( rc ) System.Console.WriteLine("{0} is a big double.",x); else System.Console.WriteLine("{0} is not a big double.",x); } }

If you are getting warnings that code that makes calls into .NET code is generating FPU overflow exceptions, then bracket the call to code that may call the .NET JIT with calls to ON_FPU_BeforeSloppyCall()/ON_FPU_AfterDotNetJITUse(). Returns: ON_FPU_AfterDotNetJITUse() returns true if the FPU stayed clean except for an overflow exception since the last call to ON_FPU_BeforeSloppyCall(). Remarks: These functions should be used only in extreme situations and there should be a verbose comment in the code explaining why the programmer resorted to using these functions.

Microsoft is aware of this bug and claims it is "by design". http://connect.microsoft.com:80/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=100718 ... So in summary this behavior is by Design. In the ECMA spec for IL it states that IL floating point operations never throw exceptions. The way to detect floating point overflow is to use the ckfinite IL instruction after each floating point operation that could produce an overflow. ... Microsoft could easily fix this bug by 1) saving the FPU CTRL state before running their JIT 2) clearing the FPU STAT register and restoring the CTRL state after running their JIT This amounts to 3 lines of C and less than 10 lines of assembly code and is what I would expect them to do.

◆ ON_FPU_AfterSloppyCall()

ON_DECL bool ON_FPU_AfterSloppyCall ( void  )

◆ ON_FPU_BeforeSloppyCall()

ON_DECL bool ON_FPU_BeforeSloppyCall ( void  )

Description: Sometimes it is impossible to avoid calling code that performs invalid floating point operations or rudely changes the FPU control settings. We have found dozens of cases in Windows core DLLs,3rd party DLLs, OpenGL drivers, and the .NET JIT conmpiler where the FPU CTRL setting is changed or floating point exceptions are generated. When these cases are discovered, we bracket the code that is abusing the FPU with ON_FPU_BeforeSloppyCall(); ... call that abuses the FPU ON_FPU_AfterSloppyCall(); so we don't lose any information about exceptions in our own code and we don't get pestered about exceptions we can't do anything about. If you are calling something that may run the .NET JIT, then use ON_FPU_AfterDotNetJITUse() instead of ON_FPU_AfterSloppyCall(). Returns: ON_FPU_BeforeSloppyCall() returns true if the FPU is "clean" at the time of the call. ON_FPU_AfterSloppyCall() returns true if the FPU stayed clean since the last call to ON_FPU_BeforeSloppyCall(). Remarks: These functions should be used only in extreme situations and there should be a verbose comment in the code explaining why the programmer resorted to using these functions.

◆ ON_FPU_Check()

ON_DECL bool ON_FPU_Check ( bool  bCheckExceptionStatus,
bool  bCheckControl,
bool  bCall_ON_Error 
)

Description: Check the FPU status or control. Parameters: bCheckExceptionStatus - [in] If true, the FPU exception status is checked to see if any exceptions have happened. bCheckControl - [in] If true, the FPU control settings are checked to see if they have the expected values. bCall_ON_Error - [in] If true and and exception has occurred or the control settings have been changed, then ON_Error() is called. Returns: true: The FPU status indicates no exceptions have occurred and the control settings match the expected values. false: The FPU status indicates exceptions have occurred or the FPU control settings have unexpected values.

◆ ON_FPU_ClearExceptionStatus()

ON_DECL void ON_FPU_ClearExceptionStatus ( )

FPU functions Description: Clear FPU exception and busy flags (Intel assembly fnclex). See Also: ON_FPU_ExceptionStatus

◆ ON_FPU_ControlWord()

ON_DECL ON__UINT32 ON_FPU_ControlWord ( )

Description: Returns the FPU control word.

◆ ON_FPU_EnableInvalidStatusCheck()

ON_DECL bool ON_FPU_EnableInvalidStatusCheck ( bool  bEnableInvalidStatusCheck)

Description: WPF uses NaNs for .NET properties that are not initialized and intentionally passes these NaNs into the FPU at various times. This sets the FPU's invalid operation status bit. Prior to November 2014, we used to alert developers that their code had done something wrong when the FPU's invalid status bit was set. Because we have almost no control over when .NET will set the invalid status bit, we can no longer assume that we have a bug in our code when the bit is set.

By default, we now treat the setting of invalid status bit the same we we treat the inexact bit, namely it is a common and expected situation.

If you are attempting to test or debug scientific computing code and you want to be told when something really bad happens on the FPU, then call ON_FPU_EnableInvalidStatusCheck(true) before you run your tests.

Returns: The value of ON_FPU_EnableInvalidStatusCheckEnabled() before it was set to bEnableInvalidStatusCheck.

◆ ON_FPU_ExceptionStatus()

ON_DECL ON__UINT32 ON_FPU_ExceptionStatus ( )

Returns Current FPU exception flags (Intel assembly fnstsw).
Use the ON_FPU_SW_* defines to interpret the returned value. Example: ON_FPU_ClearExceptionStatus();

... do some calculations ...

ON_UINT32 status = ON_FPU_ExceptionStatus(); if ( 0 != (status & ON_FPU_SW_BAD ) ) { ... The results of the calculations are suspect. } See Also: ON_FPU_ClearExceptionStatus ON_FPU_BadExceptionStatusMask

◆ ON_FPU_Init()

ON_DECL ON__UINT32 ON_FPU_Init ( void  )

Description: Set the FPU control bits to the Microsoft's preferred defaults. These are the same as the Intel FPU fninit defaults, except for 32-bit executable mantisaa precision. Microsoft's default is 53-bit mantissas and Intel's is 64-bit mantissas. Rhino and OpenNURBS code works best with these settings.

  • mask exceptions
  • round to nearest
  • 53 bit fraction precision control Returns: Control word; See Also: ON_FPU_MaskExceptions

◆ ON_FPU_InitControlWord()

ON_DECL ON__UINT32 ON_FPU_InitControlWord ( void  )

Returns: Control word used by the FPU. Except when exception debugging is enabled, the value will be FPU_CW_DEFAULT. See Also: ON_FPU_DebugExceptions

◆ ON_FPU_InvalidStatusCheckEnabled()

ON_DECL bool ON_FPU_InvalidStatusCheckEnabled ( )

◆ ON_FPU_UnmaskExceptions()

ON_DECL bool ON_FPU_UnmaskExceptions ( ON__UINT32  unmasked_ex)

Description: A DEBUGGING tool to unmask FPU exception handling. Do not call this function in released code. Parameters: unmasked_ex - [in] Use the ON_FPU_EX_* defines to set the bits of the exceptions you want to unmask. Example: #if defined(ON_DEBUG) / crash on divide by zero, overflow, and invalid ON_FPU_UnmaskExceptions(ON_FPU_EX_OVERFLOW|ON_FPU_EX_ZERODIVIDE|ON_FPU_EX_INVALID); #endif

... do suspect calculations

#if defined(ON_DEBUG) / Mask all exceptions (default) ON_FPU_UnmaskExceptions(0); #endif Remarks: By default floating point exceptions are "masked". This means nothing serious happens when an exception, like dividing by zero, occurs. When a floating point exception is "unmasked" it means the application will crash when that floating point exception occurs. Unmasking exceptions is a useful debugging technique. Never unmask exceptions in release code.

Returns: True if the input was valid and the call worked.

◆ ON_Get3dConvexHull()

ON_DECL int ON_Get3dConvexHull ( const ON_SimpleArray< ON_3dPoint > &  points,
ON_SimpleArray< ON_PlaneEquation > &  hull 
)

Description: Get a convex hull of a set of 3d points. Parameters: points - [in] List of points. This function can handle tens of points but is too slow for hundreds of points. hull -[out] Equations of the sides of the convex hull are appended to this list.
A point P is inside the hull if hull[i].ValueAt(P) <= 0 for every plane equation. Returns: Number of equations appended to hull[] array. If 0, then the points are coincident or collinear. If 2, then the points are coplanar and the returned planes are parallel. If >= 4, then the points are in a 3d convex hull.

◆ ON_GetBase32Digits() [1/2]

ON_DECL int ON_GetBase32Digits ( const ON_SimpleArray< unsigned char > &  x,
ON_SimpleArray< unsigned char > &  base32_digits 
)

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. Description: Convert a number into base32 digits. Parameters: x - [in] x_count - [in] x[] is an array of length x_count and represents the value x[0]*2^(8*(x_count-1)) + ... + x[x_count-2]*256 + x[x_count-1]. base32_digits - [out] When base32_digits is not a dynamic array, base32_digits[] must a be an array of length at least ((8*x_count)/5) + (((8*x_count)%5)?1:0) or 1, whichever is greater.

The base32_digits[] array will be filled in with base32 digit values (0 to 31) so that the value b[0]*32^(b_count-1) + ... + b[b_count-2]*32 + b[b_count-1] is the same as that defined by the x[] array. Returns The number of base 32 digits in the base32_digits[] array. If 0 is returned, the input is not valid.

◆ ON_GetBase32Digits() [2/2]

ON_DECL int ON_GetBase32Digits ( const unsigned char *  x,
int  x_count,
unsigned char *  base32_digits 
)

◆ ON_GetCageXform()

ON_DECL bool ON_GetCageXform ( const ON_NurbsCage cage,
ON_Xform cage_xform 
)

◆ ON_GetClosestPointInPointList()

ON_DECL bool ON_GetClosestPointInPointList ( int  point_count,
const ON_3dPoint point_list,
ON_3dPoint  P,
int *  closest_point_index 
)

Description: Find the index of the point in the point_list that is closest to P. Parameters: point_count - [in] point_list - [in] P - [in] closest_point_index - [out] Returns: True if successful and *closest_point_index is set. False if input is not valid, in which case *closest_point_index is undefined.

◆ ON_GetClosestPointOnTriangle() [1/2]

ON_DECL bool ON_GetClosestPointOnTriangle ( const double  A[3],
const double  B[3],
const double  C[3],
const double  N[3],
const double  test_point[3],
double  triangle_bc[3] 
)

Description: Find the point on the triangle that is closest to test_point. Parameters: A - [in] B - [in] C - [in] triangle corners. N - [in] null pointer or a nonzero unit vector perpendicular to the plane of the triangle. N may have either orientation (+N and -N work equally as well). This pointer can be the address of the "a" parameter of an ON_TrianglePlane calculated from this triangle. If a unit length normal is not available, pass null and the necessary information will be calculated in this function. test_point - [in] triangle_bc - [out] The barycentric coordinates of the point on the triangle that is closest to test_point. Specifically, triangle_bc[0] >= 0, triangle_bc[1] >= 0, triangle_bc[2] >= 0 1 = triangle_bc[0] + triangle_bc[1] + triangle_bc[2], and (triangle_bc[0]*A + triangle_bc[1]*B + triangle_bc[2]*C) is the point on the triangle that is closest to test_point. Returns: Zero if the triangle is degenerate. In this case, valid barycentric coordinates of a point are returned, but there may be multiple answers. Non-zero if the triangle is not degenerate and triangle_bc[] are the barycentric coordinates of the point on the triangle closest to test_point. The returned value reports the region of the triangles plane test_point projects to. If test_point projects to the interior of the triangle, 1 is returned. If test point projects to an edge or vertex of the triangle, 2 is returned. If test_point projects to a point outside the triangle, 3 is returned Remarks: This function is designed to be as precise as possible, robustly handles points that are not on the triangle, and it handles degenerate cases. If speed is paramount, use ...

◆ ON_GetClosestPointOnTriangle() [2/2]

ON_DECL bool ON_GetClosestPointOnTriangle ( const float  A[3],
const float  B[3],
const float  C[3],
const float  N[3],
const double  test_point[3],
double  triangle_bc[3] 
)

◆ ON_GetConicEquationThrough6Points()

ON_DECL bool ON_GetConicEquationThrough6Points ( int  stride,
const double *  points2d,
double  conic[6],
double *  max_pivot,
double *  min_pivot,
double *  zero_pivot 
)

Description: Find the equation of the parabola, ellipse or hyperbola (non-degenerate conic) that passes through six distinct points. Parameters: stride - [in] (>=2) points array stride points2d - [in] (>=2) i-th point is (points[i*stride],points[i*stride+1]) conic - [out] Coefficients of the conic equation. The points on the conic satisfy the equation 0 = conic[0]*x^2 + conic[1]*xy + conic[2]*y^2

  • conic[3]*x + conic[4]*y + conic[5] max_pivot - [out] (can be null) min_pivot - [out] (can be null) zero_pivot - [out] (can be null) If there are some near duplicates in the input point set, the calculation is not stable. If you want to get an estimate of the validity of the solution, then inspect the returned values. max_pivot should around 1, min_pivot should be > 1e-4 or so, and zero_pivot should be < 1e-10 or so. If the returned pivots don't satisfy these conditions, then exercise caution when using the returned solution. Returns: True if a there is an ellipse, parabola or hyperbola through the
    six points. False if the input is invalid or the conic degenerate (the points lie on one or two lines). If false is returned, then conic[0]=...=conic[5] = 0 and min_pivot = *max_pivot = *zero_pivot = 0.

◆ ON_GetDebugBreak()

ON_DECL int ON_GetDebugBreak ( void  )

◆ ON_GetDebugBreakOnFirstError()

ON_DECL int ON_GetDebugBreakOnFirstError ( void  )

◆ ON_GetDebugErrorMessage()

ON_DECL int ON_GetDebugErrorMessage ( void  )

◆ ON_GetEigenvectors()

ON_DECL unsigned int ON_GetEigenvectors ( const unsigned int  N,
const double *const *  M,
bool  bTransposeM,
double  lambda,
unsigned int  lambda_multiplicity,
const double *  termination_tolerances,
double **  eigenvectors,
double *  eigenprecision,
double *  eigenpivots 
)

Parameters: N - [in] >= 1 M - [in] M is an NxN matrix

bTransposeM - [in] If true, the eigenvectors of the transpose of M are calculated. Put another way, if bTransposeM is false, then the "right" eigenvectors are calculated; if bTransposeM is true, then the "left" eigenvectors are calculated.

lambda - [in] known eigenvalue of M

lambda_multiplicity - [in] > 0: known algebraic multiplicity of lambda 0: algebraic multiplicity is unknown.

termination_tolerances - [in] An array of three tolerances that control when the calculation will stop searching for eigenvectors. If you do not understand what pivot values are, then pass nullptr and the values (1.0e-12, 1.0e-3, 1.0e4) will be used. If termination_tolerances[0] is not strictly positive, then 1.0e-12 is used. If termination_tolerances[1] is not strictly positive, then 1.0e-3 is used. If termination_tolerances[2] is not strictly positive, then 1.0e4 is used.

The search for eigenvectors will continue if condition 1, and condition 2, and condition 3a or 3b is true.

1) The number of found eigenvectors is < lambda_multiplicity. 2) eigenpivots[0] >= eigenpivots[1] > eigenpivots[2] >= 0. 3a) eigenpivots[1]/eigenpivots[0] < termination_tolerance[0]. 3b) eigenpivots[1]/eigenpivots[0] > termination_tolerance[1] or eigenpivots[0] - eigenpivots[1] <= termination_tolerance[2]*eigenpivots[1].

eigenvectors - [out] eigenvectors[0,...,eigendim-1][0,...,N-1] a basis for the lambda eigenspace. The eigenvectors are generally neither normalized nor orthogonal.

eigenprecision - [out] eigenprecision[i] = maximum value of fabs(lambda*E[j] = E[j])/length(E) 0 <= j < N, where E = eigenvectors[i]. If eigenprecision[i] is not "small" compared to nonzero coefficients in M and E, then E is not precise.

eigenpivots - [out] eigenpivots[0] = maximum nonzero pivot eigenpivots[1] = minimum nonzero pivot eigenpivots[2] = maximum "zero" pivot When eigenpivots[2] s not "small" compared to eigenpivots[1], the answer is suspect.

Returns: Number of eigenvectors found. In stable cases, this is the geometric multiplicity of the eigenvalue.

◆ ON_GetEllipseConicEquation()

ON_DECL bool ON_GetEllipseConicEquation ( double  a,
double  b,
double  x0,
double  y0,
double  alpha,
double  conic[6] 
)

Description: Get the conic equation of an ellipse. Parameters: a - [in] (a>0) b - [in] (b>0) a and b are the lengths of the axes. Either one may be largest and they can be equal. x0 - [in] y0 - [in] (x0,y0) is the enter of the ellipse. alpha - [in] (angle in radians) When alpha is 0, a corresponds to the x-axis and b corresponds to the y axis. If alpha is non-zero it specifies the rotation of these axes. conic - [out] Coefficients of the conic equation. The points on the conic satisfy the equation 0 = conic[0]*x^2 + conic[1]*xy + conic[2]*y^2

  • conic[3]*x + conic[4]*y + conic[5] center - [out] major_axis - [out] minor_axis - [out] major_radius - [out] minor_radius - [out] Remarks: Here is the way to evaluate a point on the ellipse:
      double t = ellipse parameter in radians;
      double x = a*cos(t);
      double y = b*sin(t);
      ON_2dPoint ellipse_point;
      ellipse_point.x = x0 + x*cos(alpha) + y*sin(alpha);
      ellipse_point.y = y0 - x*sin(alpha) + y*cos(alpha);

Returns: True if the input is valid and conic[] was filled in. Falis if the input is not valid. In this case the values in conic[] are not changed.

◆ ON_GetEndCapTransformation()

ON_DECL bool ON_GetEndCapTransformation ( ON_3dPoint  P,
ON_3dVector  T,
ON_3dVector  U,
const ON_3dVector Normal,
ON_Xform xform,
ON_Xform scale2d,
ON_Xform rot2d 
)

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. Description: Get the transformation that maps the ON_Extrusion 2d xy profile to 3d world space. Parameters: P - [in] start or end of path T - [in] unit tangent to path U - [in] unit up vector perpendicular to T Normal - [in] optional unit vector with Normal->z > 0 that defines the unit normal to the miter plane. xform - [out] transformation that maps the profile curve to 3d world space scale2d - [out] If not nullptr, this is the scale part of the transformation. If there is no mitering, then this is the identity. rot2d - [out] If not null, this is the part of the transformation that rotates the xy plane into its 3d world location. Returns: true if successful.

Parameters
xform= rot3d*scale2d

◆ ON_GetErrorCount()

ON_DECL int ON_GetErrorCount ( void  )

Returns: Number of opennurbs errors since program started.

◆ ON_GetFittingTolerance()

ON_DECL double ON_GetFittingTolerance ( const class ON_SurfaceTreeNode snodeA,
const class ON_SurfaceTreeNode snodeB,
double  intersection_tolerance,
double  fitting_tolerance 
)

◆ ON_GetFunctionRoot()

ON_DECL bool ON_GetFunctionRoot ( void(*)(void *, double, double *, double *)  func,
void *  funcarg,
double  t0,
double  t1,
double *  root 
)

ON_GetFunctionRoot() searches for a root of a C1 function. ON_GetFunctionRoot() returns true if it finds a root and false if it fails to find a root. In all cases, it returns the "best" candidate for a root that it can find. The algorithm is Newton-Raphson and works best if the function is a monotone function. However you can use any function as long as it is C1 and f(t0)*f(t1) <= 0.0.

Parameters
t0domain to search for root = [t0, t1]
t1f(t0)*f(t1) <= 0.0
rootvalue of root

◆ ON_GetGregorianMonthAndDayOfMonth()

ON_DECL bool ON_GetGregorianMonthAndDayOfMonth ( unsigned int  year,
unsigned int  day_of_year,
unsigned int *  month,
unsigned int *  day_of_month 
)

Description: Get the month and day_of_month from the year and day of year. Parameters: year - [in] >= 1582 day_of_year >= 1 and <= (ON_IsGregorianLeapYear(year) ? 366 : 365) month - [out] >= 1 and <= 12, when input parameters are valid, otherwise 0. day_of_month - [out] >= 1 and <= ON_DaysInMonthOfGregorianYear(year,month), when input parameters are valid, otherwise 0. Returns: true: month and day_of_month returned. false: invalid input. Output values are zero.

◆ ON_GetGrevilleAbcissae()

ON_DECL bool ON_GetGrevilleAbcissae ( int  ,
int  ,
const double *  ,
bool  ,
double *   
)

◆ ON_GetGrevilleKnotVector()

ON_DECL bool ON_GetGrevilleKnotVector ( int  ,
const double *  ,
bool  ,
int  ,
int  ,
double *   
)

◆ ON_GetHighCurvatureSpans()

ON_DECL bool ON_GetHighCurvatureSpans ( const ON_Curve crv,
double  tolerance,
ON_SimpleArray< int > *  span_indices 
)

Find spans of a curve that have high curvature.

INPUT: crv tolerance - Look for spans with max curvature greater than tolerance.

OUTPUT: span_indices - If non-nullptr, this will be the list of all found spans. If nullptr, then function will return as soon as a high curvature span is hit.

Returns - True if there are spans with high curvature.

◆ ON_GetKnotVectorDomain()

ON_DECL bool ON_GetKnotVectorDomain ( int  ,
int  ,
const double *  ,
double *  ,
double *   
)

◆ ON_GetKnotVectorSpanVector()

ON_DECL bool ON_GetKnotVectorSpanVector ( int  ,
int  ,
const double *  ,
double *   
)

◆ ON_GetMathErrorCount()

ON_DECL int ON_GetMathErrorCount ( void  )

Returns: Number of math library or floating point errors that have been handled since program started.

◆ ON_GetMatrixSVD()

ON_DECL bool ON_GetMatrixSVD ( int  row_count,
int  col_count,
double const *const *  A,
double **&  U,
double *&  W,
double **&  V 
)

Description: Calculate the singular value decomposition of a matrix.

Parameters: row_count - [in] number of rows in matrix A col_count - [in] number of columns in matrix A A - [in] Matrix for which you want the singular value decomposition. A[0][0] = coefficient in the first row and first column. A[row_count-1][col_count-1] = coefficient in the last row and last column. U - [out] The singular value decomposition of A is U*Diag(W)*Transpose(V), where U has the same size as A, Diag(W) is a col_count X col_count diagonal matrix with (W[0],...,W[col_count-1]) on the diagonal and V is a col_count X col_count matrix. U and A may be the same pointer. If the input value of U is null, heap storage will be allocated using onmalloc() and the calling function must call onfree(U). If the input value of U is not null, U[i] must point to an array of col_count doubles.
W - [out] If the input value W is null, then heap storage will be allocated using onmalloc() and the calling function must call onfree(W). If the input value of W is not null, then W must point to an array of col_count doubles. V - [out] If the input value V is null, then heap storage will be allocated using onmalloc() and the calling function must call onfree(V). If the input value of V is not null, then V[i] must point to an array of col_count doubles.

Example:

      int m = row_count;
      int n = col_count;
      ON_Matrix A(m,n);
      for (i = 0; i < m; i++ ) for ( j = 0; j < n; j++ )
      {
        A[i][j] = ...;
      }
      ON_Matrix U(m,n);
      double* W = 0; ///< ON_GetMatrixSVD() will allocate W
      ON_Matrix V(n,n);
      bool rc = ON_GetMatrixSVD(m,n,A.m,U.m,W,V.m);
      ...
      onfree(W); ///< W allocated in ON_GetMatrixSVD()

Returns: True if the singular value decomposition was calculated. False if the algorithm failed to converge.

◆ ON_GetMeshMeshClosestPoint()

ON_DECL bool ON_GetMeshMeshClosestPoint ( const ON_Mesh MeshA,
const ON_Mesh MeshB,
double  max_dist,
bool  bUseMultipleThreads,
int *  fidA,
double  a[4],
int *  fidB,
double  b[4] 
)

Description: Finds a the closest points on a pair of meshes. Parameters: MeshA - [in] First mesh MeshB - [in] Second mesh max_dist - [in] Do not search for point pairs further apart than max_dist bUseMultipleThreads - [in] Pass true if you want the calculation to use multiple threads. fidA - [out] index of closest face of MeshA a - [out] barycentric coordinates of closest point on MeshA.m_F[*fidA] fidB - [out] index of closest face of MeshB b - [out] barycentric coordinates of closest point on MeshB.m_F[*fidB] Returns: true if points A and B could be found with distance from A to B no greater than max_dist and as close together as any other pair. A is the sum of a[i]*VA[i], B is the sum of b[i]*VB[i], where VA and VB are the vertices of MeshA.m_F[*fidA] and MeshB.m_F[*fidB]. Note that if the face is a triangle, the 4th barycentric coordinate will be 0, and 3 is a valid index for the mesh face vertex array.

◆ ON_GetMostRecentClassIdCreateUuid()

ON_DECL ON_UUID ON_GetMostRecentClassIdCreateUuid ( )

Description: Expert user function to get the value of ON_ClassId::m_uuid of the last instance of ON_ClassId to call ON_ClassId::Create(). This function was created to support Rhino's .NET SDK. This function returns the value of a static id in opennurbs_object.cpp and is NOT thread safe. Returns: Value of ON_ClassId::m_uuid of the instance of ON_ClassId that most recently called ON_ClassId::Create().

◆ ON_GetNextCurveSpan()

ON_DECL bool ON_GetNextCurveSpan ( const ON_Curve crv,
double  t0,
double  t1,
double  tolerance,
bool(*)(const ON_Curve &, double, double, double)  check,
ON_Interval seg_dom,
int *  span_index 
)

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. Find the first span of a curve that satisfies a property given by a check function

INPUT: crv t0, t1 - Must be increasing. Search subdomain tolerance - Used by the check function check - function that takes the above parameters

OUTPUT: seg_dom - If Non-nullptr on input, Subdomain of the span that passes check. span_index - If Non-nullptr on input, the index of the span.

Returns true if a span is found for which check returns true.

Parameters
checkTest function for subdom given by first two doubles. Third is a tolerance

◆ ON_GetParameterTolerance()

ON_DECL bool ON_GetParameterTolerance ( double  ,
double  ,
double  ,
double *  ,
double *   
)

◆ ON_GetPointGridBoundingBox()

ON_DECL bool ON_GetPointGridBoundingBox ( int  dim,
bool  is_rat,
int  point_count0,
int  point_count1,
int  point_stride0,
int  point_stride1,
const double *  point_grid,
double *  boxmin,
double *  boxmax,
int  bGrowBox 
)
Parameters
boxminmin[dim]
boxmaxmax[dim]

◆ ON_GetPointListBoundingBox() [1/4]

ON_DECL bool ON_GetPointListBoundingBox ( int  dim,
bool  is_rat,
int  count,
int  stride,
const double *  point_list,
double *  boxmin,
double *  boxmax,
int  bGrowBox 
)
Parameters
boxminmin[dim]
boxmaxmax[dim]

◆ ON_GetPointListBoundingBox() [2/4]

ON_DECL bool ON_GetPointListBoundingBox ( int  dim,
bool  is_rat,
int  count,
int  stride,
const double *  point_list,
ON_BoundingBox bbox,
int  bGrowBox = false,
const ON_Xform xform = 0 
)

Description: Get a tight bounding box that contains the points. Parameters: dim - [in] (>=1) is_rat - [in] true if points are rational count - [in] number of points stride - [in] stride between points point_list - [in] bbox - [in/out] bGrowBox - [in] (default = false) If the input bbox is valid and bGrowBox is true, then the output bbox is the union of the input bbox and the bounding box of the point list. xform - [in] (default = nullptr) If not null, the bounding box of the transformed points is calculated. The points are not modified. Returns: True if the output bbox is valid.

◆ ON_GetPointListBoundingBox() [3/4]

ON_DECL bool ON_GetPointListBoundingBox ( int  dim,
bool  is_rat,
int  count,
int  stride,
const float *  point_list,
float *  boxmin,
float *  boxmax,
int  bGrowBox 
)
Parameters
boxminmin[dim]
boxmaxmax[dim]

◆ ON_GetPointListBoundingBox() [4/4]

ON_DECL bool ON_GetPointListBoundingBox ( int  dim,
bool  is_rat,
int  count,
int  stride,
const float *  point_list,
ON_BoundingBox bbox,
int  bGrowBox = false,
const ON_Xform xform = 0 
)

◆ ON_GetPointLocationIds() [1/6]

ON_DECL unsigned int* ON_GetPointLocationIds ( size_t  point_count,
const class ON_2dPoint points,
unsigned int  first_point_id,
unsigned int *  point_ids,
unsigned int *  point_id_map 
)

◆ ON_GetPointLocationIds() [2/6]

ON_DECL unsigned int* ON_GetPointLocationIds ( size_t  point_count,
const class ON_2fPoint points,
unsigned int  first_point_id,
unsigned int *  point_ids,
unsigned int *  point_id_map 
)

◆ ON_GetPointLocationIds() [3/6]

ON_DECL unsigned int* ON_GetPointLocationIds ( size_t  point_count,
const class ON_3dPoint points,
unsigned int  first_point_id,
unsigned int *  point_ids,
unsigned int *  point_id_map 
)

◆ ON_GetPointLocationIds() [4/6]

ON_DECL unsigned int* ON_GetPointLocationIds ( size_t  point_count,
const class ON_3fPoint points,
unsigned int  first_point_id,
unsigned int *  point_ids,
unsigned int *  point_id_map 
)

◆ ON_GetPointLocationIds() [5/6]

ON_DECL unsigned int* ON_GetPointLocationIds ( size_t  point_dim,
size_t  point_count,
size_t  point_stride,
const double *  points,
unsigned int  first_point_id,
unsigned int *  point_ids,
unsigned int *  point_id_map 
)

◆ ON_GetPointLocationIds() [6/6]

ON_DECL unsigned int* ON_GetPointLocationIds ( size_t  point_dim,
size_t  point_count,
size_t  point_stride,
const float *  points,
unsigned int  first_point_id,
unsigned int *  point_ids,
unsigned int *  point_id_map 
)

Description: Assign a unique id to each point location. Coincident points get the same id. Parameters: point_dim - [in] 2 or 3 point_count - [in] >= 1 point_stride - [in] number of coordinates to skip between points >= point_dim points - [in] The first coordinate of the i-th point is points[i*point_stride] first_point_id - [in] Initial point id. Typically 1 or 0. point_ids - [out] If not null, then point_ids[] must be an array of length point_count and the ids are returned in this array. point_ids[0] = first_point_id. point_id_map - [out] If point_id_index is not null, then it must have length point_count. The returned values are a permutation of (0,1,...,point_count-1) such that (point_ids[point_id_map[0]], ..., point_ids[point_id_map[point_count-1]]) is an increasing list of values and point_id_map[0] = 0. Returns: If input is valid, then an array of point_count point location ids is returned. The i-th and j-th values in the returned array are equal if and only if the i-th and j-th points have the same location. If the input point_ids pointer was null, then the array memory is allocated on the heap by calling onmalloc(). If input is not valid, nullptr is returned. Remarks: The ids are invariant under invertable transformations.
Specifically, if one point point set is a rotation of another, then the assigned ids will be the same.

◆ ON_GetPolylineLength()

ON_DECL bool ON_GetPolylineLength ( int  ,
bool  ,
int  ,
int  ,
const double *  ,
double *   
)

◆ ON_GetShortSpans()

ON_DECL bool ON_GetShortSpans ( const ON_Curve crv,
double  tolerance,
ON_SimpleArray< int > *  span_indices 
)

Find short spans of a curve.

INPUT: crv tolerance - Any span with arclength (approximated) less than tolerance is short

OUTPUT: span_indices - If non-nullptr, this will be the list of all short spans. If nullptr, then function will return as soon as a short span is hit.

Returns - True if there are short spans.

◆ ON_GetSpanIndices()

ON_DECL int ON_GetSpanIndices ( int  order,
int  cv_count,
const double *  knot,
int *   
)
Parameters
orderreturns span count, which is one less than length of span_indices[]

◆ ON_GetTrianglePlaneEquation()

ON_DECL bool ON_GetTrianglePlaneEquation ( const ON_3dPoint A,
const ON_3dPoint B,
const ON_3dPoint C,
double *  a,
double *  b,
double *  c,
double *  d,
double *  evaluation_tol 
)

Description: Finds the unit normal to the triangle Parameters: A - [in] triangle corner B - [in] triangle corner C - [in] triangle corner a - [out] must not be null b - [out] must not be null c - [out] must not be null d - [out] must not be null The equation of the plane is a*x + b*y + c*z + d = 0 ev_tol - [out] If ev_tol is not null, then it is the maximum absolute value of the plane equation evaluated at A,B,C. Mathematically, ev_tol is zero. Since these computations are performed with finite precision doubles, ev_tol is generally not zero. Returns: Unit normal

◆ ON_GetVersionQuartet()

ON_DECL unsigned int ON_GetVersionQuartet ( unsigned int  major_version,
unsigned int  minor_version,
unsigned int  year,
unsigned int  month,
unsigned int  day_of_month,
unsigned int  hour,
unsigned int  minute,
unsigned int  branch,
unsigned short  quartet_values[4] 
)

Parameters: major_version - [in] major_version >= 0 and major_version <= 63

minor_version - [in] minor_version >= 0 and minor_version <= 127

year - [in] year >= 2000 and year <= 2099

month - [in] month >= 1 and month <= 12

day_of_month - [in] day_of_month >= 1 and day_of_month <= ON_DaysInMonthOfGregorianYear(year,month)

hour - [in] hour >= 0 and hour <= 23

minute - [in] minute >= 0 and minute <= 59

branch - [in] branch >= 0 and branch <= 3 0: developer build 1: build system trunk branch build 2: build system release candidate build 3: build system release build

quartet_values - [out] quartet_values[0] = major_version quartet_values[1] = minor_version quartet_values[2] = (year-2000)*1000 + ON_DayOfGregorianYear(year,month,day_of_month) quartet_values[3] = hour*1000 + minute*100 + branch

Returns: 0: failure because input is not valid >0: value of ON_VersionNumberConstruct(major_version,minor_version,year,month,day_of_month,branch)

◆ ON_GetVersionString()

ON_DECL unsigned int ON_GetVersionString ( unsigned int  major_version,
unsigned int  minor_version,
unsigned int  year,
unsigned int  month,
unsigned int  day_of_month,
unsigned int  hour,
unsigned int  minute,
unsigned int  branch,
size_t  string_buffer_capacity,
char *  string_buffer 
)

Description: Get a null terminated string that describes the version information as "major.,minor.yyddd.hhmmb". Parameters: major_version - [in] major_version >= 0 and major_version <= 63

minor_version - [in] minor_version >= 0 and minor_version <= 127

year - [in] year >= 2000 and year <= 2099

month - [in] month >= 1 and month <= 12

day_of_month - [in] day_of_month >= 1 and day_of_month <= ON_DaysInMonthOfGregorianYear(year,month)

hour - [in] hour >= 0 and hour <= 23

minute - [in] minute >= 0 and minute <= 59

branch - [in] branch >= 0 and branch <= 3 0: developer build 1: build system trunk branch build 2: build system release candidate build 3: build system release build

string_buffer_capacity - [in] Number of available char elements in string_buffer[]

string_buffer - [out] If 0 == string_buffer_capacity or nullptr == string_buffer, then the number of char elements in the version number as a string, not including a null terminator, is returned and no changes are made to string_buffer.

If string_buffer_capacity > 0 && nullptr != string_buffer, then the version number as a string is returned in string_buffer. All string_buffer[] elements after the version number string are set to zero. (This is a safe and secure string function.) Returns: 0: failure because input is not valid >0: The number of char elements, not including a null terminator, in the version number as a string.

◆ ON_GetVersionWideString()

ON_DECL unsigned int ON_GetVersionWideString ( unsigned int  major_version,
unsigned int  minor_version,
unsigned int  year,
unsigned int  month,
unsigned int  day_of_month,
unsigned int  hour,
unsigned int  minute,
unsigned int  branch,
size_t  string_buffer_capacity,
wchar_t *  string_buffer 
)

Description: Get a null terminated wide character string that describes the version information as "major.minor.yyddd.hhmmb". Parameters: major_version - [in] major_version >= 0 and major_version <= 63

minor_version - [in] minor_version >= 0 and minor_version <= 127

year - [in] year >= 2000 and year <= 2099

month - [in] month >= 1 and month <= 12

day_of_month - [in] day_of_month >= 1 and day_of_month <= ON_DaysInMonthOfGregorianYear(year,month)

hour - [in] hour >= 0 and hour <= 23

minute - [in] minute >= 0 and minute <= 59

branch - [in] branch >= 0 and branch <= 3 0: developer build 1: build system trunk branch build 2: build system release candidate build 3: build system release build

string_buffer_capacity - [in] Number of available char elements in string_buffer[]

string_buffer - [out] If 0 == string_buffer_capacity or nullptr == string_buffer, then the number of wchar_t elements in the version number as a string, not including a null terminator, is returned and no changes are made to string_buffer.

If string_buffer_capacity > 0 && nullptr != string_buffer, then the version number as a string is returned in string_buffer. All string_buffer[] elements after the version number string are set to zero. (This is a safe and secure string function.) Returns: 0: failure because input is not valid >0: The number of char elements, not including a null terminator, in the version number as a string.

◆ ON_GetViewportRotationAngles()

ON_DECL bool ON_GetViewportRotationAngles ( const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector ,
double *  ,
double *  ,
double *   
)

◆ ON_GetWarningCount()

ON_DECL int ON_GetWarningCount ( void  )

Returns: Number of opennurbs warnings since program started.

◆ ON_GL() [1/20]

void ON_GL ( const int  ,
const int  ,
const double *  ,
GLfloat *  ,
int  = 0,
double *  = nullptr 
)

Use ON_GL( order, cv_count, knot, bPermitScaling, glknot ) to create knot vectors suitable for GL NURBS rendering.

◆ ON_GL() [2/20]

void ON_GL ( const ON_3dPoint )

must be bracketed by calls to glBegin(GL_POINTS) / glEnd()

◆ ON_GL() [3/20]

void ON_GL ( const ON_Brep ,
GLUnurbsObj *   
)

Use ON_GL( const ON_Brep&, ...) to render OpenNURBS b-reps.

◆ ON_GL() [4/20]

void ON_GL ( const ON_BrepFace ,
GLUnurbsObj *   
)

Use ON_GL( const ON_BrepFace&, nobj ) to render the trimmed NURBS surface that defines a ON_Brep face's geometry. The call to ON_GL( const ON_BrepFace&, nobj ) should appear inside of a gluBeginSurface( nobj )/gluEndSurface( nobj ) pair.

◆ ON_GL() [5/20]

void ON_GL ( const ON_Color ,
double  ,
GLfloat  [4] 
)

◆ ON_GL() [6/20]

void ON_GL ( const ON_Color ,
GLfloat  [4] 
)

Use ON_GL( const ON_Color ...) to set GL color to OpenNURBS color.

◆ ON_GL() [7/20]

void ON_GL ( const ON_Curve ,
GLUnurbsObj *  ,
GLenum  = 0,
double  [][4] = nullptr 
)

◆ ON_GL() [8/20]

void ON_GL ( const ON_Light ,
GLenum   
)

◆ ON_GL() [9/20]

void ON_GL ( const ON_Light ,
GLenum   
)

Use ON_GL( const ON_Light, ...) to add OpenNURBS spotlights to GL lighting model

◆ ON_GL() [10/20]

void ON_GL ( const ON_Material )

Use ON_GL( const ON_Material ...) to set GL material to OpenNURBS material.

◆ ON_GL() [11/20]

void ON_GL ( const ON_Material )

◆ ON_GL() [12/20]

void ON_GL ( const ON_Mesh )

Use ON_GL( const ON_Mesh&, ...) to render OpenNURBS meshes.

◆ ON_GL() [13/20]

void ON_GL ( const ON_NurbsCurve ,
GLUnurbsObj *  ,
GLenum  = 0,
int  = 1,
double *  = nullptr,
double  [][4] = nullptr 
)

Use ON_GL( const ON_NurbsCurve&,...) in place of gluNurbsCurve(). See your system's gluNurbsCurve() documentation for details. In particular, for 3d curves the call to ON_GL( const ON_NurbsCurve&, nobj,...) should appear inside of a gluBeginCurve( nobj )/gluEndCurve( nobj ) pair. Generally, the GL "type" should be set using the formula ON_NurbsCurve:IsRational() ? GL_MAP1_VERTEX_4 : GL_MAP1_VERTEX_3;

◆ ON_GL() [14/20]

void ON_GL ( const ON_NurbsSurface ,
GLUnurbsObj *  ,
GLenum  = 0,
int  = 1,
double *  = nullptr,
double *  = nullptr 
)

Use ON_GL( const ON_NurbsSurface&,...) in place of gluNurbsSurface(). See your system's gluNurbsSurface() documentation for details. In particular, the call to ON_GL( const ON_NurbsSurface&, nobj, ...) should appear inside of a gluBeginSurface( nobj )/gluEndSurface( nobj ) pair. Generally, the GL "type" should be set using the formula ON_NurbsSurface:IsRational() ? GL_MAP2_VERTEX_4 : GL_MAP2_VERTEX_3;

◆ ON_GL() [15/20]

void ON_GL ( const ON_Point )

Use ON_GL( const ON_Point, ...) to render single points.

◆ ON_GL() [16/20]

void ON_GL ( const ON_PointCloud )

Use ON_GL( const ON_PointCloud, ...) to render Rhino point sets.

◆ ON_GL() [17/20]

void ON_GL ( const ON_Surface ,
GLUnurbsObj *   
)

must be bracketed by calls to gluBeginSurface( nobj )/gluEndSurface( nobj )

◆ ON_GL() [18/20]

void ON_GL ( const ON_Viewport )

Use ON_GL( ON_Viewport& ) to load the GL model view matrix (world to camera transformation).

◆ ON_GL() [19/20]

void ON_GL ( int  ,
int  ,
int  ,
int  ,
const double *  ,
int  ,
const double *  ,
GLUnurbsObj *  ,
GLenum  = 0,
int  = 1,
double *  = nullptr,
double  [][4] = nullptr 
)

◆ ON_GL() [20/20]

void ON_GL ( ON_Viewport ,
int  ,
int  ,
int  ,
int   
)

Use ON_GL( ON_Viewport& ... ) to set the GL projections to match those used in the OpenNURBS viewport. Use ON_GL( ON_Viewport&, in, int, int, int ) to specify the size of the GL window and loads the GL projection matrix (camera to clip transformation). If the aspect ratio of the GL window and ON_Viewport's frustum do not match, the viewport's frustum is adjusted to get things back to 1:1.

For systems where the upper left corner of a window has coordinates (0,0) use: port_left = 0 port_right = width-1 port_bottom = height-1 port_top = 0

◆ ON_GreatestCommonDivisor()

ON_DECL unsigned ON_GreatestCommonDivisor ( unsigned  a,
unsigned  b 
)

Parameters
a
b
Returns
If a > 0 or b > 0, then the greatest common divisor of a and b is returned (nonzero). Note that if n > 0, then gcd(0,n) = gcd(n,0) = n and gcd(1,n) = gcd(n,1) = 1. If a = 0 and b = 0, then the greatest common divisor is not defined and 0 is returned.

◆ ON_GrevilleAbcissa()

ON_DECL double ON_GrevilleAbcissa ( int  ,
const double *   
)

◆ ON_HairlinePrintWidth()

ON_DECL double ON_HairlinePrintWidth ( )

Description: Return a width in millimeters that is a valid hairline width in rhino

◆ ON_hsort() [1/2]

ON_DECL void ON_hsort ( void *  base,
size_t  count,
size_t  sizeof_element,
int(*)(const void *, const void *)  compare 
)

Description: Various sorts. When in doubt, use ON_qsort(). ON_qsort - quick sort. ON_hsort = hearp sort. Parameters base - [in] array of count elements count - [in] number of elements in the index[] and base[] arrays sizeof_element - [in] number of bytes between consecutive elements in the base[] array. compare - [in] Comparison function a la qsort(). The context parameter is pass as the third argument. context - [in] pointer passed as the third argument to compare(). Remarks: As a rule, use quick sort unless extensive tests in your case prove that heap sort is faster.

This implementation of quick sort is generally faster than heap sort, even when the input arrays are nearly sorted. The only common case when heap sort is faster occurs when the arrays are strictly "chevron" (3,2,1,2,3) or "carat" (1,2,3,2,1) ordered, and in these cases heap sort is about 50% faster. If the "chevron" or "caret" ordered arrays have a little randomness added, the two algorithms have the same speed.

◆ ON_hsort() [2/2]

ON_DECL void ON_hsort ( void *  base,
size_t  count,
size_t  sizeof_element,
int(*)(void *, const void *, const void *)  compare,
void *  context 
)

◆ ON_HSORT_FNAME()

void ON_HSORT_FNAME ( ON_SORT_TEMPLATE_TYPE *  base,
size_t  nel 
)

◆ ON_IdToString()

const ON_DECL ON_wString ON_IdToString ( ON_UUID  id)

◆ ON_IncreaseBezierDegree()

ON_DECL bool ON_IncreaseBezierDegree ( int  ,
bool  ,
int  ,
int  ,
double *   
)

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

◆ ON_IndexFromNotUniqueId()

ON_DECL ON__UINT64 ON_IndexFromNotUniqueId ( ON_UUID  not_unique_id)

Description: This function is used for in testing situations when an ON_UUID value needs to be repeatable. Parameter: not_unique_id - [in] A not unique id created by ON_NotUniqueIdFromIndex() or ON_NextNotUniqueId(). Returns: If not_unique_id was created by on of the NotUniqueId functions, then the index of that id is returned. Otherwise, 0 is return if not_unique_id is nil and 0xFFFF00000000 is returned in all other cases.

◆ ON_InsertKnot()

ON_DECL int ON_InsertKnot ( double  ,
int  ,
int  ,
int  ,
int  ,
int  ,
double *  ,
double *  ,
int *   
)

Returns: Number of knots added.

◆ ON_Integrate() [1/6]

ON_DECL double ON_Integrate ( const class ON_Curve curve,
double(*)(ON__UINT_PTR context, int limit_direction, double t)  f,
ON__UINT_PTR  f_context,
ON_Interval  integration_limit,
double  relative_tolerance,
double  absolute_tolerance,
double *  error_bound 
)

Calculates the definite integral of a smooth (C-infinity) function of one variable using a Rhomberg integration technique and returns returns Integral(f(t)*|curve'(t)|*dt). The C-infinity requirement is used by the Rhomberg algorithm when estimating error bounds and convergence. If you choose to pass a C2 function, you are likely to converge while getting less accurate results and incorrect error bound estimates. Using a C0 or C1 fucntion will ofter return nonsense.

Parameters
curveThe integration is performed over the C-infinity spans of the curve and |curve'(t)| is automatically included in the integrand. The integrand must be C-infinity on the intesection each curve span with the interval (limits[0],limits[1]). The curve may have any dimension.
fThe integrand function is double f(ON__UINT_PTR context, int limit_direction, double t) and returns the value of the integrand at t. The limit_direction parameter will be -1, 0, or +1 and specifies which limit direction should be used in the evaluation. If limit_direction = 1, then the integrand may not be C-infinity at t and should be evaluated using the limit from above. If limit_direction = -1, then the integrand may not be C-infinity at t and should be evaluated using the limit from below. If limit_direction = 0, then the integrand is C-infinity at t and may and evaluation from above and below will return the same answer.
f_contextFirst parameter passed into the integrand function.
integration_limitIf integration_limit if is not valid (ON_Interval::Nan or ON_Interval::EmptyInterval), then the integration is performed over the entire domain of the curve. Otherwise the integration is peformed over the intersection of integration_limit with each curve span.
relative_toleranceDesired relative tolerance. If I = mathematical value and N = numerical integration value, then the algorithm will terminate when |I - N| <= relative_tolerance*|I|. For example, if you want to know the answer with 5 digits of accuracy, then pass 1e-5.
absolute_toleranceDesired absolute tolerance. If I = mathematical value and N = numerical integration value, then the algorithm will terminate when |I - N| <= absolute_tolerance.
error_boundIf error_bound is not nullptr, then the returned value is upper bound on the error in the calculation. If I = mathematical value and N = returned value, then |I - N| <= *error_bound;
Returns
If the calulation succeeds, then the numerical integral is returned. Otherwise ON_DBL_QNAN is returned.

◆ ON_Integrate() [2/6]

ON_DECL double ON_Integrate ( const class ON_Surface surface,
double(*)(ON__UINT_PTR context, int limit_direction, double s, double t)  f,
ON__UINT_PTR  f_context,
ON_Interval  integration_limit1,
ON_Interval  integration_limit2,
double  relative_tolerance,
double  absolute_tolerance,
double *  error_bound 
)

Calculates the definite integral of a smooth (C-infinity) function of two variables using a Rhomberg integration technique and returns returns Integral(f(s,t)*|dS/ds(s,t) x dS/dt(s,t)|*ds*dt), where dS/ds and dS/dt are the surface's first partial derivatives. The C-infinity requirement is used by the Rhomberg algorithm when estimating error bounds and convergence. If you choose to pass a C2 function, you are likely to converge while getting less accurate results and incorrect error bound estimates. Using a C0 or C1 fucntion will ofter return nonsense.

Parameters
surfaceThe integration is performed over the C-infinity bispans of the surface and |dS/ds(s,t) x dS/dt(s,t)| is automatically included in the integrand. The integrand must be C-infinity on the intesection each surface bispan with the interval (limits[0]xlimits[1]). The surface must be 2 or 3 dimensional (surface.Dimension() = 2 or 3).
fThe integrand function is double f(ON__UINT_PTR context, int limit_direction, double t) and returns the value of the integrand at t. The limit_direction parameter will be -1, 0, or +1 and specifies which limit direction should be used in the evaluation. If limit_direction = 1, then the integrand may not be C-infinity at t and should be evaluated using the limit from above. If limit_direction = -1, then the integrand may not be C-infinity at t and should be evaluated using the limit from below. If limit_direction = 0, then the integrand is C-infinity at t and may and evaluation from above and below will return the same answer.
f_contextFirst parameter passed into the integrand function.
integration_limit1If integration_limit1 if is not valid (ON_Interval::Nan or ON_Interval::EmptyInterval), then the integration is performed over the entire domain of the first surface parameter. Otherwise the integration is peformed over the intersection of integration_limit1 with each surface bispan.
integration_limit2If integration_limit2 if is not valid (ON_Interval::Nan or ON_Interval::EmptyInterval), then the integration is performed over the entire domain of the second surface parameter. Otherwise the integration is peformed over the intersection of integration_limit2 with each surface bispan.
relative_toleranceDesired relative tolerance. If I = mathematical value and N = numerical integration value, then the algorithm will terminate when |I - N| <= relative_tolerance*|I|. For example, if you want to know the answer with 5 digits of accuracy, then pass 1e-5.
absolute_toleranceDesired absolute tolerance. If I = mathematical value and N = numerical integration value, then the algorithm will terminate when |I - N| <= absolute_tolerance.
error_boundIf error_bound is not nullptr, then the returned value is upper bound on the error in the calculation. If I = mathematical value and N = returned value, then |I - N| <= *error_bound;
Returns
If the calulation succeeds, then the numerical integral is returned. Otherwise ON_DBL_QNAN is returned.

◆ ON_Integrate() [3/6]

ON_DECL double ON_Integrate ( double(*)(ON__UINT_PTR context, int limit_direction, double s, double t)  f,
ON__UINT_PTR  f_context,
const ON_SimpleArray< double > &  limits1,
const ON_SimpleArray< double > &  limits2,
double  relative_tolerance,
double  absolute_tolerance,
double *  error_bound 
)

Calculates the definite integral of a piecewise smooth (C-infinity) function of two variables using a Rhomberg integration technique. The C-infinity requirement is used by the Rhomberg algorithm when estimating error bounds and convergence. If you choose to pass a C2 function, you are likely to converge while getting less accurate results and incorrect error bound estimates. Using a C0 or C1 fucntion will ofter return nonsense.

Parameters
fThe integrand function is double f(ON__UINT_PTR context, int limit_direction, double s, double t) and returns the value of the integrand at (s, t). The limit_direction parameter is a bit field that specifies which limit directions should be used in the evaluation. If limit_direction = 1, then the integrand may not be C-infinity at (s,t) and should be evaluated using the limit from above for s and above for t. If limit_direction = 2, then the integrand may not be C-infinity at (s,t) and should be evaluated using the limit from below for s and above for t. If limit_direction = 3, then the integrand may not be C-infinity at (s,t) and should be evaluated using the limit from below for s and below for t. If limit_direction = 4, then the integrand may not be C-infinity at (s,t) and should be evaluated using the limit from above for s and below for t. If limit_direction = 0, then the integrand is C-infinity at t and may and evaluation from above and below will return the same answer.
f_contextFirst parameter passed into the integrand function.
limits1limits1[] must have at least 2 elements and specifies the integration limits for the first integration parameter. On each domain rectangle (limits1[i],limits1[i+1])x(limits2[j],limits2[j+1]), the integrand must be a C-infinity function.
For example, when integrating over an ON_Surface, pass surface.SpanVector(0) as limits1 and surface.SpanVector(1) as limits2.
limits2limits2[] must have at least 2 elements and specifies the integration limits for the second integration parameter. On each domain rectangle (limits1[i],limits1[i+1])x(limits2[j],limits2[j+1]), the integrand must be a C-infinity function.
For example, when integrating over an ON_Surface, pass surface.SpanVector(0) as limits1 and surface.SpanVector(1) as limits2.
relative_toleranceDesired relative tolerance. If I = mathematical value and N = numerical integration value, then the algorithm will terminate when |I - N| <= relative_tolerance*|I|. For example, if you want to know the answer with 5 digits of accuracy, then pass 1e-5.
absolute_toleranceDesired absolute tolerance. If I = mathematical value and N = numerical integration value, then the algorithm will terminate when |I - N| <= absolute_tolerance.
error_boundIf error_bound is not nullptr, then the returned value is upper bound on the error in the calculation. If I = mathematical value and N = returned value, then |I - N| <= *error_bound;
Returns
If the calulation succeeds, then the numerical integral is returned. Otherwise ON_DBL_QNAN is returned.

◆ ON_Integrate() [4/6]

ON_DECL double ON_Integrate ( double(*)(ON__UINT_PTR context, int limit_direction, double s, double t)  f,
ON__UINT_PTR  f_context,
ON_Interval  limits1,
ON_Interval  limits2,
double  relative_tolerance,
double  absolute_tolerance,
double *  error_bound 
)

Calculates the definite integral of a smooth (C-infinity) function of two variables using a Rhomberg integration technique. The C-infinity requirement is used by the Rhomberg algorithm when estimating error bounds and convergence. If you choose to pass a C2 function, you are likely to converge while getting less accurate results and incorrect error bound estimates. Using a C0 or C1 fucntion will ofter return nonsense.

///

Parameters
fThe integrand function is double f(ON__UINT_PTR context, int limit_direction, double s, double t) and returns the value of the integrand at (s, t). The limit_direction parameter is a bit field that specifies which limit directions should be used in the evaluation. If limit_direction = 1, then the integrand may not be C-infinity at (s,t) and should be evaluated using the limit from above for s and above for t. If limit_direction = 2, then the integrand may not be C-infinity at (s,t) and should be evaluated using the limit from below for s and above for t. If limit_direction = 3, then the integrand may not be C-infinity at (s,t) and should be evaluated using the limit from below for s and below for t. If limit_direction = 4, then the integrand may not be C-infinity at (s,t) and should be evaluated using the limit from above for s and below for t. If limit_direction = 0, then the integrand is C-infinity at t and may and evaluation from above and below will return the same answer.
f_contextFirst parameter passed into the integrand function.
limits1limits of integration for the first integration parameter. The integrand must be C-infinity on domain rectangle limits1 x limits2.
limits2limits of integration for the second integration parameter. The integrand must be C-infinity on domain rectangle limits1 x limits2.
relative_toleranceDesired relative tolerance. If I = mathematical value and N = numerical integration value, then the algorithm will terminate when |I - N| <= relative_tolerance*|I|. For example, if you want to know the answer with 5 digits of accuracy, then pass 1e-5.
absolute_toleranceDesired absolute tolerance. If I = mathematical value and N = numerical integration value, then the algorithm will terminate when |I - N| <= absolute_tolerance.
error_boundIf error_bound is not nullptr, then the returned value is upper bound on the error in the calculation. If I = mathematical value and N = returned value, then |I - N| <= *error_bound;
Returns
If the calulation succeeds, then the numerical integral is returned. Otherwise ON_DBL_QNAN is returned.

◆ ON_Integrate() [5/6]

ON_DECL double ON_Integrate ( double(*)(ON__UINT_PTR context, int limit_direction, double t)  f,
ON__UINT_PTR  f_context,
const ON_SimpleArray< double > &  limits,
double  relative_tolerance,
double  absolute_tolerance,
double *  error_bound 
)

Calculates the definite integral of a piecewise smooth (C-infinity) function of one variable using a Rhomberg integration technique and returns returns Integral(f(t)dt). The C-infinity requirement is used by the Rhomberg algorithm when estimating error bounds and convergence. If you choose to pass a C2 function, you are likely to converge while getting less accurate results and incorrect error bound estimates. Using a C0 or C1 fucntion will ofter return nonsense.

Parameters
fThe integrand function is double f(ON__UINT_PTR context, int limit_direction, double t) and returns the value of the integrand at t. The limit_direction parameter will be -1, 0, or +1 and specifies which limit direction should be used in the evaluation. If limit_direction = 1, then the integrand may not be C-infinity at t and should be evaluated using the limit from above. If limit_direction = -1, then the integrand may not be C-infinity at t and should be evaluated using the limit from below. If limit_direction = 0, then the integrand is C-infinity at t and may and evaluation from above and below will return the same answer.
f_contextFIrst parameter passed into the integrand function.
limitslimits[] must have at least 2 elements and specifies the limits of integration. The integrand must be C-infinity on each interval (limits[i],limits[i+1). For example, when integrating over an ON_Curve, pass curve.SpanVector().
relative_toleranceDesired relative tolerance. If I = mathematical value and N = numerical integration value, then the algorithm will terminate when |I - N| <= relative_tolerance*|I|. For example, if you want to know the answer with 5 digits of accuracy, then pass 1e-5.
absolute_toleranceDesired absolute tolerance. If I = mathematical value and N = numerical integration value, then the algorithm will terminate when |I - N| <= absolute_tolerance.
error_boundIf error_bound is not nullptr, then the returned value is upper bound on the error in the calculation. If I = mathematical value and N = returned value, then |I - N| <= *error_bound;
Returns
If the calulation succeeds, then the numerical integral is returned. Otherwise ON_DBL_QNAN is returned.

◆ ON_Integrate() [6/6]

ON_DECL double ON_Integrate ( double(*)(ON__UINT_PTR context, int limit_direction, double t)  f,
ON__UINT_PTR  f_context,
ON_Interval  limits,
double  relative_tolerance,
double  absolute_tolerance,
double *  error_bound 
)

Calculates the definite integral of a smooth (C-infinity) function of one variable using a Rhomberg integration technique and returns returns Integral(f(t)dt). The C-infinity requirement is used by the Rhomberg algorithm when estimating error bounds and convergence. If you choose to pass a C2 function, you are likely to converge while getting less accurate results and incorrect error bound estimates. Using a C0 or C1 fucntion will ofter return nonsense.

Parameters
fThe integrand function is double f(ON__UINT_PTR context, int limit_direction, double t) and returns the value of the integrand at t. The limit_direction parameter will be -1, 0, or +1 and specifies which limit direction should be used in the evaluation. If limit_direction = 1, then the integrand may not be C-infinity at t and should be evaluated using the limit from above. If limit_direction = -1, then the integrand may not be C-infinity at t and should be evaluated using the limit from below. If limit_direction = 0, then the integrand is C-infinity at t and may and evaluation from above and below will return the same answer.
f_contextFirst parameter passed into the integrand function.
limitslimits of integration. The integrand must be C-infinity on each interval (limits[0],limits[1]).
relative_toleranceDesired relative tolerance. If I = mathematical value and N = numerical integration value, then the algorithm will terminate when |I - N| <= relative_tolerance*|I|. For example, if you want to know the answer with 5 digits of accuracy, then pass 1e-5.
absolute_toleranceDesired absolute tolerance. If I = mathematical value and N = numerical integration value, then the algorithm will terminate when |I - N| <= absolute_tolerance.
error_boundIf error_bound is not nullptr, then the returned value is upper bound on the error in the calculation. If I = mathematical value and N = returned value, then |I - N| <= *error_bound;
Returns
If the calulation succeeds, then the numerical integral is returned. Otherwise ON_DBL_QNAN is returned.

◆ ON_Internal_CompareExchangePointer()

void* ON_Internal_CompareExchangePointer ( void *volatile *  dest,
void *  exchange,
void *  comparand 
)

◆ ON_Intersect() [1/16]

ON_DECL int ON_Intersect ( const ON_Arc arc0,
const ON_Arc arc1,
ON_3dPoint point0,
ON_3dPoint point1 
)

Description: Intersect a pair of arcs, note either arc could be a full circle Parameters: arc0 - [in] arc1 - [in] point0 - [out] first intersection point point1 - [out] second intersection point Returns: 0 No intersection 1 One intersection at point0 2 Two intersections at point0 and point1. 3 arcs are cocircular and overlap

◆ ON_Intersect() [2/16]

ON_DECL bool ON_Intersect ( const ON_BoundingBox bbox,
const ON_Line line,
double  tolerance,
ON_Interval line_parameters 
)

Description: Intersect an infinite line and an axis aligned bounding box. Parameters: bbox - [in] line - [in] tolerance - [in] If tolerance > 0.0, then the intersection is performed against a box that has each side moved out by tolerance. line_parameters - [out] Pass null if you do not need the parameters. If true is returned and line.from != line.to, then the chord from line.PointAt(line_parameters[0]) to line.PointAt(line_parameters[1]) is the intersection. If true is returned and line.from = line.to, then line.from is in the box and the interval (0.0,0.0) is returned. If false is returned, the input value of line_parameters is not changed. Returns: True if the line intersects the box and false otherwise.

◆ ON_Intersect() [3/16]

ON_DECL int ON_Intersect ( const ON_Circle c0,
const ON_Circle c1,
ON_3dPoint point0,
ON_3dPoint point1 
)

Description: Intersect a pair of circles Parameters: circle0 - [in] circle11 - [in] point0 - [out] first intersection point point1 - [out] second intersection point Returns: 0 No intersection 1 One intersection at point0 2 Two intersections at point0 and point1. 3 Circles are identical

◆ ON_Intersect() [4/16]

ON_DECL int ON_Intersect ( const ON_Line ,
const ON_Cylinder ,
ON_3dPoint ,
ON_3dPoint  
)

Description: Intersect an infinite line and a cylinder. Parameters: line - [in] cylinder - [in] pointA - [out] pointB - [out] Returns: 0: no intersection pointA is the point on line closest to cylinder, pointB is the point on cylinder closest to line. 1: intersection is a single point pointA is obtained by evaluating the line pointB is obtained by evaluating the cylinder 2: 2 distinct intersection points 3: line lies on cylinder Remarks: The value of cylinder.IsFinite() determines if the intersection is performed on the finite or infinite cylinder.

◆ ON_Intersect() [5/16]

ON_DECL bool ON_Intersect ( const ON_Line ,
const ON_Line ,
double *  ,
double *   
)

These simple intersectors are fast and detect transverse intersections. If the intersection is not a simple transverse case, then they return false and you will have to use one of the slower but fancier models. Description: Find the unique closest-points pair between two infinite lines, if it exists. Parameters: lineA - [in] lineB - [in] double* a - [out] double* b - [out] The shortest distance between the lines is the chord from lineA.PointAt(*a) to lineB.PointAt(*b). Returns: True if points are found and false if the lines are numerically parallel. Numerically parallel means the 2x2 matrix

      AoA  -AoB
     -AoB   BoB

is numerically singular, where A = lineA.to-lineA.from and B = lineB.to-lineB.from. See Also: ON_IntersectLineLine

◆ ON_Intersect() [6/16]

ON_DECL bool ON_Intersect ( const ON_Line ,
const ON_Plane ,
double *   
)

Description: Finds the intersection point of a line and plane, if it exists. Parameters: line - [in] plane - [in] line_parameter - [out] If the returned parameter is < 0 or > 1, then the line segment between line.from and line.to does not intersect the plane. Returns: true if the intersection is a single point, and false otherwise.

◆ ON_Intersect() [7/16]

ON_DECL int ON_Intersect ( const ON_Line ,
const ON_Sphere ,
ON_3dPoint ,
ON_3dPoint  
)

Description: Intersect an infinite line and a sphere. Parameters: line - [in] sphere - [in] pointA - [out] First intersection point is returned here. pointB - [out] Second intersection point is returned here. Returns: 0: no intersection pointA is the point on line closest to sphere, pointB is the point on sphere closest to line. 1: intersection is a single point pointA is obtained by evaluating the line pointB is obtained by evaluating the sphere 2: 2 distinct intersection points

◆ ON_Intersect() [8/16]

ON_DECL int ON_Intersect ( const ON_Line line,
const ON_Arc arc,
double *  line_t0,
ON_3dPoint arc_point0,
double *  line_t1,
ON_3dPoint arc_point1 
)

Description: Intersect a infinite line and arc. Parameters: line - [in] arc - [in] line_t0 - [out] line parameter of first intersection point arc_point0 - [out] first intersection point on arc line_t1 - [out] line parameter of second intersection point arc_point1 - [out] second intersection point on arc Returns: 0 No intersection 1 One intersection at line.PointAt(*line_t0) 2 Two intersections at line.PointAt(*line_t0) and line.PointAt(*line_t1).

◆ ON_Intersect() [9/16]

ON_DECL int ON_Intersect ( const ON_Line line,
const ON_Circle circle,
double *  line_t0,
ON_3dPoint circle_point0,
double *  line_t1,
ON_3dPoint circle_point1 
)

Description: Intersect an infinite line and circle. Parameters: line - [in] circle - [in] line_t0 - [out] line parameter of first intersection point circle_point0 - [out] first intersection point on circle line_t1 - [out] line parameter of second intersection point circle_point1 - [out] second intersection point on circle Returns: 0 No intersection 1 One intersection at line.PointAt(*line_t0) 2 Two intersections at line.PointAt(*line_t0) and line.PointAt(*line_t1).

◆ ON_Intersect() [10/16]

ON_DECL bool ON_Intersect ( const ON_Line line,
const ON_PlaneEquation plane_equation,
double *  line_parameter 
)

Description: Finds the intersection point of a line and plane, if it exists. Parameters: line - [in] plane_equation - [in] line_parameter - [out] If the returned parameter is < 0 or > 1, then the line segment between line.from and line.to does not intersect the plane. Returns: true if the intersection is a single point, and false otherwise.

◆ ON_Intersect() [11/16]

ON_DECL bool ON_Intersect ( const ON_Plane ,
const ON_Plane ,
const ON_Plane ,
ON_3dPoint  
)

Description: Finds the intersection point of three planes, if it exists. Parameters: planeA - [in] planeB - [in] planeC - [in] point_out - [out] Intersection point is returned here. Returns: true if the intersection is a single point, and false otherwise.

◆ ON_Intersect() [12/16]

ON_DECL bool ON_Intersect ( const ON_Plane ,
const ON_Plane ,
ON_Line  
)

Description: Finds the intersection line between two planes, if it exists. Parameters: planeA - [in] planeB - [in] line_out - [out] Intersection line is returned here. Returns: true if the intersection is a single line, and false otherwise.

◆ ON_Intersect() [13/16]

ON_DECL int ON_Intersect ( const ON_Plane ,
const ON_Sphere ,
ON_Circle  
)

Description: Intersect a plane and a sphere. Parameters: plane - [in] sphere - [in] circle - [out] Intersection circle is returned here. Returns: 0: no intersection circle radius = 0, and circle origin = point on the plane closest to the sphere. 1: intersection is a single point circle radius = 0, and circle origin = tangent point on the plane. 2: intersection is a circle circle radius > 0.

◆ ON_Intersect() [14/16]

ON_DECL int ON_Intersect ( const ON_Plane plane,
const ON_Arc arc,
ON_3dPoint point0,
ON_3dPoint point1 
)

Description: Intersect a plane and an arc. Parameters: plane - [in] arc - [in] point0 - [out] first intersection point point1 - [out] second intersection point Returns: 0 No intersection 1 One intersection at point0 2 Two intersections at point0 and point1. 3 Arc lies on plane

◆ ON_Intersect() [15/16]

ON_DECL int ON_Intersect ( const ON_Plane plane,
const ON_Circle circle,
ON_3dPoint point0,
ON_3dPoint point1 
)

Description: Intersect a plane and a circle. Parameters: plane - [in] circle - [in] point0 - [out] first intersection point point1 - [out] second intersection point Returns: 0 No intersection 1 One intersection at point0 2 Two intersections at point0 and point1. 3 Circle lies on plane

◆ ON_Intersect() [16/16]

ON_DECL int ON_Intersect ( const ON_Sphere sphere0,
const ON_Sphere sphere1,
ON_Circle circle 
)

Description: Intersect two spheres using exact calculations. Parameters: sphere0 - [in] sphere1 - [in] circle - [out] If intersection is a point, then that point will be the center, radius 0. Returns: 0 if no intersection, 1 if a single point, 2 if a circle, 3 if the spheres are the same.

◆ ON_IntersectCoplanarLineAndTriangle()

ON_DECL unsigned int ON_IntersectCoplanarLineAndTriangle ( const double  A[3],
const double  B[3],
const double  C[3],
const double  N[3],
const double  P[3],
const double  Q[3],
double  line_t[2],
double  triangle_bc[2][3] 
)

Parameters: A - [in] B - [in] C - [in] triangle corners. N - [in] null pointer or a nonzero unit vector perpendicular to the plane of the triangle. N may have either orientation (+N and -N work equally as well). This pointer can be the address of the "a" parameter of an ON_TrianglePlane calculated from this triangle. If a unit length normal is not available, pass null and the necessary information will be calculated in this function. P - [in] Q - [in] line segment ends. line_t - [out] The parameters of the intersection point(s) on the line segment. triangle_bc - [out] The barycentric coordinates of the intersection point(s) on the triangle. Returns: 0: no intersection 1: single point of intersection 2: overlap intersection

◆ ON_IntersectLineAndTriangle()

ON_DECL unsigned int ON_IntersectLineAndTriangle ( const double  A[3],
const double  B[3],
const double  C[3],
const ON_TrianglePlane tri_plane,
const double  P[3],
const double  Q[3],
double  tolerance,
double  line_t[2],
double  triangle_bc[2][3] 
)

Parameters: A - [in] B - [in] C - [in] triangle corners. tri_plane - [in] null pointer or a valid triangle plane. P - [in] Q - [in] line segment ends. tolerance - [in] intersection tolerance. Values > zero are not perfectly handled. line_t - [out] The parameters of the intersection point(s) on the line segment. triangle_bc - [out] The barycentric coordinates of the intersection point(s) on the triangle. Returns: 0: no intersection line_t and triangle_bc values are not set. 1: single point of intersection line_t[0] and triangle_bc[0] values are set. line_t[1] and triangle_bc[1] values are not set 2: overlap intersection All line_t and triangle_bc values are set and line_t[0] < line_t[1].

◆ ON_IntersectLineLine()

ON_DECL bool ON_IntersectLineLine ( const ON_Line lineA,
const ON_Line lineB,
double *  a,
double *  b,
double  tolerance,
bool  bIntersectSegments 
)

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. These simple intersectors are fast and detect transverse intersections. If the intersection is not a simple transverse case, then they return false and you will have to use one of the slower but fancier models. Description: Intersect two lines. Parameters: lineA - [in] lineB - [in] double* a - [out] double* b - [out] The shortest distance between the lines is the chord from lineA.PointAt(*a) to lineB.PointAt(*b). tolerance - [in] If > 0.0, then an intersection is reported only if the distance between the points is <= tolerance. If <= 0.0, then the closest point between the lines is reported. bIntersectSegments - [in] if true, the input lines are treated as finite segments. If false, the input lines are treated as infinite lines. Returns: True if a closest point can be calculated and the result passes the tolerance parameter test. See Also: ON_Intersect( const ON_Line& lineA, const ON_Line& line B) Remarks: If the lines are exactly parallel, meaning the system of equations used to find a and b has no numerical solution, then false is returned. If the lines are nearly parallel, which is often numerically true even if you think the lines look exactly parallel, then the closest points are found and true is returned. So, if you care about weeding out "parallel" lines, then you need to do something like the following.

    bool rc = ON_IntersectLineLine(lineA,lineB,
                                   &a,&b,
                                   tolerance,
                                   bIntersectSegments);
    if (rc)
    {
      double angle_tolerance_radians = 0.5*ON_PI/180.0; ///< or whatever
      double parallel_tol = cos(angle_tolerance_radians);
      if ( fabs(lineA.Tangent()*lineB.Tangent()) >= parallel_tol )
      {
        ... do whatever you think is appropriate
      }
    }

◆ ON_IntersectMeshRay()

ON_DECL bool ON_IntersectMeshRay ( const ON_Mesh mesh,
const ON_3dRay ray,
double  tolerance,
ON_SimpleArray< double > &  ray_ts 
)

Finds intersections between a mesh and a semi-infinite, oriented ray. Inputs: mesh [in] - a mesh. ray [in] - the ray. tolerance [in] - a small, positive value that is used to tell overlaps and perforations apart. ray_ts [in] - an array that will be filled with new values Outputs: true if successful. There may not be intersections in this case.

◆ ON_IntersectViewFrustumPlane()

ON_DECL bool ON_IntersectViewFrustumPlane ( const ON_Viewport vp,
const ON_PlaneEquation plane_equation,
ON_SimpleArray< ON_3dPoint > &  points 
)

Description: Calculate the corners of the polygon that is the intersection of a view frustum with and infinite plane. Parameters: vp - [in] defines view frustum plane_equation - [in] defined infinite plane points - [out] corners of the polygon. If true is returned and points.Count() is zero, then the plane missed the frustum. Note that the start/end point is not duplicated in the list. Returns: True if input was valid, false otherwise. Note that even when true is returned, the returned points.Count() may be zero if the plane and frustum do not intersect.

◆ ON_InvertSVDW()

ON_DECL int ON_InvertSVDW ( int  count,
const double *  W,
double *&  invW 
)

Description: Invert the diagonal matrix in a the singular value decomposition. Parameters: count - [in] number of elements in W W - [in] diagonal values in the singular value decomposition. invW - [out] The inverted diagonal is returned here. invW may be the same pointer as W. If the input value of invW is not null, it must point to an array of count doubles. If the input value of invW is null, heap storage will be allocated using onmalloc() and the calling function must call onfree(invW). Remarks: If the singular value decomposition were mathematically perfect, then this function would be: for (i = 0; i < count; i++) invW[i] = (W[i] != 0.0) ? 1.0/W[i] : 0.0; Because the double precision arithmetic is not mathematically perfect, very small values of W[i] may well be zero and this function makes a reasonable guess as to when W[i] should be treated as zero.
Returns: Number of non-zero elements in invW, which, in a mathematically perfect situation, is the rank of Diag(W).

◆ ON_Is2dPatternSquished()

ON_DECL bool ON_Is2dPatternSquished ( const ON_Geometry geometry)

◆ ON_IsConicEquationAnEllipse()

ON_DECL bool ON_IsConicEquationAnEllipse ( const double  conic[6],
ON_2dPoint center,
ON_2dVector major_axis,
ON_2dVector minor_axis,
double *  major_radius,
double *  minor_radius 
)

Description: Test a conic equation to see if it defines and ellipse. If so, return the center and axes of the ellipse. Parameters: conic - [in] Coefficients of the conic equation. The points on the conic satisfy the equation 0 = conic[0]*x^2 + conic[1]*xy + conic[2]*y^2

  • conic[3]*x + conic[4]*y + conic[5] center - [out] major_axis - [out] minor_axis - [out] major_radius - [out] minor_radius - [out] Returns: True if the conic is an ellipse and the center and axes were found. False if the conic is not an ellipse, in which case the input values of center, major_axis, minor_axis, major_radius, and minor_radius are not changed.

◆ ON_IsContinuous()

ON_DECL bool ON_IsContinuous ( ON::continuity  c,
ON_3dPoint  Pa,
ON_3dVector  D1a,
ON_3dVector  D2a,
ON_3dPoint  Pb,
ON_3dVector  D1b,
ON_3dVector  D2b,
double  point_tolerance = ON_ZERO_TOLERANCE,
double  d1_tolerance = ON_ZERO_TOLERANCE,
double  d2_tolerance = ON_ZERO_TOLERANCE,
double  cos_angle_tolerance = ON_DEFAULT_ANGLE_TOLERANCE_COSINE,
double  curvature_tolerance = ON_SQRT_EPSILON 
)

Description: Test curve continuity from derivative values. Parameters: c - [in] type of continuity to test for. Read ON::continuity comments for details. Pa - [in] point on curve A. D1a - [in] first derivative of curve A. D2a - [in] second derivative of curve A. Pb - [in] point on curve B. D1b - [in] first derivative of curve B. D3b - [in] second derivative of curve B. point_tolerance - [in] if the distance between two points is greater than point_tolerance, then the curve is not C0. d1_tolerance - [in] if the difference between two first derivatives is greater than d1_tolerance, then the curve is not C1. d2_tolerance - [in] if the difference between two second derivatives is greater than d2_tolerance, then the curve is not C2. cos_angle_tolerance - [in] default = cos(1 degree) Used only when c is ON::continuity::G1_continuous or ON::continuity::G2_continuous. If the cosine of the angle between two tangent vectors is <= cos_angle_tolerance, then a G1 discontinuity is reported. curvature_tolerance - [in] (default = ON_SQRT_EPSILON) Used only when c is ON::continuity::G2_continuous. If K0 and K1 are curvatures evaluated from above and below and |K0 - K1| > curvature_tolerance, then a curvature discontinuity is reported. Returns: true if the curve has at least the c type continuity at the parameter t.

◆ ON_IsConvexPolyline() [1/2]

ON_DECL bool ON_IsConvexPolyline ( const ON_SimpleArray< ON_3dPoint > &  points,
bool  bStrictlyConvex 
)

Description: Determine if a polyline is convex. Parameters: points - [in] If points.Count() >= 4 and the first and last points are equal, then the zero length segment between those points is ignored. bStrictlyConvex - [in] If false, colinear segments are considered convex.
Returns True if the polyline is convex.

◆ ON_IsConvexPolyline() [2/2]

ON_DECL bool ON_IsConvexPolyline ( size_t  point_dim,
size_t  point_count,
const double *  points,
size_t  point_stride,
bool  bStrictlyConvex 
)

Description: Determine if a polyline is convex. Parameters: point_dim - [in] 2 or 3 point_count - [in] points - [in] If point_count >= 4 and the first and last points are equal, then the zero length segment between those points is ignored. point_stride - [in] number of doubles between points (>=point_dim) bStrictlyConvex - [in] If false, colinear segments are considered convex.
Returns True if the polyline is convex.

◆ ON_IsCurvatureDiscontinuity() [1/2]

ON_DECL bool ON_IsCurvatureDiscontinuity ( const ON_3dVector  Km,
const ON_3dVector  Kp,
double  cos_angle_tolerance,
double  curvature_tolerance,
double  zero_curvature,
double  radius_tolerance 
)

◆ ON_IsCurvatureDiscontinuity() [2/2]

ON_DECL bool ON_IsCurvatureDiscontinuity ( const ON_3dVector  Km,
const ON_3dVector  Kp,
double  cos_angle_tolerance,
double  curvature_tolerance,
double  zero_curvature,
double  radius_tolerance,
double  relative_tolerance 
)

Description: Determine if two curvatures are different enough to qualify as a curvature discontinuity. Parameters: Km - [in] Kp - [in] Km and Kp should be curvatures evaluated at the same parameters using limits from below (minus) and above (plus). The assumption is that you have already compared the points and tangents and consider to curve to be G1 at the point in question. cos_angle_tolerance - [in] If the input value of cos_angle_tolerance >= -1.0 and cos_angle_tolerance <= 1.0 and Km o Kp < cos_angle_tolerance*|Km|*|Kp|, then true is returned. Otherwise it is assumed Km and Kp are parallel. If the curve being tested is nonplanar, then use something like cos(2*tangent angle tolerance) for this parameter. If the curve being tested is planar, then 0.0 will work fine. curvature_tolerance - [in] If |Kp-Km| <= curvature_tolerance, then false is returned, otherwise other tests are used to determine continuity. zero_curvature - in If |K| <= zero_curvature, then K is treated as zero. When in doubt, use ON_ZERO_CURVATURE_TOLERANCE. radius_tolerance - [in] If radius_tolerance >= 0.0 and the difference between the radii of curvature is >= radius_tolerance, then true is returned. relative_tolerance - [in] If relative_tolerance > 0 and |(|Km| - |Kp|)|/max(|Km|,|Kp|) > relative_tolerance, then true is returned. Note that if the curvatures are nonzero and rm and rp are the radii of curvature, then |(|Km| - |Kp|)|/max(|Km|,|Kp|) = |rm-rp|/max(rm,rp). This means the relative_tolerance insures both the scalar curvature and the radii of curvature agree to the specified number of decimal places. When in doubt, use ON_RELATIVE_CURVATURE_TOLERANCE, which is currently 0.05. Returns: False if the curvatures should be considered G2. True if the curvatures are different enough that the curve should be considered not G2.
In addition to the tests described under the curvature_tolerance and radius_tolerance checks, other heuristic tests are used.

◆ ON_IsG1Closed()

void ON_DECL ON_IsG1Closed ( const ON_Surface Srf,
bool  closed[2] 
)

Sets closed[di] if Surface if G1-closed in the di direction, i.e no G1-discontinuities on the interior or the seam.

◆ ON_IsG2CurvatureContinuous()

ON_DECL bool ON_IsG2CurvatureContinuous ( const ON_3dVector  Km,
const ON_3dVector  Kp,
double  cos_angle_tolerance,
double  curvature_tolerance 
)

Description: This function is used to test curvature continuity in IsContinuous and GetNextDiscontinuity functions when the continuity parameter is ON::continuity::G2_continuous. Parameters: Km - [in] Curve's vector curvature evaluated from below Kp - [in] Curve's vector curvature evaluated from below Returns: True if the change from Km to Kp should be considered G2 continuous.

◆ ON_IsGregorianLeapYear()

ON_DECL bool ON_IsGregorianLeapYear ( unsigned int  year)

Parameters: year - [in] Returns: true if the year is a leap year in the Gregorian calendar.

◆ ON_IsGsmoothCurvatureContinuous()

ON_DECL bool ON_IsGsmoothCurvatureContinuous ( const ON_3dVector  Km,
const ON_3dVector  Kp,
double  cos_angle_tolerance,
double  curvature_tolerance 
)

Description: This function is used to test curvature continuity in IsContinuous and GetNextDiscontinuity functions when the continuity parameter is ON::continuity::Gsmooth_continuous. Parameters: Km - [in] Curve's vector curvature evaluated from below Kp - [in] Curve's vector curvature evaluated from below Returns: True if the change from Km to Kp should be considered Gsmooth continuous.

◆ ON_IsHairlinePrintWidth()

ON_DECL bool ON_IsHairlinePrintWidth ( double  width_mm)

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. Description: Determine if a line width is deemed to be a "hairline width" in Rhino Any width that is >0 and < 0.001 mm is a hairline width for printing Parameters: width_mm: [in] the width to examine in millimeters Returns: true if this is a hairline width

◆ ON_IsKnotVectorClamped()

ON_DECL bool ON_IsKnotVectorClamped ( int  order,
int  cv_count,
const double *  knot,
int  = 2 
)

◆ ON_IsKnotVectorPeriodic()

ON_DECL bool ON_IsKnotVectorPeriodic ( int  order,
int  cv_count,
const double *  knot 
)

◆ ON_IsKnotVectorUniform()

ON_DECL bool ON_IsKnotVectorUniform ( int  order,
int  cv_count,
const double *  knot 
)

◆ ON_IsLongChunkTypecode()

bool ON_IsLongChunkTypecode ( ON__UINT32  typecode)

◆ ON_IsNaNd()

ON_DECL bool ON_IsNaNd ( double  x)

◆ ON_IsNaNf()

ON_DECL bool ON_IsNaNf ( float  x)

◆ ON_IsNotValid()

ON_DECL bool ON_IsNotValid ( )

Description: When ON_Object::IsValid() fails and returns false, ON_IsNotValid() is called. This way, a developer can put a breakpoint in ON_IsNotValid() and stop execution at the exact place IsValid() fails. Returns: false;

◆ ON_IsNullPtr() [1/3]

ON_DECL bool ON_IsNullPtr ( const ON__INT_PTR  ptr)

◆ ON_IsNullPtr() [2/3]

ON_DECL bool ON_IsNullPtr ( const ON__UINT_PTR  ptr)

◆ ON_IsNullPtr() [3/3]

ON_DECL bool ON_IsNullPtr ( const void *  ptr)

◆ ON_IsOpennurbsApplicationId()

ON_DECL unsigned int ON_IsOpennurbsApplicationId ( ON_UUID  id)

Description: Determine if an id is an opennurbs application id. Parameters: id - [in] id to test Returns: 0: id is not an opennurbs application id N: id == ON_opennurbsN_id, where "N" = 4,5,6,...

◆ ON_IsOrthogonalFrame() [1/4]

ON_DECL bool ON_IsOrthogonalFrame ( const ON_2dVector ,
const ON_2dVector  
)

◆ ON_IsOrthogonalFrame() [2/4]

ON_DECL bool ON_IsOrthogonalFrame ( const ON_2fVector ,
const ON_2fVector  
)

◆ ON_IsOrthogonalFrame() [3/4]

ON_DECL bool ON_IsOrthogonalFrame ( const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector  
)

◆ ON_IsOrthogonalFrame() [4/4]

ON_DECL bool ON_IsOrthogonalFrame ( const ON_3fVector ,
const ON_3fVector ,
const ON_3fVector  
)

◆ ON_IsOrthonormalFrame() [1/4]

ON_DECL bool ON_IsOrthonormalFrame ( const ON_2dVector ,
const ON_2dVector  
)

◆ ON_IsOrthonormalFrame() [2/4]

ON_DECL bool ON_IsOrthonormalFrame ( const ON_2fVector ,
const ON_2fVector  
)

◆ ON_IsOrthonormalFrame() [3/4]

ON_DECL bool ON_IsOrthonormalFrame ( const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector  
)

◆ ON_IsOrthonormalFrame() [4/4]

ON_DECL bool ON_IsOrthonormalFrame ( const ON_3fVector ,
const ON_3fVector ,
const ON_3fVector  
)

◆ ON_IsPointGridClosed()

ON_DECL bool ON_IsPointGridClosed ( int  ,
bool  ,
int  ,
int  ,
int  ,
int  ,
const double *  ,
int   
)

◆ ON_IsPointListClosed()

ON_DECL bool ON_IsPointListClosed ( int  ,
bool  ,
int  ,
int  ,
const double *   
)

◆ ON_IsPointListPlanar()

ON_DECL int ON_IsPointListPlanar ( bool  bRational,
int  count,
int  stride,
const double *  points,
const double *  boxMin,
const double *  boxMax,
double  tolerance,
ON_PlaneEquation plane_equation 
)

Description: Determine if a list of points is planar. Parameters: bRational - [in] false if the points are euclidean (x,y,z) true if the points are homogeneous rational (x,y,z,w) point_count - [in] number of points point_stride - [in] number of doubles between point x coordinates first point's x coordinate = points[0], second point's x coordinate = points[point_stride],... points - [in] point coordinates (3d or 4d homogeneous rational) boxMin - [in] boxMax - [in] optional 3d bounding box - pass nulls if not readily available tolerance - [in] >= 0.0 plane_equation0 - [in] If you want to test for planarity in a specific plane, pass the plane equation in here. If you want to find a plane containing the points, pass null here. plane_equation - [out] If this point is not null, then the equation of the plane containing the points is returned here. Returns: 0 - points are not coplanar to the specified tolerance 1 - points are coplanar to the specified tolerance 2 - points are collinear to the specified tolerance (in this case, plane_equation is not a unique answer) 3 - points are coincident to the specified tolerance (in this case, plane_equation is not a unique answer)

◆ ON_IsPotentialWindowsCodePage932DoubleByteEncoding()

bool ON_IsPotentialWindowsCodePage932DoubleByteEncoding ( ON__UINT32  lead_byte,
ON__UINT32  trailing_byte 
)

◆ ON_IsPotentialWindowsCodePage932SingleByteEncoding()

bool ON_IsPotentialWindowsCodePage932SingleByteEncoding ( ON__UINT32  x)

Code page 932

◆ ON_IsPotentialWindowsCodePage949DoubleByteEncoding()

bool ON_IsPotentialWindowsCodePage949DoubleByteEncoding ( ON__UINT32  lead_byte,
ON__UINT32  trailing_byte 
)

◆ ON_IsPotentialWindowsCodePage949SingleByteEncoding()

bool ON_IsPotentialWindowsCodePage949SingleByteEncoding ( ON__UINT32  x)

Code page 949

◆ ON_IsPrivateUseUnicodeCodePoint()

ON_DECL bool ON_IsPrivateUseUnicodeCodePoint ( ON__UINT32  unicode_code_point)

Description: Test a value to determine if it is a Unicode code point reserved for private use (can be user defined). Parameters: unicode_code_point - [in] value to test Returns: If unicode_code_point is a private use Unicode code point, then true is returned. Otherwise false is returned.

◆ ON_IsProjectedPointOnTriangleBoundary() [1/2]

ON_DECL bool ON_IsProjectedPointOnTriangleBoundary ( const double  A[3],
const double  B[3],
const double  C[3],
const double  N[3],
const double  test_point[3] 
)

Description: Determine if a projection of a point to a triangle's plane is on the boundary of the triangle. Parameters: A - [in] B - [in] C - [in] triangle corners. N - [in] null pointer or a nonzero unit vector perpendicular to the plane of the triangle. N may have either orientation (+N and -N work equally as well). This pointer can be the address of the "a" parameter of an ON_TrianglePlane calculated from this triangle. If a unit length normal is not available, pass null and the necessary information will be calculated in this function. test_point - [in] Returns: True if the projection of a point to a triangle's plane is on and edge or vertex of the triangle.

◆ ON_IsProjectedPointOnTriangleBoundary() [2/2]

ON_DECL bool ON_IsProjectedPointOnTriangleBoundary ( const float  A[3],
const float  B[3],
const float  C[3],
const float  N[3],
const double  test_point[3] 
)

◆ ON_IsQNaNd()

ON_DECL bool ON_IsQNaNd ( double  x)

◆ ON_IsQNaNf()

ON_DECL bool ON_IsQNaNf ( float  x)

◆ ON_IsRhinoApplicationId()

ON_DECL unsigned int ON_IsRhinoApplicationId ( ON_UUID  id)

Description: Determine if an id is a Rhino application id. Parameters: id - [in] id to test Returns: 0: id is not a Rhino application id N: id == ON_rhinoN_id, where "N" = 2,3,4,5,6,...

◆ ON_IsRightHandFrame() [1/4]

ON_DECL bool ON_IsRightHandFrame ( const ON_2dVector ,
const ON_2dVector  
)

◆ ON_IsRightHandFrame() [2/4]

ON_DECL bool ON_IsRightHandFrame ( const ON_2fVector ,
const ON_2fVector  
)

◆ ON_IsRightHandFrame() [3/4]

ON_DECL bool ON_IsRightHandFrame ( const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector  
)

◆ ON_IsRightHandFrame() [4/4]

ON_DECL bool ON_IsRightHandFrame ( const ON_3fVector ,
const ON_3fVector ,
const ON_3fVector  
)

◆ ON_IsShortChunkTypecode()

bool ON_IsShortChunkTypecode ( ON__UINT32  typecode)

◆ ON_IsSNaNd()

ON_DECL bool ON_IsSNaNd ( double  x)

◆ ON_IsSNaNf()

ON_DECL bool ON_IsSNaNf ( float  x)

◆ ON_IsStandardUnicodeCodePoint()

ON_DECL bool ON_IsStandardUnicodeCodePoint ( ON__UINT32  unicode_code_point)

Description: Test a value to determine if it is a standard Unicode code point. Parameters: unicode_code_point - [in] value to test Returns: If unicode_code_point is a valid Unicode code point that is not reserved for private use and not the Unicode byte order mark (U+FFFE), then true is returned. Otherwise false is returned.

◆ ON_IsUnicodeC1ControlCodePoint()

ON_DECL int ON_IsUnicodeC1ControlCodePoint ( ON__UINT32  u)

Returns: True if u >= U+0080 and u <= U+009F. Remarks: Additional space code points may be added in the future. The goal is to detect code points that separate words.

◆ ON_IsUnicodeControlCodePoint()

ON_DECL bool ON_IsUnicodeControlCodePoint ( ON__UINT32  code_point,
bool  bNullReturnValue 
)

Parameters: code_point - [in] value to test bNullReturnValue value to return if 0 == code_point Returns: true if the code_point is a control code point (> 0 && < U+0020) or ( >= U+007F && <= U+00A0) or ( == U+00AD) or ...

◆ ON_IsUnicodeSpaceCodePoint()

ON_DECL int ON_IsUnicodeSpaceCodePoint ( ON__UINT32  u)

Returns: True if u is ON_UnicodeCodePoint::ON_Space, or a space character U+2000 - u+200B. Remarks: Additional space code points may be added in the future. The goal is to detect code points that separate words.

◆ ON_IsUnicodeSpaceOrControlCodePoint()

ON_DECL int ON_IsUnicodeSpaceOrControlCodePoint ( ON__UINT32  u)

Returns: True if u is some type of space or control code point. Examples include C0 code points ( <= u+001F ), ON_UnicodeCodePoint::ON_Space, ON_UnicodeCodePoint::ON_Delete, ON_UnicodeCodePoint::ON_NoBreakSpace, ON_UnicodeCodePoint::ON_NarrowNoBreakSpace,
ON_UnicodeCodePoint::ON_ZeroWidthSpace, and C1 code points. Remarks: Additional space code points may be added in the future. The goal is to detect code points that should be used as separators when isolating text tokens in a string.

Ligatures (ZWNJ U+200C, ZWJ U+200D) return false because they control formatting in a token.

◆ ON_IsUTFByteOrderMark()

ON_DECL enum ON_UnicodeEncoding ON_IsUTFByteOrderMark ( const void *  buffer,
size_t  sizeof_buffer 
)

Description: Determine if the buffer has the values of a UTF BOM (byte order mark) Parameters: buffer - [in] buffer to test sizeof_buffer - [in] number of bytes that can be examined in the buffer Returns: ON_UTF_unset (0) buffer is not a UTF BOM ON_UTF_8 sizeof_buffer >= 3 and the values fo the first three bytes are 0xEF, 0xBB, 0xBF. ON_UTF_16BE sizeof_buffer >= 2 and the values of the first two bytes are 0xFE, 0xFF and, if sizeof_buffer >= 4, the value of one of the third or forth byte is not zero. ON_UTF_16LE sizeof_buffer >= 2 and the values of the first two bytes are 0xFE, 0xFF ON_UTF_32BE sizeof_buffer >= 4 and the values of the first four bytes are 0x00, 0x00, 0xFE, 0xFF. ON_UTF_32LE sizeof_buffer >= 4 and the values of the first four bytes are 0xFF, 0xFE, 0x00, 0x00.

◆ ON_IsValid()

ON_DECL bool ON_IsValid ( double  x)

Description: Test a double to make sure it is a valid number. Returns: (x > ON_UNSET_VALUE && x < ON_UNSET_POSITIVE_VALUE)

◆ ON_IsValidFloat()

ON_DECL bool ON_IsValidFloat ( float  x)

◆ ON_IsValidKnotVector()

ON_DECL bool ON_IsValidKnotVector ( int  order,
int  cv_count,
const double *  knot,
ON_TextLog text_log = 0 
)

◆ ON_IsValidNegativeNumber()

ON_DECL bool ON_IsValidNegativeNumber ( double  x)

Returns: (x > ON_UNSET_VALUE && x < 0.0));

◆ ON_IsValidPointGrid()

ON_DECL bool ON_IsValidPointGrid ( int  ,
bool  ,
int  ,
int  ,
int  ,
int  ,
const double *   
)

◆ ON_IsValidPointList() [1/2]

ON_DECL bool ON_IsValidPointList ( int  ,
bool  ,
int  ,
int  ,
const double *   
)

◆ ON_IsValidPointList() [2/2]

ON_DECL bool ON_IsValidPointList ( int  ,
bool  ,
int  ,
int  ,
const float *   
)

◆ ON_IsValidPositiveNumber()

ON_DECL bool ON_IsValidPositiveNumber ( double  x)

Returns: (x > 0.0 && x < ON_UNSET_POSITIVE_VALUE);

◆ ON_IsValidSingleByteUTF8CharValue()

ON_DECL int ON_IsValidSingleByteUTF8CharValue ( char  c)

ON_DEPRECATED.

◆ ON_IsValidSingleElementUTF16Value()

ON_DECL int ON_IsValidSingleElementUTF16Value ( ON__UINT32  c)

ON_DEPRECATED.

◆ ON_IsValidSingleElementUTF8Value()

ON_DECL int ON_IsValidSingleElementUTF8Value ( ON__UINT32  c)

ON_DEPRECATED.

◆ ON_IsValidSingleElementWideCharValue()

ON_DECL int ON_IsValidSingleElementWideCharValue ( wchar_t  w)

Description: Test a value to determine if it is a valid unicode code point value. Parameters: w - [in] value to test Returns: true: w is a valid single wchar_t value false: w is not a valid single wchar_t value. It may be a completely invalid value for a string. When sizeof(w) < 4, is may also b a value used in a multiple element encoding like a surrogate pair value. Remarks: Valid 1 byte wchar_t UTF-8 unicode code points are (0 <= w && w <= 0x7F) Valid 2 byte wchar_t UTF-16 unicode code points are (0 <= w && w <= 0xD7FF) || (0xE000 <= w && w <= 0xFFFF) Valid 4 bytes wchar_t UTF-32 unicode code points are (0 <= u && u <= 0xD7FF) || (0xE000 <= u && u <= 0x10FFFF)

◆ ON_IsValidUnicodeCodePoint()

ON_DECL int ON_IsValidUnicodeCodePoint ( ON__UINT32  unicode_code_point)

Description: Test a value to determine if it is a valid Unicode code point value. Parameters: u - [in] value to test Returns: If u is valid Unicode code point, then true is returned. Otherwise false is returned. Remarks: This function returns true for the Unicode byte order mark U+FFFE.

◆ ON_IsValidUTF16Singleton()

ON_DECL int ON_IsValidUTF16Singleton ( ON__UINT32  c)

Description: Test a value to determine if it is a valid single element UTF-16 value. Parameters: c - [in] value to test Returns: true: c is a valid single wchar_t unicode code point false: c is not a valid unicode code point w is not a valid single element UTF-16 value. It may be a completely invalid value or it may be a value used in a surrogate pair. Remarks: Valid single element UTF-16 values are (0 <= c && c <= 0xD7FF) || (0xE000 <= c && c <= 0xFFFF)

◆ ON_IsValidUTF16SurrogatePair()

ON_DECL int ON_IsValidUTF16SurrogatePair ( unsigned int  w1,
unsigned int  w2 
)

◆ ON_IsValidUTF32Value()

ON_DECL int ON_IsValidUTF32Value ( ON__UINT32  c)

Description: Test a value to determine if it is a valid UTF-32 value. Parameters: c - [in] value to test Returns: true: c is a valid UTF-32 value false: c is not a valid UTF-32 value Remarks: Valid single element UTF-32 values are (0 <= u && u <= 0xD7FF) || (0xE000 <= u && u <= 0x10FFFF)

◆ ON_IsValidUTF8Singleton()

ON_DECL int ON_IsValidUTF8Singleton ( ON__UINT32  c)

Description: Test a value to determine if it is a valid single byte UTF-8 value. Parameters: c - [in] value to test Returns: true: c is a valid single byte UTF-8 value false: c is not a valid single byte UTF-8 value Remarks: Valid single byte UTF-8 values are (0 <= c && c <= 0x7F)

◆ ON_IsValidUTF8SingletonChar()

ON_DECL int ON_IsValidUTF8SingletonChar ( char  c)

Description: Test a value to determine if it is a valid single byte UTF-8 value. Parameters: c - [in] value to test Returns: true: c is a valid single byte UTF-8 value false: c is not a valid single byte UTF-8 value Remarks: Valid single byte UTF-8 values are (0 <= w && w <= 0x7F)

◆ ON_JoinCurves() [1/2]

ON_DECL int ON_JoinCurves ( const ON_SimpleArray< const ON_Curve * > &  InCurves,
ON_SimpleArray< ON_Curve * > &  OutCurves,
double  join_tol,
bool  bPreserveDirection = false,
ON_SimpleArray< int > *  key = 0 
)

OBSOLETE. Use int ON_JoinCurves(const ON_SimpleArray<const ON_Curve*>& InCurves, ON_SimpleArray<ON_Curve*>& OutCurves, double join_tol, double kink_tol, bool bPreserveDirection = false, ON_SimpleArray<int>* key = 0 );

Description: Join all contiguous curves of an array of ON_Curves. Parameters: InCurves - [in] Array of curves to be joined (not modified) OutCurves - [out] Resulting joined curves and copies of curves that were not joined to anything are appended. join_tol - [in] Distance tolerance used to decide if endpoints are close enough bPreserveDirection - [in] If true, curve endpoints will be compared to curve startpoints. If false, all start and endpoints will be compared, and copies of input curves may be reversed in output. key - [out] if key is not null, InCurves[i] was joined into OutCurves[key[i]]. Returns: Number of curves added to Outcurves Remarks: Closed curves are copied to OutCurves. Curves that cannot be joined to others are copied to OutCurves. When curves are joined, the results are ON_PolyCurves. All members of InCurves must have same dimension, at most 3.

◆ ON_JoinCurves() [2/2]

ON_DECL int ON_JoinCurves ( const ON_SimpleArray< const ON_Curve * > &  InCurves,
ON_SimpleArray< ON_Curve * > &  OutCurves,
double  join_tol,
double  kink_tol,
bool  bUseTanAngle,
bool  bPreserveDirection = false,
ON_SimpleArray< int > *  key = 0 
)

Description: Join all contiguous curves of an array of ON_Curves. Parameters: InCurves - [in] Array of curves to be joined (not modified) OutCurves - [out] Resulting joined curves and copies of curves that were not joined to anything are appended. join_tol - [in] Distance tolerance used to decide if endpoints are close enough kink_tol - [in] Angle in radians. If > 0.0, then curves within join_tol will only be joined if the angle between them is less than kink_tol. If <= 0, then the angle will be ignored and only join_tol will be used. bUseTanAngle - [in] If true, choose the best match using angle between tangents.
If false, best match is the closest. This is used whether or not kink_tol is positive. bPreserveDirection - [in] If true, curve endpoints will be compared to curve startpoints. If false, all start and endpoints will be compared, and copies of input curves may be reversed in output. key - [out] if key is not null, InCurves[i] was joined into OutCurves[key[i]]. Returns: Number of curves added to Outcurves Remarks: Closed curves are copied to OutCurves. Curves that cannot be joined to others are copied to OutCurves. When curves are joined, the results are ON_PolyCurves. All members of InCurves must have same dimension, at most 3.

◆ ON_JoinCurvesOld()

ON_DECL int ON_JoinCurvesOld ( const ON_SimpleArray< const ON_Curve * > &  InCurves,
ON_SimpleArray< ON_Curve * > &  OutCurves,
double  join_tol,
bool  bPreserveDirection,
ON_SimpleArray< int > *  key 
)

Description: Join all contiguous curves of an array of ON_Curves using an older sort algorithm. Unless this older version is necessary, use ON_JoinCurves instead. Parameters: InCurves - [in] Array of curves to be joined (not modified) OutCurves - [out] Resulting joined curves and copies of curves that were not joined to anything are appended. join_tol - [in] Distance tolerance used to decide if endpoints are close enough bPreserveDirection - [in] If true, curve endpoints will be compared to curve startpoints. If false, all start and endpoints will be compared, and copies of input curves may be reversed in output. key - [out] if key is not null, InCurves[i] was joined into OutCurves[key[i]]. Returns: Number of curves added to Outcurves Remarks: Closed curves are copied to OutCurves. Curves that cannot be joined to others are copied to OutCurves. When curves are joined, the results are ON_PolyCurves. All members of InCurves must have same dimension, at most 3.

Parameters
bPreserveDirection= false
key=0

◆ ON_JoinLines()

ON_DECL int ON_JoinLines ( const ON_SimpleArray< ON_Line > &  InLines,
ON_ClassArray< ON_Polyline > &  OutPolylines,
double  tolerance,
bool  bPreserveDirection,
ON_SimpleArray< int > *  pKey 
)

Description: Join an array of lines into one or more polylines. Parameters: InLines - [in] Array of lines to be joined (not modified) OutPolylines - [out] Array of resulting joined polylines. tolerance - [in] Distance tolerance used to decide if end points are close enough. Lines with length less than join_tol are NOT collapsed and can cause problems when end points do not match exactly. bPreserveDirection - [in] If true, line end points will be compared to line start points. If false, all start and end points will be compared, and copies of input curves may be reversed in output. key - [out] if key is not nullptr, InLines[i] was joined into OutPolylines[key[i]]. Returns: Number of polylines added to OutPolylines

◆ ON_JoinPolylines()

ON_DECL int ON_JoinPolylines ( const ON_SimpleArray< const ON_Polyline * > &  InPlines,
ON_SimpleArray< ON_Polyline * > &  OutPlines,
double  join_tol,
double  kink_tol,
bool  bUseTanAngle,
bool  bPreserveDirection = false,
ON_SimpleArray< int > *  key = 0 
)

Description: Join all contiguous polylines of an array of ON_Polylines. Parameters: InPlines - [in] Array of polylines to be joined (not modified) OutPlines - [out] Resulting joined polylines and copies of polylines that were not joined to anything are appended. join_tol - [in] Distance tolerance used to decide if endpoints are close enough. Curves or segments with length less than join_tol are NOT collapsed and can cause problems when endpoints do not match exactly. kink_tol - [in] Angle in radians. If > 0.0, then curves within join_tol will only be joined if the angle between them is less than kink_tol. If <= 0, then the angle will be ignored and only join_tol will be used. bUseTanAngle - [in] If true, choose the best match using angle between tangents.
If false, best match is the closest. This is used whether or not kink_tol is positive. bPreserveDirection - [in] If true, polylines endpoints will be compared to polylines startpoints. If false, all start and endpoints will be compared, and copies of input curves may be reversed in output. key - [out] if key is not null, InPlines[i] was joined into OutPlines[key[i]]. Returns: Number of polylines added to OutPlines Remarks: Closed polylines are copied to OutPlines. Plines that cannot be joined to others are copied to OutPlines.

◆ ON_KnotCount()

ON_DECL int ON_KnotCount ( int  ,
int   
)

◆ ON_KnotMultiplicity()

ON_DECL int ON_KnotMultiplicity ( int  ,
int  ,
const double *  ,
int   
)

◆ ON_KnotTolerance()

ON_DECL double ON_KnotTolerance ( int  ,
int  ,
const double *  ,
int   
)

◆ ON_KnotVectorHasBezierSpans()

ON_DECL bool ON_KnotVectorHasBezierSpans ( int  order,
int  cv_count,
const double *  knot 
)

returns true if all knots have multiplicity = degree

◆ ON_KnotVectorSpanCount()

ON_DECL int ON_KnotVectorSpanCount ( int  ,
int  ,
const double *   
)

◆ ON_KnotVectorStyle()

ON_DECL ON::knot_style ON_KnotVectorStyle ( int  order,
int  cv_count,
const double *  knot 
)

◆ ON_LeastCommonMultiple()

ON_DECL unsigned ON_LeastCommonMultiple ( unsigned  a,
unsigned  b 
)

The least common multiple of a and b is (a/gcd)*(b/gcd)*(gcd), where gcd = greatest common divisor of and b.

Parameters
a
b
Returns
If a $gt; 0 and b > and the least common multiple of a and b <= ON_UINT_MAX, then the least common multiple of a and b is returned. Otherwise 0 is returned.

◆ ON_Length2d()

ON_DECL double ON_Length2d ( double  x,
double  y 
)

Description: Return the length of a 2d vector (x,y) Returns: sqrt(x^2 + y^2) calculated in as precisely and safely as possible.

◆ ON_Length2dSquared()

ON_DECL double ON_Length2dSquared ( double  x,
double  y 
)

Description: Return the squared length of a 2d vector (x,y) Returns: (x^2 + y^2)

◆ ON_Length3d()

ON_DECL double ON_Length3d ( double  x,
double  y,
double  z 
)

Description: Return the length of a 3d vector (x,y,z) Returns: sqrt(x^2 + y^2 + z^2) calculated in as precisely and safely as possible.

◆ ON_Length3dSquared()

ON_DECL double ON_Length3dSquared ( double  x,
double  y,
double  z 
)

Description: Return the squared length of a 3d vector (x,y,z) Returns: (x^2 + y^2 + z^2)

◆ ON_LiftInverse()

ON_2dPoint ON_DECL ON_LiftInverse ( ON_2dPoint  P,
ON_Interval  dom[2],
bool  closed[2] 
)

LiftInverse is the projection map that inverts ON_LiftToCover Parameters P -[in] A point in the domain covering space. Returns a point in dom.

◆ ON_LiftToCover()

ON_DECL ON_SimpleArray<ON_2dPoint> ON_LiftToCover ( const ON_SimpleArray< ON_2dPoint > &  in,
const ON_Interval  dom[2],
bool  closed[2],
double  normband = 1.0/3.0 
)

Lift a sequence of surface points to the covering space.

If a surface is closed in the u-direction (or v respectively), a curve on the surface that crosses the seam will not have a continuous pull back to parameter space. However, if we extend the surface domain in the u-coordinates and allow the surface to cover itself periodiclly then we we can pull back the curve to the covering space (-inf,inf) x dom[1]. Parameters in - [in] surface parameter points in dom[0] x dom[1] dom -[in] surface domain closed -[in] closed[0] is true if the surface is closed in u direction (similarly for 1 and v) normband - [in] 0<normband<.5 is a normalized coordinate defining a band on each side of the seam. The point sequence crosses the seam if consecutive points are in opposite bands along the seam. Returns A sequence out with out[0] = in[0] and out.Count()==in.Count()

◆ ON_LinearInterpolation()

ON_DECL double ON_LinearInterpolation ( double  t,
double  x,
double  y 
)

Description: Calculate the value of (1.0-t)*x + t*y so that, if 0.0 <= t <= 1.0, then the result is between x and y and if x == y and t is a valid double, the result is x. Returns: (1.0-t)*x + t*y

◆ ON_LineTriangleIntersect()

ON_DECL int ON_LineTriangleIntersect ( const ON_3dPoint A,
const ON_3dPoint B,
const ON_3dPoint C,
const ON_3dPoint P,
const ON_3dPoint Q,
double  abc[2][3],
double  t[2],
double  tol 
)

Description: Finds the intersection between a line segment an a triangle. Parameters: A - [in] triangle corner B - [in] triangle corner C - [in] triangle corner P - [in] start of line segment Q - [in] end of line segment abc - [out] barycentric coordinates of intersection point(s) t - [out] line coordinate of intersection point(s) Returns: 0 - no intersection 1 - one intersection point 2 - intersection segment

◆ ON_MakeClampedUniformKnotVector()

ON_DECL bool ON_MakeClampedUniformKnotVector ( int  order,
int  cv_count,
double *  knot,
double  delta = 1.0 
)

Description: Fill in knot values for a clamped uniform knot vector. Parameters: order - [in] (>=2) order (degree+1) of the NURBS cv_count - [in] (>=order) total number of control points in the NURBS. knot - [in/out] Input is an array with room for ON_KnotCount(order,cv_count) doubles. Output is a clamped uniform knot vector with domain (0, (1+cv_count-order)*delta). delta - in spacing between knots. Returns: true if successful See Also: ON_NurbsCurve::MakeClampedUniformKnotVector

◆ ON_MakeKnotVectorPeriodic()

ON_DECL bool ON_MakeKnotVectorPeriodic ( int  ,
int  ,
double *   
)

◆ ON_MakePeriodicUniformKnotVector()

ON_DECL bool ON_MakePeriodicUniformKnotVector ( int  order,
int  cv_count,
double *  knot,
double  delta = 1.0 
)

Description: Fill in knot values for a clamped uniform knot vector. Parameters: order - [in] (>=2) order (degree+1) of the NURBS cv_count - [in] (>=order) total number of control points in the NURBS. knot - [in/out] Input is an array with room for ON_KnotCount(order,cv_count) doubles. Output is a periodic uniform knot vector with domain (0, (1+cv_count-order)*delta). delta - in spacing between knots. Returns: true if successful See Also: ON_NurbsCurve::MakePeriodicUniformKnotVector

◆ ON_MapMSSBCPToUnicode()

ON_DECL ON__UINT32 ON_MapMSSBCPToUnicode ( ON__UINT32  code_page,
ON__UINT32  code_page_single_byte_encoding 
)

Description: Convert a Microsoft single byte code page value to a UNICODE code point. Values 0x20 to 0x7E are the same as the ASCII encoding.

Parameters: code_page - [in] A Microsoft single byte code page value. (1252, 10000, etc) code_page_single_byte_encoding - [in] A single byte encoding of the desired glyph.

Returns: If cod page and code_page_single_byte_encoding are valid, then the best fit unicode code point is returned. Otherwise ON_UnicodeCodePoint::ON_ReplacementCharacter ( 0xFFFD ) is returned.

◆ ON_MapRTFcharsetToWindowsCodePage()

ON_DECL ON__UINT32 ON_MapRTFcharsetToWindowsCodePage ( ON__UINT32  rtf_charset,
ON__UINT32  default_code_page 
)

Description: Convert an RFT charset value to a Windows code page. This conversion is part of the process to get a UNICODE encoding of strings in RTF files.

Parameters: rtf_charset - [in] The RTF charset specified by /fcharsetN in the RTF font table. default_code_page - [out] Value to return if none is associated with the input rtf_charset value.

Returns: code page

Example:

The RTF: ... {\fonttbl ... {\f2\fcharset129 Malgun Gothic;} ... } ... {\f2 {\ltrch \'c7\'d1\'b1\'db...} ...

Uses RTF charset 129 which maps to Windows code page 949. This means {0xC7,0xD1,0xB1,0xBD, ... } needs to be parsed as a code page 949 multibyte encoding. The function ON_MapWindowsCodePage949ToUnicode() can be used to convert Windows code page 949 values to UNICODE code point values.

code page 949 0xC7D1 -> U+D55C #HANGUL SYLLABLE HIEUH A NIEUN code page 949 0xB1BD -> U+AD75 #HANGUL SYLLABLE KIYEOK U RIEULKIYEOK

NOTE WELL: The Windows code page 949 encoding uses both single and double byte encodings. When the initial byte has a value < 0x80, it is a single byte encoding. When the initial byte has a value > 0x80, it is a double byte encoding.

Remarks: Conversions are based on the Rich Text Format (RTF) Specification Version 1.9.1

◆ ON_MapUnicodeToMSSBCP()

ON_DECL ON__UINT32 ON_MapUnicodeToMSSBCP ( ON__UINT32  code_page,
ON__UINT32  unicode_code_point 
)

Description: Convert a Unicode code point to a Microsoft code page 1252 character value. Windows code page 1252 is a single byte encoding. Values 0x20 to 0x7E are the same as the ASCII encoding.

This function is used to find fonts where glyphs are identified by code page 1252 values.

Parameters: code_page - [in] A Microsoft single byte code page value. (1252, 10000, etc) unicode_code_point - [in] UNICODE code point

Returns: If unicode_code_point has a corresponding single byte encoding on the specified code page, then the single byte encoding is returned. Otherwise 0xFFFFFFFF is returned.

◆ ON_MapWindowsCodePage932ToUnicode()

int ON_MapWindowsCodePage932ToUnicode ( ON__UINT32  code_page_932_character_value,
ON__UINT32 unicode_code_point 
)

Description: Convert a Windows code page 932 encoded value to a UNICODE code point. This code page is often used for Japanese glyphs.

Parameters: code_page_932_character_value - [in] Valid values are 0 to 0xFDFE with some exceptions in that range. unicode_code_point - [out] ON_UnicodeCodePoint::ON_ReplacementCharacter is returned when code_page_932_character_value is not valid.

Returns: 1: if code_page_932_character_value and the corresponding UNICODE code point is returned in *unicode_code_point. 0: otherwise and *unicode_code_point = ON_UnicodeCodePoint::ON_ReplacementCharacter.

Remarks: Windows code page 932: https://msdn.microsoft.com/en-us/library/cc194887.aspx Conversions to Unicode are based on the Unicode.org mapping of Shift JIS ftp://ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/SHIFTJIS.TXT

◆ ON_MapWindowsCodePage949ToUnicode()

int ON_MapWindowsCodePage949ToUnicode ( ON__UINT32  code_page_949_character_value,
ON__UINT32 unicode_code_point 
)

Description: Convert a Windows code page 949 encoded value to a UNICODE code point. This code page is often used for Korean glyphs.

Parameters: code_page_949_character_value - [in] Valid values are 0 to 0xFDFE with some exceptions in that range. unicode_code_point - [out] ON_UnicodeCodePoint::ON_ReplacementCharacter is returned when code_page_949_character_value is not valid.

Returns: 1: if code_page_949_character_value and the corresponding UNICODE code point is returned in *unicode_code_point. 0: otherwise and *unicode_code_point = ON_UnicodeCodePoint::ON_ReplacementCharacter.

Remarks: Windows code page 949: https://msdn.microsoft.com/en-us/library/cc194941.aspx Conversions to Unicode are based on the Unicode.org mapping of Windows-949 ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP949.TXT

◆ ON_MathError()

ON_DECL void ON_MathError ( const char *  ,
const char *  ,
const char *   
)

◆ ON_MatrixSolutionPrecision()

ON_DECL double ON_MatrixSolutionPrecision ( const unsigned int  N,
const double *const *  M,
bool  bTransposeM,
double  lambda,
const double *  X,
const double *  B 
)

Returns: Maximum of fabs( ((M-lambda*I)*X)[i] - B[i] ) for 0 <= i < N Pass lambda = 0.0 if you're not testing some type of generalized eigenvalue.

◆ ON_Max() [1/3]

ON_DECL double ON_Max ( double  a,
double  b 
)

If performance is important, then you are better off using ((b<a)?a:b)

◆ ON_Max() [2/3]

ON_DECL float ON_Max ( float  a,
float  b 
)

If performance is important, then you are better off using ((b<a)?a:b)

◆ ON_Max() [3/3]

ON_DECL int ON_Max ( int  a,
int  b 
)

If performance is important, then you are better off using ((b<a)?a:b)

◆ ON_MaximumCoordinate() [1/2]

ON_DECL double ON_MaximumCoordinate ( const double *  data,
int  dim,
bool  is_rat,
int  count 
)

Find the largest absolute value of coordinates from an array of points (possibly homogeneous).

◆ ON_MaximumCoordinate() [2/2]

ON_DECL double ON_MaximumCoordinate ( const double *  data,
int  dim,
bool  is_rat,
int  count,
int  stride 
)

stride>=dim+is_rat

◆ ON_memory_error_register_handler()

ON_DECL ON_memory_error_handler ON_memory_error_register_handler ( ON_memory_error_handler  )

◆ ON_memory_error_test_handler()

ON_DECL int ON_memory_error_test_handler ( int  error_code)

Description: Your app can call ON_memory_error_text_out_of_memory_handler() to trigger a call to the handler you registered with ON_memory_error_register_handler(). The parameter error_code is passed to your handler. Parameters: error_code - [in] Passed as the parameter to the registered ON_memory_error_handler function. 0: malloc/calloc/realloc request returned nullptr 1: invalid pointer passed to realloc() 2: invalid pointer passed to free() 3: msize query returned zero or 0xFFFFFFFF Returns: The value returned by the registered ON_memory_error_handler function.

◆ ON_MemoryManagerBegin()

ON_DECL void ON_MemoryManagerBegin ( void  )

◆ ON_MemoryManagerEnd()

ON_DECL void ON_MemoryManagerEnd ( void  )

◆ ON_MemoryPageSize()

ON_DECL size_t ON_MemoryPageSize ( )

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org.

◆ ON_MergeBreps()

ON_DECL ON_Brep* ON_MergeBreps ( const ON_Brep brep0,
const ON_Brep brep1,
double  tolerance 
)

Description: Merges two breps into a single brep. The result may be non-manifold or have multiple connected components. Parameters: brep0 - [in] brep1 - [in] tolerance - [in] Returns: Merged brep or nullptr if calculation failed.

◆ ON_Mesh2dPolygon()

ON_DECL bool ON_Mesh2dPolygon ( int  point_count,
int  point_stride,
const double *  P,
int  tri_stride,
int *  triangle 
)

Description: Triangulate a 2D simple closed polygon. Parameters: point_count - [in] number of points in polygon ( >= 3 ) point_stride - [in] P - [in] i-th point = (P[i*point_stride], P[i*point_stride+1]) tri_stride - [in] triangle - [out] array of (point_count-2)*tri_stride integers Returns: True if successful. In this case, the polygon is trianglulated into point_count-2 triangles. The indices of the 3 points that are the corner of the i-th (0<= i < point_count-2) triangle are (triangle[i*tri_stride], triangle[i*tri_stride+1], triangle[i*tri_stride+2]). Remarks: Do NOT duplicate the start/end point; i.e., a triangle will have a point count of 3 and P will specify 3 distinct non-collinear points.

◆ ON_Mesh2dRegion() [1/4]

ON_DECL int ON_Mesh2dRegion ( int  point_count,
int  point_stride,
const double *  points,
int  edge_count,
int  edge_stride,
const int *  edges,
const int *  edge_side,
ON_SimpleArray< ON_3dex > &  triangles 
)

Fill in a 2d region with triangles.

Parameters
point_countNumber of 2d points. There must be at least 3 points.
point_strideDouble offset for 2d points. i-th 2d point = (points[j],points[j+1]), where j = i*point_stride.
points2d point locations.
It is ok to include points that are inside the region but not at the end of any input edge. Duplicate points are not permitted.
edge_countNumber of edges in the edges[] array. If edge_count = 0, then the convex hull of points[] will be the boundary. If edge_count = point_count, edge_stride = 0, edges = nullptr, and edge_side_stride = 0 then the input list of points must from a closed polyline and will be the outer boundary of the region to be meshed. Note this polyline does not have to be convex.
edge_stridei-th edge connects points (edges[j],edges[j+1]) where j = i*edge_stride.
edgesindices of edge ends. If any edges intersect, then the intersection points are returned in new_points[].
edge_sideIf not nullptr, then edge_side[i] determines which side(s) of the edge should be meshed. 0 = Automatically determined edge orientation. This is the best choice for all edges that are not inner boundary edges. 1 = left side only - boundary edge with a triangle on the left side. This is a good choice for clockwise inner boundary edges. 2 = right side only - boundary edge with a triangle on the right side. This is a good choice for counter-clockwise inner boundary edges. If edge_side = nullptr, the 0 is used for all edges. If all edges have the same edge_side value, then setting edge_side_stride = 0 and passing the address of char with that value saves having to create an array where every element has the same value.
trianglestriangles are appended to this list. If you are reusing triangles[] for a collection of DISTINCT meshes, the call triangles.SetCount(0) before each call to ON_Mesh2dRegion(). If you are using multiple calls to ON_Mesh2dRegion() to create a single mesh, say your tesselatiing a sequence of glyphs into a single mesh, then you typically need to adjust the indices in the appended elements accordingly. The (i,j,k) values are vertex indices. If a triangle vertex index is 0 >= i < point_count, then the corresponding 2d point is (points[i*point_stride], points[i*point_stride+1]). If a triangle vertex index is i >= point_count, then the corresponding 2d point is new_points[i-point_count].
Returns
The number of triangles appended to triangles[] array.

◆ ON_Mesh2dRegion() [2/4]

ON_DECL int ON_Mesh2dRegion ( unsigned int  point_count,
unsigned int  point_stride,
const double *  points,
unsigned int  edge_count,
unsigned int  edge_stride,
const unsigned int *  edges,
unsigned int  edge_side_stride,
const unsigned char *  edge_side,
bool  bOuterBoundaryIsConvexHull,
bool  bPermitVertexAdditions,
bool  bPermitEdgeSplitting,
ON_SimpleArray< ON_3dex > &  triangles,
ON_SimpleArray< ON_2dPoint > &  new_points 
)

Fill in a 2d region with triangles.

Parameters
point_countNumber of 2d points. There must be at least 3 points.
point_strideDouble offset for 2d points. i-th 2d point = (points[j],points[j+1]), where j = i*point_stride.
points2d point locations.
It is ok to include points that are inside the region but not at the end of any input edge. Duplicate points are not permitted.
edge_countNumber of edges in the edges[] array. If edge_count = 0, then the convex hull of points[] will be the boundary. If edge_count = point_count, edge_stride = 0, edges = nullptr, and edge_side_stride = 0 then the input list of points must from a closed polyline and will be the outer boundary of the region to be meshed. Note this polyline does not have to be convex.
edge_stridei-th edge connects points (edges[j],edges[j+1]) where j = i*edge_stride.
edgesindices of edge ends. If any edges intersect, then the intersection points are returned in new_points[].
edge_side_strideIf edge_side is not nullptr, then the edge_side for the i-th edge is edge_side[i*edge_side_stride]. If you're calling from code where you have edge_side[] values stored in ints, you may pass a pointer to the least significant bit of the int and set edge_side_stride = sizeof(int).
edge_sideIf not nullptr, then edge_side[i] determines which side(s) of the edge should be meshed. 0 = Automatically determined edge orientation. This is the best choice for all edges that are not inner boundary edges. 1 = left side only - boundary edge with a triangle on the left side. This is a good choice for clockwise inner boundary edges. 2 = right side only - boundary edge with a triangle on the right side. This is a good choice for counter-clockwise inner boundary edges. If edge_side = nullptr, the 0 is used for all edges. If all edges have the same edge_side value, then setting edge_side_stride = 0 and passing the address of char with that value saves having to create an array where every element has the same value.
bOuterBoundaryIsConvexHullIf edges[] contains one or more outer boundaries, then pass false. Otherwise pass true; the outer boundary of the returned mesh will be the convex hull of points[] and any edges that are not part of the convex hull will be inside the mesh.
bPermitVertexAdditionsIf true, then additional interior points may be added to improve the quality of the mesh. The additional points are returned in new_points[].
bPermitEdgeSplittingIf true, then intersection edges are split and other edges may be split edges may be split to improve mesh quality. The additional points are returned in new_points[].
trianglestriangles are appended to this list. If you are reusing triangles[] for a collection of DISTINCT meshes, the call triangles.SetCount(0) before each call to ON_Mesh2dRegion(). If you are using multiple calls to ON_Mesh2dRegion() to create a single mesh, say your tesselatiing a sequence of glyphs into a single mesh, then you typically need to adjust the indices in the appended elements accordingly. The (i,j,k) values are vertex indices. If a triangle vertex index is 0 >= i < point_count, then the corresponding 2d point is (points[i*point_stride], points[i*point_stride+1]). If a triangle vertex index is i >= point_count, then the corresponding 2d point is new_points[i-point_count].
new_pointsIf the returned new_points[] has count = 0, then no points were added. If the returned new_points[] has count > 0, then new points were added. If the edges intersect, then the intersection points are added to new_points[]. If bPermitVertexAdditions is true, then any those additions are added to new_points[].
Returns
The number of triangles appended to triangles[] array.

◆ ON_Mesh2dRegion() [3/4]

ON_DECL int ON_Mesh2dRegion ( unsigned int  point_count,
unsigned int  point_stride,
const double *  points,
unsigned int  edge_count,
unsigned int  edge_stride,
const unsigned int *  edges,
unsigned int  edge_side_stride,
const unsigned char *  edge_side,
bool  bPermitVertexAdditions,
bool  bPermitEdgeSplitting,
ON_SimpleArray< ON_3dex > &  triangles,
ON_SimpleArray< ON_2dPoint > &  new_points 
)

Fill in a 2d region with triangles.

Parameters
point_countNumber of 2d points. There must be at least 3 points.
point_strideDouble offset for 2d points. i-th 2d point = (points[j],points[j+1]), where j = i*point_stride.
points2d point locations.
It is ok to include points that are inside the region but not at the end of any input edge. Duplicate points are not permitted.
edge_countNumber of edges in the edges[] array. If edge_count = 0, then the convex hull of points[] will be the boundary. If edge_count = point_count, edge_stride = 0, edges = nullptr, and edge_side_stride = 0 then the input list of points must from a closed polyline and will be the outer boundary of the region to be meshed. Note this polyline does not have to be convex.
edge_stridei-th edge connects points (edges[j],edges[j+1]) where j = i*edge_stride.
edgesindices of edge ends. If any edges intersect, then the intersection points are returned in new_points[].
edge_side_strideIf edge_side is not nullptr, then the edge_side for the i-th edge is edge_side[i*edge_side_stride]. If you're calling from code where you have edge_side[] values stored in ints, you may pass a pointer to the least significant bit of the int and set edge_side_stride = sizeof(int).
edge_sideIf not nullptr, then edge_side[i] determines which side(s) of the edge should be meshed. 0 = Automatically determined edge orientation. This is the best choice for all edges that are not inner boundary edges. 1 = left side only - boundary edge with a triangle on the left side. This is a good choice for clockwise inner boundary edges. 2 = right side only - boundary edge with a triangle on the right side. This is a good choice for counter-clockwise inner boundary edges. If edge_side = nullptr, the 0 is used for all edges. If all edges have the same edge_side value, then setting edge_side_stride = 0 and passing the address of char with that value saves having to create an array where every element has the same value.
bPermitVertexAdditionsIf true, then additional interior points may be added to improve the quality of the mesh. The additional points are returned in new_points[].
bPermitEdgeSplittingIf true, then intersection edges are split and other edges may be split edges may be split to improve mesh quality. The additional points are returned in new_points[].
trianglestriangles are appended to this list. If you are reusing triangles[] for a collection of DISTINCT meshes, the call triangles.SetCount(0) before each call to ON_Mesh2dRegion(). If you are using multiple calls to ON_Mesh2dRegion() to create a single mesh, say your tesselatiing a sequence of glyphs into a single mesh, then you typically need to adjust the indices in the appended elements accordingly. The (i,j,k) values are vertex indices. If a triangle vertex index is 0 >= i < point_count, then the corresponding 2d point is (points[i*point_stride], points[i*point_stride+1]). If a triangle vertex index is i >= point_count, then the corresponding 2d point is new_points[i-point_count].
new_pointsIf the returned new_points[] has count = 0, then no points were added. If the returned new_points[] has count > 0, then new points were added. If the edges intersect, then the intersection points are added to new_points[]. If bPermitVertexAdditions is true, then any those additions are added to new_points[].
Returns
The number of triangles appended to triangles[] array.

◆ ON_Mesh2dRegion() [4/4]

ON_DECL int ON_Mesh2dRegion ( unsigned int  point_count,
unsigned int  point_stride,
const double *  points,
unsigned int  edge_count,
unsigned int  edge_stride,
const unsigned int *  edges,
unsigned int  edge_side_stride,
const unsigned char *  edge_side,
ON_SimpleArray< ON_3dex > &  triangles,
ON_SimpleArray< ON_2dPoint > &  new_points 
)

Fill in a 2d region with triangles.

Parameters
point_countNumber of 2d points. There must be at least 3 points.
point_strideDouble offset for 2d points. i-th 2d point = (points[j],points[j+1]), where j = i*point_stride.
points2d point locations.
It is ok to include points that are inside the region but not at the end of any input edge. Duplicate points are not permitted.
edge_countNumber of edges in the edges[] array. If edge_count = 0, then the convex hull of points[] will be the boundary. If edge_count = point_count, edge_stride = 0, edges = nullptr, and edge_side_stride = 0 then the input list of points must from a closed polyline and will be the outer boundary of the region to be meshed. Note this polyline does not have to be convex.
edge_stridei-th edge connects points (edges[j],edges[j+1]) where j = i*edge_stride.
edgesindices of edge ends. If any edges intersect, then the intersection points are returned in new_points[].
edge_side_strideIf edge_side is not nullptr, then the edge_side for the i-th edge is edge_side[i*edge_side_stride]. If you're calling from code where you have edge_side[] values stored in ints, you may pass a pointer to the least significant bit of the int and set edge_side_stride = sizeof(int).
edge_sideIf not nullptr, then edge_side[i] determines which side(s) of the edge should be meshed. 0 = Automatically determined edge orientation. This is the best choice for all edges that are not inner boundary edges. 1 = left side only - boundary edge with a triangle on the left side. This is a good choice for clockwise inner boundary edges. 2 = right side only - boundary edge with a triangle on the right side. This is a good choice for counter-clockwise inner boundary edges. If edge_side = nullptr, the 0 is used for all edges. If all edges have the same edge_side value, then setting edge_side_stride = 0 and passing the address of char with that value saves having to create an array where every element has the same value.
trianglestriangles are appended to this list. If you are reusing triangles[] for a collection of DISTINCT meshes, the call triangles.SetCount(0) before each call to ON_Mesh2dRegion(). If you are using multiple calls to ON_Mesh2dRegion() to create a single mesh, say your tesselatiing a sequence of glyphs into a single mesh, then you typically need to adjust the indices in the appended elements accordingly. The (i,j,k) values are vertex indices. If a triangle vertex index is 0 >= i < point_count, then the corresponding 2d point is (points[i*point_stride], points[i*point_stride+1]). If a triangle vertex index is i >= point_count, then the corresponding 2d point is new_points[i-point_count].
new_pointsIf the edges intersect, then the intersection points are added to new_points[].///
Returns
The number of triangles appended to triangles[] array.

◆ ON_MeshClashSearch()

ON_DECL int ON_MeshClashSearch ( int  mesh_listA_count,
const ON_Mesh *const *  mesh_listA,
int  mesh_listB_count,
const ON_Mesh *const *  mesh_listB,
double  distance,
bool  bUseMultipleThreads,
int  max_event_count,
ON_SimpleArray< class ON_ClashEvent > &  clash_events 
)

Description: Search for locations where the distance from a mesh in mesh_listA[] to a mesh in mesh_listB[] is <= distance. Parameters: mesh_listA_count - [in] length of mesh_listA[] array mesh_listA - [in] array of mesh pointers mesh_listB_count - [in] length of mesh_listB[] array mesh_listB - [in] array of mesh pointers distance - [in] (valid input are >= 0). bUseMultipleThreads - [in] Pass true if you want the calculation to use multiple threads. max_event_count - [in] If max_event_count > 0, then the search for clashes stops after max_event_count elements have been appended to clash_events[]. clash_events - [out] clash events are appended to this array. ON_ClashEvent.m_index[0] is a mesh_listA[] index and ON_ClashEvent.m_index[1] is a mesh_listB[] index. Returns: Number of events appended to clash_events[].

◆ ON_MeshFaceClashSearch() [1/2]

ON_DECL int ON_MeshFaceClashSearch ( const class ON_Mesh meshA,
const class ON_RTree meshAtree,
const class ON_Mesh meshB,
const class ON_RTree meshBtree,
double  distance,
bool  bUseMultipleThreads,
int  max_event_count,
ON_SimpleArray< class ON_ClashEvent > &  clash_events 
)

Description: Search for locations where the distance from a mesh in mesh_listA[] to a mesh in mesh_listB[] is <= distance. Parameters: meshA - [in] meshAtree - [in] nullptr or an ON_RTree created by calling CreateMeshFaceTree(meshA). meshB - [in] meshBtree - [in] nullptr or an ON_RTree created by calling CreateMeshFaceTree(meshB). distance - [in] (valid input are >= 0). bUseMultipleThreads - [in] Pass true if you want the calculation to use multiple threads. max_event_count - [in] If max_event_count > 0, then the search for clashes stops after max_event_count elements have been appended to clash_events[]. clash_events - [out] clash events are appended to this array. ON_ClashEvent.m_index[0] is a meshA->m_F[] index and ON_ClashEvent.m_index[1] is a meshB->m_F[] index. meshA_face_indices - [out] meshB_face_indices - [out] Returns: Number of events appended to clash_events[].

◆ ON_MeshFaceClashSearch() [2/2]

ON_DECL void ON_MeshFaceClashSearch ( const class ON_Mesh meshA,
const class ON_RTree meshAtree,
const class ON_Mesh meshB,
const class ON_RTree meshBtree,
double  distance,
bool  bUseMultipleThreads,
int  max_event_count,
ON_SimpleArray< int > &  meshA_face_indices,
ON_SimpleArray< int > &  meshB_face_indices 
)

Description: Search for locations where the distance from a mesh in mesh_listA[] to a mesh in mesh_listB[] is <= distance. Parameters: meshA - [in] meshAtree - [in] nullptr or an ON_RTree created by calling CreateMeshFaceTree(meshA). meshB - [in] meshBtree - [in] nullptr or an ON_RTree created by calling CreateMeshFaceTree(meshB). distance - [in] (valid input are >= 0). bUseMultipleThreads - [in] Pass true if you want the calculation to use multiple threads. max_event_count - [in] If max_event_count > 0, then the search for clashes stops after max_event_count elements have been appended to clash_events[]. meshA_face_indices - [out] meshB_face_indices - [out] Returns: Number of events appended to clash_events[].

◆ ON_MeshGetClosestPoint()

ON_DECL bool ON_MeshGetClosestPoint ( const ON_Mesh mesh,
ON_3dPoint  P,
ON_MESH_POINT t,
double  distance_tolerance = 0.0 
)

◆ ON_MeshMeshIntersect()

ON_DECL bool ON_MeshMeshIntersect ( const ON_Mesh meshA,
const ON_Mesh meshB,
ON_ClassArray< ON_MMX_Polyline > &  plines,
ON_ClassArray< ON_MMX_Polyline > &  overlapplines,
double  intersection_tolerance = 0.0,
double  overlap_tolerance = 0.0,
bool  bDebug = false 
)

This function is soon going to be deprecated. It always uses the old code.

◆ ON_MeshMeshIntersectOldCompliant()

ON_DECL bool ON_MeshMeshIntersectOldCompliant ( const ON_Mesh meshA,
const ON_Mesh meshB,
ON_ClassArray< ON_Polyline > &  plines,
ON_ClassArray< ON_Polyline > &  overlapplines,
double  intersection_tolerance = 0.0,
double  overlap_tolerance = 0.0,
bool  bDebug = false 
)

This function intersects two meshes. Consider using the more advanced methods of the ON_Mesh class: IntersectArray, GetSelfIntersections, etc...

◆ ON_MeshSurface() [1/3]

ON_DECL ON_Mesh* ON_MeshSurface ( const ON_Surface surface,
int  mesh_density = 0,
ON_Mesh mesh = 0 
)

Description: Calculate a quick and dirty polygon mesh approximation of a surface. Parameters: surface - [in] mesh_density - [in] If <= 10, this number controls the relative polygon count. If > 10, this number specifies a target number of polygons. mesh - [in] if not nullptr, the polygon mesh will be put on this mesh. Returns: A polygon mesh approximation of the surface or nullptr if the surface could not be meshed.

◆ ON_MeshSurface() [2/3]

ON_DECL ON_Mesh* ON_MeshSurface ( const ON_Surface surface,
int  u_count,
const double *  u,
int  v_count,
const double *  v,
bool  bDoublePrecisionMesh,
ON_Mesh mesh 
)

◆ ON_MeshSurface() [3/3]

ON_DECL ON_Mesh* ON_MeshSurface ( const ON_Surface surface,
int  u_count,
const double *  u,
int  v_count,
const double *  v,
ON_Mesh mesh = 0 
)

Description: Calculate a quick and dirty polygon mesh approximation of a surface. Parameters: surface - [in] u_count - [in] >= 2 Number of "u" parameters in u[] array. u - [in] u parameters v_count - [in] >= 2 Number of "v" parameters in v[] array. v - [in] v parameters mesh - [in] if not nullptr, the polygon mesh will be put on this mesh. Returns: A polygon mesh approximation of the surface or nullptr if the surface could not be meshed.

◆ ON_Min() [1/3]

ON_DECL double ON_Min ( double  a,
double  b 
)

If performance is important, then you are better off using ((a<b)?a:b)

◆ ON_Min() [2/3]

ON_DECL float ON_Min ( float  a,
float  b 
)

If performance is important, then you are better off using ((a<b)?a:b)

◆ ON_Min() [3/3]

ON_DECL int ON_Min ( int  a,
int  b 
)

If performance is important, then you are better off using ((a<b)?a:b)

◆ ON_Minimize()

ON_DECL double ON_Minimize ( unsigned  n,
double(*)(ON__UINT_PTR context, const double *t, double *grad)  f,
ON__UINT_PTR  f_context,
const ON_Interval  search_domain[],
const double  t0[],
double  terminate_value,
double  relative_tolerance,
double  zero_tolerance,
unsigned  maximum_iterations,
double  t[],
bool *  bConverged 
)

Find a local minimum of the object function f(t[]) of n independent variables. The function must be C2 on the search domain. The search begins at t0[].

Parameters
nn >= 1 and is the number of variables the functiont f().
fThe objective function f(f_context, t, grad) is a function of n independent variables that returns the value of f() at (t[0], t[1], ..., t[n-1]). Calling f() should return grad = gradient of f at t. If the evaluation cannot be performed, return ON_DBL_QNAN and the seach will terminate.
f_contextThe first argument passed to the f() function.
search_domainIf the interval search_domain[i] is valid, then t[i] is constrained to be in that interval. Otwerwise t[i] can have any value.
t0t0[] is an input array of n evaluation parameters that specify where the search begins. You are permitted to pass the same array for the input array t0[] and the output array t[], provided it is properly initialized to the paramters where the search should begin.
terminate_valueThe search for a minimum will terminate and return t[] if f(t) <= terminate_value. If you don't have a terminate_value, then pass ON_DBL_QNAN.
relative_tolerancerelative_tolerance > 0. The search for a minimum will terminate when 2*|f(t + delta) - f(t)| <= relative_tolerance*(|f(t + delta)| + |f(t)|) + zero_tolerance. For example, set relative_tolerance = 1e-6 if you want to find a t[] where the first 6 significant digits of f(t) have stabilized during the search. When in doubt, try 1e-6 and generally avoid values >= 1e-4. Always avoid values < 1e-16.
zero_tolerancezero_tolerance > 0. See the description of the relative_tolerance parameter for the use of the zero_tolerance parameter. When in doubt, pass something around 1e-16.
maximum_iterationsThe local minimum is found by iterating from the starting parameters t0[] to a local minimum. Tha maximum_iterations parameter specifies the masimum number of iterations to try before giving up. When in doubt, pass something around 200 for efficient evaluators and smaller vaules for slow evaluators. In some situations, there may be significantly more evaluations than maximum_iterations (from the line search step in each iteration).
tt[] is an output array of n evaluation parameters that specify where the search ended. You are permitted to pass the same array for the input array t0[] and the output array t[], provided it is properly initialized to the paramters where the search should begin.
bConvergedIf bConverged is not nullptr, then *bConvertged will be true if the search terminated because of the conditions controlled by terminate_value, relative_tolerance and relative_tolerance. Otherwise *bConverged will be false.
Returns
If successful, the local minimum value of f is returned. Otherwise, ON_DBL_QNAN is returned.

◆ ON_MSSBCP_0x80_0xFF_Unicode()

const ON_DECL ON__UINT32* ON_MSSBCP_0x80_0xFF_Unicode ( ON__UINT32  code_page)

Description: Get a pointer to an array of 128 UNICODE code point values that are the best fit for Microsoft single byte code page encodings of 0x80 to 0xFF inclusive.

Parameters: code_page - [in] A Microsoft single byte code page value. (1252, 10000, etc) Returns: If code_page identifies a supported single byte code page, then an array of 128 UNICODE code points sorted by single byte encoding is returned. If a the single byte encoding is not defined, the corresponding element Otherwise nullptr is returned.

Example:

  const ON__UINT32 code_page = ...;
  ON__UINT32 cp_encoding = ...;
  const ON__UINT32* cp_to_unicode = ON_MSSBCP_0x80_0xFF_Unicode(code_page);
  ON__UINT32 unicode_code_point
  = (nullptr != cp_to_unicode && cp_encoding >= 0x80 && cp_encoding <= 0xFF)
  ? cp_to_unicode[cp_encoding - 0x80]
  : ON_UnicodeCodePoint::ON_ReplacementCharacter;

◆ on_MultiByteToWideChar()

ON_DECL int on_MultiByteToWideChar ( const char *  ,
int  ,
wchar_t *  ,
int   
)

Description: Calls ON_ConvertUTF8ToWideChar()

◆ ON_MX_GetUseNewCode()

ON_DECL bool ON_MX_GetUseNewCode ( )

Gets a value indicating if mesh booleans and intersections use the new code.

◆ ON_MX_SetUseNewCode()

ON_DECL void ON_MX_SetUseNewCode ( bool  value)

Determines if mesh booleans and intersections use the new code.

◆ ON_NewCurveTreeBezier() [1/2]

ON_DECL ON_CurveTreeBezier* ON_NewCurveTreeBezier ( const ON_BezierCurve bez)

◆ ON_NewCurveTreeBezier() [2/2]

ON_DECL ON_CurveTreeBezier* ON_NewCurveTreeBezier ( int  dim,
bool  is_rat,
int  order 
)

◆ ON_NewSurfaceTreeBezier() [1/2]

ON_DECL ON_SurfaceTreeBezier* ON_NewSurfaceTreeBezier ( const ON_BezierSurface bez)

◆ ON_NewSurfaceTreeBezier() [2/2]

ON_DECL ON_SurfaceTreeBezier* ON_NewSurfaceTreeBezier ( int  dim,
bool  is_rat,
int  order0,
int  order1 
)

◆ ON_NextContentSerialNumber()

ON__UINT64 ON_NextContentSerialNumber ( )

Returns: A nonzero runtime unsigned that is incremented every call to ON_NextContentSerialNumber(). This value is useful as a "content serial number" that can be used to detect when the content of an object has changed.

◆ ON_NextNotUniqueId()

ON_DECL ON_UUID ON_NextNotUniqueId ( ON_UUID  not_unique_id)

Description: This function is used for in testing situations when an ON_UUID value needs to be repeatable. Parameter: not_unique_id - [in] A not unique id created by ON_NotUniqueIdFromIndex() or ON_NextNotUniqueId(). Returns: If not_unique_id was created by on of the NotUniqueId functions, then a ON_UUID with the value xxxxxxxx-yyyy-11dc-9885-001372C33878 where xxxxxxxxyyyy = the hexadecimal representation of the int id's index + 1 is returned. Otherwise, NO_nil_uuid is returned. The returned id is not unique.

◆ ON_NextNurbsSpanIndex()

ON_DECL int ON_NextNurbsSpanIndex ( int  order,
int  cv_count,
const double *  knot,
int   
)
Parameters
orderreturns 0: input span_index < 0 cv_count-order: input span_index = cv_count-order -1: input span_index > cv_count-order; otherwise next span index

◆ ON_NormalCurvature()

ON_DECL ON_3dVector ON_NormalCurvature ( const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector  
)

◆ ON_NotUniqueIdFromIndex() [1/2]

ON_DECL ON_UUID ON_NotUniqueIdFromIndex ( ON__UINT32  index_32_bit)

Description: This function is used for in testing situations when an ON_UUID value needs to be repeatable. Parameter: index_32_bit - [in] index_32_bit > 0. Calling this function with the same index will create an ON_UUID with the same value. Returns: If index_32_bit = 0, then ON_nil_uuid is returned. Otherwise, a ON_UUID with the value xxxxxxxx-yyyy-11dc-9885-001372C33878 where xxxxxxxxyyyy = the hexadecimal representation of index_32_bit. The returned id is not unique.

◆ ON_NotUniqueIdFromIndex() [2/2]

ON_DECL ON_UUID ON_NotUniqueIdFromIndex ( ON__UINT64  index_64_bit)

Description: This function is used for in testing situations when an ON_UUID value needs to be repeatable. Parameter: index_64_bit - [in] index_64_bit > 0 and index_64_bit <= 0X0000FFFFFFFFFFFF. Calling this function with the same index will create an ON_UUID with the same value. Returns: If index_64_bit = 0 or >0X0000FFFFFFFFFFFF, then ON_nil_uuid is returned. Otherwise, a ON_UUID with the value xxxxxxxx-yyyy-11dc-9885-001372C33878 where xxxxxxxxyyyy = the hexadecimal representation of index_64_bit. The returned id is not unique.

◆ ON_NurbsSpanIndex()

ON_DECL int ON_NurbsSpanIndex ( int  order,
int  cv_count,
const double *  knot,
double  t,
int  side,
int  hint 
)

Description: Given an evaluation parameter t in the domain of a NURBS curve, ON_NurbsSpanIndex(order,cv_count,knot,t,0,0) returns the integer i such that (knot[i],...,knot[i+2*degree-1]), and (cv[i],...,cv[i+degree]) are the knots and control points that define the span of the NURBS that are used for evaluation at t. Parameters: order - [in] order >= 2 cv_count - [in] cv_count >= order knot - [in] valid knot vector t - [in] evaluation parameter side - [in] determines which span is used when t is at a knot value; side = 0 for the default (from above), side = -1 means from below, and side = +1 means from above. hint - [in] Search hint, or 0 if not hint is available. Returns: Returns the index described above.

◆ ON_NurbsSurfaceQuadrilateral()

ON_DECL ON_NurbsSurface* ON_NurbsSurfaceQuadrilateral ( const ON_3dPoint P,
const ON_3dPoint Q,
const ON_3dPoint R,
const ON_3dPoint S,
ON_NurbsSurface nurbs_surface = nullptr 
)

Description: Get an ON_NurbsSurface definition of a quadrilateral. Parameters: P - [in] Q - [in] R - [in] S - [in] corners in counter clockwise layer nurbs_surface - [in] if this pointer is not nullptr, then this ON_NurbsSurface is used to return the quadrilateral. Returns: An ON_NurbsSurface representation of the quadrilateral.

◆ ON_OrderEdgesAroundVertex() [1/2]

ON_DECL bool ON_OrderEdgesAroundVertex ( const ON_Brep B,
int  vid,
ON_2dex trim_ends,
bool &  bClosed 
)

Description: Very low level utility. Order edges around a vertex. Parameters: B - [in] vid - [in] trim_ends - [out] trim_ends[a].i is a trim index, trim_ends[a].j is 0 for start or 1 for end. The nth is B.m_T[trim_ends[n].i].Edge(). If bClosed is false, then the first and last edges will be naked. Must have at least as many ON2dex as the vertex has edges. bClosed - [out] If true, then all edges at the vertex have exactly two trims Returns: True if the order can be found. If any edge at the vertex is non-manifold, or if more than two are naked, then false. NOTE: If you don't know how many edges are at the vertex, call the version that takes an ON_SimpleArray.

Parameters
trim_endsMust be at as big as the edge count at the vertex

◆ ON_OrderEdgesAroundVertex() [2/2]

ON_DECL bool ON_OrderEdgesAroundVertex ( const ON_Brep B,
int  vid,
ON_SimpleArray< ON_2dex > &  trim_ends,
bool &  bClosed 
)

Description: Very low level utility. Order edges around a vertex. Parameters: B - [in] vid - [in] trim_ends - [out] trim_ends[a].i is a trim index, trim_ends[a].j is 0 for start or 1 for end. The nth is B.m_T[trim_ends[n].i].Edge(). If bClosed is false, then the first and last edges will be naked. bClosed - [out] If true, then all edges at the vertex have exactly two trims Returns: True if the order can be found. If any edge at the vertex is non-manifold, or if more than two are naked, then false.

◆ ON_PackTextureRectangles() [1/3]

ON_DECL bool ON_PackTextureRectangles ( class ON_PackedTextureRectangle rectangle_list,
const class ON_PackTextureRectanglesParameters packing_parameters 
)

Description: Pack a collection of rectangles into a rectangle. Parameters: rectangle_list - [in] a linked list of rectangles defined by the m_next pointers. The last item in the list must have a null m_next pointer.

or

rectangle_count - [in] rectangle_array - [in] an array of rectangle_count rectangles to pack. The m_next pointers will be set so the array is a linked list.

or

rectangle_array - [in] A simple dynamic array of rectangles. The m_next pointers will be set so the array is a linked list.

◆ ON_PackTextureRectangles() [2/3]

ON_DECL bool ON_PackTextureRectangles ( ON_SimpleArray< ON_PackedTextureRectangle > &  rectangle_array,
const class ON_PackTextureRectanglesParameters packing_parameters 
)

◆ ON_PackTextureRectangles() [3/3]

ON_DECL bool ON_PackTextureRectangles ( size_t  rectangle_count,
class ON_PackedTextureRectangle rectangle_array,
const class ON_PackTextureRectanglesParameters packing_parameters 
)

◆ ON_ParseAngleArcDegreesExpression()

ON_DECL int ON_ParseAngleArcDegreesExpression ( const wchar_t *  str,
int  str_count,
ON::AngleUnitSystem  default_str_angle_unit_system,
double *  angle_value_in_arc_degrees 
)

Description: Parses str to determine if it specifies a angle value.

Parameters: str - [in]

str_count - [in] str[] and str_count specify the string to parse. If str_count >= 0. it specifies the maximum number of elements in str[] that may be parsed. If str_count = -1, then the string must contain a character that terminates angle parsing.

default_str_angle_unit_system - [in] If an angle unit system is not specified in the parsed string, then default_str_angle_units determines what unit system will be used. If default_str_angle_units is ON::AngleUnitSystem::None, then ON::radians will be used.

angle_value_in_radians - [out] The value of the parsed angle, converted to arc degrees, is returned here.

Returns: Number of elements of str that were parsed. A return value of 0 indicates that str could not be parsed as a angle value.

Remarks: This function uses ON_ParseAngleExpression() with the angle_value_unit_system parameter set to ON::AngleUnitSystem::Degrees to parse the string. If you need more control over parsing options, then use ON_ParseAngleExpression().

◆ ON_ParseAngleExpression() [1/2]

ON_DECL int ON_ParseAngleExpression ( const wchar_t *  str,
int  str_count,
ON_ParseSettings  parse_settings,
const ON::AngleUnitSystem  angle_value_unit_system,
double *  angle_value,
ON_ParseSettings parse_results,
ON::AngleUnitSystem str_angle_unit_system 
)

◆ ON_ParseAngleExpression() [2/2]

ON_DECL int ON_ParseAngleExpression ( const wchar_t *  str,
int  str_count,
ON_ParseSettings  parse_settings,
double *  angle_value,
ON_ParseSettings parse_results,
ON::AngleUnitSystem str_angle_unit_system 
)

Description: Parses str to determine if it specifies a angle value.

Parameters: str - [in]

str_count - [in] str[] and str_count specify the string to parse. If str_count >= 0. it specifies the maximum number of elements in str[] that may be parsed. If str_count = -1, then the string must contain a character that terminates angle parsing.

parse_settings - [in] The input parse_settings parameter controls what input may be parsed and how it is parsed. Use ON_ParseSettings::DefaultSettings for common parsing tasks.

angle_value_unit_system - [in] Angle unit system for the returned value.
For example, if you want the returned value to be in degrees, you would specify ON::AngleUnitSystem::Degrees here.

angle_value - [out] The value of the parsed angle.

parse_results - [out] (input pointer can be null) The output parse_results parameter reports what was parsed.

str_angle_unit_system - [out] (input pointer can be null) angle unit in the parsed string. When the angle_value_unit_system specifies an angle unit system and a a different angle unit system is parsed, the number returned in angle_value is always converted to the angle unit system specified by the angle_value_unit_system parameter. If needed, you can inspect str_angle_unit_system to determine if the angle unit system scaling was applied.

Returns: Number of elements of str that were parsed. A return value of 0 indicates that str could not be parsed as a angle value.

◆ ON_ParseAngleRadiansExpression()

ON_DECL int ON_ParseAngleRadiansExpression ( const wchar_t *  str,
int  str_count,
ON::AngleUnitSystem  default_str_angle_unit_system,
double *  angle_value_in_radians 
)

Description: Parses str to determine if it specifies a angle value.

Parameters: str - [in]

str_count - [in] str[] and str_count specify the string to parse. If str_count >= 0. it specifies the maximum number of elements in str[] that may be parsed. If str_count = -1, then the string must contain a character that terminates angle parsing.

default_str_angle_unit_system - [in] If an angle unit system is not specified in the parsed string, then default_str_angle_units determines what unit system will be used. If default_str_angle_units is ON::AngleUnitSystem::None, then ON::radians will be used.

angle_value_in_radians - [out] The value of the parsed angle, converted to radians, is returned here.

Returns: Number of elements of str that were parsed. A return value of 0 indicates that str could not be parsed as a angle value.

Remarks: This function uses ON_ParseAngleExpression() with the angle_value_unit_system parameter set to ON::radians to parse the string. If you need more control over parsing options, then use ON_ParseAngleExpression().

◆ ON_ParseAngleUnitName() [1/2]

ON_DECL int ON_ParseAngleUnitName ( const wchar_t *  str,
int  str_count,
int  prefered_locale_id,
ON::AngleUnitSystem angle_unit_system 
)

Description: Parses str if it is a recognized angle unit system name or abbreviation.

Parameters: str - [in]

str_count - [in] str[] and str_count specify the string to parse. If str_count >= 0. it specifies the maximum number of elements in str[] that may be parsed. If str_count = -1, then the string must contain a character that terminates angle unit system name parsing.
This character can be a null, digit, punctuation, arithmetic operator, or a unicode code point <= 0x0020 (0x0020 = space = 32 decimal).

prefered_locale_id - [in] If the parsed angle unit name identifies different angle unit systems in different locales, then this value is used to resolve the ambiguity. A list of Microsoft locale id values can be found at http://msdn.microsoft.com/en-us/library/ms912047(v=winembedded.10). For example, "Grad" identifies ON::degrees in German and ON::gradians in US English.

bParseLeadingWhitespace - [in] If true, leading white space will be parsed. If false, the unit name must begin with element str[0].

angle_unit_system - [out] (can be null) If angle_unit_system is not null, it is set to the identify the angle unit system specified by str. If str does not identify a known angle unit system, then *angle_unit_system is set to ON::AngleUnitSystem::None.

Returns: Number of elements of str that were parsed. A return value of 0 indicates that str did not match know unit system names or abbreviations.

Remarks: Currently common names and abbreviations for radians, turns, gradians, arc degrees, arc minutes and arc seconds are supported in Czech (cs-*), English (en-*), French (fr-*), German (de-*), Portuguese (pt-*) and Spanish (es-*).

If the first element of str is quotation mark (double quote), unicode code point 0x0022, the string is parsed as arc seconds. If the first element of str is apostrophe, unicode code point 0x0027, the string is parsed as arc minutes.

◆ ON_ParseAngleUnitName() [2/2]

ON_DECL int ON_ParseAngleUnitName ( const wchar_t *  str,
int  str_count,
ON_ParseSettings  parse_settings,
ON::AngleUnitSystem angle_unit_system 
)

◆ ON_ParseLengthExpression() [1/5]

ON_DECL int ON_ParseLengthExpression ( const wchar_t *  str,
int  str_count,
ON::AngleUnitSystem  default_str_angle_unit_system,
const ON_UnitSystem length_value_unit_system,
double *  length_value 
)

◆ ON_ParseLengthExpression() [2/5]

ON_DECL int ON_ParseLengthExpression ( const wchar_t *  str,
int  str_count,
ON::AngleUnitSystem  default_str_angle_unit_system,
ON::LengthUnitSystem  length_value_unit_system,
double *  length_value 
)

◆ ON_ParseLengthExpression() [3/5]

ON_DECL int ON_ParseLengthExpression ( const wchar_t *  str,
int  str_count,
ON_ParseSettings  parse_settings,
const ON_UnitSystem length_value_unit_system,
double *  length_value,
ON_ParseSettings parse_results,
ON::LengthUnitSystem str_length_unit_system 
)

◆ ON_ParseLengthExpression() [4/5]

ON_DECL int ON_ParseLengthExpression ( const wchar_t *  str,
int  str_count,
ON_ParseSettings  parse_settings,
double *  length_value,
ON_ParseSettings parse_results,
ON::LengthUnitSystem str_length_unit_system 
)

Description: Parses str to determine if it specifies a length value.

Parameters: str - [in]

str_count - [in] str[] and str_count specify the string to parse. If str_count >= 0, it specifies the maximum number of elements in str[] that may be parsed. If str_count = -1, then the string must contain a character that terminates length parsing.

parse_settings - [in] The input parse_settings parameter controls what input may be parsed and how it is parsed. Use ON_ParseSettings::DefaultSettings for common parsing tasks.

length_value_unit_system - [in] Length unit system for the returned value.
For example, if you want the returned value to be in meters, you would specify ON::LengthUnitSystem::Meters here. If you want to use custom units, you must use the override with the ON_UnitSystem parameter.

length_value - [out] The value of the parsed length.

parse_results - [out] (input pointer can be null) The output parse_results parameter reports what was parsed.

str_length_unit_system - [out] (input pointer can be null) length unit in the parsed string. When the length_value_unit_system specifies a unit system and a a different length unit system is parsed, the number returned in length_value is always converted to the unit system specified by the length_value_unit_system parameter. If needed, you can inspect str_length_unit_system to determine if the length unit system scaling was applied.

Returns: Number of elements of str that were parsed. A return value of 0 indicates that str could not be parsed as a length value.

◆ ON_ParseLengthExpression() [5/5]

ON_DECL int ON_ParseLengthExpression ( const wchar_t *  str,
int  str_count,
ON_ParseSettings  parse_settings,
ON::LengthUnitSystem  length_value_unit_system,
double *  length_value,
ON_ParseSettings parse_results,
ON::LengthUnitSystem str_length_unit_system 
)

◆ ON_ParseLengthUnitName() [1/2]

ON_DECL int ON_ParseLengthUnitName ( const wchar_t *  str,
int  str_count,
int  prefered_locale_id,
ON::LengthUnitSystem length_unit_system 
)

Description: Parses str if it is a recognized length unit system name or abbreviation.

Parameters: str - [in]

str_count - [in] str[] and str_count specify the string to parse. If str_count >= 0. it specifies the maximum number of elements in str[] that may be parsed. If str_count = -1, then the string must contain a character that terminates unit system name parsing. This character can be a null, digit, punctuation, arithmetic operator, or a unicode code point <= 0x0020 (0x0020 = space = 32 decimal).

prefered_locale_id - [in] If the parsed length unit name identifies different length unit systems in different locales, then this value is used to resolve the ambiguity. A list of Microsoft locale id values can be found at http://msdn.microsoft.com/en-us/library/ms912047(v=winembedded.10).

bParseLeadingWhitespace - [in] If true, leading white space will be parsed. If false, the unit name must begin with element str[0].

length_unit_system - [out] (can be null) If length_unit_system is not null, it is set to identify the unit system specified by str. If str does not identify a known unit system, then *length_unit_system is set to ON::LengthUnitSystem::None.

Returns: Number of elements of str that were parsed. A return value of 0 indicates that str did not match know unit system names or abbreviations.

Remarks: Currently common names and abbreviations for millimeters, centimeters, meters and kilometers are supported in Czech (cs-*), English (en-*), French (fr-*), German (de-*), Portuguese (pt-*) and Spanish (es-*).

Common names and abbreviations for the following United States customary length units are supported in United States English (en-US). If the first element of str is quotation mark (double quote), unicode code point 0x0022, the string is parsed as United States customary inch. If the first element of str is apostrophe, unicode code point 0x0027, the string is parsed as United States customary foot. All conversions to meters are exact. microinch = 2.54e-8 meters (1.0e-6 inches) mil = 2.54e-5 meters (0.001 inches) inch = 0.0254 meters (1/12 foot) foot = 0.3048 meters (12 inches) yard = 0.9144 meters (36 inches) mile = 1609.344 meters (5280 feet) (US statue or land mile)

◆ ON_ParseLengthUnitName() [2/2]

ON_DECL int ON_ParseLengthUnitName ( const wchar_t *  str,
int  str_count,
ON_ParseSettings  parse_settings,
ON::LengthUnitSystem length_unit_system 
)

◆ ON_ParseNumber()

ON_DECL int ON_ParseNumber ( const wchar_t *  str,
int  str_count,
ON_ParseSettings  parse_settings,
ON_ParseSettings parse_results,
double *  value 
)

Description: Parses str to determine if it specifies a number.

Parameters: str - [in]

str_count - [in] str[] and str_count specify the string to parse. If str_count >= 0. it specifies the maximum number of elements in str[] that may be parsed. If str_count = -1, then the string must contain a character that terminates number parsing. This character can be a null, arithmetic operator, or a unicode code point <= 0x0020 (0x0020 = space = 32 decimal).

parse_settings - [in] The value of parse_settings controls what input may be parsed. Use one of the predefined ON_ParseSettings::DefaultSettings ON_ParseSettings::IntegerNumberSettings ON_ParseSettings::RationalNumberSettings ON_ParseSettings::RealNumberSettings for common parsing tasks.

parse_results - [out] The value of parse_results reports what was parsed.

value - [out] The value of the parsed number.

Returns: Number of elements of str[] that were parsed. A return value of 0 indicates that str[] could not be parsed as a number.

See Also: ON_ParseNumberExpression ON_ParseLengthExpression ON_ParseAngleExpression

◆ ON_ParseNumberExpression()

ON_DECL int ON_ParseNumberExpression ( const wchar_t *  str,
int  str_count,
ON_ParseSettings  parse_settings,
ON_ParseSettings parse_results,
double *  value 
)

Description: Parses str to determine if it specifies a number. Expression parsing includes support for parsing in-line multiplication, in-line division, automatic multiplication by pi, and formula parsing.

Parameters: str - [in]

str_count - [in] str[] and str_count specify the string to parse. If str_count >= 0. it specifies the maximum number of elements in str[] that may be parsed. If str_count = -1, then the string must contain a character that terminates number parsing. This character can be a null, arithmetic operator, or a unicode code point <= 0x0020 (0x0020 = space = 32 decimal).

parse_settings - [in] The value of parse_settings controls what input may be parsed. Use one of the predefined ON_ParseSettings::DefaultSettings ON_ParseSettings::IntegerNumberSettings ON_ParseSettings::RationalNumberSettings ON_ParseSettings::RealNumberSettings for common parsing tasks.

parse_results - [out] The value of parse_results reports what was parsed.

value - [out] The value of the parsed number.

Returns: Number of elements of str[] that were parsed. A return value of 0 indicates that str[] could not be parsed as a number.

See Also: ON_ParseNumber ON_ParseLengthExpression ON_ParseAngleExpression

◆ ON_ParsePointExpression() [1/4]

ON_DECL int ON_ParsePointExpression ( const wchar_t *  str,
int  str_count,
ON::AngleUnitSystem  default_str_angle_unit_system,
const ON_UnitSystem point_value_unit_system,
ON_3dPoint point_value 
)

◆ ON_ParsePointExpression() [2/4]

ON_DECL int ON_ParsePointExpression ( const wchar_t *  str,
int  str_count,
ON::AngleUnitSystem  default_str_angle_unit_system,
ON::LengthUnitSystem  point_value_unit_system,
ON_3dPoint point_value 
)

Description: Parses str to determine if it specifies a point value.

Parameters: str - [in]

str_count - [in] str[] and str_count specify the string to parse. If str_count >= 0. it specifies the maximum number of elements in str[] that may be parsed. If str_count = -1, then the string must contain a character that terminates length parsing.

default_str_angle_unit_system - [in] If an angle unit system is not specified in the parsed string, then default_str_angle_units determines what unit system will be used. If default_str_angle_units is ON::AngleUnitSystem::None, then ON::radians will be used.

parse_settings - [in] The input parse_settings parameter controls what input may be parsed and how it is parsed. Use ON_ParseSettings::DefaultSettings for common parsing tasks.

point_value_unit_system - [in] Coordinate unit system for the returned point value.
For example, if you want the returned point coordinates to be in meters, you would specify ON::LengthUnitSystem::Meters here. If you want to use custom units, you must use the override with the ON_UnitSystem parameter.

point_value - [out] The value of the parsed point.

parse_results - [out] (input pointer can be null) The output parse_results parameter reports what was parsed.

Returns: Number of elements of str that were parsed. A return value of 0 indicates that str could not be parsed as a length value.

◆ ON_ParsePointExpression() [3/4]

ON_DECL int ON_ParsePointExpression ( const wchar_t *  str,
int  str_count,
ON_ParseSettings  parse_settings,
const ON_UnitSystem point_value_unit_system,
ON_3dPoint point_value,
ON_ParseSettings parse_results 
)

◆ ON_ParsePointExpression() [4/4]

ON_DECL int ON_ParsePointExpression ( const wchar_t *  str,
int  str_count,
ON_ParseSettings  parse_settings,
ON::LengthUnitSystem  point_value_unit_system,
ON_3dPoint point_value,
ON_ParseSettings parse_results 
)

◆ ON_ParseUuidString()

const ON_DECL char* ON_ParseUuidString ( const char *  sUUID,
ON_UUID uuid 
)

Description: Parses a string like "85a08515-f383-11d3-bfe7-0010830122f0" and returns the value as a uuid. Hyphens can appear anywhere and are ignored. Parsing stops at any character that is not a hexadecimal digit or hyphen. Parsing stops after 32 hexadecimal digits are read; Parameters: sUuid - [in] uuid - [out] Returns: null Parsing failed and uuid is set to ON_nil_uuid. non null Parsing succeeded and uuid is set to the parsed value. The returned pointer is the character in sUUID immediately after the last parsed character.

◆ ON_PassesNanTest()

ON_DECL bool ON_PassesNanTest ( )

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. Returns: True (1) if nan compares and arithmetic agree with IEEE-754. (nan != nan) is true. (nan op x) and (x op nan) is false for op ==, <, >, <=, and >=. (nan op x) and (x op nan) is nan for op == +, -, *, and /. False (0) otherwise.

◆ ON_PointGridBoundingBox()

ON_DECL ON_BoundingBox ON_PointGridBoundingBox ( int  dim,
bool  is_rat,
int  point_count0,
int  point_count1,
int  point_stride0,
int  point_stride1,
const double *  point_grid 
)

◆ ON_PointListBoundingBox() [1/2]

ON_DECL ON_BoundingBox ON_PointListBoundingBox ( int  dim,
bool  is_rat,
int  count,
int  stride,
const double *  point_list 
)

◆ ON_PointListBoundingBox() [2/2]

ON_DECL ON_BoundingBox ON_PointListBoundingBox ( int  dim,
bool  is_rat,
int  count,
int  stride,
const float *  point_list 
)
Parameters
dimlow level workhorse function

◆ ON_PointsAreCoincident() [1/3]

ON_DECL bool ON_PointsAreCoincident ( const ON_3dPoint ,
const ON_3dPoint  
)

◆ ON_PointsAreCoincident() [2/3]

ON_DECL bool ON_PointsAreCoincident ( int  dim,
bool  is_rat,
const double *  pointA,
const double *  pointB 
)

Parameters: dim - [in] >= 1 is_rat - [in] true if the points are rational and points[dim] is the "weight" pointA - [in] pointB - [in] point coordinates Returns: True if the input is valid and for each coordinate pair, |a-b| <= ON_ZERO_TOLERANCE or |a-b| <= (fabs(a)+fabs(b))*ON_RELATIVE_TOLERANCE. False otherwise.

◆ ON_PointsAreCoincident() [3/3]

ON_DECL bool ON_PointsAreCoincident ( int  dim,
bool  is_rat,
int  point_count,
int  point_stride,
const double *  points 
)

Description See ON_PointsAreCoincident() for a description of when opennurbs considers two points to be coincident. Parameters: dim - [in] >= 1 is_rat - [in] true if the points are rational and points[dim] is the "weight" point_count - [in] number of points >= 2 point_stride - [in] >= (0 != is_rat) ? (dim+1) : dim points - [in] point coordinates Returns: True if the first and last points are coincident and all other points in the list are coincident with the previous point. False if there are points that are not coincident or point_count < 2 or other input parameters are invalid.

◆ ON_PostEffectTypeString()

const ON_DECL wchar_t* ON_PostEffectTypeString ( ON_PostEffect::Types  type)

Helper function to get the type of a post effect as a string.

◆ ON_Pullback3dVector()

ON_DECL bool ON_Pullback3dVector ( const ON_3dVector ,
double  ,
const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector ,
ON_2dVector  
)

◆ ON_qsort() [1/2]

ON_DECL void ON_qsort ( void *  base,
size_t  count,
size_t  sizeof_element,
int(*)(const void *, const void *)  compare 
)

◆ ON_qsort() [2/2]

ON_DECL void ON_qsort ( void *  base,
size_t  count,
size_t  sizeof_element,
int(*)(void *, const void *, const void *)  compare,
void *  context 
)

◆ ON_QSORT_SHORT_SORT_FNAME()

static void ON_QSORT_SHORT_SORT_FNAME ( ON_SORT_TEMPLATE_TYPE *  lo,
ON_SORT_TEMPLATE_TYPE *  hi 
)
static

Note: in assertions below, i and j are always inside original bound of array to sort.

A[i] <= A[j] for i <= j, j > hi

A[i] <= A[max] for lo <= i < p

A[i] <= A[max] for lo <= i <= p

A[i] <= A[max] for lo <= i <= hi

A[i] <= A[hi] for i <= hi, so A[i] <= A[j] for i <= j, j >= hi

A[i] <= A[j] for i <= j, j > hi, loop top condition established

A[i] <= A[j] for i <= j, j > lo, which implies A[i] <= A[j] for i < j, so array is sorted

◆ ON_quacksort()

void ON_quacksort ( BASETYPE base,
size_t  nel,
size_t  width,
int(*)(const void *, const void *)  compar 
)

implementation of quick sort with minimum swaps for partition sizes 4 and less

#if defined(ON_SORT_TEMPLATE_TYPE) && !defined(ON_SORT_TEMPLATE_USE_SWAP) ON_SORT_TEMPLATE_TYPE m_tmp; endif

When width is a multiple of 8 or 4 (with most arrays it probably is), use faster integer swappers instead of byte swapper

Uses local quick and dirty pseudorandom number generator to give a fuzzy answer to avoid having the data be arranged in a way that mechanically always picking the pivot the same way affects the speed. Mostly affects chevron etc. patterns.

Totally random pivot would guarantee O(nlogn) worst case, but does not perform as well on sorted or nearly sorted sets.

< 1/2

< +1/8

< -1/16

< -1/32

use minimum compares and swaps for 2 to 4 items

partition range

move pivot to left end

move =< pivot to left, and > pivot to right

find next first item > pivot

find next last item =< pivot

< to quickly exit a nested loop

move pivot to final place

avoid overhead when not likely that there are multiple items == pivot

the whole range is less or equal than pivot check if there are values == pivot left of it. Speeds up sorting arrays with all or lots of equal items.

limit max recursion depth to log(nel) by only recursing shorter part

lower part is shorter

upper part is shorter

◆ ON_QuaternionProduct()

ON_DECL ON_Quaternion ON_QuaternionProduct ( const ON_Quaternion p,
const ON_Quaternion q 
)

Returns: The quaternion product of p and q. This is the same value as p*q.

◆ ON_RadiansFromDegrees()

ON_DECL double ON_RadiansFromDegrees ( double  angle_in_degrees)

Parameters: angle_in_degrees - [in] Angle measure in degrees Returns: Angle measure in radians

◆ on_rand()

ON__UINT32 on_rand ( void  )

Description: Get a random number. Returns: A random number. Remarks: on_rand() is not thread safe. It used static global memory that is modified by on_srand() and on_rand().

◆ on_random_number()

ON__UINT32 on_random_number ( struct ON_RANDOM_NUMBER_CONTEXT rand_context)

Description: Get a random number. Parameters: rand_context - [in/out] random number context. The first time rand_context is used it must be either initialized by calling on_random_number_seed() or rand_context->mti must be set to 0xFFFFFFFF. Otherwise do not modify randcontext between calls to on_random_number. Returns: A random number. Remarks: on_random_number() does not use any static memory. Example: ON_RAND_CONTEXT rand_context;

ON__UINT seed = 123; on_random_number_seed( seed, &rand_context );

ON__UINT32 r1 = on_random_number( &rand_context ); ON__UINT32 r2 = on_random_number( &rand_context ); ON__UINT32 r3 = on_random_number( &rand_context );

◆ on_random_number_seed()

void on_random_number_seed ( ON__UINT32  s,
struct ON_RANDOM_NUMBER_CONTEXT rand_context 
)

Description: Seed a context for on_random_number(). Parameters: s - [in] rand_context - [out] context to seed.

Remarks: on_random_number_seed() does not use any static memory. Example: ON_RAND_CONTEXT rand_context;

ON__UINT seed = 123; on_random_number_seed( seed, &rand_context );

ON__UINT32 r1 = on_random_number( &rand_context ); ON__UINT32 r2 = on_random_number( &rand_context ); ON__UINT32 r3 = on_random_number( &rand_context );

◆ ON_REMOVE_ASAP_AssertEx()

ON_DECL void ON_VARGS_FUNC_CDECL ON_REMOVE_ASAP_AssertEx ( int  ,
const char *  file_name,
int  line_number,
const char *  function_name,
const char *  format,
  ... 
)

Ideally - these "assert" functions will be deleted when the SDK can be changed.

◆ ON_RemoveBezierSingAt0()

ON_DECL bool ON_RemoveBezierSingAt0 ( int  ,
int  ,
int  ,
double *   
)

◆ ON_RemoveBezierSingAt1()

ON_DECL bool ON_RemoveBezierSingAt1 ( int  ,
int  ,
int  ,
double *   
)

◆ ON_RemoveIdPrefixFromString()

const ON_DECL ON_wString ON_RemoveIdPrefixFromString ( const ON_UUID  id,
const wchar_t *  separator,
const wchar_t *  source 
)

◆ ON_RemoveIdSuffixFromString()

const ON_DECL ON_wString ON_RemoveIdSuffixFromString ( const wchar_t *  source,
const wchar_t *  separator,
const ON_UUID  id 
)

◆ ON_ReparameterizeRationalBezierCurve()

ON_DECL bool ON_ReparameterizeRationalBezierCurve ( double  c,
int  dim,
int  order,
int  cvstride,
double *  cv 
)

Description: Reparameterize a rational Bezier curve. Parameters: c - [in] reparameterization constant (generally speaking, c should be > 0). The control points are adjusted so that output_bezier(t) = input_bezier(lambda(t)), where lambda(t) = c*t/( (c-1)*t + 1 ). Note that lambda(0) = 0, lambda(1) = 1, lambda'(t) > 0, lambda'(0) = c and lambda'(1) = 1/c. dim - [in] order - [in] cvstride - [in] (>= dim+1) cv - [in/out] homogeneous rational control points Returns: The cv values are changed so that output_bezier(t) = input_bezier(lambda(t)).

◆ ON_ReparameterizeRationalNurbsCurve()

ON_DECL bool ON_ReparameterizeRationalNurbsCurve ( double  c,
int  dim,
int  order,
int  cv_count,
int  cvstride,
double *  cv,
double *  knot 
)

Description: Reparameterize a rational NURBS curve. Parameters: c - [in] reparameterization constant (generally speaking, c should be > 0). The control points and knots are adjusted so that output_nurbs(t) = input_nurbs(lambda(t)), where lambda(t) = c*t/( (c-1)*t + 1 ). Note that lambda(0) = 0, lambda(1) = 1, lambda'(t) > 0, lambda'(0) = c and lambda'(1) = 1/c. dim - [in] order - [in] cvstride - [in] (>=dim+1) cv - [in/out] homogeneous rational control points knot - [in/out] NURBS curve knots Returns: The cv values are changed so that output_bezier(t) = input_bezier(lambda(t)). See Also: ON_ChangeRationalNurbsCurveEndWeights

◆ ON_ReverseKnotVector()

ON_DECL bool ON_ReverseKnotVector ( int  ,
int  ,
double *   
)

◆ ON_ReversePointGrid()

ON_DECL bool ON_ReversePointGrid ( int  ,
bool  ,
int  ,
int  ,
int  ,
int  ,
double *  ,
int   
)

◆ ON_ReversePointList()

ON_DECL bool ON_ReversePointList ( int  ,
bool  ,
int  ,
int  ,
double *   
)

◆ ON_Round()

ON_DECL int ON_Round ( double  x)

Do not call ON_Round() in any opennurbs code, tl code or any other code that does critical calculations or when there is any possibility that x is invalid or fabs(x)>2147483647. Use floor(x+0.5) instead.

◆ ON_RowReduce() [1/2]

ON_DECL int ON_RowReduce ( int  row_count,
int  col_count,
double  zero_pivot,
double **  A,
double **  B,
double  pivots[2] 
)

Description: Perform simple row reduction on a matrix. If A is square, positive definite, and really really nice, then the returned B is the inverse of A. If A is not positive definite and really really nice, then it is probably a waste of time to call this function. Parameters: row_count - [in] col_count - [in] zero_pivot - [in] absolute values <= zero_pivot are considered to be zero A - [in/out] A row_count X col_count matrix. Input is the matrix to be row reduced. The calculation destroys A, so output A is garbage. B - [out] A a row_count X row_count matrix. That records the row reduction. pivots - [out] minimum and maximum absolute values of pivots. Returns: Rank of A. If the returned value < min(row_count,col_count), then a zero pivot was encountered. If C = input value of A, then B*C = (I,*)

◆ ON_RowReduce() [2/2]

ON_DECL unsigned int ON_RowReduce ( unsigned int  row_count,
unsigned  col_count,
double  zero_pivot_tolerance,
const double *const *  constA,
bool  bInitializeB,
bool  bInitializeColumnPermutation,
double **  A,
double **  B,
unsigned int *  column_permutation,
double  pivots[3] 
)

Description: Calculate a row reduction matrix so that R*M = upper triangular matrixPerform simple row reduction on a matrix. If A is square, positive definite, and really really nice, then the returned B is the inverse of A. If A is not positive definite and really really nice, then it is probably a waste of time to call this function. Parameters: row_count - [in] col_count - [in] zero_pivot - [in] absolute values <= zero_pivot_tolerance are considered to be zero constA - [in] nullptr or a row_count x col_count matrix. bInitializeB - [in] If true, then B is set to the rox_count x row_count identity before the calculation begins. bInitializeColumnPermutation - [in] If true and nullptr != column_permutation, then column_permutation[] is initialized to (0, 1, ..., col_count-1) before the calculation begins. A - [in/out] A row_count X col_count matrix.
If constA is not null, then A can be null or is the workspace used to row reduce. If constA is null, then the input A must not be null and must be initialized. In all cases, the calculation destroys the contents of A and output A contains garbage. B - [in/out] A a row_count X row_count matrix The row operations applied to A are also applied to B.
If the input B is the identity, then R*(input A) would have zeros below the diagonal. column_permutation - [in/out] The permutation applied to the columns of A is also applied to the column_permutation[] array. pivots - [out] pivots[0] = maximum nonzero pivot pivots[1] = minimum nonzero pivot pivots[2] = largest pivot that was treated as zero Returns: Rank of A. If the returned value < min(row_count,col_count), then a zero pivot was encountered. If C = input value of A, then B*C = (I,*)

◆ ON_RunXMLTests()

ON_DECL bool ON_RunXMLTests ( const wchar_t *  test_folder)

◆ ON_SdkVersionNumberToString()

const ON_DECL ON_String ON_SdkVersionNumberToString ( unsigned int  sdk_version_number,
unsigned int  sdk_service_release_number 
)

◆ ON_SdkVersionNumberToWideString()

const ON_DECL ON_wString ON_SdkVersionNumberToWideString ( unsigned int  sdk_version_number,
unsigned int  sdk_service_release_number 
)

◆ ON_SearchMonotoneArray()

ON_DECL int ON_SearchMonotoneArray ( const double *  ,
int  ,
double   
)

◆ ON_SecondsSinceJanOne1970UTC()

ON_DECL ON__UINT64 ON_SecondsSinceJanOne1970UTC ( )

◆ ON_SendLogMessageToCloud()

ON_DECL void ON_SendLogMessageToCloud ( ON_LogMessageType  msg_type,
const wchar_t *  wszClass,
const wchar_t *  wszEventDesc,
const wchar_t *  wszMessage 
)

◆ ON_SetBinaryArchiveOpenNURBSVersion()

void ON_SetBinaryArchiveOpenNURBSVersion ( class ON_BinaryArchive ,
unsigned int   
)

Used int ON_3dmProperties::Read() to set ON_BinaryArchive.m_3dm_opennurbs_version Do not call directly.

◆ ON_SetCurveCurveIntersectionDir()

ON_DECL bool ON_SetCurveCurveIntersectionDir ( ON_3dVector  N,
int  xcount,
ON_X_EVENT xevent,
double  a0,
double  a1,
double  b0,
double  b1 
)

Description: Sets ON_X_EVENT m_dirA[] and m_dirB[] flags for in intersection of coplanar curves. For each m_dirA[]/m_dirB[] flag that is set to ON_X_EVENT, the curve geometry at the intersection is examined to set the flags. Parameters: N [in] normal to the plane xcount - [in] number of intersection events xevent - [in] array of xcount intersection events a0 - [in] a1 - [in] (a0,a1) = curveA intersection domain b0 - [in] b1 - [in] (b0,b1) = curveB intersection domain See Also: ON_Curve::IntersectCurve ON_SetCurveSurfaceIntersectionDir

◆ ON_SetCurveSurfaceIntersectionDir()

ON_DECL bool ON_SetCurveSurfaceIntersectionDir ( int  xcount,
ON_X_EVENT xevent,
double  t0,
double  t1,
double  u0,
double  u1,
double  v0,
double  v1 
)

Description: Sets ON_X_EVENT m_dirA[] and m_dirB[] flags for a curve surface intersection. For each m_dirA[]/m_dirB[] flag that is set to ON_X_EVENT, the curve and surface geometry at the intersection is examined to set the flags. Parameters: xcount - [in] number of intersection events xevent - [in] array of xcount intersection events t0 - [in] t1 - [in] (t0,t1) = curveA intersection domain u0 - [in] u1 - [in] (u0,u1) = surfaceB u intersection domain v0 - [in] v1 - [in] (v0,v1) = surfaceB v intersection domain Returns: << TODO: Add return codes here >> See Also: ON_Curve::IntersectSurface ON_SetCurveCurveIntersectionDir

◆ ON_SetCVFromDerivative()

ON_DECL bool ON_SetCVFromDerivative ( int  end,
int  d,
const double *  D,
ON_BezierCurve bezier_curve 
)

Description: Given the first (d-1) CVs and a value for the d-th derivative, this sets the d-th CV. If bezier_curve is rational, then all the weights must be set. The weights are not changed. Parameters: end - [in] 0 start of curve (first d-1 CVs are input and the) 1 end of curve (last d-1 CVs are set) d - [in] derivative to set (>=0 and < bezier_curve.m_order) D - [in] Value of the d-th derivative. (D[] has length bezier_curve.m_dim.) bezier_curve - [in/out] If bezier_curve is rational, all the weights must be set and the weights are not changed. When end=0, the input curve must have the first d-1 CVs set and the output curve will have the d-th CV set so that the d-th derivative at 0.0 is D. When end=1, the input curve must have the lastt d-1 CVs set and the output curve will have the (order-1-d)-th CV set so that the d-th derivative at 1.0 is D. Returns: True if successful.

◆ ON_SetDebugWriteObjectDirectory()

ON_DECL void ON_SetDebugWriteObjectDirectory ( const wchar_t *  directory_name)

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. Description: Set the directory where ON_DebugWriteObject() will write the .3dm file. Parameters: directory_name - [in] Remarks: This function is not thread safe. It stores directory_name in a static array.

◆ ON_SetKnotVectorDomain()

ON_DECL bool ON_SetKnotVectorDomain ( int  order,
int  cv_count,
double *  knot,
double  t0,
double  t1 
)

Description: Set the domain of a knot vector. Parameters: order - [in] order >= 2 cv_count - [in] cv_count >= order knot - [in/out] input existing knots and returns knots with new domain. t0 - [in] t1 - [in] New domain will be the interval (t0,t1). Returns: True if input is valid and the returned knot vector has the requested domain. False if the input is invalid, in which case the input knot vector is not changed.

◆ ON_SetSendLogMessageToCloudProc()

ON_DECL void ON_SetSendLogMessageToCloudProc ( ON_SSLMTC_PROC  )

◆ ON_SetWorkerThreadContext()

ON_DECL ON__UINT64 ON_SetWorkerThreadContext ( void(*)(ON__UINT_PTR)  fTerminateThreadFunction,
ON__UINT_PTR  function_parameter 
)

Description: Set the worker thread context. ON_SetWorkerThreadContext() is used to register the callback function that will be called during every memory allocation event. In order for this function to be called, you must call ON_WorkerThreadEnableTerminateRequest() after calling ON_SetWorkerThreadContext(). Parameters: m_platform_thread_id - [in] Cannot be zero. fTerminateThreadFunction - [in] Function to call to terminate thread. Cannot be null function_parameter - [in] fTerminateThreadFunction() parameter value Returns: 0: A context is already set, or the input parameter is null. >0: Serial number of the new context.

◆ ON_SHA1_Accumulate2dPointArray()

void ON_SHA1_Accumulate2dPointArray ( class ON_SHA1 sha1,
const class ON_SimpleArray< ON_2dPoint > &  a 
)

◆ ON_SHA1_Accumulate2dVectorArray()

void ON_SHA1_Accumulate2dVectorArray ( class ON_SHA1 sha1,
const class ON_SimpleArray< ON_2dVector > &  a 
)

◆ ON_SHA1_Accumulate2fPointArray()

void ON_SHA1_Accumulate2fPointArray ( class ON_SHA1 sha1,
const class ON_SimpleArray< ON_2fPoint > &  a 
)

◆ ON_SHA1_Accumulate2fVectorArray()

void ON_SHA1_Accumulate2fVectorArray ( class ON_SHA1 sha1,
const class ON_SimpleArray< ON_2fVector > &  a 
)

◆ ON_SHA1_Accumulate3dPointArray()

void ON_SHA1_Accumulate3dPointArray ( class ON_SHA1 sha1,
const class ON_SimpleArray< ON_3dPoint > &  a 
)

◆ ON_SHA1_Accumulate3dVectorArray()

void ON_SHA1_Accumulate3dVectorArray ( class ON_SHA1 sha1,
const class ON_SimpleArray< ON_3dVector > &  a 
)

◆ ON_SHA1_Accumulate3fPointArray()

void ON_SHA1_Accumulate3fPointArray ( class ON_SHA1 sha1,
const class ON_SimpleArray< ON_3fPoint > &  a 
)

◆ ON_SHA1_Accumulate3fVectorArray()

void ON_SHA1_Accumulate3fVectorArray ( class ON_SHA1 sha1,
const class ON_SimpleArray< ON_3fVector > &  a 
)

◆ ON_SHA1_Accumulate4dPointArray()

void ON_SHA1_Accumulate4dPointArray ( class ON_SHA1 sha1,
const class ON_SimpleArray< ON_4dPoint > &  a 
)

◆ ON_SHA1_Accumulate4fPointArray()

void ON_SHA1_Accumulate4fPointArray ( class ON_SHA1 sha1,
const class ON_SimpleArray< ON_4fPoint > &  a 
)

◆ ON_SimpleQuadraticMinimize()

ON_DECL int ON_SimpleQuadraticMinimize ( int(*)(void *, double, double *)  f,
void *  f_arg,
double  ax,
double  bx,
double  cx,
double  desired_min,
double  stop_tol,
int  max_it,
double *  t_addr = 0,
double *  min_f = 0 
)

Find a local minimum of a one parameter function using a quadratic approximation algorithm. This algorithm does not use derivative information.

INPUT: ax, bx, cx a bracketed minimum satisfying conditions 1 and 2. 1) ax < bx < cx. 2) f(bx) < f(ax) and f(bx) < f(cx). farg pointer passed to function f() f evaluation function with prototype int f(void* farg,double t,double* ft) f(farg,t,&ft) should compute ft = value of function at t -1: failure 0: success 1: |f(x)| is small enough - will return *t_addr = x and the return code 1. desired_min - once a function value this small is found, stop. stop_tol - once it is determined that a min exists in an interval of this size, stop max_it ( >= 2) maximum number of iterations to permit (when in doubt use 100)

OUTPUT: *t_addr abcissa of a local minimum between ax and cx. ON_SimpleQuadraticMinimize() 0: successful 1: The search for a minimum was stopped because the function f() returned a 1 indicating that the current value of t was small enough. 2: After max_iteration_cnt iterations the tolerance restrictions where not satisfied. Try increasing max_it, or use the value of (*t_addr) with extreme caution. -1: failure

◆ ON_Solve2x2()

ON_DECL int ON_Solve2x2 ( double  ,
double  ,
double  ,
double  ,
double  ,
double  ,
double *  ,
double *  ,
double *   
)

returns rank - if rank != 2, system is under determined If rank = 2, then solution to

     a00*x0 + a01*x1 = b0, 
     a10*x0 + a11*x1 = b1 

is returned

◆ ON_Solve3x2()

ON_DECL int ON_Solve3x2 ( const double  [3],
const double  [3],
double  ,
double  ,
double  ,
double *  ,
double *  ,
double *  ,
double *   
)

Description: Solves a system of 3 linear equations and 2 unknowns.

   x*col0[0] + y*col1[0] = d0
   x*col0[1] + y*col1[1] = d0
   x*col0[2] + y*col1[2] = d0

Parameters: col0 - [in] coefficients for "x" unknown col1 - [in] coefficients for "y" unknown d0 - [in] constants d1 - [in] d2 - [in] x - [out] y - [out] error - [out] pivot_ratio - [out]

Returns: rank of the system.
If rank != 2, system is under determined If rank = 2, then the solution is

  (*x)*[col0] + (*y)*[col1]
  + (*error)*((col0 X col1)/|col0 X col1|)
  = (d0,d1,d2). 

◆ ON_Solve3x3()

ON_DECL int ON_Solve3x3 ( const double  row0[3],
const double  row1[3],
const double  row2[3],
double  d0,
double  d1,
double  d2,
double *  x_addr,
double *  y_addr,
double *  z_addr,
double *  pivot_ratio 
)

Description: Use Gauss-Jordan elimination with full pivoting to solve a system of 3 linear equations and 3 unknowns(x,y,z)

  x*row0[0] + y*row0[1] + z*row0[2] = d0
  x*row1[0] + y*row1[1] + z*row1[2] = d1
  x*row2[0] + y*row2[1] + z*row2[2] = d2

Parameters: row0 - [in] first row of 3x3 matrix row1 - [in] second row of 3x3 matrix row2 - [in] third row of 3x3 matrix d0 - [in] d1 - [in] d2 - [in] (d0,d1,d2) right hand column of system x_addr - [in] first unknown y_addr - [in] second unknown z_addr - [in] third unknown pivot_ratio - [out] if not nullptr, the pivot ration is returned here. If the pivot ratio is "small", then the matrix may be singular or ill conditioned. You should test the results before you use them. "Small" depends on the precision of the input coefficients and the use of the solution. If you can't figure out what "small" means in your case, then you must check the solution before you use it.

Returns: The rank of the 3x3 matrix (0,1,2, or 3) If ON_Solve3x3() is successful (returns 3), then the solution is returned in (*x_addr, *y_addr, *z_addr) and *pivot_ratio = min(|pivots|)/max(|pivots|). If the return code is < 3, then (0,0,0) is returned as the "solution".

See Also: ON_Solve2x2 ON_Solve3x2 ON_Solve4x4

◆ ON_Solve4x4()

ON_DECL int ON_Solve4x4 ( const double  row0[4],
const double  row1[4],
const double  row2[4],
const double  row3[4],
double  d0,
double  d1,
double  d2,
double  d3,
double *  x_addr,
double *  y_addr,
double *  z_addr,
double *  w_addr,
double *  pivot_ratio 
)

Description: Use Gauss-Jordan elimination with full pivoting to solve a system of 4 linear equations and 4 unknowns(x,y,z,w)

  x*row0[0] + y*row0[1] + z*row0[2] + w*row0[3] = d0
  x*row1[0] + y*row1[1] + z*row1[2] + w*row1[3] = d1
  x*row2[0] + y*row2[1] + z*row2[2] + w*row2[3] = d2
  x*row3[0] + y*row3[1] + z*row3[2] + w*row3[2] = d3

Parameters: row0 - [in] first row of 4x4 matrix row1 - [in] second row of 4x4 matrix row2 - [in] third row of 4x4 matrix row3 - [in] forth row of 4x4 matrix d0 - [in] d1 - [in] d2 - [in] d3 - [in] (d0,d1,d2,d3) right hand column of system x_addr - [in] first unknown y_addr - [in] second unknown z_addr - [in] third unknown w_addr - [in] forth unknown pivot_ratio - [out] if not nullptr, the pivot ration is returned here. If the pivot ratio is "small", then the matrix may be singular or ill conditioned. You should test the results before you use them. "Small" depends on the precision of the input coefficients and the use of the solution. If you can't figure out what "small" means in your case, then you must check the solution before you use it.

Returns: The rank of the 4x4 matrix (0,1,2,3, or 4) If ON_Solve4x4() is successful (returns 4), then the solution is returned in (*x_addr, *y_addr, *z_addr, *w_addr) and *pivot_ratio = min(|pivots|)/max(|pivots|). If the return code is < 4, then, it a solution exists, on is returned. However YOU MUST CHECK THE SOLUTION IF THE RETURN CODE IS < 4.

See Also: ON_Solve2x2 ON_Solve3x2 ON_Solve3x3

◆ ON_SolveCubicEquation()

ON_DECL int ON_SolveCubicEquation ( double  a,
double  b,
double  c,
double  d,
double *  r1,
double *  r2,
double *  r3 
)

Description: Solve the cubic equation a*X^3 + b*X^2 + c*X + d = 0. Inputs: a,b,c,d, polynomial coefficients ( if a==b==c== 0) then failure is returned Returns: number of real roots stored with multiplicity. specifically -1: failure (a == b == c== 0.0 case) 0: no real roots ( a==0 and b!=0) two complex conjugate roots (r1 +/- (r2)*sqrt(-1)) 1: one real root (r1). Either ( a==b==0.0) or else( a!=0) and two complex conjugate roots (r2 +/- (r3)*sqrt(-1)) 2: two real roots (a==0.0, b!=0.0) *r1 <= *r2 3: three real roots (a!=0.0) *r1 <= *r2 <= *r3

◆ ON_SolveNxN()

ON_DECL double ON_SolveNxN ( bool  bFullPivot,
bool  bNormalize,
int  n,
double *  M[],
double  B[],
double  X[] 
)

Description: Use Gauss-Jordan elimination to find a numerical solution to M*X = B where M is a n x n matrix, B is a known n-dimensional vector and X is an unknown. Parameters: bFullPivot - [in] if true, full pivoting is used, otherwise partial pivoting is used. In rare cases full pivoting can produce a more accurate answer and never produces a less accurate answer. However full pivoting is slower. If speed is an issue, then experiment with bFullPivot=false and see if it makes a difference. Otherwise, set it to true. bNormalize - [in] If bNormalize is true, then the rows of the matrix are scaled so the sum of their squares is one. This doesn't make the solution more accurate but in some cases it makes the pivot ratio more meaningful. Set bNormalize to false unless you have a reason for setting it to true. n - [in] size of the matrix and vectors. M - [in] n x n matrix. The values in M are changed as the solution is calculated. If you need to preserve M for future use, pass in a copy. B - [in] n-dimensional vector. The values in B are changed as the solution is calculated. If you need to preserve B for future use, pass in a copy. X - [out] solution to M*X = B. Returns: If the returned value is <= 0.0, the input matrix has rank < n and no solution is returned in X. If the returned value is > 0.0, then a solution is returned in X and the returned value is the ratio (minimum pivot)/(maximum pivot). This value is called the pivot ratio and will be denoted "pr" the discussion below. If pr <= 1e-15, then M was nearly degenerate and the solution should be used with caution. If an accurate solution is critical, then check the solution anytime pr <= 1e-10 In general, the difference between M*X and B will be reasonably small. However, when the pr is small there tend to be vector E, substantially different from zero, such that M*(X+E) - B is also reasonably small. See Also: ON_Solve2x2 ON_Solve3x3 ON_Solve4x4 ON_Solve3x2

◆ ON_SolveQuadraticEquation()

ON_DECL int ON_SolveQuadraticEquation ( double  ,
double  ,
double  ,
double *  ,
double *   
)

◆ ON_SolveSVD()

ON_DECL bool ON_SolveSVD ( int  row_count,
int  col_count,
double const *const *  U,
const double *  invW,
double const *const *  V,
const double *  B,
double *&  X 
)

Description: Solve a linear system of equations using the singular value decomposition. Parameters: row_count - [in] number of rows in matrix U col_count - [in] number of columns in matrix U U - [in] row_count X col_count matrix. See the remarks section for the definition of U. invW - [in] inverted DVD diagonal. See the remarks section for the definition of invW. V - [in] col_count X col_count matrix. See the remarks section for the definition of V. B - [in] An array of row_count values. X - [out] The solution array of col_count values is returned here. If the input value of X is not null, it must point to an array of col_count doubles. If the input value of X is null, heap storage will be allocated using onmalloc() and the calling function must call onfree(X). Remarks: If A*X = B is an m X n system of equations (m = row_count, n = col_count) and A = U*Diag(W)*Transpose(V) is the singular value decomposition of A, then a solution is X = V*Diag(1/W)*Transpose(U). Example:

      int m = row_count;
      int n = col_count;
      ON_Matrix A(m,n);
      for (i = 0; i < m; i++ ) for ( j = 0; j < n; j++ )
      {
        A[i][j] = ...;
      }
      ON_SimpleArray<double> B(m);
      for (i = 0; i < m; i++ )
      {
        B[i] = ...;
      }

      ON_SimpleArray<double> X; ///< solution returned here.
      {
        double** U = 0;
        double* W = 0;
        double** V = 0;
        if ( ON_GetMatrixSVD(m,n,A.m,U,W,V) )
        {
          double* invW = 0;
          int rankW = ON_InvertSVDW(n,W,W); ///< save invW into W
          X.Reserve(n);
          if ( ON_SolveSVD(m,n,U,W,V,B,X.Array()) )
            X.SetCount(n);
        }
        onfree(U); ///< U allocated in ON_GetMatrixSVD()
        onfree(W); ///< W allocated in ON_GetMatrixSVD()
        onfree(V); ///< V allocated in ON_GetMatrixSVD()
      }

      if ( n == X.Count() )
      {
        ... use solution
      }  

Returns: True if input is valid and X[] was calculated. False if input is not valid.

◆ ON_SolveTriDiagonal()

ON_DECL int ON_SolveTriDiagonal ( int  ,
int  ,
double *  ,
const double *  ,
double *  ,
const double *  ,
double *   
)

Returns: 0: success <0: failure

◆ ON_Sort() [1/4]

ON_DECL void ON_Sort ( ON::sort_algorithm  method,
int *  index,
const void *  base,
size_t  count,
size_t  sizeof_element,
int(*)(const void *, const void *)  compare 
)

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. Description: Sort an index array. Parameters method - [in] ON::sort_algorithm::quick_sort (best in general) or ON::sort_algorithm::heap_sort. Use ON::sort_algorithm::heap_sort only after doing meaningful performance testing using optimized release builds that demonstrate ON::sort_algorithm::heap_sort is significantly better. index - [out] Pass in an array of count integers. The returned index[] is a permutation of (0,1,..,count-1) such that compare(B[index[i]],B[index[i+1]) <= 0 where B[i] = base + i*sizeof_element base - [in] array of count elements count - [in] number of elements in the index[] and base[] arrays sizeof_element - [in] number of bytes between consecutive elements in the base[] array. compare - [in] Comparison function a la qsort().

Parameters
compareint compar(const void*,const void*)

◆ ON_Sort() [2/4]

ON_DECL void ON_Sort ( ON::sort_algorithm  method,
int *  index,
const void *  base,
size_t  count,
size_t  sizeof_element,
int(*)(const void *, const void *, void *)  compare,
void *  context 
)

Description: Sort an index array using a compare function that takes an additional pointer that can be used to pass extra information. Parameters method - [in] ON::sort_algorithm::quick_sort (best in general) or ON::sort_algorithm::heap_sort. Use ON::sort_algorithm::heap_sort only after doing meaningful performance testing using optimized release builds that demonstrate ON::sort_algorithm::heap_sort is significantly better. index - [out] Pass in an array of count integers. The returned index[] is a permutation of (0,1,..,count-1) such that compare(B[index[i]],B[index[i+1]) <= 0 where B[i] = base + i*sizeof_element base - [in] array of count elements count - [in] number of elements in the index[] and base[] arrays sizeof_element - [in] number of bytes between consecutive elements in the base[] array. compare - [in] Comparison function a la qsort(). The context parameter is pass as the third argument. context - [in] pointer passed as the third argument to compare().

Parameters
compareint compar(const void* a,const void* b, void* ptr)

◆ ON_Sort() [3/4]

ON_DECL void ON_Sort ( ON::sort_algorithm  method,
unsigned int *  index,
const void *  base,
size_t  count,
size_t  sizeof_element,
int(*)(const void *, const void *)  compare 
)
Parameters
compareint compar(const void*,const void*)

◆ ON_Sort() [4/4]

ON_DECL void ON_Sort ( ON::sort_algorithm  method,
unsigned int *  index,
const void *  base,
size_t  count,
size_t  sizeof_element,
int(*)(const void *, const void *, void *)  compare,
void *  context 
)
Parameters
compareint compar(const void* a,const void* b, void* ptr)

◆ ON_SortCurves() [1/3]

ON_DECL bool ON_SortCurves ( const ON_SimpleArray< const ON_Curve * > &  curves,
ON_SimpleArray< int > &  index,
ON_SimpleArray< bool > &  bReverse 
)

Description: Sort a list of curves so end of a curve matches the start of the next curve. Parameters: curve - [in] array of curves to sort. The curves themselves are not modified. index - [out] The input index[] is an array of curve_count unused integers. The returned index[] is a permutation of {0,1,...,curve_count-1} so that the list of curves is in end-to-end order. bReverse - [out] The input bReverse[] is an array of curve_count unused bools. If the returned value of bReverse[j] is true, then curve[index[j]] needs to be reversed. Returns: True if successful, false if not.

◆ ON_SortCurves() [2/3]

ON_DECL bool ON_SortCurves ( const ON_SimpleArray< ON_Curve * > &  curves,
ON_SimpleArray< int > &  index,
ON_SimpleArray< bool > &  bReverse 
)

Description: Sort a list of curves so end of a curve matches the start of the next curve. Parameters: curve_count - [in] number of curves curve - [in] array of curve pointers index - [out] The input index[] is an array of curve_count unused integers. The returned index[] is a permutation of {0,1,...,curve_count-1} so that the list of curves is in end-to-end order. bReverse - [out] The input bReverse[] is an array of curve_count unused bools. If the returned value of bReverse[j] is true, then curve[index[j]] needs to be reversed. Returns: True if successful, false if not.

◆ ON_SortCurves() [3/3]

ON_DECL bool ON_SortCurves ( int  curve_count,
const ON_Curve *const *  curve_list,
int *  index,
bool *  bReverse 
)

Description: Sort a list of open curves so end of a curve matches the start of the next curve. Parameters: curve_count - [in] number of curves curve_list - [in] array of curve pointers index - [out] The input index[] is an array of curve_count unused integers. The returned index[] is a permutation of {0,1,...,curve_count-1} so that the list of curves is in end-to-end order. bReverse - [out] The input bReverse[] is an array of curve_count unused bools. If the returned value of bReverse[j] is true, then curve_list[index[j]] needs to be reversed. Returns: True if successful, false if not.

◆ ON_SortDoubleArray()

ON_DECL void ON_SortDoubleArray ( ON::sort_algorithm  sort_algorithm,
double *  a,
size_t  nel 
)

Description: Sort an array of doubles in increasing order in place. Parameters: sort_algorithm - [in] ON::sort_algorithm::quick_sort (best in general) or ON::sort_algorithm::heap_sort Use ON::sort_algorithm::heap_sort only if you have done extensive testing with optimized release builds and are confident heap sort is significantly faster in your case. a - [in / out] The values in a[] are sorted so that a[i] <= a[i+1]. a[] cannot contain NaNs. nel - [in] length of array a[]

◆ ON_SortDoubleArrayDecreasing()

ON_DECL void ON_SortDoubleArrayDecreasing ( double *  a,
size_t  nel 
)

Description: Sort an array of doubles in increasing order in place. Parameters: a - [in / out] The values in a[] are sorted so that a[i] >= a[i+1]. a[] cannot contain NaNs. nel - [in] length of array a[]

◆ ON_SortDoubleArrayIncreasing()

ON_DECL void ON_SortDoubleArrayIncreasing ( double *  a,
size_t  nel 
)

Description: Sort an array of doubles in increasing order in place. Parameters: a - [in / out] The values in a[] are sorted so that a[i] <= a[i+1]. a[] cannot contain NaNs. nel - [in] length of array a[]

◆ ON_SortIntArray()

ON_DECL void ON_SortIntArray ( ON::sort_algorithm  sort_algorithm,
int *  a,
size_t  nel 
)

Description: Sort an array of ints in place. Parameters: sort_algorithm - [in] ON::sort_algorithm::quick_sort (best in general) or ON::sort_algorithm::heap_sort Use ON::sort_algorithm::heap_sort only if you have done extensive testing with optimized release builds and are confident heap sort is significantly faster in your case. a - [in / out] The values in a[] are sorted so that a[i] <= a[i+1]. nel - [in] length of array a[]

◆ ON_SortLines() [1/2]

ON_DECL bool ON_SortLines ( const ON_SimpleArray< ON_Line > &  line_list,
int *  index,
bool *  bReverse 
)

Description: Sort a list of lines so they are geometrically continuous. Parameters: line_list - [in] array of lines index - [out] The input index[] is an array of line_count unused integers. The returned index[] is a permutation of {0,1,...,line_count-1} so that the list of lines is in end-to-end order. bReverse - [out] The input bReverse[] is an array of line_count unused bools. If the returned value of bReverse[j] is true, then line_list[index[j]] needs to be reversed. Returns: True if successful, false if not.

◆ ON_SortLines() [2/2]

ON_DECL bool ON_SortLines ( int  line_count,
const ON_Line line_list,
int *  index,
bool *  bReverse 
)

Description: Sort a list of lines so they are geometrically continuous. Parameters: line_count - [in] number of lines line_list - [in] array of lines index - [out] The input index[] is an array of line_count unused integers. The returned index[] is a permutation of {0,1,...,line_count-1} so that the list of lines is in end-to-end order. bReverse - [out] The input bReverse[] is an array of line_count unused bools. If the returned value of bReverse[j] is true, then line_list[index[j]] needs to be reversed. Returns: True if successful, false if not.

◆ ON_SortStringArray()

ON_DECL void ON_SortStringArray ( ON::sort_algorithm  sort_algorithm,
char **  a,
size_t  nel 
)

Description: Sort an array of unsigned null terminated char strings in place. Parameters: sort_algorithm - [in] ON::sort_algorithm::quick_sort (best in general) or ON::sort_algorithm::heap_sort Use ON::sort_algorithm::heap_sort only if you have done extensive testing with optimized release builds and are confident heap sort is significantly faster in your case. a - [in / out] The values in a[] are sorted so that strcmp(a[i],a[i+1]) <= 0. nel - [in] length of array a[]

◆ ON_SortUINT64Array()

ON_DECL void ON_SortUINT64Array ( ON::sort_algorithm  sort_algorithm,
ON__UINT64 a,
size_t  nel 
)

Description: Sort an array of unsigned 64-bit ints in place. Parameters: sort_algorithm - [in] ON::sort_algorithm::quick_sort (best in general) or ON::sort_algorithm::heap_sort Use ON::sort_algorithm::heap_sort only if you have done extensive testing with optimized release builds and are confident heap sort is significantly faster in your case. a - [in / out] The values in a[] are sorted so that a[i] <= a[i+1]. nel - [in] length of array a[]

◆ ON_SortUnsignedIntArray()

ON_DECL void ON_SortUnsignedIntArray ( ON::sort_algorithm  sort_algorithm,
unsigned int *  a,
size_t  nel 
)

Description: Sort an array of unsigned ints in place. Parameters: sort_algorithm - [in] ON::sort_algorithm::quick_sort (best in general) or ON::sort_algorithm::heap_sort Use ON::sort_algorithm::heap_sort only if you have done extensive testing with optimized release builds and are confident heap sort is significantly faster in your case. a - [in / out] The values in a[] are sorted so that a[i] <= a[i+1]. nel - [in] length of array a[]

◆ ON_SpanTolerance()

ON_DECL double ON_SpanTolerance ( int  ,
int  ,
const double *  ,
int   
)

◆ on_splitpath()

ON_DECL void on_splitpath ( const char *  path,
const char **  volume,
const char **  dir,
const char **  fname,
const char **  ext 
)

Description: Find the locations in a path the specify the drive, directory, file name and file extension. Parameters: path - [in] UTF-8 encoded string that is a legitimate path to a file. volume - [out] (pass null if you don't need the volume) If volume is not null and the path parameter begins with a Windows volum specification, the value of *volume will equal the input value of path. Otherwise *volume will be nullptr.
A Windows volume specification can be either a single A-Z or a-z letter followed by a colon ( C: ) or a Windows UNC host name (\MY_SERVER). dir - [out] (pass null if you don't need the directory) If dir is not null and the path parameter contains a directory specification, then the returned value of *dir will point to the character in path where the directory specification begins. fname - [out] (pass null if you don't need the file name) If fname is not null and the path parameter contains a file name specification, then the returned value of *fname will point to the character in path where the file name specification begins. ext - [out] (pass null if you don't need the extension) If ext is not null and the path parameter contains a file extension specification, then the returned value of ext will point to the '.' character in path where the file extension specification begins. Remarks: This function will treat a front slash ( / ) and a back slash ( \ ) as directory separators. Because this function parses file names store in .3dm files and the .3dm file may have been written on a Windows computer and then read on a another computer, it looks for a volume specification even when the operating system is not Windows. This function will not return an directory that does not end with a trailing slash. This function will not return an empty filename and a non-empty extension. This function parses the path string according to these rules. It does not check the actual file system to see if the answer is correct. See Also: ON_String::SplitPath

◆ ON_SquishBack2dMarks()

ON_DECL bool ON_SquishBack2dMarks ( const ON_Geometry squished_geometry,
const ON_SimpleArray< const ON_Geometry * > *  marks,
ON_SimpleArray< ON_Geometry * > *  squished_marks 
)

Description: Maps geometry from a squished geometry back to the original mesh or surface. Parameters: squished_geometry - [in] the geometry resulting from a call to SquishMesh or SquishSurface 3d surface to flatten. squish_parameters - [in] parameters used to calculate the 2d result. squished_brep - [in] optional parameter that can be used to specify where the 2d result should be saved. marks - [in] a list of ON_Point, ON_TextDot, ON_PointCloud, and ON_Curve objects to be squished squishedback_marks - [out] The results of mapping the marks back to the 3d unsquished surface. A failure produces a null entry in the array. It is the responsibility of the caller to delete the geometry in squished_marks Returns: If successful, a flattened brep. Null if not successful.

◆ ON_SquishMesh() [1/2]

ON_DECL ON_Mesh* ON_SquishMesh ( const ON_Mesh mesh,
const ON_SquishParameters squish_parameters,
const ON_SquishConstraints squish_constraints,
const ON_SimpleArray< const ON_Geometry * > *  marks,
ON_SimpleArray< ON_Geometry * > *  squished_marks,
ON_Mesh squished_mesh 
)

Description: Use to flatten a mesh. Parameters: mesh - [in] 3d mesh to flatten. squish_parameters - [in] parameters used to calculate the 2d result. squish_constraints - [in] UNUSED AT THIS TIME squished_mesh - [in] optional parameter that can be used to specify where the 2d result should be saved. marks - [in] a list of ON_Point, ON_TextDot, ON_PointCloud, and ON_Curve objects to be squished squished_marks - [out] The results of ma;pping the marks back to the 3d unsquished surface. A failure produces a null entry in the array. It is the responsibility of the caller to delete the geometry in squished_marks squished_mesh - [in] optional parameter that can be used to specify where the 2d result should be saved. Returns: If successful, a flattened mesh. Null if not successful.

◆ ON_SquishMesh() [2/2]

ON_DECL ON_Mesh* ON_SquishMesh ( const ON_Mesh mesh,
const ON_SquishParameters squish_parameters,
const ON_SquishConstraints squish_constraints,
ON_Mesh squished_mesh 
)

Description: Use to flatten a mesh. Parameters: mesh - [in] 3d mesh to flatten. squish_parameters - [in] parameters used to calculate the 2d result. squish_constraints - [in] UNUSED AT THIS TIME squished_mesh - [in] optional parameter that can be used to specify where the 2d result should be saved. Returns: If successful, a flattened mesh. Null if not successful.

◆ ON_SquishSurface() [1/2]

ON_DECL ON_Brep* ON_SquishSurface ( const ON_Surface surface,
const ON_SquishParameters squish_parameters,
const ON_SimpleArray< const ON_Geometry * > *  marks,
ON_SimpleArray< ON_Geometry * > *  squished_marks,
ON_Brep squished_brep 
)

Description: Use to flatten a mesh. Parameters: surface - [in] 3d surface to flatten. squish_parameters - [in] parameters used to calculate the 2d result. squished_brep - [in] optional parameter that can be used to specify where the 2d result should be saved. marks - [in] a list of ON_Point, ON_TextDot, ON_PointCloud, and ON_Curve objects to be squished squished_marks - [out] The results of ma;pping the marks back to the 3d unsquished surface. A failure produces a null entry in the array. It is the responsibility of the caller to delete the geometry in squished_marks Returns: If successful, a flattened brep. Null if not successful.

◆ ON_SquishSurface() [2/2]

ON_DECL ON_Brep* ON_SquishSurface ( const ON_Surface surface,
const ON_SquishParameters squish_parameters,
ON_Brep squished_brep 
)

Description: Use to flatten a mesh. Parameters: surface - [in] 3d surface to flatten. squish_parameters - [in] parameters used to calculate the 2d result. squished_brep - [in] optional parameter that can be used to specify where the 2d result should be saved. Returns: If successful, a flattened brep. Null if not successful.

◆ on_srand()

void on_srand ( ON__UINT32  s)

Description: Seed the random number generator used by on_rand(). Parameters: s - [in] Remarks: on_srand() is not thread safe. It used static global memory that is modified by on_srand() and on_rand().

◆ ON_STATIC_ASSERT() [1/8]

ON_STATIC_ASSERT ( sizeof(ON__INT16 = =2)

◆ ON_STATIC_ASSERT() [2/8]

ON_STATIC_ASSERT ( sizeof(ON__INT32 = =4)

◆ ON_STATIC_ASSERT() [3/8]

ON_STATIC_ASSERT ( sizeof(ON__INT64 = =8)

◆ ON_STATIC_ASSERT() [4/8]

ON_STATIC_ASSERT ( sizeof(ON__INT8 = =1)

◆ ON_STATIC_ASSERT() [5/8]

ON_STATIC_ASSERT ( sizeof(ON__UINT16 = =2)

◆ ON_STATIC_ASSERT() [6/8]

ON_STATIC_ASSERT ( sizeof(ON__UINT32 = =4)

◆ ON_STATIC_ASSERT() [7/8]

ON_STATIC_ASSERT ( sizeof(ON__UINT64 = =8)

◆ ON_STATIC_ASSERT() [8/8]

ON_STATIC_ASSERT ( sizeof(ON__UINT8 = =1)

◆ ON_STATIC_ASSERT_MSG() [1/3]

ON_STATIC_ASSERT_MSG ( ON_SIZEOF_POINTER  = =sizeof(void *),
"ON_SIZEOF_POINTER must be equal to sizeof(void*)"   
)

◆ ON_STATIC_ASSERT_MSG() [2/3]

ON_STATIC_ASSERT_MSG ( sizeof(ON__INT_PTR)  = =sizeof(void *))

◆ ON_STATIC_ASSERT_MSG() [3/3]

ON_STATIC_ASSERT_MSG ( sizeof(ON__UINT_PTR)  = =sizeof(void *))

◆ ON_std_string_format()

ON_DECL std::string ON_VARGS_FUNC_CDECL ON_std_string_format ( const char *  format,
  ... 
)

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. When the predecessor of opennurbs was released in 1995, there was no robust corss platform support for dynamic string classes. In order to provide robust dynamic string support, openNURBS had to implement ON_String and ON_wString.

It's now 2013 and current C++ compilers from the GNU Project (gcc 4.7), Microsoft (Visual C++ 11 (2012)), Google (Android NDK r8e) and Apple (LLVM 4.2) provide reasonable support for much of the C++11 standard and provide working implementations std::basic_string, std:string and std::wstring classes.

Over time, opennurbs will transition from using ON_String and ON_wString to using std::string and std::wstring.

The tools in the opennurbs_std_string*.* files provide support for string formatting and UTF conversion that are not available from the standard C++ string classes.

These implementations assume the compiler has solid support for std:basic_string, std::string, std::wstring, std::u16string, std::u32string and for using rvalue references to efficient return dynamic strings.

◆ ON_std_wstring_format()

ON_DECL std::wstring ON_VARGS_FUNC_CDECL ON_std_wstring_format ( const wchar_t *  format,
  ... 
)

◆ on_stricmp()

ON_DECL int on_stricmp ( const char *  ,
const char *   
)

on_stricmp() is a wrapper for case insensitive string compare and calls one of _stricmp(), stricmp(), or strcasecmp() depending on OS.

◆ ON_StringCompareOrdinalUTF16()

ON_DECL int ON_StringCompareOrdinalUTF16 ( const ON__UINT16 string1,
int  element_count1,
const ON__UINT16 string2,
int  element_count2,
bool  bOrdinalIgnoreCase 
)

Description: Compare of UTF-16 encoded ON__UINT16 strings element by element. Parameters: string1 - [in] element_count1 - [in] If element_count1 < 0, then string1 must be null terminated and element_count1 will be set to the length of string1. If element_count1 >= 0, then that number of elements are compared in string1[]. string2 - [in] element_count2 - [in] If element_count2 < 0, then string2 must be null terminated and element_count2 will be set to the length of string2. If element_count2 >= 0, then that number of elements are compared in string2[]. bOrdinalIgnoreCase - [in] If bOrdinalIgnoreCase, then letters with a capital and small codepoint value <= 127 are compared using the smallest codepoint value. This amounts to converting the letters a-z to A-Z before comparing. Returns: 0: the strings are the same <0: string1 < string2 >0: string1 > string2 Remarks: 1) If linguistic issues are important, then this function is not appropriate. 2) nullptr values are handled. 3) There are lists of Unicode code point values such that the results of ON_StringCompareOrdinalUTF8, ON_StringCompareOrdinalUTF16 and ON_StringCompareOrdinalUTF32 are different when applied to UTF-8, UTF-16 and UTF-32 encodings. 4) This function does not compare Unicode code point values if the strings have any surrogate pairs.

◆ ON_StringCompareOrdinalUTF32()

ON_DECL int ON_StringCompareOrdinalUTF32 ( const ON__UINT32 string1,
int  element_count1,
const ON__UINT32 string2,
int  element_count2,
bool  bOrdinalIgnoreCase 
)

Description: Compare of UTF-32 encoded ON__UINT32 strings element by element. Parameters: string1 - [in] element_count1 - [in] If element_count1 < 0, then string1 must be null terminated and element_count1 will be set to the length of string1. If element_count1 >= 0, then that number of elements are compared in string1[]. string2 - [in] element_count2 - [in] If element_count2 < 0, then string2 must be null terminated and element_count2 will be set to the length of string2. If element_count2 >= 0, then that number of elements are compared in string2[]. bOrdinalIgnoreCase - [in] If bOrdinalIgnoreCase, then letters with a capital and small codepoint value <= 127 are compared using the smallest codepoint value. This amounts to converting the letters a-z to A-Z before comparing. Returns: 0: the strings are the same <0: string1 < string2 >0: string1 > string2 Remarks: 1) If linguistic issues are important, then this function is not appropriate. 2) nullptr values are handled. 3) There are lists of Unicode code point values such that the results of ON_StringCompareOrdinalUTF8, ON_StringCompareOrdinalUTF16 and ON_StringCompareOrdinalUTF32 are different when applied to UTF-8, UTF-16 and UTF-32 encodings.

◆ ON_StringCompareOrdinalUTF8()

ON_DECL int ON_StringCompareOrdinalUTF8 ( const char *  string1,
int  element_count1,
const char *  string2,
int  element_count2,
bool  bOrdinalIgnoreCase 
)

Description: Compare of UTF-8 encoded char strings element by element. Parameters: string1 - [in] element_count1 - [in] If element_count1 < 0, then string1 must be null terminated and element_count1 will be set to the length of string1. If element_count1 >= 0, then that number of elements are compared in string1[]. string2 - [in] element_count2 - [in] If element_count2 < 0, then string2 must be null terminated and element_count2 will be set to the length of string2. If element_count2 >= 0, then that number of elements are compared in string2[]. bOrdinalIgnoreCase - [in] If bOrdinalIgnoreCase, then letters with a capital and small codepoint value <= 127 are compared using the smallest codepoint value. This amounts to converting the letters a-z to A-Z before comparing. Returns: 0: the strings are the same <0: string1 < string2 >0: string1 > string2 Remarks: 1) If linguistic issues are important, then this function is not appropriate. 2) nullptr values are handled. 3) There are lists of Unicode code point values such that the results of ON_StringCompareOrdinalUTF8, ON_StringCompareOrdinalUTF16 and ON_StringCompareOrdinalUTF32 are different when applied to UTF-8, UTF-16 and UTF-32 encodings. 4) This function does not compare Unicode code point values the strings have eny elements with values > 127.

◆ ON_StringCompareOrdinalWideChar()

ON_DECL int ON_StringCompareOrdinalWideChar ( const wchar_t *  string1,
int  element_count1,
const wchar_t *  string2,
int  element_count2,
bool  bOrdinalIgnoreCase 
)

Description: Compare wchar_t strings element by element. Parameters: string1 - [in] element_count1 - [in] If element_count1 < 0, then string1 must be null terminated and element_count1 will be set to the length of string1. If element_count1 >= 0, then that number of elements are compared in string1[]. string2 - [in] element_count2 - [in] If element_count2 < 0, then string2 must be null terminated and element_count2 will be set to the length of string2. If element_count2 >= 0, then that number of elements are compared in string2[]. bOrdinalIgnoreCase - [in] If bOrdinalIgnoreCase, then letters with a capital and small codepoint value <= 127 are compared using the smallest codepoint value. This amounts to converting the letters a-z to A-Z before comparing. Returns: 0: the strings are the same <0: string1 < string2 >0: string1 > string2 Remarks: 1) If linguistic issues are important, then this function is not appropriate. 2) nullptr values are handled. 3) There are lists of Unicode code point values such that the results of ON_StringCompareOrdinalUTF8, ON_StringCompareOrdinalUTF16 and ON_StringCompareOrdinalUTF32 are different when applied to UTF-8, UTF-16 and UTF-32 encodings. 4) This function assumes the sizeof(wchar_t) is 1, 2 or 4, that 1 bytes wchar_t strings are UTF-8 encoded, 2 byte wchar_t strings are UTF-16 encoded and 4 bytes wchar_t strings are UTF-32 encoded.

◆ ON_StringContentHash() [1/2]

const ON_SHA1_Hash ON_StringContentHash ( const char *  sUTF8,
int  element_count,
ON_StringMapOrdinalType  mapping 
)

Parameters: sUTF8 - [in] pointer to a UTF-8 encoded string. element_count - [in] number of char elements to parse. if element_count < 0, then sUTF8 must be null terminated mapping - [in] mapping to apply to unicode code points Returns: A SHA-1 value of the sequence of unicode code points. This value is independent of platform endian or UTF encoding.

◆ ON_StringContentHash() [2/2]

const ON_SHA1_Hash ON_StringContentHash ( const wchar_t *  sWideString,
int  element_count,
ON_StringMapOrdinalType  mapping 
)

Parameters: sUTF8 - [in] pointer to a UTF-8 encoded string. element_count - [in] number of char elements to parse. if element_count < 0, then sUTF8 must be null terminated mapping - [in] mapping to apply to unicode code points Returns: A SHA-1 value of the sequence of unicode code points. This value is independent of platform endian or UTF encoding.

◆ ON_StringLengthUTF16() [1/2]

ON_DECL int ON_StringLengthUTF16 ( const ON__UINT16 string)

Description: Get the length of a UTF-16 encoded ON__UINT16 string. Parameters: string - [in] null terminated ON__UINT16 string. Returns: Number of nonzero ON__UINT16 elements before the null terminator. If string is nullptr, then 0 is returned.

◆ ON_StringLengthUTF16() [2/2]

ON_DECL int ON_StringLengthUTF16 ( const ON__UINT16 string,
size_t  string_capacity 
)

Description: Get the length of a UTF-16 encoded ON__UINT16 string. Parameters: string - [in] null terminated ON__UINT16 string. string_capacity - [in] maximum number of string[] elements to test. Returns: If string is nullptr or string_capacity <=0, then 0 is returned. If a null terminator is not found, then string_capacity is returned. Otherwise, the number of nonzero char elements before the null terminator is returned.

◆ ON_StringLengthUTF32() [1/2]

ON_DECL int ON_StringLengthUTF32 ( const ON__UINT32 string)

Description: Get the length of a UTF-32 encoded ON__UINT32 string. Parameters: string - [in] null terminated ON__UINT32 string. Returns: Number of nonzero ON__UINT32 elements before the null terminator. If string is nullptr, then 0 is returned.

◆ ON_StringLengthUTF32() [2/2]

ON_DECL int ON_StringLengthUTF32 ( const ON__UINT32 string,
size_t  string_capacity 
)

Description: Get the length of a UTF-32 encoded ON__UINT32 string. Parameters: string - [in] null terminated ON__UINT32 string. string_capacity - [in] maximum number of string[] elements to test. Returns: If string is nullptr or string_capacity <=0, then 0 is returned. If a null terminator is not found, then string_capacity is returned. Otherwise, the number of nonzero char elements before the null terminator is returned.

◆ ON_StringLengthUTF8() [1/2]

ON_DECL int ON_StringLengthUTF8 ( const char *  string)

Description: Get the length of a UTF-8 encoded char string. Parameters: string - [in] null terminated char string. Returns: Number of nonzero char elements before the null terminator. If string is nullptr, then 0 is returned.

◆ ON_StringLengthUTF8() [2/2]

ON_DECL int ON_StringLengthUTF8 ( const char *  string,
size_t  string_capacity 
)

Description: Get the length of a UTF-8 encoded char string. Parameters: string - [in] null terminated char string. string_capacity - [in] maximum number of string[] elements to test. Returns: If string is nullptr or string_capacity <=0, then 0 is returned. If a null terminator is not found, then string_capacity is returned. Otherwise, the number of nonzero char elements before the null terminator is returned.

◆ ON_StringLengthWideChar() [1/2]

ON_DECL int ON_StringLengthWideChar ( const wchar_t *  string)

Description: Get the length of a wchar_t string. Parameters: string - [in] null terminated wchar_t string. Returns: Number of nonzero wchar_t elements before the null terminator. If string is nullptr, then 0 is returned.

◆ ON_StringLengthWideChar() [2/2]

ON_DECL int ON_StringLengthWideChar ( const wchar_t *  string,
size_t  string_capacity 
)

Description: Get the length of a wchar_t string. Parameters: string - [in] null terminated wchar_t string. string_capacity - [in] maximum number of string[] elements to test. Returns: If string is nullptr or string_capacity <=0, then 0 is returned. If a null terminator is not found, then string_capacity is returned. Otherwise, the number of nonzero char elements before the null terminator is returned.

◆ ON_StringMapOrdinalTypeFromStringMapType()

ON_DECL ON_StringMapOrdinalType ON_StringMapOrdinalTypeFromStringMapType ( ON_StringMapType  map_type)

summary> ON_ChainDirection is used to specify directions when building chains of components like edges or faces. /summary>

◆ ON_StringToBase32() [1/3]

ON_DECL int ON_StringToBase32 ( const char *  sBase32,
unsigned char *  base32_digits 
)

◆ ON_StringToBase32() [2/3]

ON_DECL int ON_StringToBase32 ( const ON_String sBase32,
ON_SimpleArray< unsigned char > &  base32_digits 
)

◆ ON_StringToBase32() [3/3]

ON_DECL int ON_StringToBase32 ( const ON_wString sBase32,
ON_SimpleArray< unsigned char > &  base32_digits 
)

Description: Convert a null terminate string containing the 32 symbols

0 1 2 3 4 5 6 7 8 9 A B C D E F G H J K M N P Q R T U V W X Y Z

(I,L,O and S are missing) into a list of base 32 digits. Parameters: sBase32 - [in] String with base 32 digits base32_digits - [out] base32_digits[] is an array of length strlen(sBase32). The returned array, element will be in the range 0 to 31. sBase32[] must be an array of length base32_digit_count+1 or 2, whichever is greater. The string representation of the base 32 number will be put in this string. A hash mark symbol (#) is used to indicate an error in the input value. The returned string is null terminated. Returns True if the input is valid. False if the input is not valid, in which case hash marks indicate the invalid entries.

◆ on_strlwr()

ON_DECL char* on_strlwr ( char *  )

on_strlwr() calls _strlwr() or strlwr() depending on OS

◆ on_strnicmp()

ON_DECL int on_strnicmp ( const char *  s1,
const char *  s2,
int  n 
)

on_stricmp() is a wrapper for case insensitive string compare and calls one of _strnicmp() or strncasecmp() depending on OS.

◆ on_strrev()

ON_DECL char* on_strrev ( char *  )

on_strrev() calls _strrev() or strrev() depending on OS

◆ on_strupr()

ON_DECL char* on_strupr ( char *  )

on_strupr() calls _strupr() or strupr() depending on OS

◆ ON_SubDComponentLocationFromUnsigned()

ON_SubDComponentLocation ON_SubDComponentLocationFromUnsigned ( unsigned int  loc_as_unsigned)

◆ ON_SubDComponentRegionBreakpoint()

bool ON_SubDComponentRegionBreakpoint ( const class ON_SubDComponentRegion component_region)

◆ ON_SubDEndCapStyleFromUnsigned()

ON_DECL ON_SubDEndCapStyle ON_SubDEndCapStyleFromUnsigned ( unsigned int  subd_cap_style_as_unsigned)

Convert an integer value to an ON_SubDEndCapStyle enum value.

Parameters
subd_cap_style_as_unsigned

If subd_cap_style_as_unsigned is not valid, then ON_SubDEndCapStyle::Unset is returned.

Returns

◆ ON_SubDEndCapStyleToString()

const ON_DECL ON_wString ON_SubDEndCapStyleToString ( ON_SubDEndCapStyle  subd_cap_style)

Convert subd_cap_style to a string description.

Parameters
subd_cap_style
Returns

◆ ON_SubDFaceRegionBreakpoint()

bool ON_SubDFaceRegionBreakpoint ( unsigned int  level0_face_id,
const class ON_SubDComponentRegionIndex region_index 
)

◆ ON_SubDHashTypeFromUnsigned()

ON_DECL ON_SubDHashType ON_SubDHashTypeFromUnsigned ( unsigned int  subd_hash_type_as_unsigned)

◆ ON_SubDHashTypeToString()

const ON_DECL ON_wString ON_SubDHashTypeToString ( ON_SubDHashType  subd_hash_type,
bool  bVerbose 
)

◆ ON_SuperfluousKnot()

ON_DECL double ON_SuperfluousKnot ( int  order,
int  cv_count,
const double *  knot,
int   
)

◆ ON_SwapPointGridCoordinates()

ON_DECL bool ON_SwapPointGridCoordinates ( int  ,
int  ,
int  ,
int  ,
double *  ,
int  ,
int   
)

◆ ON_SwapPointListCoordinates() [1/2]

ON_DECL bool ON_SwapPointListCoordinates ( int  ,
int  ,
double *  ,
int  ,
int   
)

◆ ON_SwapPointListCoordinates() [2/2]

ON_DECL bool ON_SwapPointListCoordinates ( int  ,
int  ,
float *  ,
int  ,
int   
)

◆ ON_Sym3x3EigenSolver()

ON_DECL bool ON_Sym3x3EigenSolver ( double  A,
double  B,
double  C,
double  D,
double  E,
double  F,
double *  e1,
ON_3dVector E1,
double *  e2,
ON_3dVector E2,
double *  e3,
ON_3dVector E3 
)

Description: Find the eigen values and eigen vectors of a real symmetric 3x3 matrix

A D F D B E F E C

Parameters: A - [in] matrix entry B - [in] matrix entry C - [in] matrix entry D - [in] matrix entry E - [in] matrix entry F - [in] matrix entry e1 - [out] eigen value E1 - [out] eigen vector with eigen value e1 e2 - [out] eigen value E2 - [out] eigen vector with eigen value e2 e3 - [out] eigen value E3 - [out] eigen vector with eigen value e3 Returns: True if successful.

◆ ON_Test_MSSBCP() [1/3]

ON_DECL bool ON_Test_MSSBCP ( bool  bWindowsAPITest,
ON_TextLog text_log 
)

◆ ON_Test_MSSBCP() [2/3]

ON_DECL bool ON_Test_MSSBCP ( const ON__UINT32  code_page,
bool  bWindowsAPITest,
ON_TextLog text_log 
)

◆ ON_Test_MSSBCP() [3/3]

ON_END_EXTERNC ON_DECL ON__UINT32 ON_Test_MSSBCP ( const ON__UINT32  code_page,
const ON__UINT32  char_encoding,
bool  bWindowsAPITest,
ON_TextLog text_log 
)

◆ ON_Test_PrintPlatformMSSBCPToUnicodeTable()

ON_DECL bool ON_Test_PrintPlatformMSSBCPToUnicodeTable ( const ON__UINT32  code_page,
ON__UINT32  char_encoding0,
ON__UINT32  char_encoding1,
ON_TextLog text_log 
)

◆ ON_TestHashSpeed() [1/3]

ON_DECL void ON_TestHashSpeed ( size_t  byte_count,
bool  bTestCRC16,
bool  bTestCRC32,
bool  bTestMD5,
bool  bTestSHA1,
ON_TextLog text_log 
)

Description: Test speeds of various hash algorithms and use text_log to print the results. Parameters: byte_count - [in] Number of bytes to hash. This number is rounded up to the nearest multiple of 1024. bCRC16 - [in] True to test 16 bit CRC hashing speed. bCRC32 - [in] True to test 32 bit CRC hashing speed. bMD5 - [in] True to test MD5 hashing speed. bSHA1 - [in] True to test SHA-1 hashing speed. text_log - [in] Test results are printed using text_log.

◆ ON_TestHashSpeed() [2/3]

ON_DECL void ON_TestHashSpeed ( size_t  byte_count,
ON__UINT16 crc16,
ON__UINT32 crc32,
ON_MD5_Hash md5_hash,
ON_SHA1_Hash sha1_hash,
double  elapsed_time_in_seconds[4] 
)

Description: Test speeds of various hash algorithms. Parameters: byte_count - [in] Number of bytes to hash. This number is rounded up to the nearest multiple of 1024. crc16 - [in/out] If crc16 is not nullptr, then 16 bit CRC hashing is tested using function ON_CRC16(). crc32 - [in/out] If crc32 is not nullptr, then 32 bit CRC hashing is tested using function ON_CRC32(). md5_hash - [in/out] If md5_hash is not nullptr, then MD5 hashing is tested using class ON_MD5. sha1_hash - [in/out] If sha1_hash is not nullptr, then SHA-1 hashing is tested class ON_SHA1. elapsed_time_in_seconds - [out] elapsed_time_in_seconds[0] = 16 bit CRC hash time in seconds. elapsed_time_in_seconds[1] = 32 bit CRC hash time in seconds. elapsed_time_in_seconds[2] = MD5 hash time in seconds. elapsed_time_in_seconds[3] = SHA-1 hash time in seconds. If a hash was tested, then number of seconds it took to compute the hash is returned. Otherwise ON_DBL_QNAN is returned.

◆ ON_TestHashSpeed() [3/3]

ON_DECL void ON_TestHashSpeed ( size_t  byte_count,
ON_TextLog text_log 
)

◆ ON_TestMathFunction()

ON_DECL double ON_TestMathFunction ( int  function_index,
double  x,
double  y 
)

Description: Test math library functions. Parameters: function_index - [in] Determines which math library function is called.

     1:    z = x+y
     2:    z = x-y
     3:    z = x*y
     4:    z = x/y
     5:    z = fabs(x)
     6:    z = exp(x)
     7:    z = log(x)
     8:    z = logb(x)
     9:    z = log10(x)
    10:    z = pow(x,y)
    11:    z = sqrt(x)
    12:    z = sin(x)
    13:    z = cos(x)
    14:    z = tan(x)
    15:    z = sinh(x)
    16:    z = cosh(x)
    17:    z = tanh(x)
    18:    z = asin(x)
    19:    z = acos(x)
    20:    z = atan(x)
    21:    z = atan2(y,x)
    22:    z = fmod(x,y)
    23:    z = modf(x,&y)
    24:    z = frexp(x,&y)

double x - [in] double y - [in] Returns: Returns the "z" value listed in the function_index parameter description. Remarks: This function is used to test the results of class floating point functions. It is primarily used to see what happens when opennurbs is used as a DLL and illegal operations are performed.

◆ ON_TestVersionNumber()

ON_DECL bool ON_TestVersionNumber ( unsigned int  major,
unsigned int  minor,
unsigned int  year,
unsigned int  month,
unsigned int  day_of_month,
unsigned int  platform_branch,
unsigned int  version_as_unsigned_number 
)

Description: A tool to validate version information and to test opennurbs version number encoding and parsing. Parameters: major A value between 1 and ON::VersionMajorMaximum(). minor, A value between 0 and ON::VersionMinorMaximum(). year A value between 2000 and 2099 month A value between 1 and 12 day_of_month A value between 1 and ON_DaysInMonthOfGregorianYear(year, month). platform_branch 0: developer build >= 1: some type of build system build version_as_unsigned_number Either 0 or the encoded version number to test against the previous parameters. Returns: true Input parameters are valid and testing internal version number utilities passed. false Input parameters are not valid or a bug was detected in internal version number utilities.

◆ ON_TransformBrepComponents()

ON_DECL bool ON_TransformBrepComponents ( ON_Brep brep,
int  brep_component_count,
const ON_COMPONENT_INDEX brep_components,
ON_Xform  xform,
double  tolerance,
double  time_limit,
bool  bUseMultipleThreads 
)

Description: Transform a list of brep components, bend neighbors to match, and leave the rest fixed. Parameters: brep - [in] brep to modify brep_component_count - [in] Length of brep_components[] array brep_components - [in] components to transform. xform - [in] transformation to apply to components tolerance - [in] Desired fitting tolerance to use when bending faces that share edges with both fixed and transformed components. time_limit - [in] If the deformation is extreme, it can take a long time to calculate the result. If time_limit > 0, then the value specifies the maximum amount of time in seconds you want to spend before giving up. bUseMultipleThreads - [in] True if multiple threads can be used. Returns: True if successful.

◆ ON_TransformPointGrid()

ON_DECL bool ON_TransformPointGrid ( int  ,
bool  ,
int  ,
int  ,
int  ,
int  ,
double *  ,
const ON_Xform  
)

◆ ON_TransformPointList() [1/2]

ON_DECL bool ON_TransformPointList ( int  ,
bool  ,
int  ,
int  ,
double *  ,
const ON_Xform  
)

◆ ON_TransformPointList() [2/2]

ON_DECL bool ON_TransformPointList ( int  ,
bool  ,
int  ,
int  ,
float *  ,
const ON_Xform  
)

◆ ON_TransformVectorList() [1/2]

ON_DECL bool ON_TransformVectorList ( int  ,
int  ,
int  ,
double *  ,
const ON_Xform  
)

◆ ON_TransformVectorList() [2/2]

ON_DECL bool ON_TransformVectorList ( int  ,
int  ,
int  ,
float *  ,
const ON_Xform  
)

◆ ON_TriangleArea2d()

ON_DECL double ON_TriangleArea2d ( ON_2dPoint  A,
ON_2dPoint  B,
ON_2dPoint  C 
)

Description: Get the area of a 2d triangle. Parameters: A - [in] B - [in] C - [in] Triangle corners Returns: Area of a 2d triangle with corners at A, B, C.

◆ ON_TriangleArea3d()

ON_DECL double ON_TriangleArea3d ( ON_3dPoint  A,
ON_3dPoint  B,
ON_3dPoint  C 
)

Description: Get the area of a 3d triangle. Parameters: A - [in] B - [in] C - [in] Triangle corners Returns: Area of a 3d triangle with corners at A, B, C.

◆ ON_TriangleNormal()

ON_DECL ON_3dVector ON_TriangleNormal ( const ON_3dPoint A,
const ON_3dPoint B,
const ON_3dPoint C 
)

Description: Finds the unit normal to the triangle Parameters: A - [in] triangle corner B - [in] triangle corner C - [in] triangle corner Returns: Unit normal

◆ ON_TrimCurve()

ON_DECL ON_Curve* ON_TrimCurve ( const ON_Curve curve,
ON_Interval  trim_parameters 
)

Description: Trim a curve. Parameters: curve - [in] curve to trim (not modified) trim_parameters - [in] trimming parameters If curve is open, then trim_parameters must be an increasing interval.If curve is closed, and trim_parameters ins a decreasing interval, then the portion of the curve across the start/end is returned. Returns: trimmed curve or nullptr if input is invalid.

◆ ON_TrinomialCoefficient()

ON_DECL double ON_TrinomialCoefficient ( int  i,
int  j,
int  k 
)

Description: Compute a trinomial coefficient. Parameters: i - [in] j - [in] k - [in] Returns: (i+j+k)!/(i!j!k!), if 0 <= i, 0 <= j and 0<= k, and 0 otherwise. See Also: ON_BinomialCoefficient() Remarks: The trinomial coefficient is computed using the formula

    (i+j+k)!      (i+j+k)!       (j+k)!
    --------   =  --------   *  -------
    i! j! k!      i! (j+k)!      j! k!

                = ON_BinomialCoefficient(i,j+k)*ON_BinomialCoefficient(j,k)

◆ ON_TripleProduct() [1/4]

ON_DECL double ON_TripleProduct ( const double *  ,
const double *  ,
const double *   
)

◆ ON_TripleProduct() [2/4]

ON_DECL float ON_TripleProduct ( const float *  ,
const float *  ,
const float *   
)

◆ ON_TripleProduct() [3/4]

ON_DECL double ON_TripleProduct ( const ON_3dVector ,
const ON_3dVector ,
const ON_3dVector  
)

◆ ON_TripleProduct() [4/4]

ON_DECL float ON_TripleProduct ( const ON_3fVector ,
const ON_3fVector ,
const ON_3fVector  
)

◆ ON_TuneupEvaluationParameter()

ON_DECL bool ON_TuneupEvaluationParameter ( int  side,
double  s0,
double  s1,
double *  s 
)
Parameters
s1segment domain
ssegment parameter

◆ ON_UnclampKnotVectorForExperts()

ON_DECL bool ON_UnclampKnotVectorForExperts ( int  cv_dim,
int  order,
int  cv_count,
int  cv_stride,
double *  cv,
double *  knot,
int  end 
)

Description: Unclamp end knots.
Does not modify the curve location or parameterization, but typically modifies knots and control vertices near the ends. Parameters: cv_dim - [in] = (dim + is_rat) end - [in] 0 = unclamp start, 1 = unclamp end, 2 = unclamp start and end Returns: true if successful Remarks: Degree 1 NURBS curves cannot be unclampled. See Also: SetUnclampedTagForExperts

◆ ON_UncompressBuffer()

ON_DECL size_t ON_UncompressBuffer ( size_t  sizeof_compressed_buffer,
const void *  compressed_buffer,
size_t  sizeof_uncompressed_buffer,
void *  uncompressed_buffer 
)

Description: Simple tool for uncompressing a buffer when the output buffer size is known. Parameters: sizeof_compressed_buffer - [in] byte count compressed_buffer - [in] sizeof_uncompressed_buffer byte count uncompressed_buffer - [out] Returns: Number of bytes written to uncompressed_buffer.

◆ ON_UnicodeMapCodePoint()

ON_DECL ON__UINT32 ON_UnicodeMapCodePoint ( const ON_Locale locale,
ON_StringMapType  map_type,
ON__UINT32  unicode_code_point 
)

◆ ON_UnicodeMapCodePointOrdinal()

ON_DECL ON__UINT32 ON_UnicodeMapCodePointOrdinal ( ON_StringMapOrdinalType  map_type,
ON__UINT32  unicode_code_point 
)

◆ ON_UnicodeNativeCPU_UTF16()

ON_DECL enum ON_UnicodeEncoding ON_UnicodeNativeCPU_UTF16 ( )

Returns: ON_UTF_16BE The byte order on where the function was run is big endian. ON_UTF_16L The byte order on where the function was run is little endian.

◆ ON_UnicodeNativeCPU_UTF32()

ON_DECL enum ON_UnicodeEncoding ON_UnicodeNativeCPU_UTF32 ( )

Returns: ON_UTF_32BE The byte order on where the function was run is big endian. ON_UTF_32LE The byte order on where the function was run is little endian.

◆ ON_UnicodeSubcriptFromCodePoint()

ON_DECL unsigned ON_UnicodeSubcriptFromCodePoint ( unsigned  cp,
unsigned  no_subscript_cp 
)

When possible, converts a code point to a subscript code point. Note that many common fonts typecast the Unicode digit subscripts as vulgar fraction denominators rather than a proper subscript.

Parameters
cpUnicode code point for which a subscript is desired.
no_subscript_cpWhen in doubt, pass cp.
Returns
If the code point cp has a Unicode subscript, the code point of the subscript is returned. Otherwise no_subscript_cp is returned.

◆ ON_UnicodeSubscriptFromDigit()

ON_DECL unsigned ON_UnicodeSubscriptFromDigit ( unsigned  decimal_digit)

Get the Unicode code point for a decimal digit subscript.

Parameters
decimal_digit0 <= decimal_digit <= 9
Returns
If 0 <= decimal_digit <= 9, then the Unicode code point for the subscript digit is returned. Otherwise 0 is returned.

◆ ON_UnicodeSuperscriptFromCodePoint()

ON_DECL unsigned ON_UnicodeSuperscriptFromCodePoint ( unsigned  cp,
unsigned  no_superscript_cp 
)

When possible, converts a code point to a superscript code point. Note that many common fonts typecast the Unicode digit superscripts as vulgar fraction numerators rather than a proper superscript.

Parameters
cpUnicode code point for which a superscript is desired.
no_superscript_cpWhen in doubt, pass cp.
Returns
If the code point cp has a Unicode superscript, the code point of the superscript is returned. Otherwise no_superscript_cp is returned.

◆ ON_UnicodeSuperscriptFromDigit()

ON_DECL unsigned ON_UnicodeSuperscriptFromDigit ( unsigned  decimal_digit)

Get the Unicode code point for a decimal digit superscript.

Parameters
decimal_digit0 <= decimal_digit <= 9
Returns
If 0 <= decimal_digit <= 9, then the Unicode code point for the superscript digit is returned. Otherwise 0 is returned.

◆ ON_UTF16_to_std_string()

ON_DECL std::string ON_UTF16_to_std_string ( int  bTestByteOrder,
const ON__UINT16 sInputUTF,
int  sInputUTF_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const ON__UINT16 **  sEndElement 
)

Description: Convert a UTF-16 encoded ON__UINT16 string to a UTF-8 encoded std:string. This function removes byte order marks (BOM) and can repair encoding errors.

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sInputUTF - [in] UTF-16 encoded ON__UINT16 string to convert.

sInputUTF_count - [in] If sInputUTF_count >= 0, then it specifies the number of elements in sInputUTF[] to convert.

If sInputUTF_count == -1, then sInputUTF must be a zero terminated array and all the elements up to the first zero element are converted.

sUTF8 - [out] If sUTF8 is not null and sUTF8_count > 0, then the UTF-8 encoded string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count of returned by this function. The converted string is in the CPU's native byte order. No byte order mark is prepended.

sUTF8_count - [in] If sUTF8_count > 0, then it specifies the number of available ON__UINT8 elements in the sUTF8[] buffer.

If sUTF8_count == 0, then the sUTF8 parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. 0xFFFD is a popular choice for the error_code_point value.

sEndElement - [out] If sEndElement is not null, then *sEndElement points to the element of sInputUTF[] were conversion stopped.

If an error occurred and was not masked, then *sEndElement points to the element of sInputUTF[] where the conversion failed.
If no errors occurred or all errors were masked, then sEndElement = sInputUTF + sInputUTF_count or points to the zero terminator in sInputUTF[], depending on the input value of sInputUTF_count.

Returns: A UTF-8 encoded std::string. The returned string does not have a byte order mark (BOM).

◆ ON_UTF16_to_std_wstring()

ON_DECL std::wstring ON_UTF16_to_std_wstring ( int  bTestByteOrder,
const ON__UINT16 sInputUTF,
int  sInputUTF_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const ON__UINT16 **  sEndElement 
)

Description: Convert a UTF-16 encoded ON__UINT16 string to a UTF-XX encoded std::wstring. This function removes byte order marks (BOM) and can repair encoding errors.

The value of sizeof(wchar_t) determines which UTF-XX encoding is used. sizeof(wchar_t) UTF-XX 1 UTF-8 2 UTF-16 4 UTF-32

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sInputUTF - [in] UTF-16 encoded ON__UINT16 string to convert.

sInputUTF_count - [in] If sInputUTF_count >= 0, then it specifies the number of elements in sInputUTF[] to convert.

If sInputUTF_count == -1, then sInputUTF must be a zero terminated array and all the elements up to the first zero element are converted.

sUTF8 - [out] If sUTF8 is not null and sUTF8_count > 0, then the UTF-8 encoded string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count of returned by this function. The converted string is in the CPU's native byte order. No byte order mark is prepended.

sUTF8_count - [in] If sUTF8_count > 0, then it specifies the number of available ON__UINT8 elements in the sUTF8[] buffer.

If sUTF8_count == 0, then the sUTF8 parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. 0xFFFD is a popular choice for the error_code_point value.

sEndElement - [out] If sEndElement is not null, then *sEndElement points to the element of sInputUTF[] were conversion stopped.

If an error occurred and was not masked, then *sEndElement points to the element of sInputUTF[] where the conversion failed.
If no errors occurred or all errors were masked, then sEndElement = sInputUTF + sInputUTF_count or points to the zero terminator in sInputUTF[], depending on the input value of sInputUTF_count.

Returns: A UTF-XX encoded std::wstring. The returned string does not have a byte order mark (BOM).

◆ ON_UTF32_to_std_string()

ON_DECL std::string ON_UTF32_to_std_string ( int  bTestByteOrder,
const ON__UINT32 sInputUTF,
int  sInputUTF_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const ON__UINT32 **  sEndElement 
)

Description: Convert a UTF-32 encoded ON__UINT16 string to a UTF-8 encoded std:string. This function removes byte order marks (BOM) and can repair encoding errors.

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sInputUTF - [in] UTF-32 encoded ON__UINT32 string to convert.

sInputUTF_count - [in] If sInputUTF_count >= 0, then it specifies the number of elements in sInputUTF[] to convert.

If sInputUTF_count == -1, then sInputUTF must be a zero terminated array and all the elements up to the first zero element are converted.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. 0xFFFD is a popular choice for the error_code_point value.

sEndElement - [out] If sEndElement is not null, then *sEndElement points to the element of sInputUTF[] were conversion stopped.

If an error occurred and was not masked, then *sEndElement points to the element of sInputUTF[] where the conversion failed.
If no errors occurred or all errors were masked, then sEndElement = sInputUTF + sInputUTF_count or points to the zero terminator in sInputUTF[], depending on the input value of sInputUTF_count.

Returns: A UTF-8 encoded std::string. The returned string does not have a byte order mark (BOM).

◆ ON_UTF32_to_std_wstring()

ON_DECL std::wstring ON_UTF32_to_std_wstring ( int  bTestByteOrder,
const ON__UINT32 sInputUTF,
int  sInputUTF_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const ON__UINT32 **  sEndElement 
)

Description: Convert a UTF-32 encoded ON__UINT32 string to a UTF-XX encoded std::wstring. This function removes byte order marks (BOM) and can repair encoding errors.

The value of sizeof(wchar_t) determines which UTF-XX encoding is used. sizeof(wchar_t) UTF-XX 1 UTF-8 2 UTF-16 4 UTF-32

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sInputUTF - [in] UTF-32 encoded ON__UINT32 string to convert.

sInputUTF_count - [in] If sInputUTF_count >= 0, then it specifies the number of elements in sInputUTF[] to convert.

If sInputUTF_count == -1, then sInputUTF must be a zero terminated array and all the elements up to the first zero element are converted.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. 0xFFFD is a popular choice for the error_code_point value.

sEndElement - [out] If sEndElement is not null, then *sEndElement points to the element of sInputUTF[] were conversion stopped.

If an error occurred and was not masked, then *sEndElement points to the element of sInputUTF[] where the conversion failed.
If no errors occurred or all errors were masked, then sEndElement = sInputUTF + sInputUTF_count or points to the zero terminator in sInputUTF[], depending on the input value of sInputUTF_count.

Returns: A UTF-XX encoded std::wstring. The returned string does not have a byte order mark (BOM).

◆ ON_UTF8_to_std_string()

ON_DECL std::string ON_UTF8_to_std_string ( int  bTestByteOrder,
const char *  sInputUTF,
int  sInputUTF_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const char **  sEndElement 
)

Description: Convert a UTF-8 encoded char string to a UTF-8 encoded std::string. This function removes byte order marks (BOM) and can repair encoding errors.

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sInputUTF - [in] UTF-8 encoded char string to convert.

sInputUTF_count - [in] If sInputUTF_count >= 0, then it specifies the number of elements in sInputUTF[] to convert.

If sInputUTF_count == -1, then sInputUTF must be a zero terminated array and all the elements up to the first zero element are converted.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. 0xFFFD is a popular choice for the error_code_point value.

sEndElement - [out] If sEndElement is not null, then *sEndElement points to the element of sInputUTF[] were conversion stopped.

If an error occurred and was not masked, then *sEndElement points to the element of sInputUTF[] where the conversion failed.
If no errors occurred or all errors were masked, then sEndElement = sInputUTF + sInputUTF_count or points to the zero terminator in sInputUTF[], depending on the input value of sInputUTF_count.

Returns: A UTF-8 encoded std::string. The returned string does not have a byte order mark (BOM).

◆ ON_UTF8_to_std_wstring()

ON_DECL std::wstring ON_UTF8_to_std_wstring ( int  bTestByteOrder,
const char *  sInputUTF,
int  sInputUTF_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
const char **  sEndElement 
)

Description: Convert a UTF-8 encoded char string to a UTF-XX encoded std::wstring. This function removes byte order marks (BOM) and can repair encoding errors.

The value of sizeof(wchar_t) determines which UTF-XX encoding is used. sizeof(wchar_t) UTF-XX 1 UTF-8 2 UTF-16 4 UTF-32

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sInputUTF - [in] UTF-8 encoded char string to convert.

sInputUTF_count - [in] If sInputUTF_count >= 0, then it specifies the number of elements in sInputUTF[] to convert.

If sInputUTF_count == -1, then sInputUTF must be a zero terminated array and all the elements up to the first zero element are converted.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. 0xFFFD is a popular choice for the error_code_point value.

sEndElement - [out] If sEndElement is not null, then *sEndElement points to the element of sInputUTF[] were conversion stopped.

If an error occurred and was not masked, then *sEndElement points to the element of sInputUTF[] where the conversion failed.
If no errors occurred or all errors were masked, then sEndElement = sInputUTF + sInputUTF_count or points to the zero terminator in sInputUTF[], depending on the input value of sInputUTF_count.

Returns: A UTF-XX encoded std::wstring. The returned string does not have a byte order mark (BOM).

◆ ON_UTF_std_string_to_std_wstring()

ON_DECL std::wstring ON_UTF_std_string_to_std_wstring ( int  bTestByteOrder,
const std::string &  sInputUTF,
int  sInputUTF_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
int *  end_element_index 
)

Description: Convert a UTF-8 encoded std::string to a UTF-XX encoded std::wstring. This function removes byte order marks (BOM) and can repair encoding errors.

The value of sizeof(wchar_t) determines which UTF-XX encoding is used. sizeof(wchar_t) UTF-XX 1 UTF-8 2 UTF-16 4 UTF-32

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sInputUTF - [in] UTF-8 encoded std::string to convert.

sInputUTF_count - [in] If sInputUTF_count >= 0, then it specifies the number of elements in sInputUTF[] to convert.

If sInputUTF_count == -1, then sInputUTF must be a zero terminated array and all the elements up to the first zero element are converted.

sUTF8 - [out] If sUTF8 is not null and sUTF8_count > 0, then the UTF-8 encoded string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count of returned by this function. The converted string is in the CPU's native byte order. No byte order mark is prepended.

sUTF8_count - [in] If sUTF8_count > 0, then it specifies the number of available ON__UINT8 elements in the sUTF8[] buffer.

If sUTF8_count == 0, then the sUTF8 parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. 0xFFFD is a popular choice for the error_code_point value.

end_element_index - [out] If end_element_index is not null, then *end_element_index is the index of the first element in sInputUTF that was not converted.

If an error occurred and was not masked, then *end_element_index is the index of the element of sInputUTF[] where the conversion failed.
If no errors occurred or all errors were masked, then end_element_index is the number of elements in sInputUTF[] that were converted.

Returns: A UTF-XX encoded std::wstring. The returned string does not have a byte order mark (BOM).

◆ ON_UTF_std_wstring_to_std_string()

ON_DECL std::string ON_UTF_std_wstring_to_std_string ( int  bTestByteOrder,
const std::wstring &  sInputUTF,
int  sInputUTF_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
int *  end_element_index 
)

Description: Convert a UTF-XX encoded std::wstring to a UTF-8 encoded std:string. This function removes byte order marks (BOM) and can repair encoding errors.

The value of sizeof(wchar_t) determines which UTF-XX encoding is used. sizeof(wchar_t) UTF-XX 1 UTF-8 2 UTF-16 4 UTF-32

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sInputUTF - [in] UTF-XX encoded std::wstring to convert.

sInputUTF_count - [in] If sInputUTF_count >= 0, then it specifies the number of elements in sInputUTF[] to convert.

If sInputUTF_count == -1, then sInputUTF must be a zero terminated array and all the elements up to the first zero element are converted.

sUTF8 - [out] If sUTF8 is not null and sUTF8_count > 0, then the UTF-8 encoded string is returned in this buffer. If there is room for the null terminator, the converted string will be null terminated. The null terminator is never included in the count of returned by this function. The converted string is in the CPU's native byte order. No byte order mark is prepended.

sUTF8_count - [in] If sUTF8_count > 0, then it specifies the number of available ON__UINT8 elements in the sUTF8[] buffer.

If sUTF8_count == 0, then the sUTF8 parameter is ignored.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. 0xFFFD is a popular choice for the error_code_point value.

end_element_index - [out] If end_element_index is not null, then *end_element_index is the index of the first element in sInputUTF that was not converted.

If an error occurred and was not masked, then *end_element_index is the index of the element of sInputUTF[] where the conversion failed.
If no errors occurred or all errors were masked, then end_element_index is the number of elements in sInputUTF[] that were converted.

Returns: A UTF-8 encoded std::string. The returned string does not have a byte order mark (BOM).

◆ ON_UTF_WideChar_to_std_string()

std::string ON_UTF_WideChar_to_std_string ( int  bTestByteOrder,
const wchar_t *  sInputUTF,
int  sInputUTF_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
int *  end_element_index 
)

Description: Convert a UTF-XX encoded wchar_t string to a UTF-8 encoded std:string. This function removes byte order marks (BOM) and can repair encoding errors.

The value of sizeof(wchar_t) determines which UTF-XX encoding is used. sizeof(wchar_t) UTF-XX 1 UTF-8 2 UTF-16 4 UTF-32

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sInputUTF - [in] UTF-XX encoded wchar_t string to convert.

sInputUTF_count - [in] If sInputUTF_count >= 0, then it specifies the number of elements in sInputUTF[] to convert.

If sInputUTF_count == -1, then sInputUTF must be a zero terminated array and all the elements up to the first zero element are converted.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. 0xFFFD is a popular choice for the error_code_point value.

end_element_index - [out] If end_element_index is not null, then *end_element_index is the index of the first element in sInputUTF that was not converted.

If an error occurred and was not masked, then *end_element_index is the index of the element of sInputUTF[] where the conversion failed.
If no errors occurred or all errors were masked, then end_element_index is the number of elements in sInputUTF[] that were converted.

Returns: A UTF-8 encoded std::string. The returned string does not have a byte order mark (BOM).

◆ ON_UTF_WideChar_to_std_wstring()

std::wstring ON_UTF_WideChar_to_std_wstring ( int  bTestByteOrder,
const wchar_t *  sInputUTF,
int  sInputUTF_count,
unsigned int *  error_status,
unsigned int  error_mask,
ON__UINT32  error_code_point,
int *  end_element_index 
)

Description: Convert a UTF-XX encoded wchar_t string to a UTF-XX encoded std::wstring. This function removes byte order marks (BOM) and can repair encoding errors.

The value of sizeof(wchar_t) determines which UTF-XX encoding is used. sizeof(wchar_t) UTF-XX 1 UTF-8 2 UTF-16 4 UTF-32

Parameters: bTestByteOrder - [in] If bTestByteOrder is true and the the input buffer is a byte order mark (BOM), then the BOM is skipped. It the value of the BOM is byte swapped, then subsequent input elements are byte swapped before being decoded. Specifically:

  • If the size of an input buffer element is 1 byte and the values of the first three input elements are a UTF-8 BOM (0xEF, 0xBB, 0xBF), then the first three input elements are ignored and decoding begins at the forth input element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a UTF-16 BOM (0xFEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 2 bytes and the value of the first element is a byte swapped UTF-16 BOM (0xFFFE), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • If the size of an input buffer element is 4 bytes and the value of the first element is a UTF-32 BOM (0x0000FEFF), then the first element is ignored and decoding begins with the second element.
  • If the size of an input buffer element is 4 bytes and the value of the first element is bytes swapped UTF-32 BOM (0xFFFE0000), then the first element is ignored, decoding begins with the second element, and input element bytes are swapped before being decoded.
  • In all other cases the first element of the input buffer is decoded and no byte swapping is performed.

sInputUTF - [in] UTF-XX encoded wchar_t string to convert.

sInputUTF_count - [in] If sInputUTF_count >= 0, then it specifies the number of elements in sInputUTF[] to convert.

If sInputUTF_count == -1, then sInputUTF must be a zero terminated array and all the elements up to the first zero element are converted.

error_status - [out] If error_status is not null, then bits of *error_status are set to indicate the success or failure of the conversion.
When the error_mask parameter is used to used to mask some conversion errors, multiple bits may be set. 0: Successful conversion with no errors. 1: The input parameters were invalid. This error cannot be masked. 2: The output buffer was not large enough to hold the converted string. As much conversion as possible is performed in this case and the error cannot be masked. 4: When parsing a UTF-8 or UTF-32 string, the values of two consecutive encoding sequences formed a valid UTF-16 surrogate pair.
This error is masked if 0 != (4 & m_error_mask). If the error is masked, then the surrogate pair is decoded, the value of the resulting unicode code point is used, and parsing continues. 8: An overlong UTF-8 encoding sequence was encountered and the value of the overlong sUTF-8 sequence was a valid unicode code point.
This error is masked if 0 != (8 & m_error_mask). If the error is masked, then the unicode code point is used and parsing continues. 16: An illegal UTF-8, UTF-16 or UTF-32 encoding sequence occurred or an invalid unicode code point value resulted from decoding a UTF-8 sequence. This error is masked if 0 != (16 & m_error_mask). If the error is masked and the value of error_code_point is a valid unicode code point, then error_code_point is encoded in the output string and parsing continues.

error_mask - [in] If 0 != (error_mask & 4), then type 4 errors are masked. If 0 != (error_mask & 8), then type 8 errors are masked. If 0 != (error_mask & 16) and error_code_point is a valid unicode code point value, then type 16 errors are masked.

error_code_point - [in] Unicode code point value to use in when masking type 16 errors. If 0 == (error_mask & 16), then this parameter is ignored. 0xFFFD is a popular choice for the error_code_point value.

end_element_index - [out] If end_element_index is not null, then *end_element_index is the index of the first element in sInputUTF that was not converted.

If an error occurred and was not masked, then *end_element_index is the index of the element of sInputUTF[] where the conversion failed.
If no errors occurred or all errors were masked, then end_element_index is the number of elements in sInputUTF[] that were converted.

Returns: A UTF-XX encoded std::wstring. The returned string does not have a byte order mark (BOM).

◆ ON_UTFSizeofByteOrderMark()

ON_DECL unsigned int ON_UTFSizeofByteOrderMark ( enum ON_UnicodeEncoding  e)

Parameters: e - [in] Returns: Number of bytes in byte order mark for the specified encoding.

◆ ON_UuidCompare() [1/2]

ON_DECL int ON_UuidCompare ( const ON_UUID a,
const ON_UUID b 
)

Description: ON_UuidCompare(a,b) compares two uuids. Parameters: a - [in] b - [in] Returns: @untitled table -1 a < b 0 a == b +1 a > b

◆ ON_UuidCompare() [2/2]

ON_DECL int ON_UuidCompare ( const ON_UUID a,
const ON_UUID b 
)

Description: ON_UuidCompare(&a,&b) compares two uuids. Parameters: a - [in] b - [in] Returns: @untitled table -1 a < b 0 a == b +1 a > b Remarks: A nullptr pointer is considered < a non-nullptr pointer.

◆ ON_UuidFromString() [1/2]

ON_DECL ON_UUID ON_UuidFromString ( const char *  s)

Description: Converts a string like "{85A08515-f383-11d3-BFE7-0010830122F0}" into a uuid. The brackets are optional and are ignored. Hyphens can appear anywhere or be missing. The hex digits can be upper or lower case. Parameters: s - [in] Returns: uuid.
If the string is not a uuid, then ON_nil_uuid is returned.

◆ ON_UuidFromString() [2/2]

ON_DECL ON_UUID ON_UuidFromString ( const wchar_t *  s)

Description: Converts a string like "{85A08515-f383-11d3-BFE7-0010830122F0}" into a uuid. The brackets are optional and are ignored. Hyphens can appear anywhere or be missing. The hex digits can be upper or lower case. Parameters: s - [in] Returns: uuid.
If the string is not a uuid, then ON_nil_uuid is returned.

◆ ON_UuidIsNil()

ON_DECL bool ON_UuidIsNil ( const ON_UUID uuid)

Description: Test uuid to see if it is nil (identically zero). Parameters: uuid - [in] Returns: true if uuid is nil.

◆ ON_UuidIsNotNil()

ON_DECL bool ON_UuidIsNotNil ( const ON_UUID uuid)

Description: Test uuid to see if it is not nil (not identically zero). Parameters: uuid - [in] Returns: true if uuid is not nil (non zero)

◆ ON_UuidToString() [1/4]

ON_DECL char* ON_UuidToString ( const ON_UUID uuid,
char *  s 
)

Description: Converts a uuid to a null terminated ASCII string like "85a08515-f383-11d3-bfe7-0010830122f0". Parameters: uuid - [in] s - [out] The s[] char array must have length >= 37.
The returned char array will have a 36 character uuid in s[0..35] and a null in s[36]. Returns: The pointer to the array is returned.

◆ ON_UuidToString() [2/4]

const ON_DECL char* ON_UuidToString ( const ON_UUID uuid,
ON_String s 
)

Description: Converts a uuid to a null terminated string like "85a08515-f383-11d3-bfe7-0010830122f0". Parameters: uuid - [in] s - [out] Returns: The pointer to the array is returned.

◆ ON_UuidToString() [3/4]

const ON_DECL wchar_t* ON_UuidToString ( const ON_UUID uuid,
ON_wString s 
)

Description: Converts a uuid to a null terminated string like "85a08515-f383-11d3-bfe7-0010830122f0". Parameters: uuid - [in] s - [out] Returns: The pointer to the array is returned.

◆ ON_UuidToString() [4/4]

ON_DECL wchar_t* ON_UuidToString ( const ON_UUID uuid,
wchar_t *  s 
)

Description: Converts a uuid to a null terminated UNICODE string like "85a08515-f383-11d3-bfe7-0010830122f0". Parameters: uuid - [in] s - [out] The s[] wchar_t array must have length >= 37.
The returned char array will have a 36 character uuid in s[0..35] and a null in s[36]. Returns: The pointer to the array is returned.

◆ ON_ValidateBrepLoop()

ON_DECL bool ON_ValidateBrepLoop ( const ON_Brep B,
int  loop_id 
)

See ON_ValidateBrepLoops.

◆ ON_ValidateBrepLoops()

ON_DECL bool ON_ValidateBrepLoops ( const ON_Brep B,
ON_SimpleArray< int > *  loop_ids = 0 
)

Look for self-intersecting boundaries. Currently limited to slits and improper links between what should be an outer and inner boundary. If loop_ids == 0, returns as soon as a bad loop is found. Otherwise, the ids of all bad loops will end up on loop_ids True if no bad boundary is found

◆ ON_ValidateCurveCVSpacing()

ON_DECL bool ON_ValidateCurveCVSpacing ( const ON_NurbsCurve crv,
double  close_tol,
double  stack_tol,
ON_SimpleArray< int > &  close_ids,
ON_SimpleArray< int > &  stacked_ids,
double &  chord_length 
)
Parameters
chord_lengthof control polygon

◆ ON_ValidateCurveSet()

ON_DECL bool ON_ValidateCurveSet ( const ON_SimpleArray< const ON_Curve * > &  Crvs,
double  close_dist_tol,
double  good_dist_tol,
double  close_kink_tol,
double  good_kink_tol,
double  close_curvature_tol,
double  good_curvature_tol,
ON_SimpleArray< ON_2dex > &  overlap_problems,
ON_SimpleArray< ON_Interval > &  overlap_subdoms,
ON_SimpleArray< ON_4dex > &  g0_problems,
ON_SimpleArray< ON_4dex > &  g1_problems,
ON_SimpleArray< ON_4dex > &  g2_problems 
)
Parameters
overlap_subdomsFor Crvs[overlap_problems[n].i]

◆ ON_ValidateEdgeTrims()

ON_DECL bool ON_ValidateEdgeTrims ( const ON_Brep brep,
int  edge_index,
ON_TextLog text_log,
ON_BrepTrimPoint bad_tp,
int *  bad_eti,
double *  deviation 
)

Description: Does extensive tests of an edge and all of its trims to insure the edge and trims define the same 3d curve to a tolerance. Parameters: brep - [in] edge_index - [in] text_log - [in] bad_tp - [out] If not null and false is returned, then bad_tp->t and bad_tp->e will identify trim and edge parameters near the area where the two have parameterization problems. bad_eti - [out] If not null and false is returned, then *bad_eti will be the edge.m_ti[] index of the trim whose correspondence with the edge has parameterization problems. deviation - [out] If not null, then deviation[] should have length edge.m_ti.Count(). If true is returned, then the value of deviation[i] will be the maximum detected 3d deviation between the trim with index edge.m_ti[i] and the edge. Returns: True if the edge and trims have is valid parameterizations.

◆ ON_ValidateNurbsSurfacePole()

ON_DECL bool ON_ValidateNurbsSurfacePole ( const ON_NurbsSurface srf,
int  side,
double  tolerance,
ON_3dPoint pAvgPole 
)

If srf.IsSingular(side) == false, check control points along srf's side. If all are within tolerance, but not equal, return false. Otherwise, return true.
Note: If side is invalid, or if it does not make sense for srf to have a pole along side, this will return true.

Parameters
side0-3, SENW same as O_Surface::IsSingular()
pAvgPoleif not nullptr on input, and return is true, result will have the average location of the cv's along the side.

◆ ON_ValidateSurfaceCVSpacing()

ON_DECL bool ON_ValidateSurfaceCVSpacing ( const ON_NurbsSurface srf,
double  close_tol,
double  stack_tol,
ON_SimpleArray< ON_2dex > &  close_ids,
ON_SimpleArray< ON_2dex > &  stacked_ids 
)

Simple check of the distance between adjacent surface cvs. If stack_tol < ON_ZERO_TOLERANCE, ON_ZERO_TOLERANCE will be used. If close_tol <= stack_tol, only stacked_ids will be filled in. Cvs at poles will not be considered close or stacked to other cvs at the same pole. Output lists will be sorted by u then v.

◆ ON_ValidateSurfaceSeam()

ON_DECL bool ON_ValidateSurfaceSeam ( const ON_Surface srf,
int  dir,
double  dist_tol,
double  angle_tol,
bool &  bIsCloseG1 
)

◆ ON_VersionNumberConstruct()

ON_DECL unsigned int ON_VersionNumberConstruct ( unsigned int  major_version,
unsigned int  minor_version,
unsigned int  year,
unsigned int  month,
unsigned int  day_of_month,
unsigned int  platform_branch 
)

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. Description: Create a 4-byte unsigned integer value that has desirable version number properties.

Parameters: major_version - [in] major_version >= 0 and major_version <= 63

minor_version - [in] minor_version >= 0 and minor_version <= 127

year - [in] year >= 2000 and year <= 2099

month - [in] month >= 1 and month <= 12

day_of_month - [in] day_of_month >= 1 and day_of_month <= ON_DaysInMonthOfGregorianYear(year,month)

platform_branch - [in] 0: developer build 1: Windows Commercial build 2: Mac Commercial build 3: Windows BETA build 4: Mac Beta build 5: Windows WIP build 6: Mac WIP build

Returns: If the input values are valid, this returns a 4-byte nonzero version number with the following properties: verA = ON_VersionNumberConstruct(majorA,minorA,<timeA>,branchA) verB = ON_VersionNumberConstruct(majorB,minorB,<timeB>,branchB)

  • If majorA > majorB, then verA > verB.
  • If majorA = majorB and minorA > minorB, then verA > verB.
  • If majorA = majorB and minorA = minorB and timeA > timeB, then verA > verB.
  • If majorA = majorB, minorA = minorB, timeA = timeB, and branchA > branchB, then verA > verB. If any input is not valid, then zero is returned.

◆ ON_VersionNumberFromYearMonthDateFormat()

ON_DECL unsigned int ON_VersionNumberFromYearMonthDateFormat ( unsigned int  major_version,
unsigned int  yyyy_mm_dd_n_version_number 
)

Parameters: major_version - [in] >= 0 and < 64 Returns: The smallest possible non-zero version number ON_VersionNumberConstruct() will create for a specified major version with valid input.

◆ ON_VersionNumberIsValid()

ON_DECL bool ON_VersionNumberIsValid ( unsigned int  version_number)

Returns: True if the version_number is a value created by ON_VersionNumberConstruct(). Parameters: version_number - [in]

◆ ON_VersionNumberIsYearMonthDateFormat()

ON_DECL bool ON_VersionNumberIsYearMonthDateFormat ( unsigned int  archive_3dm_version,
unsigned int  version_number 
)

Parameters: archive_3dm_version - [in] If the context of the query is a version number from an ON_BinaryArchive, then pass the value of ON_BinaryArchive.Archive3dmVersion() here. version_number - [in] version number to test. Returns: True if the version number is in the YYYYMMDDn format used by version 1,2,3,4,5 of opennurbs and the Rhino SDK.

◆ ON_VersionNumberMinimum()

ON_DECL unsigned int ON_VersionNumberMinimum ( unsigned int  major_version)

Parameters: major_version - [in] major_version >= 0 and major_version <= 63

Returns: The smallest possible non-zero version number ON_VersionNumberConstruct() will create for a specified major version with valid input.

◆ ON_VersionNumberParse()

ON_DECL bool ON_VersionNumberParse ( unsigned int  version_number,
unsigned int *  version_major,
unsigned int *  version_minor,
unsigned int *  version_year,
unsigned int *  version_month,
unsigned int *  version_day_of_month,
unsigned int *  version_branch 
)

Description: Parse a version number created by ON_VersionNumberConstruct() to recover the input parameters. Parameters: version_number - [in] A version number created with ON_VersionNumberConstruct().

version_major - [out] version_major >= 0 and version_major <= 63

version_minor - [out] version_minor >= 0 and version_minor <= 127

version_year - [out] version_year >= 2000 and version_year <= 2099

version_month - [out] version_month >= 1 and version_month <= 12

version_day_of_month - [out] version_day_of_month >= 1 and version_day_of_month <= ON_DaysInMonthOfGregorianYear(year,month)

version_branch - [out] version_branch >= 0 and version_branch <= 3 0: developer build 1: build system trunk branch build 2: build system release candidate build 3: build system release build

Remarks: Any output parameter pointer may be null if you do not want that information.

Returns: true: The version_number parameter is a valid version number. All output parameters are set. false: The version_number parameter is not a valid version number. All output parameters are set to zero.

◆ ON_VersionNumberToString()

const ON_DECL ON_String ON_VersionNumberToString ( unsigned int  version_number,
bool  bUnsignedFormat,
bool  bDateFormat 
)

◆ ON_VersionNumberToWideString()

const ON_DECL ON_wString ON_VersionNumberToWideString ( unsigned int  version_number,
bool  bUnsignedFormat,
bool  bDateFormat 
)

◆ ON_ViewportFromRhinoView()

ON_DECL bool ON_ViewportFromRhinoView ( ON::view_projection  ,
const ON_3dPoint ,
double  ,
double  ,
double  ,
double  ,
double  ,
int  ,
int  ,
ON_Viewport  
)

◆ ON_VoronoiArea2d()

ON_DECL double ON_VoronoiArea2d ( const ON_2dPoint p0,
const ON_2dPoint p1,
const ON_2dPoint p2 
)

Compute the Voronoi area contribution of a 2d triangle.

Parameters
p0
p1
p2
Returns
If the points are valid and not collinear, then the Voronoi area contributionof the 2d triangle is returned. Otherwise 0.0 is returned.

◆ ON_VoronoiArea3d()

ON_DECL double ON_VoronoiArea3d ( const ON_3dPoint p0,
const ON_3dPoint p1,
const ON_3dPoint p2 
)

Compute the Voronoi area contribution of a 3d triangle.

Parameters
p0
p1
p2
Returns
If the points are valid and not collinear, then the Voronoi area contribution of the 3d triangle is returned. Otherwise 0.0 is returned.

◆ ON_Warning()

ON_DECL void ON_VARGS_FUNC_CDECL ON_Warning ( const char *  file_name,
int  line_number,
const char *  format,
  ... 
)

◆ ON_WarningEx()

ON_DECL void ON_VARGS_FUNC_CDECL ON_WarningEx ( const char *  file_name,
int  line_number,
const char *  function_name,
const char *  format,
  ... 
)

◆ on_wcsicmp()

ON_BEGIN_EXTERNC ON_DECL int on_wcsicmp ( const wchar_t *  ,
const wchar_t *   
)

on_wcsicmp() is a wrapper for case insensitive wide string compare and calls one of _wcsicmp() or wcscasecmp() depending on OS.

◆ on_wcslwr()

ON_DECL wchar_t* on_wcslwr ( wchar_t *  )

on_wcslwr() calls _wcslwr() or wcslwr() depending on OS

◆ on_wcsrev()

ON_DECL wchar_t* on_wcsrev ( wchar_t *  )

on_wcsrev() calls _wcsrev() or wcsrev() depending on OS

◆ on_wcsupr()

ON_DECL wchar_t* on_wcsupr ( wchar_t *  )

on_wcsupr() calls _wcsupr() or wcsupr() depending on OS

◆ ON_WedgeProduct()

ON_DECL double ON_WedgeProduct ( const ON_2dVector A,
const ON_2dVector B 
)
Parameters
Asigned area of the parallelogram. Volume element. returns A.x * B.y - A.y * B.x

◆ on_WideCharToMultiByte()

ON_DECL int on_WideCharToMultiByte ( const wchar_t *  ,
int  ,
char *  ,
int   
)

Description: Calls ON_ConvertWideCharToUTF8()

◆ ON_WorkerThreadContextSerialNumber()

ON_DECL ON__UINT64 ON_WorkerThreadContextSerialNumber ( )

Returns: 0: No worker thread context is set. >0: Serial number of the worker thread context.

◆ ON_WorkerThreadEnableTerminateRequest()

ON_DECL ON__UINT64 ON_WorkerThreadEnableTerminateRequest ( )

Description: If a worker thread context is active, then every subsequent memory allocation will call the fTerminateThreadFunction function passed to ON_SetWorkerThreadContext(). Returns: 0: No worker thread context is set. 0>: Serial number of the worker thread context with a pending terminate request.

◆ ON_WorkerThreadTerminateRequestStatus()

ON_DECL ON__UINT64 ON_WorkerThreadTerminateRequestStatus ( )

Returns: 0: No pending terminate request. >0: Serial number of the worker thread context with a pending terminate request.

◆ ON_WorldBBoxIsInTightBBox()

ON_DECL bool ON_WorldBBoxIsInTightBBox ( const ON_BoundingBox tight_bbox,
const ON_BoundingBox world_bbox,
const ON_Xform xform 
)

◆ ON_WriteMultipleObjectArchive() [1/3]

bool ON_WriteMultipleObjectArchive ( const wchar_t *  filename,
int  version,
size_t  object_list_count,
const ON_Object *const *  object_list 
)

◆ ON_WriteMultipleObjectArchive() [2/3]

ON_DECL bool ON_WriteMultipleObjectArchive ( ON_BinaryArchive archive,
int  version,
const ON_SimpleArray< const ON_Object * > &  object_list 
)

◆ ON_WriteMultipleObjectArchive() [3/3]

ON_DECL bool ON_WriteMultipleObjectArchive ( ON_BinaryArchive archive,
int  version,
size_t  object_list_count,
const ON_Object *const *  object_list 
)

◆ ON_WriteOneObjectArchive() [1/2]

ON_DECL bool ON_WriteOneObjectArchive ( const wchar_t *  filename,
const ON_Object object 
)

◆ ON_WriteOneObjectArchive() [2/2]

ON_DECL bool ON_WriteOneObjectArchive ( ON_BinaryArchive archive,
int  version,
const ON_Object object 
)

Description: Create a simple archive that contains a single or multiple geometric object(s). Parameters: archive - [in] destination archive. version - in format version.archive version number. Version 2 format can be read by Rhino 2 and Rhino 3. Version 3 format can be read by Rhino 3. Pass 0 or ON_BinaryArchive::CurrentArchiveVersion() to write the latest version of archives supported by Rhino. object - [in] object to be saved in the archive's object table. This is typically some type of ON_Curve, ON_Surface, ON_Mesh, or ON_Brep. object_list - [in] objects to be saved in the archive's object table. These are typically some type of ON_Curve, ON_Surface, ON_Mesh, or ON_Brep. object_list_count - [in] explicit count of number of objects in object_list. Returns: @untitled table true archive successfully written. false archive not successfully written. Example:

      const char* filename = "myfile.3dm";
      FILE* fp = ON::OpenFile( filename, "wb" );
      ON_BinaryFile file( fp, ON::archive_mode::write3dm );
      bool ok = ON_WriteArchive( archive, geometry );
      ON::CloseFile( fp );

Remarks: For ON_WriteOneObjectArchive the object table in the archive will contain a single object.

◆ on_wsplitpath()

ON_DECL void on_wsplitpath ( const wchar_t *  path,
const wchar_t **  volume,
const wchar_t **  dir,
const wchar_t **  fname,
const wchar_t **  ext 
)

Description: Find the locations in a path the specify the drive, directory, file name and file extension. Parameters: path - [in] A legitimate file system path to a file. volume - [out] (pass null if you don't need the volume) If volume is not null and the path parameter begins with a Windows volum specification, the value of *volume will equal the input value of path. Otherwise *volume will be nullptr.
A Windows volume specification can be either a single A-Z or a-z letter followed by a colon ( C: ) or a Windows UNC host name (\MY_SERVER). dir - [out] (pass null if you don't need the directory) If dir is not null and the path parameter contains a directory specification, then the returned value of *dir will point to the character in path where the directory specification begins. fname - [out] (pass null if you don't need the file name) If fname is not null and the path parameter contains a file name specification, then the returned value of *fname will point to the character in path where the file name specification begins. ext - [out] (pass null if you don't need the extension) If ext is not null and the path parameter contains a file extension specification, then the returned value of ext will point to the '.' character in path where the file extension specification begins. Remarks: This function will treat a front slash ( / ) and a back slash ( \ ) as directory separators. Because this function parses file names store in .3dm files and the .3dm file may have been written on a Windows computer and then read on a another computer, it looks for a volume specification even when the operating system is not Windows. This function will not return an directory that does not end with a trailing slash. This function will not return an empty filename and a non-empty extension. This function parses the path string according to these rules. It does not check the actual file system to see if the answer is correct. See Also: ON_wString::SplitPath

◆ oncalloc()

ON_DECL void* oncalloc ( size_t  ,
size_t   
)

◆ onfree()

ON_DECL void onfree ( void *  )

◆ onmalloc()

ON_DECL void* onmalloc ( size_t  )

◆ onmalloc_forever()

ON_DECL void* onmalloc_forever ( size_t  )

Allocate memory that is intentionally never returned should not be considered a memory leak. Typically this is for an application workspace.

◆ onmbsdup()

ON_DECL unsigned char* onmbsdup ( const unsigned char *  )

◆ onmemdup()

ON_DECL void* onmemdup ( const void *  ,
size_t   
)

◆ onrealloc()

ON_DECL void* onrealloc ( void *  ,
size_t   
)

◆ onstrdup()

ON_DECL char* onstrdup ( const char *  )

◆ onwcsdup()

ON_DECL wchar_t* onwcsdup ( const wchar_t *  )

◆ operator const T *() [1/2]

template<class T >
ON_SimpleArray< T >::operator const T *

to the array. If Count() is zero, this pointer is nullptr.

◆ operator const T *() [2/2]

template<class T >
ON_ClassArray< T >::operator const T *

to the array. If Count() is zero, this pointer is nullptr.

◆ operator T*() [1/2]

template<class T >
ON_SimpleArray< T >::operator T*

The cast operators return a pointer.

◆ operator T*() [2/2]

template<class T >
ON_ClassArray< T >::operator T*

The cast operators return a pointer.

◆ operator!=() [1/45]

ON_DECL bool operator!= ( const char *  lhs,
const ON_String rhs 
)

Returns: True if lhs and rhs are not identical as arrays of char elements.

◆ operator!=() [2/45]

ON_DECL bool operator!= ( const class ON_ParseSettings a,
const class ON_ParseSettings b 
)

Descriptions: result true if a and b are not identical.

◆ operator!=() [3/45]

bool operator!= ( const class ON_TextMask lhs,
const class ON_TextMask rhs 
)

◆ operator!=() [4/45]

ON_DECL bool operator!= ( const ON_2dSize lhs,
const ON_2dSize rhs 
)

◆ operator!=() [5/45]

ON_DECL bool operator!= ( const ON_2iBoundingBox ,
const ON_2iBoundingBox  
)

◆ operator!=() [6/45]

ON_DECL bool operator!= ( const ON_2iPoint ,
const ON_2iPoint  
)

◆ operator!=() [7/45]

ON_DECL bool operator!= ( const ON_2iSize lhs,
const ON_2iSize rhs 
)

◆ operator!=() [8/45]

ON_DECL bool operator!= ( const ON_2iVector ,
const ON_2iVector  
)

◆ operator!=() [9/45]

ON_DECL bool operator!= ( const ON_4dRect ,
const ON_4dRect  
)

◆ operator!=() [10/45]

ON_DECL bool operator!= ( const ON_4iRect ,
const ON_4iRect  
)

◆ operator!=() [11/45]

ON_DECL bool operator!= ( const ON_AngleUnitName a,
const ON_AngleUnitName b 
)

◆ operator!=() [12/45]

ON_DECL bool operator!= ( const ON_BoundingBox lhs,
const ON_BoundingBox rhs 
)

Returns: True if lhs and rhs are not equal.

◆ operator!=() [13/45]

ON_DECL bool operator!= ( const ON_LengthUnitName a,
const ON_LengthUnitName b 
)

◆ operator!=() [14/45]

ON_DECL bool operator!= ( const ON_Line a,
const ON_Line b 
)

Returns: True if a and be are not identical. Remarks: If a nan is involved in every coordinate compare, the result will be false.

◆ operator!=() [15/45]

ON_DECL bool operator!= ( const ON_ManifestMapItem lhs,
const ON_ManifestMapItem rhs 
)

◆ operator!=() [16/45]

ON_DECL bool operator!= ( const ON_MappingTag lhs,
const ON_MappingTag rhs 
)

◆ operator!=() [17/45]

ON_DECL bool operator!= ( const ON_Material ,
const ON_Material  
)

◆ operator!=() [18/45]

ON_DECL bool operator!= ( const ON_MD5_Hash a,
const ON_MD5_Hash b 
)

◆ operator!=() [19/45]

ON_DECL bool operator!= ( const ON_MeshParameters a,
const ON_MeshParameters b 
)

◆ operator!=() [20/45]

bool operator!= ( const ON_ModelComponentContentMark lhs,
const ON_ModelComponentContentMark rhs 
)

◆ operator!=() [21/45]

ON_DECL bool operator!= ( const ON_NameHash a,
const ON_NameHash b 
)

Compares id, then length, then SHA-1 digest

◆ operator!=() [22/45]

ON_DECL bool operator!= ( const ON_SHA1_Hash a,
const ON_SHA1_Hash b 
)

◆ operator!=() [23/45]

ON_DECL bool operator!= ( const ON_String lhs,
const char *  rhs 
)

Returns: True if lhs and rhs are not identical as arrays of char elements.

◆ operator!=() [24/45]

ON_DECL bool operator!= ( const ON_String lhs,
const ON_String rhs 
)

Returns: True if lhs and rhs are not identical as arrays of char elements.

◆ operator!=() [25/45]

ON_DECL bool operator!= ( const ON_SubDEdgeSharpness lhs,
const ON_SubDEdgeSharpness rhs 
)

◆ operator!=() [26/45]

bool operator!= ( const ON_SubDExpandEdgesParameters lhs,
const ON_SubDExpandEdgesParameters rhs 
)

◆ operator!=() [27/45]

ON_WIP_DECL bool operator!= ( const ON_SubDFaceParameter lhs,
const ON_SubDFaceParameter rhs 
)

◆ operator!=() [28/45]

bool operator!= ( const ON_SubDHash lhs,
const ON_SubDHash rhs 
)

◆ operator!=() [29/45]

bool operator!= ( const ON_SubDToBrepParameters lhs,
const ON_SubDToBrepParameters rhs 
)

◆ operator!=() [30/45]

ON_DECL bool operator!= ( const ON_SurfaceCurvature lhs,
const ON_SurfaceCurvature rhs 
)
Parameters
lhs
rhs
Returns
Returns (lhs.k1 != rhs.k1 || lhs.k2!=rhs.k2) || (lhs.IsNan() && rhs.IsNan()).

◆ operator!=() [31/45]

ON_DECL bool operator!= ( const ON_SurfaceCurvatureColorMapping lhs,
const ON_SurfaceCurvatureColorMapping rhs 
)

Returns true if some property of lhs and rhs is different and no double is a nan.

◆ operator!=() [32/45]

ON_DECL bool operator!= ( const ON_SurfaceDraftAngleColorMapping lhs,
const ON_SurfaceDraftAngleColorMapping rhs 
)

Returns true if some property of lhs and rhs is different and no double is a nan.

◆ operator!=() [33/45]

ON_DECL bool operator!= ( const ON_Triangle a,
const ON_Triangle b 
)

Returns: True if a and be are not identical. Remarks: If a nan is involved in every coordinate compare, the result will be false.

◆ operator!=() [34/45]

ON_DECL bool operator!= ( const ON_wString lhs,
const ON_wString rhs 
)

Returns: True if lhs and rhs are not identical as arrays of wchar_t elements.

◆ operator!=() [35/45]

ON_DECL bool operator!= ( const ON_wString lhs,
const wchar_t *  rhs 
)

Returns: True if lhs and rhs are not identical as arrays of wchar_t elements.

◆ operator!=() [36/45]

bool operator!= ( const struct ON_UUID_struct a,
const struct ON_UUID_struct b 
)

◆ operator!=() [37/45]

ON_DECL bool operator!= ( const wchar_t *  lhs,
const ON_wString rhs 
)

Returns: True if lhs and rhs are not identical as arrays of wchar_t elements.

◆ operator!=() [38/45]

ON_DECL bool operator!= ( ON_Big5CodePoint  lhs,
ON_Big5CodePoint  rhs 
)

◆ operator!=() [39/45]

ON_DECL bool operator!= ( ON_Big5UnicodePair  lhs,
ON_Big5UnicodePair  rhs 
)

◆ operator!=() [40/45]

ON_DECL bool operator!= ( ON_SubDComponentPtr  lhs,
ON_SubDComponentPtr  rhs 
)

◆ operator!=() [41/45]

ON_DECL bool operator!= ( ON_SubDEdgePtr  lhs,
ON_SubDEdgePtr  rhs 
)

◆ operator!=() [42/45]

ON_DECL bool operator!= ( ON_SubDFacePtr  lhs,
ON_SubDFacePtr  rhs 
)

◆ operator!=() [43/45]

ON_DECL bool operator!= ( ON_SubDSectorId  ,
ON_SubDSectorId   
)

◆ operator!=() [44/45]

ON_DECL bool operator!= ( ON_SubDVertexPtr  lhs,
ON_SubDVertexPtr  rhs 
)

◆ operator!=() [45/45]

ON_DECL bool operator!= ( ON_UnicodeShortCodePoint  lhs,
ON_UnicodeShortCodePoint  rhs 
)

◆ operator&&()

ON_DECL ON_ParseSettings operator&& ( const class ON_ParseSettings a,
const class ON_ParseSettings b 
)

Descriptions: result setting value = a setting value OR b setting value Returns: Logical OR of the parse settings in a and b.

◆ operator*() [1/34]

const ON_DECL ON_PlaneEquation operator* ( const ON_Xform ,
const ON_PlaneEquation  
)

◆ operator*() [2/34]

const ON_DECL ON_Xform operator* ( const ON_Xform xform,
double  c 
)

◆ operator*() [3/34]

const ON_DECL ON_Xform operator* ( double  c,
const ON_Xform xform 
)

◆ operator*() [4/34]

ON_DECL ON_2dPoint operator* ( double  ,
const ON_2dPoint  
)

◆ operator*() [5/34]

ON_DECL ON_2dVector operator* ( double  ,
const ON_2dVector  
)

◆ operator*() [6/34]

ON_DECL ON_2dPoint operator* ( double  ,
const ON_2fPoint  
)

◆ operator*() [7/34]

ON_DECL ON_2dVector operator* ( double  ,
const ON_2fVector  
)

◆ operator*() [8/34]

ON_DECL ON_3dPoint operator* ( double  ,
const ON_3dPoint  
)

◆ operator*() [9/34]

ON_DECL ON_3dVector operator* ( double  ,
const ON_3dVector  
)

◆ operator*() [10/34]

ON_DECL ON_3dPoint operator* ( double  ,
const ON_3fPoint  
)

◆ operator*() [11/34]

ON_DECL ON_3dVector operator* ( double  ,
const ON_3fVector  
)

◆ operator*() [12/34]

ON_DECL ON_4dPoint operator* ( double  ,
const ON_4dPoint  
)

◆ operator*() [13/34]

ON_DECL ON_4dPoint operator* ( double  ,
const ON_4fPoint  
)

◆ operator*() [14/34]

ON_DECL ON_Quaternion operator* ( double  ,
const ON_Quaternion  
)

◆ operator*() [15/34]

ON_DECL ON_2dPoint operator* ( float  ,
const ON_2dPoint  
)

◆ operator*() [16/34]

ON_DECL ON_2dVector operator* ( float  ,
const ON_2dVector  
)

◆ operator*() [17/34]

ON_DECL ON_2fPoint operator* ( float  ,
const ON_2fPoint  
)

◆ operator*() [18/34]

ON_DECL ON_2fVector operator* ( float  ,
const ON_2fVector  
)

◆ operator*() [19/34]

ON_DECL ON_3dPoint operator* ( float  ,
const ON_3dPoint  
)

◆ operator*() [20/34]

ON_DECL ON_3dVector operator* ( float  ,
const ON_3dVector  
)

◆ operator*() [21/34]

ON_DECL ON_3fPoint operator* ( float  ,
const ON_3fPoint  
)

◆ operator*() [22/34]

ON_DECL ON_3fVector operator* ( float  ,
const ON_3fVector  
)

◆ operator*() [23/34]

ON_DECL ON_4fPoint operator* ( float  ,
const ON_4fPoint  
)

◆ operator*() [24/34]

ON_DECL ON_Quaternion operator* ( float  ,
const ON_Quaternion  
)

◆ operator*() [25/34]

ON_DECL ON_2dPoint operator* ( int  ,
const ON_2dPoint  
)

◆ operator*() [26/34]

ON_DECL ON_2dVector operator* ( int  ,
const ON_2dVector  
)

◆ operator*() [27/34]

ON_DECL ON_2fPoint operator* ( int  ,
const ON_2fPoint  
)

◆ operator*() [28/34]

ON_DECL ON_2fVector operator* ( int  ,
const ON_2fVector  
)

◆ operator*() [29/34]

ON_DECL ON_2iVector operator* ( int  ,
const ON_2iVector  
)

◆ operator*() [30/34]

ON_DECL ON_3dPoint operator* ( int  ,
const ON_3dPoint  
)

◆ operator*() [31/34]

ON_DECL ON_3dVector operator* ( int  ,
const ON_3dVector  
)

◆ operator*() [32/34]

ON_DECL ON_3fPoint operator* ( int  ,
const ON_3fPoint  
)

◆ operator*() [33/34]

ON_DECL ON_3fVector operator* ( int  ,
const ON_3fVector  
)

◆ operator*() [34/34]

ON_DECL ON_Quaternion operator* ( int  ,
const ON_Quaternion  
)

◆ operator+() [1/2]

ON_DECL ON_2iPoint operator+ ( const ON_2iPoint ,
const ON_2iVector  
)

◆ operator+() [2/2]

ON_DECL ON_2iVector operator+ ( const ON_2iVector ,
const ON_2iVector  
)

◆ operator-() [1/2]

ON_DECL ON_2iPoint operator- ( const ON_2iPoint ,
const ON_2iVector  
)

◆ operator-() [2/2]

ON_DECL ON_2iVector operator- ( const ON_2iVector ,
const ON_2iVector  
)

◆ operator<() [1/10]

ON_DECL bool operator< ( const char *  lhs,
const ON_String rhs 
)

Returns: True if lhs is less than rhs as an array of unsigned bytes.

◆ operator<() [2/10]

ON_DECL bool operator< ( const ON_NameHash a,
const ON_NameHash b 
)

Compares id, then length, then SHA-1 digest

◆ operator<() [3/10]

ON_DECL bool operator< ( const ON_String lhs,
const char *  rhs 
)

Returns: True if lhs is less than rhs as an array of unsigned bytes.

◆ operator<() [4/10]

ON_DECL bool operator< ( const ON_String lhs,
const ON_String rhs 
)

Returns: True if lhs is less than rhs as an array of unsigned bytes.

◆ operator<() [5/10]

ON_DECL bool operator< ( const ON_wString lhs,
const ON_wString rhs 
)

Returns: True if lhs is less than rhs as an array of wchar_t elements.

◆ operator<() [6/10]

ON_DECL bool operator< ( const ON_wString lhs,
const wchar_t *  rhs 
)

Returns: True if lhs is less than rhs as an array of wchar_t elements.

◆ operator<() [7/10]

ON_DECL bool operator< ( const wchar_t *  lhs,
const ON_wString rhs 
)

Returns: True if lhs is less than rhs as an array of wchar_t elements.

◆ operator<() [8/10]

ON_DECL bool operator< ( ON_Big5CodePoint  lhs,
ON_Big5CodePoint  rhs 
)

◆ operator<() [9/10]

ON_DECL bool operator< ( ON_SubDSectorId  ,
ON_SubDSectorId   
)

◆ operator<() [10/10]

ON_DECL bool operator< ( ON_UnicodeShortCodePoint  lhs,
ON_UnicodeShortCodePoint  rhs 
)

◆ operator<=() [1/10]

ON_DECL bool operator<= ( const char *  lhs,
const ON_String rhs 
)

Returns: True if lhs is less than or equal to rhs as an array of unsigned bytes.

◆ operator<=() [2/10]

ON_DECL bool operator<= ( const ON_NameHash a,
const ON_NameHash b 
)

Compares id, then length, then SHA-1 digest

◆ operator<=() [3/10]

ON_DECL bool operator<= ( const ON_String lhs,
const char *  rhs 
)

Returns: True if lhs is less than or equal to rhs as an array of unsigned bytes.

◆ operator<=() [4/10]

ON_DECL bool operator<= ( const ON_String lhs,
const ON_String rhs 
)

Returns: True if lhs is less than or equal to rhs as an array of unsigned bytes.

◆ operator<=() [5/10]

ON_DECL bool operator<= ( const ON_wString lhs,
const ON_wString rhs 
)

Returns: True if lhs is less than or equal to rhs as an array of wchar_t elements.

◆ operator<=() [6/10]

ON_DECL bool operator<= ( const ON_wString lhs,
const wchar_t *  rhs 
)

Returns: True if lhs is less than or equal to rhs as an array of wchar_t elements.

◆ operator<=() [7/10]

ON_DECL bool operator<= ( const wchar_t *  lhs,
const ON_wString rhs 
)

Returns: True if lhs is less than or equal to rhs as an array of wchar_t elements.

◆ operator<=() [8/10]

ON_DECL bool operator<= ( ON_Big5CodePoint  lhs,
ON_Big5CodePoint  rhs 
)

◆ operator<=() [9/10]

ON_DECL bool operator<= ( ON_SubDSectorId  ,
ON_SubDSectorId   
)

◆ operator<=() [10/10]

ON_DECL bool operator<= ( ON_UnicodeShortCodePoint  lhs,
ON_UnicodeShortCodePoint  rhs 
)

◆ operator=() [1/3]

template<class T >
ON_ClassArray< T > & ON_ClassArray< T >::operator= ( const ON_ClassArray< T > &  src)

Assignment operator.

◆ operator=() [2/3]

template<class T >
ON_ObjectArray< T > & ON_ObjectArray< T >::operator= ( const ON_ObjectArray< T > &  src)

◆ operator=() [3/3]

template<class T >
ON_SimpleArray< T > & ON_SimpleArray< T >::operator= ( const ON_SimpleArray< T > &  src)

◆ operator==() [1/45]

ON_DECL bool operator== ( const char *  lhs,
const ON_String rhs 
)

Returns: True if lhs and rhs are identical as arrays of char elements.

◆ operator==() [2/45]

ON_DECL bool operator== ( const class ON_ParseSettings a,
const class ON_ParseSettings b 
)

Descriptions: result true if a and b are identical.

◆ operator==() [3/45]

bool operator== ( const class ON_TextMask lhs,
const class ON_TextMask rhs 
)

◆ operator==() [4/45]

ON_DECL bool operator== ( const ON_2dSize lhs,
const ON_2dSize rhs 
)

◆ operator==() [5/45]

ON_DECL bool operator== ( const ON_2iBoundingBox ,
const ON_2iBoundingBox  
)

◆ operator==() [6/45]

ON_DECL bool operator== ( const ON_2iPoint ,
const ON_2iPoint  
)

◆ operator==() [7/45]

ON_DECL bool operator== ( const ON_2iSize lhs,
const ON_2iSize rhs 
)

◆ operator==() [8/45]

ON_DECL bool operator== ( const ON_2iVector ,
const ON_2iVector  
)

◆ operator==() [9/45]

ON_DECL bool operator== ( const ON_4dRect ,
const ON_4dRect  
)

◆ operator==() [10/45]

ON_DECL bool operator== ( const ON_4iRect ,
const ON_4iRect  
)

◆ operator==() [11/45]

ON_DECL bool operator== ( const ON_AngleUnitName a,
const ON_AngleUnitName b 
)

◆ operator==() [12/45]

ON_DECL bool operator== ( const ON_BoundingBox lhs,
const ON_BoundingBox rhs 
)

Returns: True if lhs and rhs are identical.

◆ operator==() [13/45]

ON_DECL bool operator== ( const ON_LengthUnitName a,
const ON_LengthUnitName b 
)

◆ operator==() [14/45]

ON_DECL bool operator== ( const ON_Line a,
const ON_Line b 
)

Returns: True if a and be are identical and no coordinate is a nan.

◆ operator==() [15/45]

ON_DECL bool operator== ( const ON_ManifestMapItem lhs,
const ON_ManifestMapItem rhs 
)

◆ operator==() [16/45]

ON_DECL bool operator== ( const ON_MappingTag lhs,
const ON_MappingTag rhs 
)

◆ operator==() [17/45]

ON_DECL bool operator== ( const ON_Material ,
const ON_Material  
)

◆ operator==() [18/45]

ON_DECL bool operator== ( const ON_MD5_Hash a,
const ON_MD5_Hash b 
)

◆ operator==() [19/45]

ON_DECL bool operator== ( const ON_MeshParameters a,
const ON_MeshParameters b 
)

◆ operator==() [20/45]

bool operator== ( const ON_ModelComponentContentMark lhs,
const ON_ModelComponentContentMark rhs 
)

◆ operator==() [21/45]

ON_DECL bool operator== ( const ON_NameHash a,
const ON_NameHash b 
)

Compares id, then length, then SHA-1 digest

◆ operator==() [22/45]

ON_DECL bool operator== ( const ON_SHA1_Hash a,
const ON_SHA1_Hash b 
)

◆ operator==() [23/45]

ON_DECL bool operator== ( const ON_String lhs,
const char *  rhs 
)

Returns: True if lhs and rhs are identical as arrays of char elements.

◆ operator==() [24/45]

ON_DECL bool operator== ( const ON_String lhs,
const ON_String rhs 
)

Returns: True if lhs and rhs are identical as arrays of char elements.

◆ operator==() [25/45]

ON_DECL bool operator== ( const ON_SubDEdgeSharpness lhs,
const ON_SubDEdgeSharpness rhs 
)

◆ operator==() [26/45]

bool operator== ( const ON_SubDExpandEdgesParameters lhs,
const ON_SubDExpandEdgesParameters rhs 
)

◆ operator==() [27/45]

ON_WIP_DECL bool operator== ( const ON_SubDFaceParameter lhs,
const ON_SubDFaceParameter rhs 
)

◆ operator==() [28/45]

bool operator== ( const ON_SubDHash lhs,
const ON_SubDHash rhs 
)

◆ operator==() [29/45]

bool operator== ( const ON_SubDToBrepParameters lhs,
const ON_SubDToBrepParameters rhs 
)

◆ operator==() [30/45]

ON_DECL bool operator== ( const ON_SurfaceCurvature lhs,
const ON_SurfaceCurvature rhs 
)
Parameters
lhs
rhs
Returns
Returns (lhs.k1==rhs.k1 && lhs.k2==rhs.k2) Note that if any principal curvature is a nan, then false is returned.

◆ operator==() [31/45]

ON_DECL bool operator== ( const ON_SurfaceCurvatureColorMapping lhs,
const ON_SurfaceCurvatureColorMapping rhs 
)

Returns true if all properties of lhs and rhs are identical and no double is a nan.

◆ operator==() [32/45]

ON_DECL bool operator== ( const ON_SurfaceDraftAngleColorMapping lhs,
const ON_SurfaceDraftAngleColorMapping rhs 
)

Returns true if all properties of lhs and rhs are identical and no double is a nan.

◆ operator==() [33/45]

ON_DECL bool operator== ( const ON_Triangle a,
const ON_Triangle b 
)

Returns: True if a and be are identical and no coordinate is a nan.

◆ operator==() [34/45]

ON_DECL bool operator== ( const ON_wString lhs,
const ON_wString rhs 
)

Returns: True if lhs and rhs are identical as arrays of wchar_t elements.

◆ operator==() [35/45]

ON_DECL bool operator== ( const ON_wString lhs,
const wchar_t *  rhs 
)

Returns: True if lhs and rhs are identical as arrays of wchar_t elements.

◆ operator==() [36/45]

bool operator== ( const struct ON_UUID_struct a,
const struct ON_UUID_struct b 
)

basic C++ declarations

NoKeywords

/ / Copyright (c) 1993-2015 Robert McNeel & Associates. All rights reserved. / OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert / McNeel & Associates. / / THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. / ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF / MERCHANTABILITY ARE HEREBY DISCLAIMED. /
/ For complete openNURBS copyright information see http://www.opennurbs.org. / ////////////////////////////////////////////////////////////// basic C++ declarations

◆ operator==() [37/45]

ON_DECL bool operator== ( const wchar_t *  lhs,
const ON_wString rhs 
)

Returns: True if lhs and rhs are identical as arrays of wchar_t elements.

◆ operator==() [38/45]

ON_DECL bool operator== ( ON_Big5CodePoint  lhs,
ON_Big5CodePoint  rhs 
)

◆ operator==() [39/45]

ON_DECL bool operator== ( ON_Big5UnicodePair  lhs,
ON_Big5UnicodePair  rhs 
)

◆ operator==() [40/45]

ON_DECL bool operator== ( ON_SubDComponentPtr  lhs,
ON_SubDComponentPtr  rhs 
)

◆ operator==() [41/45]

ON_DECL bool operator== ( ON_SubDEdgePtr  lhs,
ON_SubDEdgePtr  rhs 
)

◆ operator==() [42/45]

ON_DECL bool operator== ( ON_SubDFacePtr  lhs,
ON_SubDFacePtr  rhs 
)

◆ operator==() [43/45]

ON_DECL bool operator== ( ON_SubDSectorId  ,
ON_SubDSectorId   
)

◆ operator==() [44/45]

ON_DECL bool operator== ( ON_SubDVertexPtr  lhs,
ON_SubDVertexPtr  rhs 
)

◆ operator==() [45/45]

ON_DECL bool operator== ( ON_UnicodeShortCodePoint  lhs,
ON_UnicodeShortCodePoint  rhs 
)

◆ operator>() [1/10]

ON_DECL bool operator> ( const char *  lhs,
const ON_String rhs 
)

Returns: True if lhs is greater than rhs as an array of unsigned bytes.

◆ operator>() [2/10]

ON_DECL bool operator> ( const ON_NameHash a,
const ON_NameHash b 
)

Compares id, then length, then SHA-1 digest

◆ operator>() [3/10]

ON_DECL bool operator> ( const ON_String lhs,
const char *  rhs 
)

Returns: True if lhs is greater than rhs as an array of unsigned bytes.

◆ operator>() [4/10]

ON_DECL bool operator> ( const ON_String lhs,
const ON_String rhs 
)

Returns: True if lhs is greater than rhs as an array of unsigned bytes.

◆ operator>() [5/10]

ON_DECL bool operator> ( const ON_wString lhs,
const ON_wString rhs 
)

Returns: True if lhs is greater than rhs as an array of wchar_t elements.

◆ operator>() [6/10]

ON_DECL bool operator> ( const ON_wString lhs,
const wchar_t *  rhs 
)

Returns: True if lhs is greater than rhs as an array of wchar_t elements.

◆ operator>() [7/10]

ON_DECL bool operator> ( const wchar_t *  lhs,
const ON_wString rhs 
)

Returns: True if lhs is greater than rhs as an array of wchar_t elements.

◆ operator>() [8/10]

ON_DECL bool operator> ( ON_Big5CodePoint  lhs,
ON_Big5CodePoint  rhs 
)

◆ operator>() [9/10]

ON_DECL bool operator> ( ON_SubDSectorId  ,
ON_SubDSectorId   
)

◆ operator>() [10/10]

ON_DECL bool operator> ( ON_UnicodeShortCodePoint  lhs,
ON_UnicodeShortCodePoint  rhs 
)

◆ operator>=() [1/10]

ON_DECL bool operator>= ( const char *  lhs,
const ON_String rhs 
)

Returns: True if lhs is greater than or equal to rhs as an array of unsigned bytes.

◆ operator>=() [2/10]

ON_DECL bool operator>= ( const ON_NameHash a,
const ON_NameHash b 
)

Compares id, then length, then SHA-1 digest

◆ operator>=() [3/10]

ON_DECL bool operator>= ( const ON_String lhs,
const char *  rhs 
)

Returns: True if lhs is greater than or equal to rhs as an array of unsigned bytes.

◆ operator>=() [4/10]

ON_DECL bool operator>= ( const ON_String lhs,
const ON_String rhs 
)

Returns: True if lhs is greater than or equal to rhs as an array of unsigned bytes.

◆ operator>=() [5/10]

ON_DECL bool operator>= ( const ON_wString lhs,
const ON_wString rhs 
)

Returns: True if lhs is greater than or equal to rhs as an array of wchar_t elements.

◆ operator>=() [6/10]

ON_DECL bool operator>= ( const ON_wString lhs,
const wchar_t *  rhs 
)

Returns: True if lhs is greater than or equal to rhs as an array of wchar_t elements.

◆ operator>=() [7/10]

ON_DECL bool operator>= ( const wchar_t *  lhs,
const ON_wString rhs 
)

Returns: True if lhs is greater than or equal to rhs as an array of wchar_t elements.

◆ operator>=() [8/10]

ON_DECL bool operator>= ( ON_Big5CodePoint  lhs,
ON_Big5CodePoint  rhs 
)

◆ operator>=() [9/10]

ON_DECL bool operator>= ( ON_SubDSectorId  ,
ON_SubDSectorId   
)

◆ operator>=() [10/10]

ON_DECL bool operator>= ( ON_UnicodeShortCodePoint  lhs,
ON_UnicodeShortCodePoint  rhs 
)

◆ operator[]() [1/16]

template<class T >
T & ON_SimpleArray< T >::operator[] ( int  i)

The operator[] does to not check for valid indices. The caller is responsible for insuring that 0 <= i < Capacity()

◆ operator[]() [2/16]

template<class T >
T & ON_ClassArray< T >::operator[] ( int  i)

The operator[] does to not check for valid indices. The caller is responsible for insuring that 0 <= i < Capacity()

◆ operator[]() [3/16]

template<class T >
const T & ON_SimpleArray< T >::operator[] ( int  i) const

◆ operator[]() [4/16]

template<class T >
const T & ON_ClassArray< T >::operator[] ( int  i) const

◆ operator[]() [5/16]

template<class T >
T & ON_SimpleArray< T >::operator[] ( ON__INT64  i)

◆ operator[]() [6/16]

template<class T >
T & ON_ClassArray< T >::operator[] ( ON__INT64  i)

◆ operator[]() [7/16]

template<class T >
const T & ON_SimpleArray< T >::operator[] ( ON__INT64  i) const

◆ operator[]() [8/16]

template<class T >
const T & ON_ClassArray< T >::operator[] ( ON__INT64  i) const

◆ operator[]() [9/16]

template<class T >
T & ON_SimpleArray< T >::operator[] ( ON__UINT64  i)

◆ operator[]() [10/16]

template<class T >
T & ON_ClassArray< T >::operator[] ( ON__UINT64  i)

◆ operator[]() [11/16]

template<class T >
const T & ON_SimpleArray< T >::operator[] ( ON__UINT64  i) const

◆ operator[]() [12/16]

template<class T >
const T & ON_ClassArray< T >::operator[] ( ON__UINT64  i) const

◆ operator[]() [13/16]

template<class T >
T & ON_SimpleArray< T >::operator[] ( unsigned int  i)

◆ operator[]() [14/16]

template<class T >
T & ON_ClassArray< T >::operator[] ( unsigned int  i)

◆ operator[]() [15/16]

template<class T >
const T & ON_SimpleArray< T >::operator[] ( unsigned int  i) const

◆ operator[]() [16/16]

template<class T >
const T & ON_ClassArray< T >::operator[] ( unsigned int  i) const

◆ operator||()

ON_DECL ON_ParseSettings operator|| ( const class ON_ParseSettings a,
const class ON_ParseSettings b 
)

Descriptions: result setting value = a setting value AND b setting value Returns: Logical AND of the parse settings in a and b.

◆ Permute() [1/2]

template<class T >
bool ON_SimpleArray< T >::Permute ( const int *  index)

Permutes the array so that output[i] = input[index[i]]. The index[] array should be a permutation of (0,...,Count()-1).

< must use memcopy and not operator=

◆ Permute() [2/2]

template<class T >
bool ON_ClassArray< T >::Permute ( const int *  index)

Permutes the array so that output[i] = input[index[i]]. The index[] array should be a permutation of (0,...,Count()-1).

< must use memcopy and not operator=

◆ Prepend()

template<class T >
void ON_SimpleArray< T >::Prepend ( int  count,
const T *  buffer 
)

Prepend copy of an array T[count].

buffer is in the block of memory about to be reallocated

◆ QueryBoundingBox()

ON_DECL ON_SDFQueryResult QueryBoundingBox ( const ON_BoundingBox bb,
const ON_SignedDistanceFunction sdf,
double  tolerance 
)

these functions are not in any header but need testing

◆ QueryCurveTreeLeaf()

ON_DECL ON_SDFQueryResult QueryCurveTreeLeaf ( const ON_CurveTreeBezier node,
const ON_SignedDistanceFunction sdf,
double  tolerance 
)

◆ QuickSort() [1/3]

template<class T >
bool ON_SimpleArray< T >::QuickSort ( int(*)(const T *, const T *)  compar)

See Also: ON_CompareIncreasing<T> and ON_CompareDeccreasing<T>

Sorts the array using the quick sort algorithm.

◆ QuickSort() [2/3]

template<class T >
bool ON_ClassArray< T >::QuickSort ( int(*)(const T *, const T *)  compar)
virtual

◆ QuickSort() [3/3]

template<class T >
bool ON_ObjectArray< T >::QuickSort ( int(*)(const T *, const T *)  compar)
virtual

virtual ON_ClassArray<T> override that calls MemoryRelocate on each element after the quick sort.

The "this->" in this->m_count and this->m_a are needed for gcc 4 to compile.

The MemoryRelocate step is required to synch userdata back pointers so the user data destructor will work correctly.

Reimplemented from ON_ClassArray< T >.

◆ QuickSortAndRemoveDuplicates()

template<class T >
bool ON_SimpleArray< T >::QuickSortAndRemoveDuplicates ( int(*)(const T *, const T *)  compar)

See Also: ON_CompareIncreasing<T> and ON_CompareDeccreasing<T>

Sorts the array using the quick sort algorithma and then removes duplicates.

< duplicate

◆ Realloc() [1/3]

template<class T >
T * ON_SimpleArray< T >::Realloc ( T *  ptr,
int  capacity 
)
virtual

low level memory management //////////////////////////////////////////

Class ON_SimpleArray<>

By default, ON_SimpleArray<> uses onrealloc() to manage the dynamic array memory. If you want to use something besides onrealloc() to manage the array memory, then override Realloc(). The T* Realloc(ptr, capacity) should do the following:

1) If ptr and capacity are zero, return nullptr. 2) If ptr is nullptr, an capacity > 0, allocate a memory block of capacity*sizeof(T) bytes and return a pointer to this block. If the allocation request fails, return nullptr. 3) If ptr is not nullptr and capacity is 0, free the memory block pointed to by ptr and return nullptr. 4) If ptr is not nullptr and capacity > 0, then reallocate the memory block and return a pointer to the reallocated block. If the reallocation request fails, return nullptr.

NOTE WELL: Microsoft's VC 6.0 realloc() contains a bug that can cause crashes and should be avoided. See MSDN Knowledge Base article ID Q225099 for more information. (re)allocated capacity*sizeof(T) bytes

Copyright (c) 1993-2022 Robert McNeel & Associates. All rights reserved. OpenNURBS, Rhinoceros, and Rhino3D are registered trademarks of Robert McNeel & Associates.

THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE HEREBY DISCLAIMED.

For complete openNURBS copyright information see http://www.opennurbs.org. When this file is parsed with /W4 warnings, two bogus warnings are generated. The ON_ClassArray<T>::DestroyElement template function generates a C4100: 'x' : unreferenced formal parameter warning. This appears to be caused by a bug in the compiler warning code or the way templates are expanded. This pragma is needed squelch the bogus warning. The ON_CompareIncreasing and ON_CompareDecreasing templates generate a C4211: nonstandard extension used : redefined extern to static warning. Microsoft's compiler appears to have a little trouble when static functions are declared before they are defined in a single .cpp file. This pragma is needed squelch the bogus warning. The main reason the definitions of the functions for the ON_SimpleArray and ON_ClassArray templates are in this separate file is so that the Microsoft developer studio autocomplete functions will work on these classes.

This file is included by opennurbs_array.h in the appropriate spot. If you need the definitions in the file, then you should include opennurbs_array.h and let it take care of including this file. construction ////////////////////////////////////////////////////////

◆ Realloc() [2/3]

template<class T >
T * ON_ClassArray< T >::Realloc ( T *  ptr,
int  capacity 
)
virtual

low level memory management ///////////////////////////////////////

Class ON_ClassArray<>

By default, ON_ClassArray<> uses onrealloc() to manage the dynamic array memory. If you want to use something besides onrealloc() to manage the array memory, then override Realloc(). The T* Realloc(ptr, capacity) should do the following:

1) If ptr and capacity are zero, return nullptr. 2) If ptr is nullptr, an capacity > 0, allocate a memory block of capacity*sizeof(T) bytes and return a pointer to this block. If the allocation request fails, return nullptr. 3) If ptr is not nullptr and capacity is 0, free the memory block pointed to by ptr and return nullptr. 4) If ptr is not nullptr and capacity > 0, then reallocate the memory block and return a pointer to the reallocated block. If the reallocation request fails, return nullptr.

NOTE WELL: Microsoft's VC 6.0 realloc() contains a bug that can cause crashes and should be avoided. See MSDN Knowledge Base article ID Q225099 for more information. (re)allocated capacity*sizeof(T) bytes

construction ////////////////////////////////////////////////////////

Reimplemented in ON_ObjectArray< T >, ON_ObjectArray< ON_Texture >, ON_ObjectArray< ON_Linetype >, ON_ObjectArray< ON_Light >, ON_ObjectArray< ON_BrepVertex >, ON_ObjectArray< ON_BrepTrim >, ON_ObjectArray< ON_BrepRegion >, ON_ObjectArray< ON_BrepLoop >, ON_ObjectArray< ON_BrepFaceSide >, ON_ObjectArray< ON_BrepFace >, and ON_ObjectArray< ON_BrepEdge >.

◆ Realloc() [3/3]

template<class T >
T * ON_ObjectArray< T >::Realloc ( T *  ptr,
int  capacity 
)
virtual

virtual ON_ClassArray<T> override that calls MemoryRelocate on each element after the reallocation.

The "this->" in this->m_count and this->m_a are needed for gcc 4 to compile.

Reimplemented from ON_ClassArray< T >.

◆ Remove() [1/4]

template<class T >
void ON_SimpleArray< T >::Remove

Removes last element. Decrements count by 1. Does not change capacity.

◆ Remove() [2/4]

template<class T >
void ON_ClassArray< T >::Remove

Removes last element. Decrements count by 1. Does not change capacity.

◆ Remove() [3/4]

template<class T >
void ON_SimpleArray< T >::Remove ( int  i)
virtual

Removes element. Uses memmove() to perform any necessary shifting. Decrements count by 1. Does not change capacity

◆ Remove() [4/4]

template<class T >
void ON_ClassArray< T >::Remove ( int  i)

Removes element. Uses memmove() to perform any necessary shifting. Decrements count by 1. Does not change capacity

This call to memset is ok even when T has a vtable because in-place construction is used later.

This call to memset is ok even when T has a vtable because in-place construction is used later.

◆ RemoveIf()

template<class T >
void ON_SimpleArray< T >::RemoveIf ( bool   predicateconst T &key)

◆ RemoveValue()

template<class T >
void ON_SimpleArray< T >::RemoveValue ( const T &  key)

Removes elements. Uses memcmp() to compare Decrements count by removed items. Does not change capacity

◆ Reserve() [1/2]

template<class T >
T * ON_SimpleArray< T >::Reserve ( size_t  newcap)

memory management ////////////////////////////////////////////////////

increase capacity to at least the requested value

◆ Reserve() [2/2]

template<class T >
T * ON_ClassArray< T >::Reserve ( size_t  newcap)

memory management /////////////////////////////////////////////////

memory management ////////////////////////////////////////////////////

increase capacity to at least the requested value

◆ Reset()

template<class T >
void ON_SimpleFixedSizePoolIterator< T >::Reset

Description: Sets the state of the iterator to the initial state that exists after construction. This is useful if the iterator has been used the get one or more elements and then the referenced fixed size pool is modified or code wants to begin iteration again a used a call to NextElement() to return the first element.

◆ ReturnAll()

template<class T >
void ON_SimpleFixedSizePool< T >::ReturnAll

Description: Return all allocated elements to the pool. No heap is freed and the pool remains initialized and ready for AllocateElement() to be called.

◆ ReturnElement()

template<class T >
void ON_SimpleFixedSizePool< T >::ReturnElement ( T *  p)

Description: Return an element to the pool. Parameters: p - [in] A pointer returned by AllocateElement(). It is critical that p be from this pool and that you return a pointer no more than one time. Remarks: If you find the following remarks confusing, but you really want to use ReturnElement(), then here are some simple guidelines. 1) SizeofElement() must be >= 16 2) SizeofElement() must be a multiple of 8. 3) Do not use FirstElement() and NextElement() to iterate through the pool.

If 1 to 3 don't work for you, then you need to understand the following information before using ReturnElement().

ON_FixedMemoryPool uses the first sizeof(void*) bytes of the returned element for bookkeeping purposes. Therefore, if you are going to use ReturnElement(), then SizeofElement() must be at least sizeof(void*). If you are using a platform that requires pointers to be aligned on sizeof(void*) boundaries, then SizeofElement() must be a multiple of sizeof(void*). If you are going to use ReturnElement() and then use FirstElement() and NextElement() to iterate through the list of elements, then you need to set a value in the returned element to indicate that it needs to be skipped during the iteration. This value cannot be located in the fist sizeof(void*) bytes of the element. If the element is a class with a vtable, you cannot call a virtual function on a returned element because the vtable pointer is trashed when ReturnElement() modifies the fist sizeof(void*) bytes.

◆ Reverse() [1/2]

template<class T >
void ON_SimpleArray< T >::Reverse

reverse order

NOTE: If anything in "T" depends on the value of this's address, then don't call Reverse().

◆ Reverse() [2/2]

template<class T >
void ON_ClassArray< T >::Reverse

reverse order

NOTE: If anything in "T" depends on the value of this's address, then don't call Reverse().

◆ Search() [1/3]

template<class T >
int ON_SimpleArray< T >::Search ( const T &  key) const

Search( e ) does a SLOW search of the array starting at array[0] and returns the index "i" of the first element that satisfies e == array[i]. (== is really memcmp()). If the search is not successful, then Search() returns -1. For Search(T) to work correctly, T must be a simple type. Use Search(p,compare()) for Ts that are structs/classes that contain pointers. Search() is only suitable for performing infrequent searches of small arrays. Sort the array and use BinarySearch() for performing efficient searches.

◆ Search() [2/3]

template<class T >
int ON_SimpleArray< T >::Search ( const T *  key,
int(*)(const T *, const T *)  compar 
) const

See Also: ON_CompareIncreasing<T> and ON_CompareDeccreasing<T>

Search( p, compare ) does a SLOW search of the array starting at array[0] and returns the index "i" of the first element that satisfies compare(p,&array[i])==0. If the search is not successful, then Search() returns -1. Search() is only suitable for performing infrequent searches of small arrays. Sort the array and use BinarySearch() for performing efficient searches.

◆ Search() [3/3]

template<class T >
int ON_ClassArray< T >::Search ( const T *  key,
int(*)(const T *, const T *)  compar 
) const

Search( p, compare ) does a SLOW search of the array starting at array[0] and returns the index "i" of the first element that satisfies compare(p,&array[i])==0. If the search is not successful, then Search() returns -1. Search() is only suitable for performing infrequent searches of small arrays. Sort the array and use BinarySearch() for performing efficient searches.

◆ SetArray() [1/4]

template<class T >
void ON_SimpleArray< T >::SetArray ( T *  p)

Description: Do not use this version of SetArray(). Use the one that takes a pointer, count and capacity.

◆ SetArray() [2/4]

template<class T >
void ON_ClassArray< T >::SetArray ( T *  p)

Description: Do not use this version of SetArray(). Use the one that takes a pointer, count and capacity: SetArray(pointer,count,capacity)

◆ SetArray() [3/4]

template<class T >
void ON_SimpleArray< T >::SetArray ( T *  p,
int  count,
int  capacity 
)

Description: Expert user tool to set the memory used by the dynamic array. Parameters: T* pointer - [in] int count [in] int capacity - [in] m_a is set to pointer, m_count is set to count, and m_capacity is set to capacity. It is critical that the pointer be one returned by onmalloc(sz), where sz >= capacity*sizeof(T[0]).

◆ SetArray() [4/4]

template<class T >
void ON_ClassArray< T >::SetArray ( T *  p,
int  count,
int  capacity 
)

Description: Expert user tool to set the memory used by the dynamic array. Parameters: T* pointer - [in] int count - [in] 0 <= count <= capacity int capacity - [in] m_a is set to pointer, m_count is set to count, and m_capacity is set to capacity. It is critical that the pointer be one returned by onmalloc(sz), where sz >= capacity*sizeof(T[0]), and that the in-place operator new has been used to initialize each element of the array.

◆ SetCapacity() [1/2]

template<class T >
T * ON_SimpleArray< T >::SetCapacity ( size_t  new_capacity)

Shrink/grows capacity. If value

Allow "expert" users of ON_SimpleArray<>.SetArray(*,*,0) to clean up after themselves and deals with the case when the forget to clean up after themselves.

sets capacity to input value

NOTE: Realloc() does an allocation if the first argument is nullptr.

zero new memory

out of memory

◆ SetCapacity() [2/2]

template<class T >
T * ON_ClassArray< T >::SetCapacity ( size_t  new_capacity)

Shrink/grows capacity. If value

Allow "expert" users of ON_SimpleArray<>.SetArray(*,*,0) to clean up after themselves and deals with the case when the forget to clean up after themselves.

uses "placement" for class construction/destruction

growing

initialize new elements with default constructor

even when m_a is an array of classes with vtable pointers, this call to memset(..., 0, ...) is what I want to do because in-place construction will be used when needed on this memory.

memory allocation failed

shrinking

memory allocation failed

◆ SetCount() [1/2]

template<class T >
void ON_SimpleArray< T >::SetCount ( int  count)

low level memory management //////////////////////////////////////////

If value is <= Capacity(), then sets count to specified value.

◆ SetCount() [2/2]

template<class T >
void ON_ClassArray< T >::SetCount ( int  count)

low level memory management //////////////////////////////////////////

If value is <= Capacity(), then sets count to specified value.

◆ SetRange()

template<class T >
void ON_SimpleArray< T >::SetRange ( int  from,
int  count,
value 
)

Sets all specified items in an array range to a value. Count and capacity are not changed.

◆ Shrink() [1/2]

template<class T >
void ON_SimpleArray< T >::Shrink

remove unused capacity

◆ Shrink() [2/2]

template<class T >
void ON_ClassArray< T >::Shrink

remove unused capacity

◆ SizeOfArray() [1/2]

template<class T >
unsigned int ON_SimpleArray< T >::SizeOfArray

amount of memory in the m_a[] array

◆ SizeOfArray() [2/2]

template<class T >
unsigned int ON_ClassArray< T >::SizeOfArray

amount of memory in the m_a[] array

◆ SizeOfElement() [1/2]

template<class T >
unsigned int ON_SimpleArray< T >::SizeOfElement

amount of memory in an m_a[] array element

◆ SizeOfElement() [2/2]

template<class T >
unsigned int ON_ClassArray< T >::SizeOfElement

amount of memory in an m_a[] array element

◆ SizeofElement()

template<class T >
size_t ON_SimpleFixedSizePool< T >::SizeofElement

Returns: Size of the elements in this pool.

◆ Sort() [1/4]

template<class T >
bool ON_SimpleArray< T >::Sort ( ON::sort_algorithm  sort_algorithm,
int *  index,
int(*)(const T *, const T *)  compar 
) const

Description: Sort() fills in the index[] array so that array[index[i]] <= array[index[i+1]].
The array is not modified.

Parameters: sort_algorithm - [in]
ON::sort_algorithm::quick_sort (best in general) or ON::sort_algorithm::heap_sort Use ON::sort_algorithm::heap_sort only if you have done extensive testing with optimized release builds and are confident heap sort is significantly faster. index - [out] an array of length Count() that is returned with some permutation of (0,1,...,Count()-1). compare - [in] compare function compare(a,b,p) should return <0 if a<b, 0, if a==b, and >0 if a>b. Returns: true if successful

◆ Sort() [2/4]

template<class T >
bool ON_ClassArray< T >::Sort ( ON::sort_algorithm  sort_algorithm,
int *  index,
int(*)(const T *, const T *)  compar 
) const

Description: Sort() fills in the index[] array so that array[index[i]] <= array[index[i+1]].
The array is not modified.

Parameters: sort_algorithm - [in]
ON::sort_algorithm::quick_sort (best in general) or ON::sort_algorithm::heap_sort Use ON::sort_algorithm::heap_sort only if you have done extensive testing with optimized release builds and are confident heap sort is significantly faster. index - [out] an array of length Count() that is returned with some permutation of (0,1,...,Count()-1). compare - [in] compare function compare(a,b) should return <0 if a<b, 0, if a==b, and >0 if a>b.

Returns: true if successful

◆ Sort() [3/4]

template<class T >
bool ON_SimpleArray< T >::Sort ( ON::sort_algorithm  sort_algorithm,
int *  index,
int(*)(const T *, const T *, void *)  compar,
void *  p 
) const

Description: Sort() fills in the index[] array so that array[index[i]] <= array[index[i+1]].
The array is not modified.

Parameters: sort_algorithm - [in]
ON::sort_algorithm::quick_sort (best in general) or ON::sort_algorithm::heap_sort Use ON::sort_algorithm::heap_sort only if you have done extensive testing with optimized release builds and are confident heap sort is significantly faster. index - [out] an array of length Count() that is returned with some permutation of (0,1,...,Count()-1). compare - [in] compare function compare(a,b,p) should return <0 if a<b, 0, if a==b, and >0 if a>b. p - [in] pointer passed as third argument to compare.

Returns: true if successful

Parameters
indexindex[]
comparint compare(const T*,const T*,void* p)
pp

◆ Sort() [4/4]

template<class T >
bool ON_ClassArray< T >::Sort ( ON::sort_algorithm  sort_algorithm,
int *  index,
int(*)(const T *, const T *, void *)  compar,
void *  p 
) const

Description: Sort() fills in the index[] array so that array[index[i]] <= array[index[i+1]].
The array is not modified.

Parameters: sort_algorithm - [in]
ON::sort_algorithm::quick_sort (best in general) or ON::sort_algorithm::heap_sort Use ON::sort_algorithm::heap_sort only if you have done extensive testing with optimized release builds and are confident heap sort is significantly faster. index - [out] an array of length Count() that is returned with some permutation of (0,1,...,Count()-1). compare - [in] compare function compare(a,b,p) should return <0 if a<b, 0, if a==b, and >0 if a>b. p - [in] pointer passed as third argument to compare.

Returns: true if successful

Parameters
indexindex[]
comparint compare(const T*,const T*,void* p)
pp

◆ Swap() [1/2]

template<class T >
void ON_SimpleArray< T >::Swap ( int  i,
int  j 
)

swap elements i and j

◆ Swap() [2/2]

template<class T >
void ON_ClassArray< T >::Swap ( int  i,
int  j 
)

swap elements i and j

◆ SwapBigInts()

static void SwapBigInts ( unsigned char *  a,
unsigned char *  b,
size_t  width 
)
static

◆ SwapChars()

static void SwapChars ( unsigned char *  a,
unsigned char *  b,
size_t  width 
)
static

◆ SwapInts()

static void SwapInts ( unsigned char *  a,
unsigned char *  b,
size_t  width 
)
static

◆ TotalElementCount()

template<class T >
size_t ON_SimpleFixedSizePool< T >::TotalElementCount

Returns: Total number of elements = number of active elements + number of returned elements.

◆ UnsignedCount() [1/2]

template<class T >
unsigned int ON_SimpleArray< T >::UnsignedCount

◆ UnsignedCount() [2/2]

template<class T >
unsigned int ON_ClassArray< T >::UnsignedCount

◆ zcalloc()

ON_BEGIN_EXTERNC voidpf zcalloc ( voidpf  ,
unsigned  ,
unsigned   
)

◆ zcfree()

void zcfree ( voidpf  ,
voidpf   
)

◆ Zero() [1/2]

template<class T >
void ON_SimpleArray< T >::Zero

Zeros all array memory. Count and capacity are not changed.

◆ Zero() [2/2]

template<class T >
void ON_ClassArray< T >::Zero

Destroys all elements and fills them with values set by the default constructor. Count and capacity are not changed.

This call to memset is ok even when T has a vtable because in-place construction is used later.

Variable Documentation

◆ ON_DBL_NINF

const ON_EXTERN_DECL double ON_DBL_NINF

◆ ON_DBL_PINF

const ON_EXTERN_DECL double ON_DBL_PINF

◆ ON_DBL_QNAN

ON_BEGIN_EXTERNC const ON_EXTERN_DECL double ON_DBL_QNAN

IEEE 754 special values.

◆ ON_FLT_NINF

const ON_EXTERN_DECL float ON_FLT_NINF

◆ ON_FLT_PINF

const ON_EXTERN_DECL float ON_FLT_PINF

◆ ON_FLT_QNAN

const ON_EXTERN_DECL float ON_FLT_QNAN

◆ ON_max_uuid

const ON_EXTERN_DECL ON_UUID ON_max_uuid

All bits are one in ON_max_uuid and ON_UuidCompare( U, ON_max_uuid ) < 0 if U != ON_max_uuid.

◆ ON_nil_uuid

All bits are zero in ON_nil_uuid and ON_UuidCompare( ON_nil_uuid, U ) < 0 if U != ON_nil_uuid.

◆ ON_opennurbs_id

const ON_EXTERN_DECL ON_UUID ON_opennurbs_id

Application id for the versions of openNURBS that write userdata in 3dm files. User data whose class definition is in opennurbs should use these ids as the user data application id. No other user data should use these ids.

In situations where you want to use the id for the current version of opennurbs, use ON_opennurbs_id and you won't have to update your code when opennurbs versions roll.

◆ ON_RenderContentType_2DCheckerTexture

ON_DECL ON_UUID ON_RenderContentType_2DCheckerTexture

Render textures.

◆ ON_RenderContentType_3DCheckerTexture

ON_DECL ON_UUID ON_RenderContentType_3DCheckerTexture

◆ ON_RenderContentType_AddTexture

ON_DECL ON_UUID ON_RenderContentType_AddTexture

◆ ON_RenderContentType_AdvancedDotTexture

ON_DECL ON_UUID ON_RenderContentType_AdvancedDotTexture

◆ ON_RenderContentType_BasicEnvironment

ON_DECL ON_UUID ON_RenderContentType_BasicEnvironment

Render environments.

◆ ON_RenderContentType_BitmapTexture

ON_DECL ON_UUID ON_RenderContentType_BitmapTexture

◆ ON_RenderContentType_BlendMaterial

ON_DECL ON_UUID ON_RenderContentType_BlendMaterial

Render materials.

◆ ON_RenderContentType_BlendMaterial_V8

ON_DECL ON_UUID ON_RenderContentType_BlendMaterial_V8

◆ ON_RenderContentType_BlendTexture

ON_DECL ON_UUID ON_RenderContentType_BlendTexture

◆ ON_RenderContentType_CompositeMaterial

ON_DECL ON_UUID ON_RenderContentType_CompositeMaterial

◆ ON_RenderContentType_CrossHatchBumpTexture

ON_DECL ON_UUID ON_RenderContentType_CrossHatchBumpTexture

Simple bump textures.

◆ ON_RenderContentType_CubeMapTexture

ON_DECL ON_UUID ON_RenderContentType_CubeMapTexture

◆ ON_RenderContentType_CustomMaterial

ON_DECL ON_UUID ON_RenderContentType_CustomMaterial

◆ ON_RenderContentType_DefaultEnvironment

ON_DECL ON_UUID ON_RenderContentType_DefaultEnvironment

◆ ON_RenderContentType_DefaultMaterial

ON_DECL ON_UUID ON_RenderContentType_DefaultMaterial

◆ ON_RenderContentType_DisplayAttributeMaterial

ON_DECL ON_UUID ON_RenderContentType_DisplayAttributeMaterial

◆ ON_RenderContentType_DotBumpTexture

ON_DECL ON_UUID ON_RenderContentType_DotBumpTexture

◆ ON_RenderContentType_DoubleSidedMaterial

ON_DECL ON_UUID ON_RenderContentType_DoubleSidedMaterial

◆ ON_RenderContentType_EmissionMaterial

ON_DECL ON_UUID ON_RenderContentType_EmissionMaterial

◆ ON_RenderContentType_ExposureTexture

ON_DECL ON_UUID ON_RenderContentType_ExposureTexture

◆ ON_RenderContentType_FBmTexture

ON_DECL ON_UUID ON_RenderContentType_FBmTexture

◆ ON_RenderContentType_GemMaterial

ON_DECL ON_UUID ON_RenderContentType_GemMaterial

◆ ON_RenderContentType_GlassMaterial

ON_DECL ON_UUID ON_RenderContentType_GlassMaterial

◆ ON_RenderContentType_GradientTexture

ON_DECL ON_UUID ON_RenderContentType_GradientTexture

◆ ON_RenderContentType_GraniteTexture

ON_DECL ON_UUID ON_RenderContentType_GraniteTexture

◆ ON_RenderContentType_GridTexture

ON_DECL ON_UUID ON_RenderContentType_GridTexture

◆ ON_RenderContentType_GritBumpTexture

ON_DECL ON_UUID ON_RenderContentType_GritBumpTexture

◆ ON_RenderContentType_HatchBumpTexture

ON_DECL ON_UUID ON_RenderContentType_HatchBumpTexture

◆ ON_RenderContentType_HDRTexture

ON_DECL ON_UUID ON_RenderContentType_HDRTexture

◆ ON_RenderContentType_LeatherBumpTexture

ON_DECL ON_UUID ON_RenderContentType_LeatherBumpTexture

◆ ON_RenderContentType_MarbleTexture

ON_DECL ON_UUID ON_RenderContentType_MarbleTexture

◆ ON_RenderContentType_MaskTexture

ON_DECL ON_UUID ON_RenderContentType_MaskTexture

◆ ON_RenderContentType_MetalMaterial

ON_DECL ON_UUID ON_RenderContentType_MetalMaterial

◆ ON_RenderContentType_MultiplyTexture

ON_DECL ON_UUID ON_RenderContentType_MultiplyTexture

◆ ON_RenderContentType_NoiseTexture

ON_DECL ON_UUID ON_RenderContentType_NoiseTexture

◆ ON_RenderContentType_PaintMaterial

ON_DECL ON_UUID ON_RenderContentType_PaintMaterial

◆ ON_RenderContentType_PerlinMarbleTexture

ON_DECL ON_UUID ON_RenderContentType_PerlinMarbleTexture

◆ ON_RenderContentType_PerturbingTexture

ON_DECL ON_UUID ON_RenderContentType_PerturbingTexture

◆ ON_RenderContentType_PhysicallyBasedMaterial

ON_DECL ON_UUID ON_RenderContentType_PhysicallyBasedMaterial

◆ ON_RenderContentType_PhysicalSkyTexture

ON_DECL ON_UUID ON_RenderContentType_PhysicalSkyTexture

◆ ON_RenderContentType_PictureMaterial

ON_DECL ON_UUID ON_RenderContentType_PictureMaterial

◆ ON_RenderContentType_PlasterMaterial

ON_DECL ON_UUID ON_RenderContentType_PlasterMaterial

◆ ON_RenderContentType_PlasticMaterial

ON_DECL ON_UUID ON_RenderContentType_PlasticMaterial

◆ ON_RenderContentType_ProjectionChangerTexture

ON_DECL ON_UUID ON_RenderContentType_ProjectionChangerTexture

◆ ON_RenderContentType_RealtimeDisplayMaterial

ON_DECL ON_UUID ON_RenderContentType_RealtimeDisplayMaterial

Display material used to support front and back materials for realtime rendering in the viewport.

◆ ON_RenderContentType_ResampleTexture

ON_DECL ON_UUID ON_RenderContentType_ResampleTexture

◆ ON_RenderContentType_SimpleBitmapTexture

ON_DECL ON_UUID ON_RenderContentType_SimpleBitmapTexture

◆ ON_RenderContentType_SingleColorTexture

ON_DECL ON_UUID ON_RenderContentType_SingleColorTexture

◆ ON_RenderContentType_SpeckleBumpTexture

ON_DECL ON_UUID ON_RenderContentType_SpeckleBumpTexture

◆ ON_RenderContentType_StuccoTexture

ON_DECL ON_UUID ON_RenderContentType_StuccoTexture

◆ ON_RenderContentType_TextureAdjustmentTexture

ON_DECL ON_UUID ON_RenderContentType_TextureAdjustmentTexture

◆ ON_RenderContentType_TileTexture

ON_DECL ON_UUID ON_RenderContentType_TileTexture

◆ ON_RenderContentType_TurbulenceTexture

ON_DECL ON_UUID ON_RenderContentType_TurbulenceTexture

◆ ON_RenderContentType_WavesTexture

ON_DECL ON_UUID ON_RenderContentType_WavesTexture

◆ ON_RenderContentType_WoodBumpTexture

ON_DECL ON_UUID ON_RenderContentType_WoodBumpTexture

◆ ON_RenderContentType_WoodTexture

ON_DECL ON_UUID ON_RenderContentType_WoodTexture

◆ ON_rhino2_id

const ON_EXTERN_DECL ON_UUID ON_rhino2_id

Application ids for the versions of Rhino that write 3dm files. All userdata classed defined in the core Rhino.exe should use these ids as the application id. In situations where you want to use the id for the current version of Rhino, use ON_rhino_id and you won't have to update your code when Rhino versions roll.

◆ ON_rhino3_id

const ON_EXTERN_DECL ON_UUID ON_rhino3_id

◆ ON_rhino4_id

const ON_EXTERN_DECL ON_UUID ON_rhino4_id

◆ ON_rhino5_id

const ON_EXTERN_DECL ON_UUID ON_rhino5_id

◆ ON_rhino6_id

const ON_EXTERN_DECL ON_UUID ON_rhino6_id

◆ ON_rhino7_id

const ON_EXTERN_DECL ON_UUID ON_rhino7_id

◆ ON_rhino8_id

const ON_EXTERN_DECL ON_UUID ON_rhino8_id

◆ ON_rhino_id

const ON_EXTERN_DECL ON_UUID ON_rhino_id

◆ ON_UniversalRenderEngineId

ON_DECL ON_UUID ON_UniversalRenderEngineId

Universal render engine id. Set as ON_Material plug-in id when using ON_RenderContentType_* ids in ON_Material::SetRdkMaterialInstanceId().

◆ ON_UuidDefaultEnvironmentInstance

ON_DECL ON_UUID ON_UuidDefaultEnvironmentInstance

◆ ON_UuidDefaultMaterialInstance

ON_DECL ON_UUID ON_UuidDefaultMaterialInstance

◆ ON_v2_userdata_id

const ON_EXTERN_DECL ON_UUID ON_v2_userdata_id

Application ids for userdata written by versions of opennurbs before userdata had application ids.

◆ ON_v3_userdata_id

const ON_EXTERN_DECL ON_UUID ON_v3_userdata_id

◆ ON_v4_userdata_id

const ON_EXTERN_DECL ON_UUID ON_v4_userdata_id

◆ ON_xy_plane

const ON_EXTERN_DECL ON_Plane ON_xy_plane

◆ ON_yz_plane

const ON_EXTERN_DECL ON_Plane ON_yz_plane

◆ ON_zx_plane

const ON_EXTERN_DECL ON_Plane ON_zx_plane
TCODE_TABLE
#define TCODE_TABLE
Definition: opennurbs_3dm.h:77
ON_Object
Definition: opennurbs_object.h:464
ON_VERSION_NUMBER_TIME
#define ON_VERSION_NUMBER_TIME(year, month, day_of_month)
Definition: opennurbs_version.h:171
ON_VERSION_NUMBER_CTOR
#define ON_VERSION_NUMBER_CTOR(major, minor, year, month, day_of_month, branch)
Definition: opennurbs_version.h:209
ON_Object::IsKindOf
bool IsKindOf(const ON_ClassId *pClassId) const
OPENNURBS_VERSION_YEAR
#define OPENNURBS_VERSION_YEAR
Definition: opennurbs_version.h:79
ON_VERSION_NUMBER_FEBDAYS
#define ON_VERSION_NUMBER_FEBDAYS(year)
Definition: opennurbs_version.h:139
ON_VERSION_NUMBER_PLATFORM_ID
#define ON_VERSION_NUMBER_PLATFORM_ID(branch)
Definition: opennurbs_version.h:193
OPENNURBS_VERSION_BRANCH
#define OPENNURBS_VERSION_BRANCH
Definition: opennurbs_version.h:106
OPENNURBS_VERSION_MONTH
#define OPENNURBS_VERSION_MONTH
Definition: opennurbs_version.h:80
ON_ClassId
used for runtime class identification
Definition: opennurbs_object.h:44
OPENNURBS_VERSION_DAY_OF_MONTH
#define OPENNURBS_VERSION_DAY_OF_MONTH
Definition: opennurbs_version.h:81
OPENNURBS_VERSION_MAJOR
#define OPENNURBS_VERSION_MAJOR
Definition: opennurbs_version.h:69
OPENNURBS_VERSION_MINOR
#define OPENNURBS_VERSION_MINOR
Definition: opennurbs_version.h:70