Document — OCAF Attributes, Naming & Elementary Geometry
This page covers the OCAF attribute types, shape-naming extensions, geometry helpers, and elementary curve/surface utilities declared in Document.swift. See the main Document page for lifecycle, I/O, label management, and the core XCAF operations.
Topics
- Message_Report · RWMesh_CoordinateSystemConverter · TDF_IDFilter · TDataStd_BooleanArray · TDataStd_BooleanList · TDataStd_ByteArray · TDataStd_IntegerList · TDataStd_RealList · TDataStd_ExtStringArray · TDataStd_ExtStringList · TDataStd_ReferenceArray · TDataStd_ReferenceList · TDataStd_Relation · ShapeFix_Solid · ShapeFix_EdgeConnect · BRepOffsetAPI_FindContigousEdges · TDataStd_Tick · TDataStd_Current · ShapeAnalysis_Shell · ShapeAnalysis_CanonicalRecognition · Geom_Transformation · Geom_OffsetCurve · Geom_RectangularTrimmedSurface · TNaming Extensions · TDataStd_IntPackedMap · TDataStd_NoteBook · TDataStd_UAttribute · TDataStd_ChildNodeIterator · TDF_Transaction Named · TDF_ComparisonTool · TDocStd_XLinkTool · TFunction_IFunction · TFunction_Scope · TDF_AttributeIterator · TDF_ChildIDIterator · TDocStd_PathParser · TFunction_DriverTable · TNaming_Scope · TNaming_Translator · TDataXtd_Placement · TDataXtd_Presentation · XCAFDoc_AssemblyIterator · XCAFDoc_DimTol · IntTools_Tools · ElCLib · ElSLib · Internal Storage
Message_Report
Swift class: Report (maps to Message_Report). A collection of alerts produced during an operation, queryable by gravity level.
Report.init?()
Create a new empty Message_Report.
public init?()
- Returns: A new empty report, or
nilif OCCT allocation failed. - OCCT:
Message_Reportconstructor. - Example:
if let report = Report() { // use report.dump() after an operation }
Report.limit
Maximum number of alerts the report will collect before discarding further ones.
public var limit: Int { get set }
- OCCT:
Message_Report::GetLimit/Message_Report::SetLimit. - Example:
report.limit = 100
Report.clear()
Remove all alerts from the report.
public func clear()
- OCCT:
Message_Report::Clear.
Report.clear(gravity:)
Remove alerts of a specific gravity.
public func clear(gravity: Messenger.Gravity)
- Parameters:
gravity— the severity level whose alerts should be removed. - OCCT:
Message_Report::Clear(Message_Gravity).
Report.dump()
Serialise all alerts in the report to a human-readable string.
public func dump() -> String
- Returns: Multi-line string; empty if the report contains no alerts.
- OCCT:
Message_Report::Dump. - Example:
if let report = Report() { print(report.dump()) }
Report.dump(gravity:)
Serialise only alerts at the given gravity level.
public func dump(gravity: Messenger.Gravity) -> String
- Parameters:
gravity— the severity level to include. - Returns: Filtered dump string; empty if no matching alerts.
- OCCT:
Message_Report::Dump(Message_Gravity, …).
RWMesh_CoordinateSystemConverter
Two free functions (module-level) for converting points between Z-up and Y-up coordinate systems with explicit unit scaling.
CoordinateSystem
Which axis mesh I/O treats as “up”.
public enum CoordinateSystem: Int32, Sendable {
case zUp = 0
case yUp = 1
}
| Case | Meaning |
|---|---|
.zUp | Z axis is up; up direction is (0, 0, 1). |
.yUp | Y axis is up; up direction is (0, 1, 0). |
CoordinateSystem.yUp
convertCoordinateSystem(x:y:z:from:inputUnit:to:outputUnit:)
Convert a 3D point between two coordinate systems with unit scaling.
public func convertCoordinateSystem(
x: Double, y: Double, z: Double,
from inputSystem: CoordinateSystem,
inputUnit: Double,
to outputSystem: CoordinateSystem,
outputUnit: Double
) -> SIMD3<Double>
- Parameters:
x,y,z— point in the input system.inputSystem—.zUpor.yUp.inputUnit— scale factor of the input unit (e.g.0.001for mm→m).outputSystem— target coordinate system.outputUnit— scale factor of the output unit.
- Returns: Point expressed in the output system.
- OCCT:
RWMesh_CoordinateSystemConverter::TransformPoint. - Example:
let pt = convertCoordinateSystem(x: 0, y: 1, z: 0, from: .yUp, inputUnit: 1.0, to: .zUp, outputUnit: 1.0) // pt ≈ SIMD3(0, 0, 1)
coordinateSystemUpDirection(_:)
Return the up-axis direction vector for a coordinate system.
public func coordinateSystemUpDirection(_ system: CoordinateSystem) -> SIMD3<Double>
- Parameters:
system—.zUpor.yUp. - Returns: Unit vector for the up axis (
(0,0,1)for.zUp,(0,1,0)for.yUp). - OCCT:
RWMesh_CoordinateSystemConverteraxis query.
TDF_IDFilter
IDFilter.init?(ignoreAll:)
Create an attribute-ID filter governing which GUID-keyed attributes are included or excluded during OCAF copy/paste operations.
public init?(ignoreAll: Bool = true)
- Parameters:
ignoreAll— whentruethe filter starts in deny-all mode and only GUIDs explicitlykeep-ed pass through; whenfalseit starts in allow-all mode and onlyignore-ed GUIDs are excluded. - Returns: A configured filter, or
nilon allocation failure. - OCCT:
TDF_IDFilterconstructor. - Example:
if let f = IDFilter(ignoreAll: true) { f.keep("2a96b614-ec8b-11d0-bee7-080009dc3333") }
IDFilter.isIgnoreAll
Whether the filter is in deny-all (ignore-all) mode.
public var isIgnoreAll: Bool { get set }
- OCCT:
TDF_IDFilter::IgnoreAll/TDF_IDFilter::IgnoreAll(Standard_Boolean).
IDFilter.keep(_:)
Mark a GUID as kept (active in ignore-all mode).
public func keep(_ guidString: String)
- Parameters:
guidString— GUID in standard hyphenated form. - OCCT:
TDF_IDFilter::Keep.
IDFilter.ignore(_:)
Mark a GUID as ignored (active in keep-all mode).
public func ignore(_ guidString: String)
- Parameters:
guidString— GUID in standard hyphenated form. - OCCT:
TDF_IDFilter::Ignore.
IDFilter.isKept(_:)
Return true if the given GUID would pass the filter.
public func isKept(_ guidString: String) -> Bool
- OCCT:
TDF_IDFilter::IsKept.
IDFilter.isIgnored(_:)
Return true if the given GUID is excluded by the filter.
public func isIgnored(_ guidString: String) -> Bool
- OCCT:
TDF_IDFilter::IsIgnored.
TDataStd_BooleanArray
Methods on Document that store and retrieve a TDataStd_BooleanArray attribute on a numbered label. The array is 1-based internally; the Swift API takes zero-based [Bool] arrays.
setBooleanArray(tag:values:)
Store a Bool array on a label.
func setBooleanArray(tag: Int, values: [Bool]) -> Bool
- Parameters:
tag— label tag;values— array to store. - Returns:
trueon success. - OCCT:
TDataStd_BooleanArray::Set. - Example:
doc.setBooleanArray(tag: 10, values: [true, false, true])
booleanArray(tag:)
Retrieve the stored Bool array.
func booleanArray(tag: Int) -> [Bool]?
- Returns: The array,
[]if empty, ornilif no attribute exists. - OCCT:
TDataStd_BooleanArray.
hasBooleanArray(tag:)
Check whether a TDataStd_BooleanArray attribute exists.
func hasBooleanArray(tag: Int) -> Bool
- OCCT:
TDF_Label::FindAttribute.
TDataStd_BooleanList
setBooleanList(tag:values:)
Store a Bool list attribute on a label.
func setBooleanList(tag: Int, values: [Bool]) -> Bool
- OCCT:
TDataStd_BooleanList::Set.
booleanList(tag:)
Retrieve the stored Bool list.
func booleanList(tag: Int) -> [Bool]?
- Returns: The list,
[]if empty, ornilif not present. - OCCT:
TDataStd_BooleanList.
booleanListAppend(tag:value:)
Append one value to an existing Bool list attribute.
func booleanListAppend(tag: Int, value: Bool) -> Bool
- OCCT:
TDataStd_BooleanList::Append.
booleanListClear(tag:)
Remove all entries from the Bool list attribute.
func booleanListClear(tag: Int) -> Bool
- OCCT:
TDataStd_BooleanList::Clear.
hasBooleanList(tag:)
Check whether a TDataStd_BooleanList attribute exists.
func hasBooleanList(tag: Int) -> Bool
TDataStd_ByteArray
setByteArray(tag:values:)
Store a UInt8 array attribute on a label.
func setByteArray(tag: Int, values: [UInt8]) -> Bool
- OCCT:
TDataStd_ByteArray::Set. - Example:
doc.setByteArray(tag: 20, values: [0xDE, 0xAD, 0xBE, 0xEF])
byteArray(tag:)
Retrieve the stored byte array.
func byteArray(tag: Int) -> [UInt8]?
- Returns: The array,
[]if empty, ornilif not present. - OCCT:
TDataStd_ByteArray.
hasByteArray(tag:)
Check whether a TDataStd_ByteArray attribute exists.
func hasByteArray(tag: Int) -> Bool
TDataStd_IntegerList
setIntegerList(tag:values:)
Store an Int32 list attribute on a label.
func setIntegerList(tag: Int, values: [Int32]) -> Bool
- OCCT:
TDataStd_IntegerList::Set.
integerList(tag:)
Retrieve the stored Int32 list.
func integerList(tag: Int) -> [Int32]?
- Returns: The list,
[]if empty, ornilif not present. - OCCT:
TDataStd_IntegerList.
integerListAppend(tag:value:)
Append one integer to an existing list attribute.
func integerListAppend(tag: Int, value: Int32) -> Bool
- OCCT:
TDataStd_IntegerList::Append.
integerListClear(tag:)
Remove all entries from the integer list attribute.
func integerListClear(tag: Int) -> Bool
- OCCT:
TDataStd_IntegerList::Clear.
hasIntegerList(tag:)
Check whether a TDataStd_IntegerList attribute exists.
func hasIntegerList(tag: Int) -> Bool
TDataStd_RealList
setRealList(tag:values:)
Store a Double list attribute on a label.
func setRealList(tag: Int, values: [Double]) -> Bool
- OCCT:
TDataStd_RealList::Set.
realList(tag:)
Retrieve the stored Double list.
func realList(tag: Int) -> [Double]?
- Returns: The list,
[]if empty, ornilif not present. - OCCT:
TDataStd_RealList.
realListAppend(tag:value:)
Append one real value to an existing list attribute.
func realListAppend(tag: Int, value: Double) -> Bool
- OCCT:
TDataStd_RealList::Append.
realListClear(tag:)
Remove all entries from the real list attribute.
func realListClear(tag: Int) -> Bool
- OCCT:
TDataStd_RealList::Clear.
hasRealList(tag:)
Check whether a TDataStd_RealList attribute exists.
func hasRealList(tag: Int) -> Bool
TDataStd_ExtStringArray
The array is 1-based; index in element accessors follows that convention.
setExtStringArray(tag:values:)
Store a String array attribute on a label.
func setExtStringArray(tag: Int, values: [String]) -> Bool
- OCCT:
TDataStd_ExtStringArray::Set. - Example:
doc.setExtStringArray(tag: 30, values: ["alpha", "beta", "gamma"])
extStringArrayValue(tag:index:)
Retrieve one element from the string array by 1-based index.
func extStringArrayValue(tag: Int, index: Int) -> String?
- Parameters:
index— 1-based position. - Returns: The string at that position, or
nilif out of range or attribute missing. - OCCT:
TDataStd_ExtStringArray::Value.
extStringArrayLength(tag:)
Return the number of elements in the string array.
func extStringArrayLength(tag: Int) -> Int?
- Returns: Element count, or
nilif no attribute exists. - OCCT:
TDataStd_ExtStringArray::Length.
hasExtStringArray(tag:)
Check whether a TDataStd_ExtStringArray attribute exists.
func hasExtStringArray(tag: Int) -> Bool
TDataStd_ExtStringList
Elements are 0-based in the Swift API.
setExtStringList(tag:values:)
Store a String list attribute on a label (replaces any existing list).
func setExtStringList(tag: Int, values: [String]) -> Bool
- OCCT:
TDataStd_ExtStringList::Set.
extStringListCount(tag:)
Return the number of elements in the string list.
func extStringListCount(tag: Int) -> Int?
- Returns: Element count, or
nilif not present. - OCCT:
TDataStd_ExtStringList::Extent.
extStringListValue(tag:index:)
Retrieve one element from the string list by 0-based index.
func extStringListValue(tag: Int, index: Int) -> String?
- Parameters:
index— 0-based position. - Returns: The string, or
nilif out of range or attribute missing. - OCCT:
TDataStd_ExtStringListiteration.
extStringListAppend(tag:value:)
Append a string to an existing string list attribute.
func extStringListAppend(tag: Int, value: String) -> Bool
- OCCT:
TDataStd_ExtStringList::Append.
extStringListClear(tag:)
Remove all entries from the string list attribute.
func extStringListClear(tag: Int) -> Bool
- OCCT:
TDataStd_ExtStringList::Clear.
hasExtStringList(tag:)
Check whether a TDataStd_ExtStringList attribute exists.
func hasExtStringList(tag: Int) -> Bool
TDataStd_ReferenceArray
Label cross-references stored as Int32 tag arrays; the array is 1-based internally.
setReferenceArray(tag:refTags:)
Store a reference array (list of label tags) on a label.
func setReferenceArray(tag: Int, refTags: [Int32]) -> Bool
- OCCT:
TDataStd_ReferenceArray::Set.
referenceArray(tag:)
Retrieve the stored reference array.
func referenceArray(tag: Int) -> [Int32]?
- Returns: Array of label tags,
[]if empty, ornilif not present. - OCCT:
TDataStd_ReferenceArray.
hasReferenceArray(tag:)
Check whether a TDataStd_ReferenceArray attribute exists.
func hasReferenceArray(tag: Int) -> Bool
TDataStd_ReferenceList
setReferenceList(tag:refTags:)
Store a reference list (list of label tags) on a label.
func setReferenceList(tag: Int, refTags: [Int32]) -> Bool
- OCCT:
TDataStd_ReferenceList::Set.
referenceList(tag:)
Retrieve the stored reference list.
func referenceList(tag: Int) -> [Int32]?
- Returns: Array of label tags,
[]if empty, ornilif not present. - OCCT:
TDataStd_ReferenceList.
referenceListAppend(tag:refTag:)
Append a single label tag to the reference list attribute.
func referenceListAppend(tag: Int, refTag: Int32) -> Bool
- OCCT:
TDataStd_ReferenceList::Append.
referenceListClear(tag:)
Remove all entries from the reference list attribute.
func referenceListClear(tag: Int) -> Bool
- OCCT:
TDataStd_ReferenceList::Clear.
hasReferenceList(tag:)
Check whether a TDataStd_ReferenceList attribute exists.
func hasReferenceList(tag: Int) -> Bool
TDataStd_Relation
A single expression string attached to a label; used by parametric solvers to record constraints.
setRelation(tag:relation:)
Attach a relation expression string to a label.
func setRelation(tag: Int, relation: String) -> Bool
- OCCT:
TDataStd_Relation::Set. - Example:
doc.setRelation(tag: 5, relation: "width = height / 2")
relation(tag:)
Retrieve the relation string stored on a label.
func relation(tag: Int) -> String?
- Returns: The expression string, or
nilif no attribute exists. - OCCT:
TDataStd_Relation::GetRelation.
hasRelation(tag:)
Check whether a TDataStd_Relation attribute exists.
func hasRelation(tag: Int) -> Bool
ShapeFix_Solid
Extensions on Shape that wrap ShapeFix_Solid healing.
Shape.fixSolid()
Fix topology and orientation problems in a solid shape.
public func fixSolid() -> Shape?
Every solid in the receiver is healed, not just the first (#442): a single-body input comes back as a solid, a multi-body one as a compound of one result per input body, in exploration order. A compound result is not new to this call — ShapeFix_Solid already returns one when a single solid’s shells resolve into several bodies.
Only the receiver’s solids are visited. Loose shells, faces or wires sitting alongside them in a compound are not carried over, and an input holding no solid at all returns nil. To heal a whole shape of mixed content instead, use fixed(tolerance:fixSolid:fixShell:fixFace:fixWire:), which wraps ShapeFix_Shape and preserves everything it is given.
A result body is usually a healed solid, but not always — and no body is ever dropped to make that true.
ShapeFix_Solidhands back a shell when it cannot close one into a solid, and a solid it fails to heal outright is returned unhealed rather than discarded. Soresult.solids.countcan be lower than the number of input bodies even though nothing was lost.
To spot an unclosed body, walk the result’s direct children. Do not use subShapes(ofType: .shell): it maps at every depth, so it reports one shell for every healthy solid too — a compound of two healed solids has two shells, and a single healed solid has one.
let healed = part.fixSolid()!
let bodies = (0..<healed.nbChildren).compactMap { healed.child(at: $0) }
let unclosed = bodies.filter { $0.shapeType == .shell }
When a single body came back, the result is that body rather than a compound, so healed.shapeType == .shell answers it directly. A body that came back unhealed is still a solid — use isValid for that.
- Returns: The repaired body, a compound of one result per input body for multi-body input, or
nilif the receiver holds no solid. - OCCT:
ShapeFix_Solid::Perform. - Example:
if let solid = importedShape.fixSolid() { // solid.isValid == true } // Multi-body input: both bodies are healed, not just the first. let a = Shape.box(origin: SIMD3(0, 0, 0), width: 10, height: 10, depth: 10)! let b = Shape.box(origin: SIMD3(20, 0, 0), width: 10, height: 10, depth: 10)! let healed = Shape.compound([a, b])!.fixSolid()! print(healed.solids.count) // 2 print(healed.volume!) // 2000.0
Shape.solidFromShellFixed()
Create a closed solid from a shell, using ShapeFix_Solid to orient and close the shell.
public func solidFromShellFixed() -> Shape?
One solid is built per body-bounding shell, not just the first shell found (#442): every shell that an even number of the other shells in its group enclose, where a group is one solid’s own shells, or all the shells belonging to no solid (the usual shape of sewing output). A single body comes back as a solid, several as a compound in exploration order. Shape.solid(from:) makes the same selection, so the two agree on any input.
Cavity shells are deliberately skipped: a hole is not a body, and building it as a positive solid would yield a compound whose volume double-counts the part. So a hollow solid produces one solid bounded by its outer shell, with the cavity filled, and so does that same body after sewing has left its two shells free, since the free-shell group goes through the same parity pass (#443). A body nested inside another body’s cavity is enclosed twice, so it is still read as a body. To rebuild a solid that keeps its cavities, use Shape.solidFromShells(_:) with the outer shell first.
An open shell is not rejected.
ShapeFix_Solid::SolidFromShellbuilds its solid before classifying anything and never returns a null one, so a shell with gaps comes back as a solid that is not closed rather than asnil. CheckisValidor sew first if the input may be open.
- Returns: A solid, a compound of solids for multi-body input, or
nilonly if the receiver holds no shell at all. - OCCT:
ShapeFix_Solid::SolidFromShell. - Example:
// Two sewn bodies in one compound — one solid per shell. let quilt = Shape.compound([shellA, shellB])! let solids = quilt.solidFromShellFixed()! print(solids.solids.count) // 2
ShapeFix_EdgeConnect
Shape.fixEdgeConnect()
Connect edges in a shape by extending or trimming them to meet at their endpoints.
public func fixEdgeConnect() -> Shape?
- Returns: The repaired shape, or
nilon failure. - OCCT:
ShapeFix_EdgeConnect::Build.
BRepOffsetAPI_FindContigousEdges
Shape.ContigousEdgeResult
Result value type returned by findContigousEdges(tolerance:).
public struct ContigousEdgeResult: Sendable {
public let contigousEdgeCount: Int
public let degeneratedShapeCount: Int
}
| Field | Meaning |
|---|---|
contigousEdgeCount | Number of edge pairs found to be geometrically contiguous. |
degeneratedShapeCount | Number of degenerate sub-shapes encountered. |
(Per-field anchors below, for cross-reference; the table above has the actual meaning of each.)
degeneratedShapeCount
Shape.findContigousEdges(tolerance:)
Find contiguous (sewable) edge pairs in a shape within the given tolerance.
public func findContigousEdges(tolerance: Double = 1.0e-6) -> ContigousEdgeResult
- Parameters:
tolerance— maximum gap between edge endpoints to be considered contiguous. - Returns: A
ContigousEdgeResultwith counts; always succeeds (returns zero counts if none found). - OCCT:
BRepOffsetAPI_FindContigousEdges::Perform. - Example:
let result = myShell.findContigousEdges(tolerance: 1e-5) print("contiguous pairs:", result.contigousEdgeCount)
TDataStd_Tick
A presence-only boolean flag attribute (no value — its existence on a label is the signal).
setTick(tag:)
Attach a tick (marker) attribute to a label.
func setTick(tag: Int) -> Bool
- Returns:
trueon success. - OCCT:
TDataStd_Tick::Set.
hasTick(tag:)
Check whether a tick attribute is present on a label.
func hasTick(tag: Int) -> Bool
- OCCT:
TDF_Label::FindAttribute.
removeTick(tag:)
Remove the tick attribute from a label.
func removeTick(tag: Int) -> Bool
- OCCT:
TDF_Label::ForgetAttribute.
TDataStd_Current
Marks one label in the document as the “current” label — a document-wide cursor concept used by some interactive tools.
setCurrentLabel(tag:)
Make a label the current label.
func setCurrentLabel(tag: Int) -> Bool
- Returns:
trueon success. - OCCT:
TDataStd_Current::Set.
currentLabel()
Return the tag of the current label.
func currentLabel() -> Int?
- Returns: Tag integer, or
nilif no current label is set. - OCCT:
TDataStd_Current::Get.
hasCurrentLabel()
Check whether the document has a current label set.
func hasCurrentLabel() -> Bool
- OCCT:
TDataStd_Currentattribute presence check.
ShapeAnalysis_Shell
Shape.ShellAnalysisResult
Result value type returned by analyzeShell().
public struct ShellAnalysisResult: Sendable {
public let hasOrientationProblems: Bool
public let hasFreeEdges: Bool
public let hasBadEdges: Bool
public let hasConnectedEdges: Bool
public let freeEdgeCount: Int
}
| Field | Meaning |
|---|---|
hasOrientationProblems | true if adjoining faces disagree on orientation somewhere in the shell. |
hasFreeEdges | true if the shell has at least one edge used by only one face (an open boundary). |
hasBadEdges | true if the shell contains edges ShapeAnalysis_Shell flags as otherwise defective. |
hasConnectedEdges | true if the shell’s edges are properly connected into a consistent network. |
freeEdgeCount | Number of free (single-face) edges found; the same count hasFreeEdges is derived from. |
(Per-field anchors below, for cross-reference; the table above has the actual meaning of each.)
freeEdgeCount
Shape.analyzeShell()
Analyse shell orientation and edge connectivity.
public func analyzeShell() -> ShellAnalysisResult
- Returns: A
ShellAnalysisResultwith flags and counts; always returns (checks never throw). - OCCT:
ShapeAnalysis_Shell::CheckOrientedShells. - Example:
let info = shell.analyzeShell() if info.hasFreeEdges { print("open shell — \(info.freeEdgeCount) free edges") }
ShapeAnalysis_CanonicalRecognition
Detailed recognition that also returns the geometry parameters (origin, direction, radii/angles).
Shape.CanonicalGeometryType
Discriminator for the recognised geometry class.
public enum CanonicalGeometryType: Int, Sendable {
case none = 0
case plane = 1
case cylinder = 2
case cone = 3
case sphere = 4
case line = 5
case circle = 6
case ellipse = 7
}
| Case | Meaning |
|---|---|
none | No canonical match within tolerance; the surface/curve is not (recognisably) one of the types below. |
plane | A planar surface (Geom_Plane). |
cylinder | A cylindrical surface (Geom_CylindricalSurface). |
cone | A conical surface (Geom_ConicalSurface). |
sphere | A spherical surface (Geom_SphericalSurface). |
line | A straight line curve (Geom_Line). |
circle | A circular curve (Geom_Circle). |
ellipse | An elliptical curve (Geom_Ellipse). |
(Per-case anchors below, for cross-reference; the table above has the actual meaning of each.)
ellipse
Shape.CanonicalRecognitionResult
Full result of canonical recognition, including numeric parameters.
public struct CanonicalRecognitionResult: Sendable {
public let type: CanonicalGeometryType
public let gap: Double
public let origin: (x: Double, y: Double, z: Double)
public let direction: (x: Double, y: Double, z: Double)
public let param1: Double
public let param2: Double
}
gap— deviation from the ideal canonical shape.origin/direction— position and axis of the canonical geometry.param1/param2— primary and secondary size parameters (e.g. radius, semi-angle).
Shape.CanonicalRecognitionResult.gap
Deviation from the ideal canonical shape (model units); smaller is a better fit.
Shape.recognizeCanonicalSurface(tolerance:)
Attempt to recognise the underlying surface geometry of a face as a canonical type.
public func recognizeCanonicalSurface(tolerance: Double = 0.01) -> CanonicalRecognitionResult
- Parameters:
tolerance— maximum allowed deviation for a positive recognition. - Returns: Result with
.type == .noneif no match within tolerance. - OCCT:
ShapeAnalysis_CanonicalRecognition::IsCanonicalSurface. - Example:
let r = face.recognizeCanonicalSurface(tolerance: 0.001) if r.type == .cylinder { print("radius:", r.param1) }
Shape.recognizeCanonicalCurve(tolerance:)
Attempt to recognise the underlying curve of an edge as a canonical type.
public func recognizeCanonicalCurve(tolerance: Double = 0.01) -> CanonicalRecognitionResult
- Parameters:
tolerance— maximum allowed deviation. - Returns: Result with
.type == .noneif no match. - OCCT:
ShapeAnalysis_CanonicalRecognition::IsCanonicalCurve.
Geom_Transformation
Swift class GeomTransformation wrapping Geom_Transformation (a handle-based 3D affine transform that can be composed and inverted).
GeomTransformation.init?()
Create an identity transformation.
public init?()
- Returns: A new identity transform, or
nilon allocation failure. - OCCT:
Geom_Transformationconstructor.
GeomTransformation.setTranslation(dx:dy:dz:)
Set this transformation to a pure translation.
public func setTranslation(dx: Double, dy: Double, dz: Double)
- OCCT:
Geom_Transformation::SetTranslation.
GeomTransformation.setRotation(originX:originY:originZ:dirX:dirY:dirZ:angle:)
Set this transformation to a rotation about an arbitrary axis.
public func setRotation(
originX: Double, originY: Double, originZ: Double,
dirX: Double, dirY: Double, dirZ: Double,
angle: Double
)
- Parameters:
originX/Y/Z— axis origin;dirX/Y/Z— axis direction (need not be normalised);angle— rotation angle in radians. - OCCT:
Geom_Transformation::SetRotation. - Example:
let t = GeomTransformation()! t.setRotation(originX: 0, originY: 0, originZ: 0, dirX: 0, dirY: 0, dirZ: 1, angle: .pi / 4)
GeomTransformation.setScale(centerX:centerY:centerZ:factor:)
Set this transformation to uniform scaling about a centre point.
public func setScale(centerX: Double, centerY: Double, centerZ: Double, factor: Double)
- OCCT:
Geom_Transformation::SetScale.
GeomTransformation.setMirrorPoint(x:y:z:)
Set this transformation to a point-mirror (inversion through a point).
public func setMirrorPoint(x: Double, y: Double, z: Double)
- OCCT:
Geom_Transformation::SetMirror(gp_Pnt).
GeomTransformation.setMirrorAxis(originX:originY:originZ:dirX:dirY:dirZ:)
Set this transformation to a mirror about an axis.
public func setMirrorAxis(
originX: Double, originY: Double, originZ: Double,
dirX: Double, dirY: Double, dirZ: Double
)
- OCCT:
Geom_Transformation::SetMirror(gp_Ax1).
GeomTransformation.scaleFactor
The scale factor of this transformation (1.0 for pure rotations).
public var scaleFactor: Double { get }
- OCCT:
Geom_Transformation::ScaleFactor.
GeomTransformation.isNegative
true if the transformation includes a reflection (determinant < 0).
public var isNegative: Bool { get }
- OCCT:
Geom_Transformation::IsNegative.
GeomTransformation.apply(x:y:z:)
Apply this transformation to a point and return the result.
public func apply(x: Double, y: Double, z: Double) -> (x: Double, y: Double, z: Double)
- Returns: Transformed point coordinates.
- OCCT:
Geom_Transformation::TransformCoord/gp_Trsf::Transforms. - Example:
let t = GeomTransformation()! t.setTranslation(dx: 5, dy: 0, dz: 0) let p = t.apply(x: 1, y: 0, z: 0) // p.x == 6
GeomTransformation.value(row:col:)
Read one element of the 3×4 transformation matrix.
public func value(row: Int, col: Int) -> Double
- Parameters:
row— 1 to 3;col— 1 to 4. - OCCT:
Geom_Transformation::Value.
GeomTransformation.multiplied(by:)
Compose two transformations and return the result as a new object.
public func multiplied(by other: GeomTransformation) -> GeomTransformation?
- Returns:
self ∘ other, ornilon failure. - OCCT:
Geom_Transformation::Multiplied.
GeomTransformation.inverted()
Return the inverse of this transformation.
public func inverted() -> GeomTransformation?
- Returns: The inverse, or
nilif the transformation is singular. - OCCT:
Geom_Transformation::Inverted.
Geom_OffsetCurve
Extensions on Curve3D for offset curves.
Curve3D.offset(basis:offset:dirX:dirY:dirZ:)
Create a Geom_OffsetCurve at a fixed lateral distance from a basis curve.
public static func offset(
basis: Curve3D,
offset: Double,
dirX: Double, dirY: Double, dirZ: Double
) -> Curve3D?
- Parameters:
basis— the underlying curve;offset— lateral distance;dirX/Y/Z— the offset direction (perpendicular to the curve tangent). - Returns: The offset curve, or
nilon failure. - OCCT:
Geom_OffsetCurveconstructor. - Example:
if let line = Curve3D.line(originX: 0, originY: 0, originZ: 0, dirX: 1, dirY: 0, dirZ: 0), let off = Curve3D.offset(basis: line, offset: 2.0, dirX: 0, dirY: 1, dirZ: 0) { // off is a parallel line at y = 2 }
Curve3D.offsetValue
The stored lateral offset distance (0 if this is not an offset curve).
public var offsetValue: Double { get }
- OCCT:
Geom_OffsetCurve::Offset.
Curve3D.offsetDirection
The offset direction vector, or nil if this is not an offset curve.
public var offsetDirection: (x: Double, y: Double, z: Double)? { get }
- OCCT:
Geom_OffsetCurve::Direction.
Geom_RectangularTrimmedSurface
Extensions on Surface for trimming an infinite (or semi-infinite) surface to a finite rectangular parameter window.
Surface.rectangularTrimmed(basis:u1:u2:v1:v2:)
Trim a surface to a rectangular parameter range [u1, u2] × [v1, v2].
public static func rectangularTrimmed(
basis: Surface,
u1: Double, u2: Double,
v1: Double, v2: Double
) -> Surface?
- Parameters:
basis— the underlying (possibly infinite) surface;u1/u2— parameter bounds in U;v1/v2— bounds in V. - Returns: The trimmed surface, or
nilon failure. - OCCT:
Geom_RectangularTrimmedSurfaceconstructor. - Note: Infinite OCCT surfaces (planes, cylinders, cones) must be trimmed before converting to BSpline — this is the standard approach.
- Example:
if let plane = Surface.plane(originX: 0, originY: 0, originZ: 0, normalX: 0, normalY: 0, normalZ: 1), let patch = Surface.rectangularTrimmed(basis: plane, u1: 0, u2: 10, v1: 0, v2: 10) { // patch is a 10×10 finite planar surface }
Surface.trimmedInU(basis:param1:param2:)
Trim a surface in the U direction only, leaving V unbounded.
public static func trimmedInU(basis: Surface, param1: Double, param2: Double) -> Surface?
- OCCT:
Geom_RectangularTrimmedSurfaceU-trim constructor.
Surface.trimmedInV(basis:param1:param2:)
Trim a surface in the V direction only, leaving U unbounded.
public static func trimmedInV(basis: Surface, param1: Double, param2: Double) -> Surface?
- OCCT:
Geom_RectangularTrimmedSurfaceV-trim constructor.
TNaming Extensions
Extensions on Document that expose the TNaming_NamedShape attribute, which records the history of topological shapes across modelling steps.
Document.namingIsEmpty(on:)
Check whether the TNaming_NamedShape attribute on a node’s label holds no shapes.
public func namingIsEmpty(on node: AssemblyNode) -> Bool
- OCCT:
TNaming_NamedShape::IsEmpty.
Document.namingVersion(on:)
Get the version number of the TNaming_NamedShape attribute on a node.
public func namingVersion(on node: AssemblyNode) -> Int
- OCCT:
TNaming_NamedShape::Version.
Document.setNamingVersion(on:version:)
Set the version number of a TNaming_NamedShape attribute.
@discardableResult
public func setNamingVersion(on node: AssemblyNode, version: Int) -> Bool
- OCCT:
TNaming_NamedShape::SetVersion.
Document.namingOriginalShape(on:)
Retrieve the original (pre-modification) shape stored in a named shape attribute.
public func namingOriginalShape(on node: AssemblyNode) -> Shape?
- Returns: The old shape, or
nilif none recorded. - OCCT:
TNaming_NamedShape::Get/TNaming_Iterator.
Document.namingHasLabel(shape:)
Check whether shape has a corresponding label in the document’s naming framework.
public func namingHasLabel(shape: Shape) -> Bool
- OCCT:
TNaming_Tool::HasLabel.
Document.namingFindLabel(shape:)
Find the AssemblyNode for shape in the naming framework.
public func namingFindLabel(shape: Shape) -> AssemblyNode?
- Returns: The node, or
nilif the shape is not registered. - OCCT:
TNaming_Tool::Label.
Document.namingValidUntil(shape:)
Return the transaction number up to which shape is considered valid.
public func namingValidUntil(shape: Shape) -> Int
- OCCT:
TNaming_Tool::ValidUntil.
Document.sameShapeCount(shape:)
Count how many labels in the document contain the same topological shape.
public func sameShapeCount(shape: Shape) -> Int
- OCCT:
TNaming_Tool::SameShapecount variant.
Document.sameShapeLabels(shape:)
Return all AssemblyNodes whose TNaming_NamedShape contains shape.
public func sameShapeLabels(shape: Shape) -> [AssemblyNode]
- Returns: Empty array if no labels carry the shape.
- OCCT:
TNaming_Tool::SameShape.
TDataStd_IntPackedMap
A set of integers stored as a compact bit-map on a label. Suitable for large sparse integer sets.
Document.setIntPackedMap(tag:isDelta:)
Create (or reset) an IntPackedMap attribute on a label.
@discardableResult
public func setIntPackedMap(tag: Int, isDelta: Bool = false) -> Bool
- Parameters:
isDelta— whentruethe map records incremental changes for undo/redo;falsestores the absolute set. - OCCT:
TDataStd_IntPackedMap::Set.
Document.intPackedMapAdd(tag:value:)
Insert an integer into the packed map.
@discardableResult
public func intPackedMapAdd(tag: Int, value: Int) -> Bool
- OCCT:
TDataStd_IntPackedMap::Add.
Document.intPackedMapRemove(tag:value:)
Remove an integer from the packed map.
@discardableResult
public func intPackedMapRemove(tag: Int, value: Int) -> Bool
- OCCT:
TDataStd_IntPackedMap::Remove.
Document.intPackedMapContains(tag:value:)
Return true if the packed map contains the given integer.
public func intPackedMapContains(tag: Int, value: Int) -> Bool
- OCCT:
TDataStd_IntPackedMap::Contains.
Document.intPackedMapCount(tag:)
Return the number of integers in the packed map.
public func intPackedMapCount(tag: Int) -> Int
- OCCT:
TDataStd_IntPackedMap::Extent.
Document.intPackedMapClear(tag:)
Remove all integers from the packed map.
@discardableResult
public func intPackedMapClear(tag: Int) -> Bool
- OCCT:
TDataStd_IntPackedMap::Clear.
Document.intPackedMapIsEmpty(tag:)
Return true if the packed map has no entries.
public func intPackedMapIsEmpty(tag: Int) -> Bool
- OCCT:
TDataStd_IntPackedMap::IsEmpty.
Document.intPackedMapValues(tag:)
Return all integers currently in the packed map.
public func intPackedMapValues(tag: Int) -> [Int]
- Returns: Empty array if the map is empty or not found.
- OCCT:
TDataStd_IntPackedMap+TColStd_PackedMapOfIntegeriteration.
Document.intPackedMapSetValues(tag:values:)
Replace the entire contents of the packed map.
@discardableResult
public func intPackedMapSetValues(tag: Int, values: [Int]) -> Bool
- OCCT:
TDataStd_IntPackedMap::ChangeMap.
TDataStd_NoteBook
A hierarchical container attribute for accumulating named scalar values. Useful for parameter spreadsheets in OCAF documents.
Document.setNoteBook(tag:)
Create a NoteBook attribute on a label (or find the existing one).
@discardableResult
public func setNoteBook(tag: Int) -> Bool
- OCCT:
TDataStd_NoteBook::New.
Document.noteBookAppendReal(tag:value:)
Append a real (double) value to the NoteBook and return the child label tag.
public func noteBookAppendReal(tag: Int, value: Double) -> Int?
- Returns: The child label tag where the value is stored, or
nilon failure. - OCCT:
TDataStd_NoteBook::Append(Standard_Real).
Document.noteBookAppendInteger(tag:value:)
Append an integer value to the NoteBook and return the child label tag.
public func noteBookAppendInteger(tag: Int, value: Int) -> Int?
- Returns: The child label tag, or
nilon failure. - OCCT:
TDataStd_NoteBook::Append(Standard_Integer).
Document.noteBookExists(tag:)
Check whether a NoteBook attribute exists on or above tag in the label hierarchy.
public func noteBookExists(tag: Int) -> Bool
- OCCT:
TDataStd_NoteBook::Find.
TDataStd_UAttribute
A user-defined marker attribute identified by a GUID. Acts as a typed tag with no payload beyond its identifier.
Document.setUAttribute(tag:guid:)
Attach a UAttribute with the given GUID to a label.
@discardableResult
public func setUAttribute(tag: Int, guid: String) -> Bool
- OCCT:
TDataStd_UAttribute::Set.
Document.hasUAttribute(tag:guid:)
Check whether a UAttribute with the given GUID exists on a label.
public func hasUAttribute(tag: Int, guid: String) -> Bool
- OCCT:
TDF_Label::FindAttribute.
Document.uAttributeID(tag:guid:)
Retrieve the GUID string of a UAttribute from a label (round-trips the GUID through OCCT’s Standard_GUID).
public func uAttributeID(tag: Int, guid: String) -> String?
- Returns: The normalised GUID string, or
nilif not found. - OCCT:
TDataStd_UAttribute::ID.
TDataStd_ChildNodeIterator
Document.childNodeCount(tag:allLevels:)
Count the tree-node children on a label.
public func childNodeCount(tag: Int, allLevels: Bool = false) -> Int
- Parameters:
allLevels— whentrue, count descendants at all depths;falsecounts direct children only. - OCCT:
TDataStd_ChildNodeIterator.
TDF_Transaction Named
Named-transaction extensions on Document plus the TransactionDelta value type.
Document.openNamedTransaction(_:)
Open a new transaction and assign it a human-readable name.
@discardableResult
public func openNamedTransaction(_ name: String) -> Int
- Parameters:
name— a label used to identify this transaction in undo histories. - Returns: Transaction number (≥ 1 on success, 0 on error).
- OCCT:
TDocStd_Document::NewCommand+TDF_Transaction::Open.
Document.transactionNumber
The current (open) transaction number.
public var transactionNumber: Int { get }
- OCCT:
TDF_Data::Transaction.
Document.commitWithDelta()
Commit the current transaction and return a TransactionDelta describing what changed.
public func commitWithDelta() -> TransactionDelta?
- Returns: A delta object, or
nilif the transaction contained no changes. - OCCT:
TDF_Transaction::Commit. - Example:
doc.openNamedTransaction("add part") // ... make changes ... if let delta = doc.commitWithDelta() { print("changed attributes:", delta.attributeDeltaCount) }
TransactionDelta.isEmpty
Whether the delta contains no recorded attribute changes.
public var isEmpty: Bool { get }
- OCCT:
TDF_Delta::IsEmpty.
TransactionDelta.beginTime
The transaction number at which the delta begins.
public var beginTime: Int { get }
- OCCT:
TDF_Delta::BeginTime.
TransactionDelta.endTime
The transaction number at which the delta ends.
public var endTime: Int { get }
- OCCT:
TDF_Delta::EndTime.
TransactionDelta.attributeDeltaCount
The number of individual attribute changes recorded in this delta.
public var attributeDeltaCount: Int { get }
- OCCT:
TDF_Delta::AttributeDeltaslist extent.
TransactionDelta.setName(_:)
Assign a display name to this delta.
public func setName(_ name: String)
- OCCT:
TDF_Delta::SetName.
TransactionDelta.name
The display name of this delta, if one was set.
public var name: String? { get }
- OCCT:
TDF_Delta::Name.
TDF_ComparisonTool
Document.isSelfContained(labelId:)
Check that all references from a label’s sub-tree stay within that sub-tree (no dangling cross-references).
public func isSelfContained(labelId: Int64) -> Bool
- Parameters:
labelId— root label to inspect. - Returns:
trueif no reference leaves the sub-tree. - OCCT:
TDF_ComparisonTool::IsSelfContained.
TDocStd_XLinkTool
Label-copy operations that optionally record cross-document links.
Document.xlinkCopy(targetLabelId:sourceLabelId:)
Copy a label and all its attributes to another label within (or across) the same document.
@discardableResult
public func xlinkCopy(targetLabelId: Int64, sourceLabelId: Int64) -> Bool
- Returns:
trueon success. - OCCT:
TDocStd_XLinkTool::Copy.
Document.xlinkCopyWithLink(targetLabelId:sourceLabelId:)
Copy a label and record an XLink attribute on the target so the origin can be tracked.
@discardableResult
public func xlinkCopyWithLink(targetLabelId: Int64, sourceLabelId: Int64) -> Bool
- Returns:
trueon success. - OCCT:
TDocStd_XLinkTool::CopyWithLink.
TFunction_IFunction
The OCAF parametric function mechanism allows labels to carry a “function” with an execution status. These methods manage that mechanism.
Document.FunctionExecutionStatus
Execution state of a function attached to a label.
public enum FunctionExecutionStatus: Int32 {
case wrongDefinition = 0
case notExecuted = 1
case executing = 2
case succeeded = 3
case failed = 4
}
The raw values match TFunction_ExecutionStatus exactly (TFunction_ES_WrongDefinition = 0 through TFunction_ES_Failed = 4), so a raw round-trip through the bridge never needs remapping.
| Case | Meaning |
|---|---|
wrongDefinition | The function’s driver is missing or its definition is otherwise invalid; it was never eligible to run. |
notExecuted | The function has not run yet (the initial state after newFunction(labelId:guid:)). |
executing | The function is currently running; TFunction_GraphNode sets this for the duration of the driver call, which is also how OCAF detects an execution cycle. |
succeeded | The function’s last execution completed without error. |
failed | The function’s last execution reported an error. |
(Per-case anchors below, for cross-reference; the table above has the actual meaning of each.)
failed
Document.newFunction(labelId:guid:)
Attach a function definition to a label. Creates a TFunction_Scope at the document root if one does not exist.
@discardableResult
public func newFunction(labelId: Int64, guid: String) -> Bool
- Parameters:
labelId— label to attach to;guid— identifies the driver. - Returns:
trueon success. - OCCT:
TFunction_IFunction::NewFunction.
Document.deleteFunction(labelId:)
Remove a function from a label.
@discardableResult
public func deleteFunction(labelId: Int64) -> Bool
- OCCT:
TFunction_IFunction::DeleteFunction.
Document.functionExecStatus(labelId:)
Get the execution status of the function on a label.
public func functionExecStatus(labelId: Int64) -> FunctionExecutionStatus?
- Returns: The status, or
nilif no function is attached to the label. - OCCT:
TFunction_IFunction::GetStatus.
Document.setFunctionExecStatus(labelId:status:)
Set the execution status of the function on a label.
@discardableResult
public func setFunctionExecStatus(labelId: Int64, status: FunctionExecutionStatus) -> Bool
- OCCT:
TFunction_IFunction::SetStatus.
TFunction_Scope
The function scope is a root-level index of all functions registered in the document.
Document.setFunctionScope()
Find or create the TFunction_Scope on the document root.
@discardableResult
public func setFunctionScope() -> Bool
- OCCT:
TFunction_Scope::Set.
Document.functionScopeAdd(labelId:)
Register a label as a function in the scope.
@discardableResult
public func functionScopeAdd(labelId: Int64) -> Bool
- OCCT:
TFunction_Scope::AddFunction.
Document.functionScopeRemove(labelId:)
Unregister a label from the scope.
@discardableResult
public func functionScopeRemove(labelId: Int64) -> Bool
- OCCT:
TFunction_Scope::RemoveFunction.
Document.functionScopeHas(labelId:)
Check whether a label is registered in the scope.
public func functionScopeHas(labelId: Int64) -> Bool
- OCCT:
TFunction_Scope::HasFunction.
Document.functionScopeRemoveAll()
Unregister all functions from the scope.
@discardableResult
public func functionScopeRemoveAll() -> Bool
- OCCT:
TFunction_Scope::RemoveAllFunctions.
Document.functionScopeCount
Number of functions registered in the scope.
public var functionScopeCount: Int { get }
- OCCT:
TFunction_Scope::GetFunctionscount.
Document.functionScopeFreeID
The next available function ID that can be assigned within the scope.
public var functionScopeFreeID: Int { get }
- OCCT:
TFunction_Scope::GetFreeID.
TDF_AttributeIterator
Document.attributeCount(labelId:withoutForgotten:)
Count the attributes on a label.
public func attributeCount(labelId: Int64, withoutForgotten: Bool = true) -> Int
- Parameters:
withoutForgotten— whentrue(default) skips attributes that have been “forgotten” (logically deleted in the current transaction). - OCCT:
TDF_AttributeIterator.
Document.dataSetIsEmpty(labelId:)
Return true if the label has never had any content added to the data framework.
public func dataSetIsEmpty(labelId: Int64) -> Bool
- Note: Returns
false(i.e. “not empty”) when the label has been used, even if all attributes were later removed. - OCCT:
TDF_DataSet::IsEmpty/ label content check.
TDF_ChildIDIterator
Document.childIDCount(labelId:guid:allLevels:)
Count child labels that carry an attribute with the given GUID.
public func childIDCount(labelId: Int64, guid: String, allLevels: Bool = false) -> Int
- Parameters:
labelId— parent label;guid— attribute type GUID;allLevels— iftrue, recurse into all descendants. - OCCT:
TDF_ChildIDIterator.
TDocStd_PathParser (removed in v2.0.0)
The whole PathParser enum (trek(_:)/name(_:)/fileExtension(_:), wrapping TDocStd_PathParser) was removed at v2.0.0 (#784). Use OSDPath instead, which wraps OSD_Path rather than TDocStd_PathParser and covers the same operations plus more (systemName, folderAndFile, isValid, isUnixPath, isRelative, isAbsolute): OSDPath.folder(_:) in place of trek(_:), OSDPath.name(_:), and OSDPath.fileExtension(_:).
Two format differences to check if you are migrating a caller: OSDPath.folder(_:) keeps the trailing separator ("/home/user/", not "/home/user") and returns a real directory for an extension-less path instead of an empty string; OSDPath.fileExtension(_:) includes the leading dot (".step", not "step").
TFunction_DriverTable
Global registry that maps function GUIDs to their driver implementations.
FunctionDriverTable.hasDriver(guid:)
Check whether a driver with the given GUID is registered in the global table.
public static func hasDriver(guid: String) -> Bool
- OCCT:
TFunction_DriverTable::HasDriver.
FunctionDriverTable.clear()
Remove all driver registrations from the global table.
public static func clear()
- OCCT:
TFunction_DriverTable::Clear. - Note: This affects the process-global singleton; use with care in tests.
TNaming_Scope
Controls which labels are considered “valid” within a naming scope, influencing shape-evolution queries.
Document.namingScopeValid(labelId:)
Mark a label as valid in the naming scope.
@discardableResult
public func namingScopeValid(labelId: Int64) -> Bool
- OCCT:
TNaming_Scope::Valid.
Document.namingScopeValidChildren(labelId:withRoot:)
Mark a label and its descendants as valid.
@discardableResult
public func namingScopeValidChildren(labelId: Int64, withRoot: Bool = true) -> Bool
- Parameters:
withRoot— include the label itself whentrue. - OCCT:
TNaming_Scope::ValidChildren.
Document.namingScopeIsValid(labelId:)
Check whether a label is in the valid set.
public func namingScopeIsValid(labelId: Int64) -> Bool
- OCCT:
TNaming_Scope::IsValid.
Document.namingScopeUnvalid(labelId:)
Remove a label from the valid set.
@discardableResult
public func namingScopeUnvalid(labelId: Int64) -> Bool
- OCCT:
TNaming_Scope::Unvalid.
Document.namingScopeClear()
Clear all labels from the valid set.
public func namingScopeClear()
- OCCT:
TNaming_Scope::Clear.
Document.namingScopeValidCount
Number of labels currently in the valid set.
public var namingScopeValidCount: Int { get }
- OCCT:
TNaming_Scope::GetValidmap extent.
TNaming_Translator
Extensions on Shape for deep-copying shapes via TNaming_Translator (produces topologically independent copies).
Shape.translatorCopy()
Create a deep copy of this shape. The copy shares no TShape pointers with the original.
public func translatorCopy() -> Shape?
- Returns: An independent copy, or
nilon failure. - OCCT:
TNaming_Translator::Add+TNaming_Translator::Perform. - Example:
if let copy = solid.translatorCopy() { // solid.isSame(as: copy) == false }
Shape.isSame(as:)
Return true if two shapes share the same underlying TShape (pointer-level equality).
public func isSame(as other: Shape) -> Bool
- OCCT:
TopoDS_Shape::IsSame.
TDataXtd_Placement
A marker attribute that designates a label as a geometric placement point (no position data; presence is the signal).
Document.setPlacement(labelId:)
Attach a placement marker attribute to a label.
@discardableResult
public func setPlacement(labelId: Int64) -> Bool
- OCCT:
TDataXtd_Placement::Set.
Document.hasPlacement(labelId:)
Check whether a label carries a placement marker.
public func hasPlacement(labelId: Int64) -> Bool
- OCCT:
TDF_Label::FindAttribute(TDataXtd_Placement::GetID()).
TDataXtd_Presentation
Stores AIS presentation parameters (color, transparency, line width, display mode) on a label.
Document.setPresentation(labelId:driverGUID:)
Attach a presentation attribute to a label, associated with the given AIS driver GUID.
@discardableResult
public func setPresentation(labelId: Int64, driverGUID: String) -> Bool
- OCCT:
TDataXtd_Presentation::Set.
Document.unsetPresentation(labelId:)
Remove the presentation attribute from a label.
public func unsetPresentation(labelId: Int64)
- OCCT:
TDF_Label::ForgetAttribute(TDataXtd_Presentation::GetID()).
Document.hasPresentation(labelId:)
Check whether a label has a presentation attribute.
public func hasPresentation(labelId: Int64) -> Bool
Document.presentationSetDisplayed(labelId:displayed:)
Set the display visibility flag on a presentation.
@discardableResult
public func presentationSetDisplayed(labelId: Int64, displayed: Bool) -> Bool
- OCCT:
TDataXtd_Presentation::SetDisplayed.
Document.presentationIsDisplayed(labelId:)
Return true if the presentation is set to be displayed.
public func presentationIsDisplayed(labelId: Int64) -> Bool
- OCCT:
TDataXtd_Presentation::IsDisplayed.
Document.presentationSetColor(labelId:colorIndex:)
Set the color of a presentation by Quantity_NameOfColor index.
@discardableResult
public func presentationSetColor(labelId: Int64, colorIndex: Int32) -> Bool
- OCCT:
TDataXtd_Presentation::SetColor.
Document.presentationGetColor(labelId:)
Get the color index of a presentation.
public func presentationGetColor(labelId: Int64) -> Int32?
- Returns:
Quantity_NameOfColorindex, ornilif no own color is set. - OCCT:
TDataXtd_Presentation::GetColor.
Document.presentationSetTransparency(labelId:value:)
Set the transparency of a presentation in [0.0, 1.0] (0 = opaque).
@discardableResult
public func presentationSetTransparency(labelId: Int64, value: Double) -> Bool
- OCCT:
TDataXtd_Presentation::SetTransparency.
Document.presentationGetTransparency(labelId:)
Get the transparency of a presentation.
public func presentationGetTransparency(labelId: Int64) -> Double?
- Returns: Transparency value, or
nilif not set. - OCCT:
TDataXtd_Presentation::GetTransparency.
Document.presentationSetWidth(labelId:width:)
Set the line width of a presentation.
@discardableResult
public func presentationSetWidth(labelId: Int64, width: Double) -> Bool
- OCCT:
TDataXtd_Presentation::SetWidth.
Document.presentationGetWidth(labelId:)
Get the line width of a presentation.
public func presentationGetWidth(labelId: Int64) -> Double?
- Returns: Width, or
nilif not set. - OCCT:
TDataXtd_Presentation::GetWidth.
Document.presentationSetMode(labelId:mode:)
Set the display mode (e.g. 0 = wireframe, 1 = shaded) of a presentation.
@discardableResult
public func presentationSetMode(labelId: Int64, mode: Int32) -> Bool
- OCCT:
TDataXtd_Presentation::SetMode.
Document.presentationGetMode(labelId:)
Get the display mode of a presentation.
public func presentationGetMode(labelId: Int64) -> Int32?
- Returns: Mode integer, or
nilif not set. - OCCT:
TDataXtd_Presentation::GetMode.
XCAFDoc_AssemblyIterator
Document.assemblyItemCount(maxDepth:)
Count the total number of assembly items (component instances) in the document.
public func assemblyItemCount(maxDepth: Int = 0) -> Int
- Parameters:
maxDepth— maximum traversal depth;0means unlimited. - OCCT:
XCAFDoc_AssemblyIterator. - Example:
let total = doc.assemblyItemCount()
XCAFDoc_DimTol
Dimension and tolerance annotations attached to labels.
Document.setDimTol(labelId:kind:values:name:description:)
Attach a XCAFDoc_DimTol attribute to a label.
@discardableResult
public func setDimTol(
labelId: Int64,
kind: Int32,
values: [Double],
name: String,
description: String
) -> Bool
- Parameters:
kind— tolerance type code (see XDE docs);values— numeric parameters;name,description— textual annotation strings. - OCCT:
XCAFDoc_DimTol::Set.
Document.dimTolKind(labelId:)
Return the kind code of the DimTol attribute.
public func dimTolKind(labelId: Int64) -> Int32?
- Returns: Kind code, or
nilif no attribute. - OCCT:
XCAFDoc_DimTol::GetKind.
Document.dimTolName(labelId:)
Return the name string of the DimTol attribute.
public func dimTolName(labelId: Int64) -> String?
- OCCT:
XCAFDoc_DimTol::GetName.
Document.dimTolDescription(labelId:)
Return the description string of the DimTol attribute.
public func dimTolDescription(labelId: Int64) -> String?
- OCCT:
XCAFDoc_DimTol::GetDescription.
Document.dimTolValues(labelId:)
Return the numeric parameters of the DimTol attribute.
public func dimTolValues(labelId: Int64) -> [Double]?
- Returns: Array of parameter values (up to 32), or
nilif not found. - OCCT:
XCAFDoc_DimTol::GetVal.
IntTools_Tools
Static geometry utilities used internally by Boolean operations.
IntTools.computeVV(_:_:)
Check whether two vertex shapes are geometrically coincident (within their combined tolerances).
public static func computeVV(_ vertex1: Shape, _ vertex2: Shape) -> Int
- Returns:
0if coincident, non-zero otherwise. - OCCT:
IntTools_Tools::ComputeVV.
IntTools.intermediatePoint(first:last:)
Compute a parameter value that lies between first and last, suitable as a midpoint sample.
public static func intermediatePoint(first: Double, last: Double) -> Double
- OCCT:
IntTools_Tools::IntermediatePoint.
IntTools.isDirsCoinside(dx1:dy1:dz1:dx2:dy2:dz2:)
Check whether two direction vectors are coincident (parallel or anti-parallel) using the default angular tolerance.
public static func isDirsCoinside(
dx1: Double, dy1: Double, dz1: Double,
dx2: Double, dy2: Double, dz2: Double
) -> Bool
- OCCT:
IntTools_Tools::IsDirsCoinside.
IntTools.isDirsCoinside(dx1:dy1:dz1:dx2:dy2:dz2:tolerance:)
Check whether two direction vectors are coincident within a specified angular tolerance.
public static func isDirsCoinside(
dx1: Double, dy1: Double, dz1: Double,
dx2: Double, dy2: Double, dz2: Double,
tolerance: Double
) -> Bool
- OCCT:
IntTools_Tools::IsDirsCoinside(…, Standard_Real).
IntTools.computeIntRange(tol1:tol2:angle:)
Compute the intersection range from two tolerances and an included angle; used by the edge-edge intersector.
public static func computeIntRange(tol1: Double, tol2: Double, angle: Double) -> Double
- OCCT:
IntTools_Tools::ComputeIntRange.
ElCLib
Static utilities for evaluating elementary 3D curves at parameter values.
ElCLib.valueOnLine(u:origin:direction:)
Evaluate a point on a line at parameter u.
public static func valueOnLine(u: Double, origin: SIMD3<Double>, direction: SIMD3<Double>) -> SIMD3<Double>
- OCCT:
ElCLib::LineValue. - Example:
let pt = ElCLib.valueOnLine(u: 3.0, origin: SIMD3(0, 0, 0), direction: SIMD3(1, 0, 0)) // pt == SIMD3(3, 0, 0)
ElCLib.valueOnCircle(u:center:normal:radius:)
Evaluate a point on a circle at parameter u (radians).
public static func valueOnCircle(
u: Double,
center: SIMD3<Double>,
normal: SIMD3<Double>,
radius: Double
) -> SIMD3<Double>
- OCCT:
ElCLib::CircleValue.
ElCLib.valueOnEllipse(u:center:normal:majorRadius:minorRadius:)
Evaluate a point on an ellipse at parameter u.
public static func valueOnEllipse(
u: Double,
center: SIMD3<Double>,
normal: SIMD3<Double>,
majorRadius: Double,
minorRadius: Double
) -> SIMD3<Double>
- OCCT:
ElCLib::EllipseValue.
ElCLib.d1OnLine(u:origin:direction:)
Evaluate a point and its tangent vector on a line at parameter u.
public static func d1OnLine(
u: Double,
origin: SIMD3<Double>,
direction: SIMD3<Double>
) -> (point: SIMD3<Double>, tangent: SIMD3<Double>)
- OCCT:
ElCLib::LineD1.
ElCLib.d1OnCircle(u:center:normal:radius:)
Evaluate a point and its tangent vector on a circle at parameter u.
public static func d1OnCircle(
u: Double,
center: SIMD3<Double>,
normal: SIMD3<Double>,
radius: Double
) -> (point: SIMD3<Double>, tangent: SIMD3<Double>)
- OCCT:
ElCLib::CircleD1.
ElCLib.parameterOnLine(origin:direction:point:)
Find the parameter of the nearest point on a line to a given 3D point.
public static func parameterOnLine(
origin: SIMD3<Double>,
direction: SIMD3<Double>,
point: SIMD3<Double>
) -> Double
- OCCT:
ElCLib::Parameter(gp_Lin, gp_Pnt).
ElCLib.parameterOnCircle(center:normal:radius:point:)
Find the parameter of the nearest point on a circle to a given 3D point.
public static func parameterOnCircle(
center: SIMD3<Double>,
normal: SIMD3<Double>,
radius: Double,
point: SIMD3<Double>
) -> Double
- OCCT:
ElCLib::Parameter(gp_Circ, gp_Pnt).
ElCLib.inPeriod(u:uFirst:uLast:)
Normalise a parameter to the periodic range [uFirst, uLast).
public static func inPeriod(u: Double, uFirst: Double, uLast: Double) -> Double
- OCCT:
ElCLib::InPeriod. - Example:
ElCLib.inPeriod(u: 7.0, uFirst: 0, uLast: 2 * .pi) // → ~0.717 (7 mod 2π)
ElSLib
Static utilities for evaluating elementary surfaces at (u, v) parameter values.
ElSLib.valueOnPlane(u:v:origin:normal:)
Evaluate a point on a plane at (u, v).
public static func valueOnPlane(
u: Double, v: Double,
origin: SIMD3<Double>,
normal: SIMD3<Double>
) -> SIMD3<Double>
- OCCT:
ElSLib::PlaneValue. - Example:
let pt = ElSLib.valueOnPlane(u: 1, v: 2, origin: .zero, normal: SIMD3(0, 0, 1)) // pt ≈ SIMD3(1, 2, 0)
ElSLib.valueOnCylinder(u:v:origin:axis:radius:)
Evaluate a point on a cylinder at (u, v).
public static func valueOnCylinder(
u: Double, v: Double,
origin: SIMD3<Double>,
axis: SIMD3<Double>,
radius: Double
) -> SIMD3<Double>
- OCCT:
ElSLib::CylinderValue.
ElSLib.valueOnCone(u:v:origin:axis:refRadius:semiAngle:)
Evaluate a point on a cone at (u, v).
public static func valueOnCone(
u: Double, v: Double,
origin: SIMD3<Double>,
axis: SIMD3<Double>,
refRadius: Double,
semiAngle: Double
) -> SIMD3<Double>
- OCCT:
ElSLib::ConeValue.
ElSLib.valueOnSphere(u:v:origin:axis:radius:)
Evaluate a point on a sphere at (u, v).
public static func valueOnSphere(
u: Double, v: Double,
origin: SIMD3<Double>,
axis: SIMD3<Double>,
radius: Double
) -> SIMD3<Double>
- OCCT:
ElSLib::SphereValue.
ElSLib.valueOnTorus(u:v:origin:axis:majorRadius:minorRadius:)
Evaluate a point on a torus at (u, v).
public static func valueOnTorus(
u: Double, v: Double,
origin: SIMD3<Double>,
axis: SIMD3<Double>,
majorRadius: Double,
minorRadius: Double
) -> SIMD3<Double>
- OCCT:
ElSLib::TorusValue.
ElSLib.parametersOnSphere(origin:axis:radius:point:)
Find the (u, v) parameters of the nearest point on a sphere to a 3D point.
public static func parametersOnSphere(
origin: SIMD3<Double>,
axis: SIMD3<Double>,
radius: Double,
point: SIMD3<Double>
) -> (u: Double, v: Double)
- OCCT:
ElSLib::Parameters(gp_Sphere, gp_Pnt).
ElSLib.d1OnSphere(u:v:origin:axis:radius:)
Evaluate a point and its partial derivative vectors on a sphere.
public static func d1OnSphere(
u: Double, v: Double,
origin: SIMD3<Double>,
axis: SIMD3<Double>,
radius: Double
) -> (point: SIMD3<Double>, dU: SIMD3<Double>, dV: SIMD3<Double>)
- Returns:
point— position;dU— partial derivative with respect to U;dV— partial with respect to V. - OCCT:
ElSLib::SphereD1. - Example:
let (pt, du, dv) = ElSLib.d1OnSphere(u: 0, v: 0, origin: .zero, axis: SIMD3(0, 0, 1), radius: 5.0)
Internal Storage
(The members below are private/internal/fileprivate implementation details of Document, not public API. Documented here, briefly, so a contributor reading the source has context, and so Scripts/check-docs-existence.py’s coverage tracking resolves them.)