diff --git a/CLAUDE.md b/CLAUDE.md index 8c57c79..5bd8768 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -88,7 +88,7 @@ No tests exist. No linter is configured. **`load-brep` / `import`** are the OCCTMCP-driven I/O verbs (closes #19). Both write a `ScriptManifest` (matching `ScriptContext.emit()`'s schema) into `--emit-manifest ` so OCCTSwiftViewport's `ScriptWatcher` picks the bodies up. `load-brep` is the one-line "load + emit" (no script compile); response carries `bodyId` + topology stats + bounding box. `import` does multi-format dispatch: STEP / IGES / STL / OBJ for v1 (the OCCT-native formats; glTF / FBX / 3DS deferred, since they're not OCCT formats and would need upstream loaders). `--preserve-assembly` is STEP-only and walks `Document.rootNodes` → `AssemblyNode` tree, writing one BREP per leaf node and populating the response's `assembly` field with names / transforms / colors. `--heal-on-import` is accepted today but currently a no-op with a warning; real behaviour arrives with the `heal` verb in #21. -**`metrics` / `query-topology` / `measure-distance`** are the OCCTMCP-driven introspection verbs (closes #18). Pure read; input BREP(s) → JSON envelope on stdout, no file output. `metrics` wraps `Shape.volumeInertia` (volume + center-of-mass + principal moments/axes) + `Shape.surfaceArea` + `Shape.bounds`; `--metrics` flag selects a subset (default all). `query-topology` iterates `Shape.faces()` / `.edges()` / `.vertices()` and emits stable IDs (`face[N]` / `edge[N]` / `vertex[N]`) with surface/curve type classification, area/length, bounding box, and (face only) the unit normal at the UV midpoint; supports filter keys `surfaceType` / `curveType` / `minArea` / `maxArea` / `minLength` / `maxLength` / `normalDirection` + `normalTolerance`. `measure-distance` wraps `Shape.allDistanceSolutions(to:)` for shape-shape distance + optional contact list; v1 supports `point:x,y,z` refs but defers sub-entity refs (`face[N]` etc.); callers identify contact provenance via `query-topology`. The same release also extends `graph-validate` with a `healthRecord` field (small-edge / free-edge / self-intersection counts via `Shape.analyze()`) and adds a unified `features:[]` array to `feature-recognize`'s response (alongside the existing `pockets`/`holes` arrays for backward compat). +**`metrics` / `query-topology` / `measure-distance`** are the OCCTMCP-driven introspection verbs (closes #18). Pure read; input BREP(s) → JSON envelope on stdout, no file output. `metrics` wraps `Shape.volumeInertia` (volume + center-of-mass + principal moments/axes) + `Shape.surfaceArea` + `Shape.bounds` + `Shape.subShapeCount(ofType: .solid)` (`solidCount`); `--metrics` flag selects a subset (default all). `solidCount` exists because `shapeType` alone is misleading: a compound wrapping one solid is healthy, while a bare shell reports a plausible positive volume. Assert `solidCount >= 1`, not `shapeType == "solid"` (#100). `query-topology` iterates `Shape.faces()` / `.edges()` / `.vertices()` and emits stable IDs (`face[N]` / `edge[N]` / `vertex[N]`) with surface/curve type classification, area/length, bounding box, and (face only) the unit normal at the UV midpoint; supports filter keys `surfaceType` / `curveType` / `minArea` / `maxArea` / `minLength` / `maxLength` / `normalDirection` + `normalTolerance`. `measure-distance` wraps `Shape.allDistanceSolutions(to:)` for shape-shape distance + optional contact list; v1 supports `point:x,y,z` refs but defers sub-entity refs (`face[N]` etc.); callers identify contact provenance via `query-topology`. The same release also extends `graph-validate` with a `healthRecord` field (small-edge / free-edge / self-intersection counts via `Shape.analyze()`) and adds a unified `features:[]` array to `feature-recognize`'s response (alongside the existing `pockets`/`holes` arrays for backward compat). **`transform` / `boolean` / `pattern`** are the OCCTMCP-driven construction verbs (closes #20). All three are pure functions: input BREP(s) → output BREP file(s) + JSON envelope on stdout, no scene/manifest involvement. Each accepts both flag form (matches the issue spec) and JSON form (stdin or file path) for `--serve` consumers; auto-detected by whether `--kind`/`--op`/`--output` flags are present. `transform` wraps `Shape.translated`/`.rotated`/`.scaled` (uniform only; non-uniform `--scale x,y,z` rejected); Euler XYZ decomposes into three sequential axis-angle rotations. `boolean` dispatches on `--op`, wraps `Shape.union`/`.subtracting`/`.intersection`/`.split`; split's array result is wrapped in `Shape.compound` so the verb always emits a single output BREP. `pattern` wraps `Shape.mirrored` / `.linearPattern` / `.circularPattern`; the linear/circular compound result is decomposed via `subShapes(ofType: input.shapeType)` and written as `pattern_N.brep` files (one per instance). @@ -117,7 +117,7 @@ No tests exist. No linter is configured. The full cohort graduated to v1.0 on 2026-05-07 alongside OCCT 8.0.0 GA. SemVer-stable from these floors; only bump on documented breaking changes. Pre-1.0 dep history (which API landed in which 0.x tag) lives in git log; consult it when you actually need to support an older floor, otherwise treat the v1.0 surface as the contract. -- **OCCTSwift**: `https://github.com/gsdali/OCCTSwift.git` (>= 1.15.0; xcframework built against **OCCT 8.0.0p1**). The B-Rep kernel: ~400+ methods for parametric CAD, the full ISO drawings stack (Sheet/TitleBlock/ProjectionSymbol/Section2D/Hatch/AutoCentermarks/CuttingPlaneLine/CosmeticThread/SurfaceFinish/GDT/DetailView/DrawingScale), `FeatureReconstructor` for `reconstruct`, the `SheetMetal` namespace for `compose-sheet-metal`, and the XCAF surfaces (`AssemblyNode.labelId`, `Document.node(at:)`) for `inspect-assembly` / `set-metadata`. **Floored at v1.15.0**: v1.15.0 renamed the Swift wrapper class `TopologyGraph` → `BRepGraph` (OCCTSwift#335) to match the C++ package it wraps; this repo has migrated off the deprecated `TopologyGraph` typealias onto `BRepGraph` directly (OCCTSwiftScripts#78), so the floor must guarantee the `BRepGraph` symbol exists. Earlier, v1.7.0 realigned the BRepGraph wrapper to OCCT's redesigned graph model (definitions vs references/usages, persistent UIDs, controlled layers) and v1.7.1 made the derived graph reads real again: `adjacentFaces`/`faces(of:)`/`edges(of:)`/`sharedEdges`, `faceSameDomain`, `faceIsNaturalRestriction`, plus durable `UID`/`RefUID`/`ItemUID` identity. Our graph verbs (graph-validate/compact/dedup/ml, query-topology) build and run **unchanged** against it. Behaviour changes are **confined to the BRepGraph domain**: `edgeMaxContinuity`/`setEdgeRegularity` are now no-ops (use `Shape.maxContinuity` for continuity); `degenerated`/`closed`/`sameParameter`/`sameRange` setters no-op while their getters return the live derived value. The cookbook ergonomics relied on since v1.3.1, namely `Shape.circularPatternCut` (#169), orientation-normalised `Shape.sweep` + `orientedForward`/`signedVolume` (#170), `concaveEdges`/`convexEdges`/`edges(where:)` selectors (#171), are unchanged. The rest of the cohort still resolves at its existing floors (Viewport 1.0.4 / Tools 1.1.1 / AIS 1.0.2 / Mesh 1.0.0 / IO 1.7.5), all of which compile against 1.15.0. +- **OCCTSwift**: `https://github.com/SecondMouseAU/OCCTSwift.git` (>= 1.17.0; xcframework built against **OCCT 8.0.0p1**). The B-Rep kernel: ~400+ methods for parametric CAD, the full ISO drawings stack (Sheet/TitleBlock/ProjectionSymbol/Section2D/Hatch/AutoCentermarks/CuttingPlaneLine/CosmeticThread/SurfaceFinish/GDT/DetailView/DrawingScale), `FeatureReconstructor` for `reconstruct`, the `SheetMetal` namespace for `compose-sheet-metal`, and the XCAF surfaces (`AssemblyNode.labelId`, `Document.node(at:)`) for `inspect-assembly` / `set-metadata`. **Floored at v1.17.0** (raised in d5d31e8 for the OCCTSwift#377/#380 Pass 1a duplication and bug-fix audit; also carries the `Shape.drilled` direction fix, OCCTSwift#272, which lands between 1.12.0 and 1.12.9 and corrected recipe 01's through-holes). Previously **floored at v1.15.0**: v1.15.0 renamed the Swift wrapper class `TopologyGraph` → `BRepGraph` (OCCTSwift#335) to match the C++ package it wraps; this repo has migrated off the deprecated `TopologyGraph` typealias onto `BRepGraph` directly (OCCTSwiftScripts#78), so the floor must guarantee the `BRepGraph` symbol exists. Earlier, v1.7.0 realigned the BRepGraph wrapper to OCCT's redesigned graph model (definitions vs references/usages, persistent UIDs, controlled layers) and v1.7.1 made the derived graph reads real again: `adjacentFaces`/`faces(of:)`/`edges(of:)`/`sharedEdges`, `faceSameDomain`, `faceIsNaturalRestriction`, plus durable `UID`/`RefUID`/`ItemUID` identity. Our graph verbs (graph-validate/compact/dedup/ml, query-topology) build and run **unchanged** against it. Behaviour changes are **confined to the BRepGraph domain**: `edgeMaxContinuity`/`setEdgeRegularity` are now no-ops (use `Shape.maxContinuity` for continuity); `degenerated`/`closed`/`sameParameter`/`sameRange` setters no-op while their getters return the live derived value. The cookbook ergonomics relied on since v1.3.1, namely `Shape.circularPatternCut` (#169), orientation-normalised `Shape.sweep` + `orientedForward`/`signedVolume` (#170), `concaveEdges`/`convexEdges`/`edges(where:)` selectors (#171), are unchanged. The rest of the cohort still resolves at its existing floors (Viewport 1.0.4 / Tools 1.1.1 / AIS 1.0.2 / Mesh 1.0.0 / IO 1.7.5), all of which compile against 1.15.0. - **OCCTSwiftViewport**: `https://github.com/gsdali/OCCTSwiftViewport.git` (>= 1.0.0). Provides `OffscreenRenderer`, `CameraState`, `DisplayMode`, `ViewportBody` for `render-preview`. Graduated to v1.0.0 on 2026-05-08, one day after the rest of the cohort; floor unblocked by Tools v1.0.2 (closes #45). - **OCCTSwiftTools**: `https://github.com/gsdali/OCCTSwiftTools.git` (>= 1.0.0; resolves to v1.0.2+ for the widened Viewport constraint). Bridge layer between the B-Rep kernel and the Metal viewport. We use `CADFileLoader.shapeToBodyAndMetadata` in `render-preview` for Shape → `ViewportBody` conversion (both input bodies and highlight sub-shapes). Lives in its own repo since Viewport v0.55.0 split. - **OCCTSwiftAIS**: `https://github.com/gsdali/OCCTSwiftAIS.git` (>= 1.0.0). Headless-friendly subset only: `Trihedron` / `WorkPlane` / `Axis` / `PointCloud` scene objects (each emits `[ViewportBody]` via `makeBodies()`) for `render-preview`'s `--show-axes` / `--show-workplane` overlays, plus the SubShape selection vocabulary for `--highlight face[N]/edge[M]/vertex[K]`. Selection / Manipulator / SwiftUI surfaces aren't relevant to a CLI. `Dimension` overlays render via a SwiftUI Canvas inside `MetalViewportView` and so can't reach `OffscreenRenderer`, so `--annotate-dimensions` is deferred (filed as OCCTSwiftViewport#26). Note: `OCCTSwiftAIS` re-exports a `DisplayMode` enum (3 cases) that collides with `OCCTSwiftViewport.DisplayMode` (6 cases); fully-qualify in `RenderPreview.swift` as `OCCTSwiftViewport.DisplayMode`. diff --git a/Package.resolved b/Package.resolved index c66b474..4f709a6 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "fb5d03c0c4ec0e5129f75f7146d63d21f81c2fc74b3c1a5953847e18f4fe31a7", + "originHash" : "71e38e2f96f3194dfb2876a87ffd361994858a5a289974c54b1f799d85647e49", "pins" : [ { "identity" : "nodal", @@ -15,8 +15,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/SecondMouseAU/OCCTSwift.git", "state" : { - "revision" : "b71b65760498052a3ce79c91b95a904fea6df459", - "version" : "1.15.0" + "revision" : "fb7f88747e0f6dc35a804f5af91f69a89bf456a7", + "version" : "1.17.0" } }, { diff --git a/Scripts/recipe-check.sh b/Scripts/recipe-check.sh index 35ea347..bd4785b 100755 --- a/Scripts/recipe-check.sh +++ b/Scripts/recipe-check.sh @@ -5,7 +5,12 @@ # 1. Run `occtkit run /main.swift --format brep` into a temp dir. # 2. Assert manifest.json parses and body-0.brep is non-empty. # 3. Assert the emitted volume is > 0 (via `occtkit metrics`). -# 4. If /output.brep exists, compare volume + bounding box within tolerance. +# 4. Assert the emitted body contains at least one solid (`solidCount >= 1`). +# This is a solids-count check, not a `shapeType == "solid"` check: a compound +# wrapping one solid (the normal `circularPatternCut` result) is healthy and must +# pass, while a shell, or a compound with zero solids inside (a wire-based +# revolve/sweep that never got faced/capped, OCCTSwiftScripts#100), must fail. +# 5. If /output.brep exists, compare volume + bounding box within tolerance. # # Usage: # Scripts/recipe-check.sh recipes/01-mounting-bracket @@ -36,7 +41,21 @@ check_one() { # All validation + (optional) reference compare happens in one Python pass. # Args: . occtkit metrics is shelled out for # both the emitted body and the reference; no data is piped over stdin. - python3 - "$tmp" "$dir/output.brep" <<'PY' + # + # This is deliberately `if ! python3 ...; then return 1; fi`, not a bare `python3 + # ...` statement: `check_one` is always invoked as `check_one ... || status=1`, and + # bash disables `errexit` for every command inside a function while that function is + # itself the left-hand side of `||`. A bare statement here let a nonzero exit from + # this Python block fall straight through to the unconditional `echo " ✓ ... OK"` + # below, so every failure this script detects (die() calls: missing/empty manifest + # or body, volume <= 0, solidCount < 1, drift vs the reference) got printed and then + # silently reported as a pass anyway, with exit 0. This was a pre-existing bug, not + # introduced by the solidCount check: confirmed on the unmodified script that a real + # reference-drift failure on 01-mounting-bracket still printed "✓ 01-mounting-bracket + # OK" and exited 0. + # -u: stdout is block-buffered when piped while die() writes to stderr unbuffered, + # so failures would otherwise print above the passing lines that preceded them. + if ! python3 -u - "$tmp" "$dir/output.brep" <<'PY' import json, os, subprocess, sys emitted_dir, ref = sys.argv[1], sys.argv[2] @@ -56,7 +75,7 @@ except Exception as e: if not os.path.exists(body) or not os.path.getsize(body): die("body-0.brep missing/empty") def metrics(path): - out = subprocess.check_output(occtkit + ["metrics", path, "--metrics", "volume,boundingBox"]) + out = subprocess.check_output(occtkit + ["metrics", path, "--metrics", "volume,boundingBox,solidCount"]) return json.loads(out) cur = metrics(body) @@ -64,8 +83,18 @@ v = cur.get("volume") if v is None or v <= 0: die(f"volume not > 0: {v}") print(f" ✓ volume = {v:.3f}") +solids = cur.get("solidCount") +if solids is None or solids < 1: die(f"solidCount not >= 1: {solids} (shapeType alone is not enough, see header)") +print(f" ✓ solidCount = {solids}") + if os.path.exists(ref): r = metrics(ref); rv = r["volume"] + # `solidCount >= 1` above catches "a shell shipped". This catches the other half + # of the same family: a topology regression that still has a positive volume, for + # example a compound going from 1 solid to 3 because a boolean stopped fusing. + rs = r.get("solidCount") + if rs is not None and solids != rs: + die(f"solidCount drift: {solids} vs reference {rs}") rel = abs(v - rv) / max(abs(rv), 1e-9) if rel > tol: die(f"volume drift {rel:.2e} > tol {tol:.1e} (ref {rv:.3f})") for key in ("min", "max"): @@ -76,6 +105,9 @@ if os.path.exists(ref): else: print(" · no reference output.brep, skipping compare") PY + then + return 1 + fi echo " ✓ $name OK" } diff --git a/Sources/occtkit/Commands/Metrics.swift b/Sources/occtkit/Commands/Metrics.swift index a53342e..1147d06 100644 --- a/Sources/occtkit/Commands/Metrics.swift +++ b/Sources/occtkit/Commands/Metrics.swift @@ -4,13 +4,20 @@ // Pure read: input BREP -> JSON envelope on stdout. No file output. // // Wraps: -// Shape.volumeInertia -> volume, centerOfMass, principalMoments + axes -// Shape.surfaceArea -> total area -// Shape.bounds -> axis-aligned bounding box +// Shape.volumeInertia -> volume, centerOfMass, principalMoments + axes +// Shape.surfaceArea -> total area +// Shape.bounds -> axis-aligned bounding box +// Shape.subShapeCount(ofType: .solid) -> solidCount // // `volumeInertia` is solid-only; for non-solids, volume / centerOfMass / // principalAxes fall back to nil. surfaceArea is computed off the // optional-returning getter, also nil for shapes without surface area. +// `solidCount` exists because `shapeType` alone is misleading: a healthy +// `circularPatternCut` result reports `compound` (one solid wrapped in a +// compound), while a wire-based revolve/sweep that never got faced/capped +// also reports `compound` or `shell` with zero solids inside. Counting +// solids, not reading the top-level shape type, is what `Scripts/recipe-check.sh` +// uses to catch that (OCCTSwiftScripts#100). // // Two input modes: // 1. Flag form: occtkit metrics [--metrics m1,m2,...] @@ -25,7 +32,7 @@ enum MetricsCommand: Subcommand { static let summary = "Volume / area / center of mass / bbox / principal axes for a BREP" static let usage = """ Usage: - metrics [--metrics volume,surfaceArea,centerOfMass,boundingBox,boundingBoxOptimal,principalAxes] + metrics [--metrics volume,surfaceArea,centerOfMass,boundingBox,boundingBoxOptimal,principalAxes,solidCount] metrics (JSON request from file) metrics (JSON request from stdin) """ @@ -47,6 +54,7 @@ enum MetricsCommand: Subcommand { let boundingBox: BoundingBox? let boundingBoxOptimal: BoundingBox? let principalAxes: PrincipalAxes? + let solidCount: Int? struct BoundingBox: Encodable { let min: [Double] @@ -100,6 +108,8 @@ enum MetricsCommand: Subcommand { ) }() + let solidCount: Int? = wants("solidCount") ? shape.subShapeCount(ofType: .solid) : nil + try GraphIO.emitJSON(Response( volume: wants("volume") ? inertia?.volume : nil, surfaceArea: wants("surfaceArea") ? shape.surfaceArea : nil, @@ -108,7 +118,8 @@ enum MetricsCommand: Subcommand { } : nil, boundingBox: bb, boundingBoxOptimal: bbOptimal, - principalAxes: pa + principalAxes: pa, + solidCount: solidCount )) return 0 } diff --git a/docs/SCRIPT_WORKFLOW.md b/docs/SCRIPT_WORKFLOW.md index d06b0e1..a141e29 100644 --- a/docs/SCRIPT_WORKFLOW.md +++ b/docs/SCRIPT_WORKFLOW.md @@ -114,10 +114,15 @@ Shape.cone(bottomRadius: 5, topRadius: 2, height: 10) Shape.torus(majorRadius: 10, minorRadius: 2) // From profiles -Shape.extrude(profile: wire, direction: SIMD3(0,0,1), length: 10) -Shape.revolve(axis: SIMD3(0,1,0), axisOrigin: .zero, angle: .pi*2, profile: wire) -Shape.sweep(profile: wire, along: pathWire) -Shape.loft(profiles: [wire1, wire2, wire3], solid: true) +// NOTE: these are NOT symmetric about what they return. `extrude` and `loft(solid: true)` +// give you a solid; `revolve` and `sweep` given a *wire* return a SHELL, because they +// sweep a curve. Face the wire first when you want a solid. See OCCTSwiftScripts#100. +Shape.extrude(profile: wire, direction: SIMD3(0,0,1), length: 10) // solid +Shape.loft(profiles: [wire1, wire2, wire3], solid: true) // solid +Shape.revolve(axis: SIMD3(0,1,0), axisOrigin: .zero, angle: .pi*2, profile: wire) // SHELL +Shape.face(from: wire)?.revolved(axisOrigin: .zero, axisDirection: SIMD3(0,1,0)) // solid +Shape.sweep(profile: wire, along: pathWire) // SHELL (uncapped) +Shape.pipeShell(spine: pathWire, profile: wire, mode: .correctedFrenet, solid: true) // solid Shape.evolved(spine: spineWire, profile: profileWire) // Faces @@ -258,7 +263,9 @@ let profile = Wire.polygon([...])! // ── 3D: Swept rail ── let path = Wire.line(from: SIMD3(0,0,0), to: SIMD3(0,0,50))! -let rail = Shape.sweep(profile: profile, along: path)! +// pipeShell(solid: true), not Shape.sweep: sweep leaves the tube ends uncapped and +// returns a shell that still reports a plausible volume (OCCTSwiftScripts#100). +let rail = Shape.pipeShell(spine: path, profile: profile, mode: .correctedFrenet, solid: true)! try ctx.add(rail, id: "rail-3d", color: C.steel, name: "Rail solid") // ── 2D: Cross-section profile ── @@ -419,7 +426,7 @@ public enum NEM120Profile { var rail: Shape? = nil if let len = trackLength, let path = Wire.line(from: SIMD3(0,0,0), to: SIMD3(0,0,len)) { - rail = Shape.sweep(profile: profile, along: path) + rail = Shape.pipeShell(spine: path, profile: profile, mode: .correctedFrenet, solid: true) } return RailProfileResult( diff --git a/docs/guides/cookbook/sweeps-lofts-patterns.md b/docs/guides/cookbook/sweeps-lofts-patterns.md index 8199ba7..5dd3d34 100644 --- a/docs/guides/cookbook/sweeps-lofts-patterns.md +++ b/docs/guides/cookbook/sweeps-lofts-patterns.md @@ -35,7 +35,7 @@ let tangent = t / tLen let section = Wire.circle(origin: SIMD3(meanRadius, 0, 0), normal: tangent, radius: wireDia / 2)! -let spring = Shape.sweep(profile: section, along: path)! +let spring = Shape.pipeShell(spine: path, profile: section, mode: .correctedFrenet, solid: true)! ``` Run it: @@ -50,9 +50,16 @@ swift run occtkit run recipes/02-helical-spring/main.swift --format brep - The section circle **must** sit on the spine start and face along the tangent: an edge-on or offset section makes `BRepOffsetAPI_MakePipe` fail and returns `nil`. -- `Shape.sweep` orientation-normalises its result since OCCTSwift v1.3.1 (issue #170), - so you never need to flip the section sense to avoid a negative-volume solid. Use - `Shape.signedVolume` if you need to inspect raw orientation. +- **Use `pipeShell(..., solid: true)`, not `Shape.sweep`, when you want a solid.** + `Shape.sweep` wraps `BRepOffsetAPI_MakePipe`, which never caps the tube ends, so it + returns an open **shell**. The shell still reports a plausible positive `volume`, which + is what let this go unnoticed in this recipe until OCCTSwiftScripts#100. Check with + `shape.subShapeCount(ofType: .solid) >= 1`; `shapeType` alone is misleading, because a + compound wrapping one solid is perfectly healthy. +- `Shape.sweep` orientation-normalises its result since OCCTSwift v1.3.1 (issue #170), so + you never need to flip the section sense to avoid a negative-volume shell. Use + `Shape.signedVolume` and `orientedForward()` if you need to inspect or fix raw + orientation. - `Wire.helix` takes `turns:` (a coil count), **not** a `height:`. Free length ≈ `pitch · turns`. - Ground or closed ends are out of scope here: they require a variable-pitch helix or diff --git a/docs/reference/occtkit-verbs.md b/docs/reference/occtkit-verbs.md index 3cce850..3712ae7 100644 --- a/docs/reference/occtkit-verbs.md +++ b/docs/reference/occtkit-verbs.md @@ -190,14 +190,24 @@ feature-recognize bracket.brep ### `metrics` -Volume / surface area / centre of mass / bounding box / principal axes for a BREP. -Pure read, no file output. `volume`, `centerOfMass`, `principalAxes` come from -`Shape.volumeInertia` (solid-only; `null` otherwise). - -**Flag form:** `metrics [--metrics volume,surfaceArea,centerOfMass,boundingBox,boundingBoxOptimal,principalAxes]` +Volume / surface area / centre of mass / bounding box / principal axes / solid count for +a BREP. Pure read, no file output. `volume`, `centerOfMass`, `principalAxes` come from +`Shape.volumeInertia` (solid-only; `null` otherwise). `solidCount` is +`Shape.subShapeCount(ofType: .solid)`: use it, not `shapeType`, to tell a genuinely +solid body from a shell or an empty-of-solids compound (`shapeType` alone is misleading, +`circularPatternCut` legitimately reports `compound` for a healthy one-solid result). + +**Flag form:** `metrics [--metrics volume,surfaceArea,centerOfMass,boundingBox,boundingBoxOptimal,principalAxes,solidCount]` (omit `--metrics` for all except `boundingBoxOptimal`, which is opt-in). + +> **Downstream note (added OCCTSwiftScripts#100).** `solidCount` is in the default-all set, so +> every existing `occtkit metrics` consumer, including OCCTMCP's `compute_metrics`, now receives +> one extra field in the default response. The change is additive and the field is optional, so +> no consumer breaks. It is default-all rather than opt-in like `boundingBoxOptimal` because the +> traversal is a single cheap `TopExp::MapShapes` pass, and because "is this actually a solid" is +> the question a caller most often needs and cannot answer from `shapeType`. **JSON form:** `{ "inputBrep": "...", "metrics": [...] }` -**Output:** `{ volume?, surfaceArea?, centerOfMass?, boundingBox?, boundingBoxOptimal?, principalAxes? }`. +**Output:** `{ volume?, surfaceArea?, centerOfMass?, boundingBox?, boundingBoxOptimal?, principalAxes?, solidCount? }`. ```bash metrics part.brep --metrics volume,boundingBox diff --git a/okf/decisions/errexit-is-suppressed-in-or-context.md b/okf/decisions/errexit-is-suppressed-in-or-context.md new file mode 100644 index 0000000..e1235cc --- /dev/null +++ b/okf/decisions/errexit-is-suppressed-in-or-context.md @@ -0,0 +1,63 @@ +--- +type: decision +title: A shell function called as `f || status=1` must return failure explicitly +description: errexit is suppressed inside the left-hand side of a `||`, so a bare failing command in such a function does not abort it and the function returns the exit status of its last command instead. +tags: [decision, bash, scripts, ci, testing] +timestamp: 2026-08-05 +--- + +# Decision + +In a shell function that is invoked as the left-hand side of `||` or `&&`, every check must +propagate failure **explicitly**: + +```bash +if ! python3 - "$@" <<'PY' +... +PY +then + return 1 +fi +``` + +Not: + +```bash +python3 - "$@" <<'PY' # a nonzero exit here does NOT abort the function +... +PY +``` + +# Why + +`set -e` is disabled for any command in a context where its exit status is already being tested, +including the left-hand side of `||`. So in: + +```bash +check_one "$dir" || status=1 +``` + +a bare failing command inside `check_one` does not abort it. Execution continues, and the +function returns the status of whichever command happened to run last, which is usually a +successful `echo`. + +# Why it mattered + +`Scripts/recipe-check.sh` had exactly this shape. Its Python validation block printed every +failure it detected and then returned success, so the whole suite exited 0 while reporting +problems on screen. Every assertion in it was decorative. + +It hid a real regression: `recipes/01-mounting-bracket` had drifted 2.27% in volume against its +committed reference after the OCCTSwift 1.15.0 to 1.17.0 repin +([#101](https://github.com/SecondMouseAU/OCCTSwiftScripts/issues/101)). The check was detecting +it and reporting a pass. + +# The general rule + +This is the same failure class the repo has now hit three times: a guard that cannot fail is +worse than no guard, because it reads as coverage. See +[single-source-verb-inventory](single-source-verb-inventory.md) for the dead-code variant, where +the mechanism existed and was never wired up. + +When adding any check, verify it fails when it should. Break the thing deliberately, watch the +check go red, then restore. Put that evidence in the PR body. diff --git a/okf/decisions/index.md b/okf/decisions/index.md index 025bc6b..888d29a 100644 --- a/okf/decisions/index.md +++ b/okf/decisions/index.md @@ -11,3 +11,7 @@ that need standalone rationale. * [SwiftPM path dependency identity](swiftpm-path-dependency-identity.md): a path dep's identity is the directory basename, so generated manifests derive declaration and identity from one value. +* [Wire sweep factories are not symmetric](wire-sweep-factories-are-not-symmetric.md): `extrude` + faces a wire for you, `revolve` and `sweep` do not. Assert `solidCount >= 1`. +* [errexit is suppressed in `||` context](errexit-is-suppressed-in-or-context.md): a function + called as `f || status=1` must `return 1` explicitly or its checks are decorative. diff --git a/okf/decisions/wire-sweep-factories-are-not-symmetric.md b/okf/decisions/wire-sweep-factories-are-not-symmetric.md new file mode 100644 index 0000000..7123efe --- /dev/null +++ b/okf/decisions/wire-sweep-factories-are-not-symmetric.md @@ -0,0 +1,68 @@ +--- +type: decision +title: Wire-profile sweep factories are not symmetric about what they return +description: Shape.extrude faces a wire for you and returns a solid; Shape.revolve and Shape.sweep given a wire return a shell. Face the wire first, and assert solidCount rather than trusting shapeType or a positive volume. +resource: https://github.com/SecondMouseAU/OCCTSwiftScripts/issues/100 +tags: [decision, occtswift, topology, recipes, solids] +timestamp: 2026-08-05 +--- + +# Decision + +When a sweep factory is given a **wire** and a solid is wanted, face the wire first. Do not +assume the factory does it. + +| Call | Returns | +|---|---| +| `Shape.extrude(profile: wire, ...)` | **solid** (faces the wire for you) | +| `Shape.loft(profiles: [...], solid: true)` | **solid** | +| `Shape.revolve(profile: wire, ...)` | **shell** | +| `Shape.face(from: wire)?.revolved(...)` | **solid** | +| `Shape.sweep(profile: wire, along:)` | **shell** (`BRepOffsetAPI_MakePipe` never caps ends) | +| `Shape.pipeShell(spine:profile:mode:solid: true)` | **solid** | + +None of this is an OCCTSwift bug. Revolving or sweeping a *curve* legitimately produces a +surface, and `BRepOffsetAPI_MakePipe` genuinely has no capping option. The trap is that +neighbouring factories with near-identical signatures return different topological kinds, and +nothing in the signature says so. + +# How to check + +Assert `shape.subShapeCount(ofType: .solid) >= 1`. + +Do **not** assert `shapeType == .solid`: a compound wrapping one solid is the normal, healthy +result of `circularPatternCut`, and that assertion would reject it. The `metrics` verb exposes +this as `solidCount`. + +Do **not** rely on volume being positive. A **closed** shell returns a correct positive volume +from `GProp`, and an open one returns a plausible but meaningless number. That is precisely why +this went unnoticed. + +# Why + +Two shipped cookbook recipes emitted shells while documenting themselves as solids: + +- `recipes/03-pipe-flange/` revolved a wire. +- `recipes/02-helical-spring/` swept one. + +Neither was caught, because `Scripts/recipe-check.sh` asserted only that volume was greater than +zero, and both shells satisfied that. + +The flange case shows why a shell is not a cosmetic problem. Its bolt-circle +`circularPatternCut` against the non-solid blank silently under-cut: it removed 6157.52 mm3 of +the correct 18472.57 mm3, so **two thirds of the bolt holes were missing** while every metric the +suite measured looked healthy. + +The same pattern is what broke Route B in the bevel gear spike ([#86](https://github.com/SecondMouseAU/OCCTSwiftScripts/issues/86)): +a shell blank produced disconnected surface patches under boolean subtraction, with a nil or +negative volume, and it took step-by-step measurement to see that the blank rather than +`circularPatternCut` was at fault. + +# Consequences + +`Scripts/recipe-check.sh` asserts `solidCount >= 1` on every emitted recipe body, and compares +`solidCount` against the committed reference so a topology regression that preserves volume is +caught too. + +`docs/SCRIPT_WORKFLOW.md`'s profile cheat sheet now annotates each factory with what it returns, +since that list sitting on consecutive lines is exactly where the wrong assumption forms. diff --git a/okf/log.md b/okf/log.md index 0f7cf4b..c41ed76 100644 --- a/okf/log.md +++ b/okf/log.md @@ -1,5 +1,15 @@ # Knowledge Log +## 2026-08-05 + +* **Update**: Fixed two cookbook recipes that emitted shells while documenting themselves as + solids (#100). `03-pipe-flange` revolved a wire, `02-helical-spring` swept one. The flange's + shell was also silently under-cutting its bolt circle: it removed only one third of the + material it should have, so two thirds of each bolt hole was left unfinished. Hardened `Scripts/recipe-check.sh` to assert `solidCount`, and fixed a bug there that + made every check it performed decorative. +* **Creation**: Recorded the wire-sweep-factories-are-not-symmetric decision. +* **Creation**: Recorded the errexit-is-suppressed-in-or-context decision. + ## 2026-08-04 * **Update**: Deduplication pass for issue #82. Moved `readFile`, `decodeJSON`, `valueAfter`, diff --git a/recipes/01-mounting-bracket/output.brep b/recipes/01-mounting-bracket/output.brep index 90890d4..44253a0 100644 --- a/recipes/01-mounting-bracket/output.brep +++ b/recipes/01-mounting-bracket/output.brep @@ -7,157 +7,89 @@ Locations 2 0 1 0 0 0 0 1 40 2 1 -1 0 -Curve2ds 56 -1 0 -0 0 -1 +Curve2ds 40 +1 0 0 0 -1 +1 50 0 0 -1 +1 0 0 1 0 +1 0 -40 1 0 +1 50 0 0 -1 +2 27.500000000000004 -28 0 -1 1 0 3.5 +1 0 1 1 0 +2 27.500000000000004 -12 0 -1 1 0 3.5 +1 0 1 1 0 +1 0 0 0 -1 +1 0 0 1 0 +1 0 -40 1 0 +2 22.499999999999996 -28 0 -1 1 0 3.5 +1 0 1 1 0 +2 22.499999999999996 -12 0 -1 1 0 3.5 +1 0 1 1 0 1 0 -0 1 0 1 0 -40 1 0 1 0 0 1 0 1 0 -40 1 0 +1 0 -0 0 -1 +2 22.499999999999996 -28 0 -1 -1 -0 3.5 +1 0 6 1 0 +1 6.2831853071795862 -0 0 1 +1 0 -0 0 1 +2 22.499999999999996 -12 0 -1 -1 -0 3.5 +1 0 6 1 0 +1 6.2831853071795862 -0 0 1 +1 0 -0 0 1 1 45 0 0 -1 +2 22.500000000000004 -28 0 -1 -1 -0 3.5 +1 0 6 1 0 +1 6.2831853071795862 -0 0 1 +1 0 -0 0 1 +2 22.500000000000004 -12 0 -1 -1 -0 3.5 +1 0 6 1 0 +1 6.2831853071795862 -0 0 1 +1 0 -0 0 1 1 45 0 0 -1 1 0 0 0 -1 -8 7.7499999999999964 14.749999999999996 -1 11.25 -28 1 0 -8 7.7499999999999964 14.749999999999996 -1 11.249999999999996 -1 -1 0 -8 -5.999999999062311e-07 7.0000005999999999 -1 19.145898033750314 -28 0 -1 -8 -5.999999999062311e-07 7.0000005999999999 -1 5.9934336057435385 0 0 1 -8 7.7499999999999964 14.749999999999996 -1 11.25 -35 1 0 -8 7.7499999999999964 14.749999999999996 -1 11.249999999999996 -1 -1 0 -8 -5.999999999062311e-07 7.0000005999999999 -1 25.854101966249679 -28 0 -1 -8 -5.999999999062311e-07 7.0000005999999999 -1 3.4313443550258405 0 0 1 -8 7.7499999999999964 14.749999999999996 -1 11.25 -12 1 0 -8 7.7499999999999964 14.749999999999996 -1 11.249999999999996 -1 -1 0 -8 -5.999999999062311e-07 7.0000005999999999 -1 19.145898033750314 -12 0 -1 -8 -5.999999999062311e-07 7.0000005999999999 -1 5.9934336057435385 0 0 1 -8 -5.999999999062311e-07 7.0000005999999999 -1 25.854101966249679 -12 0 -1 -8 -5.999999999062311e-07 7.0000005999999999 -1 3.4313443550258405 0 0 1 -8 7.7499999999999964 14.749999999999996 -1 11.25 -19 1 0 -8 7.7499999999999964 14.749999999999996 -1 11.249999999999996 -1 -1 0 -8 7.7500000000000036 14.750000000000004 -1 11.25 -28 1 0 -8 7.7500000000000036 14.750000000000004 -1 -1 -11.250000000000004 0 1 -8 -5.999999999062311e-07 7.0000005999999999 -1 19.145898033750321 -28 0 -1 -8 -5.999999999062311e-07 7.0000005999999999 -1 4.4226372789486419 0 0 1 -8 7.7500000000000036 14.750000000000004 -1 11.25 -35 1 0 -8 7.7500000000000036 14.750000000000004 -1 -1 -11.250000000000004 0 1 -8 -5.999999999062311e-07 7.0000005999999999 -1 25.854101966249686 -28 0 -1 -8 -5.999999999062311e-07 7.0000005999999999 -1 1.8605480282309441 0 0 1 -8 7.7500000000000036 14.750000000000004 -1 11.25 -12 1 0 -8 7.7500000000000036 14.750000000000004 -1 -1 -11.250000000000004 0 1 -8 -5.999999999062311e-07 7.0000005999999999 -1 19.145898033750321 -12 0 -1 -8 -5.999999999062311e-07 7.0000005999999999 -1 4.4226372789486419 0 0 1 -8 -5.999999999062311e-07 7.0000005999999999 -1 25.854101966249686 -12 0 -1 -8 -5.999999999062311e-07 7.0000005999999999 -1 1.8605480282309441 0 0 1 -8 7.7500000000000036 14.750000000000004 -1 11.25 -19 1 0 -8 7.7500000000000036 14.750000000000004 -1 -1 -11.250000000000004 0 1 -1 0 0 1 0 -2 0 0 1 0 -0 1 3.5 -1 0 7 1 0 -2 0 0 1 0 -0 1 3.5 -1 0 0 1 0 -2 0 0 1 0 -0 1 3.5 -1 0 7 1 0 -2 0 0 1 0 -0 1 3.5 -1 0 0 1 0 -2 0 0 1 0 -0 1 3.5 -1 0 7 1 0 -2 0 0 1 0 -0 1 3.5 -1 0 0 1 0 -2 0 0 1 0 -0 1 3.5 -1 0 7 1 0 -2 0 0 1 0 -0 1 3.5 -Curves 36 +Curves 24 1 0 0 0 0 0 1 -1 50 0 0 0 0 1 1 0 0 0 1 0 0 +1 50 0 0 0 0 1 +2 27.500000000000004 0 28 0 1 0 0 -0 1 1 0 -0 3.5 +2 27.500000000000004 0 12 0 1 0 0 -0 1 1 0 -0 3.5 1 0 50 0 0 0 1 1 0 50 0 0 -1 0 -1 50 5 0 0 0 1 +2 0 27.500000000000004 28 1 0 0 -0 0 1 0 -1 0 3.5 +2 0 27.500000000000004 12 1 0 0 -0 0 1 0 -1 0 3.5 1 50 0 0 0 1 0 1 50 5 0 -1 0 0 1 5 5 0 0 1 0 1 5 50 0 -1 0 0 +1 50 5 0 0 0 1 +2 27.500000000000004 5 28 0 1 0 0 -0 1 1 0 -0 3.5 +1 27.500000000000004 -1 31.5 0 1 0 +2 27.500000000000004 5 12 0 1 0 0 -0 1 1 0 -0 3.5 +1 27.500000000000004 -1 15.5 0 1 0 1 5 50 0 0 0 1 +2 5 27.500000000000004 28 1 0 0 -0 0 1 0 -1 0 3.5 +1 -1 27.500000000000004 31.5 1 0 0 +2 5 27.500000000000004 12 1 0 0 -0 0 1 0 -1 0 3.5 +1 -1 27.500000000000004 15.5 1 0 0 1 5 5 0 0 0 1 -1 38.75 5 28 -1 0 0 -1 30.854101966249686 5 28 0 0 1 -1 38.75 5 35 -1 0 0 -1 24.145898033750321 5 28 0 0 1 -1 38.75 5 12 -1 0 0 -1 30.854101966249686 5 12 0 0 1 -1 24.145898033750321 5 12 0 0 1 -1 38.75 5 19 -1 0 0 -1 5 16.25 28 0 1 -0 -1 5 24.145898033750321 28 0 0 1 -1 5 16.25 35 0 1 -0 -1 5 30.854101966249686 28 0 0 1 -1 5 16.25 12 0 1 -0 -1 5 24.145898033750321 12 0 0 1 -1 5 30.854101966249686 12 0 0 1 -1 5 16.25 19 0 1 -0 -2 27.500000000000004 6 28 0 0 1 1 0 -0 -0 1 0 3.5 -2 27.500000000000004 6 35 0 0 1 1 0 -0 -0 1 0 3.5 -2 27.500000000000004 6 12 0 0 1 1 0 -0 -0 1 0 3.5 -2 27.500000000000004 6 19 0 0 1 1 0 -0 -0 1 0 3.5 -2 6 27.500000000000004 28 0 0 1 1 0 -0 -0 1 0 3.5 -2 6 27.500000000000004 35 0 0 1 1 0 -0 -0 1 0 3.5 -2 6 27.500000000000004 12 0 0 1 1 0 -0 -0 1 0 3.5 -2 6 27.500000000000004 19 0 0 1 1 0 -0 -0 1 0 3.5 Polygon3D 0 PolygonOnTriangulations 0 -Surfaces 19 +Surfaces 11 1 0 0 0 0 1 0 1 0 0 0 0 -1 1 0 50 0 1 0 -0 0 -1 0 0 -0 -1 -1 50 0 0 -1 0 0 0 1 0 0 0 -1 -1 50 5 0 0 -1 0 -1 0 0 -0 -0 -1 +2 27.500000000000004 -1 28 0 1 0 0 -0 1 1 0 -0 3.5 +2 27.500000000000004 -1 12 0 1 0 0 -0 1 1 0 -0 3.5 +2 -1 27.500000000000004 28 1 0 0 -0 0 1 0 -1 0 3.5 +2 -1 27.500000000000004 12 1 0 0 -0 0 1 0 -1 0 3.5 1 14.875 14.875 0 0 0 1 1 0 -0 -0 1 0 +1 50 5 0 0 -1 0 -1 0 0 -0 -0 -1 1 5 5 0 -1 0 0 0 1 0 0 0 -1 +1 50 0 0 -1 0 0 0 1 0 0 0 -1 1 5 50 0 0 -1 0 -1 0 0 -0 -0 -1 -1 27.500000000000004 6 28 0 0 1 1 0 -0 -0 1 0 -2 27.500000000000004 6 28 0 0 1 1 0 -0 -0 1 0 3.5 -1 27.500000000000004 6 35 0 0 1 1 0 -0 -0 1 0 -1 27.500000000000004 6 12 0 0 1 1 0 -0 -0 1 0 -2 27.500000000000004 6 12 0 0 1 1 0 -0 -0 1 0 3.5 -1 27.500000000000004 6 19 0 0 1 1 0 -0 -0 1 0 -1 6 27.500000000000004 28 0 0 1 1 0 -0 -0 1 0 -2 6 27.500000000000004 28 0 0 1 1 0 -0 -0 1 0 3.5 -1 6 27.500000000000004 35 0 0 1 1 0 -0 -0 1 0 -1 6 27.500000000000004 12 0 0 1 1 0 -0 -0 1 0 -2 6 27.500000000000004 12 0 0 1 1 0 -0 -0 1 0 3.5 -1 6 27.500000000000004 19 0 0 1 1 0 -0 -0 1 0 Triangulations 0 -TShapes 103 +TShapes 71 Ve 1e-07 0 0 0 @@ -168,10 +100,12 @@ Ve Ed 1e-07 1 1 0 1 1 0 0 40 +2 1 1 0 0 40 +2 2 2 0 0 40 0 0101000 -+103 0 -103 1 * ++71 0 -71 1 * Ve 1e-07 50 0 0 @@ -181,60 +115,73 @@ Ve * Ed 1e-07 1 1 0 -1 2 0 0 40 +1 2 0 0 50 +2 3 1 0 0 50 +2 4 1 2 0 50 0 0101000 -+101 0 -101 1 * ++71 0 -69 0 * Ed 1e-07 1 1 0 -1 3 0 0 50 +1 3 0 0 40 +2 5 1 0 0 40 0 0101000 -+103 0 -101 0 * ++69 0 -69 1 * Wi 0101100 -+102 0 -100 0 -99 0 +99 1 * -Fa -0 1e-07 1 0 - -0101000 -+98 0 * ++70 0 -68 0 +68 1 -67 0 * Ve 1e-07 -0 50 0 +27.5 0 31.5 0 0 0101101 * Ed 1e-07 1 1 0 -1 4 0 0 40 +1 4 0 0 6.28318530717959 +2 6 1 0 0 6.28318530717959 +2 7 3 0 0 6.28318530717959 0 -0101000 -+96 0 -96 1 * +0101100 ++65 0 -65 0 * +Wi + +0101100 +-64 0 * +Ve +1e-07 +27.5 0 15.5 +0 0 + +0101101 +* Ed 1e-07 1 1 0 -1 5 0 0 50 +1 5 0 0 6.28318530717959 +2 8 1 0 0 6.28318530717959 +2 9 4 0 0 6.28318530717959 0 -0101000 -+96 0 -103 0 * +0101100 ++62 0 -62 0 * Wi 0101100 -+95 0 -102 0 -94 0 +94 1 * +-61 0 * Fa -0 1e-07 2 0 +0 1e-07 1 0 0101000 -+93 0 * ++66 0 +63 0 +60 0 * Ve 1e-07 -50 5 0 +0 50 0 0 0 0101101 @@ -242,577 +189,345 @@ Ve Ed 1e-07 1 1 0 1 6 0 0 40 -2 1 4 0 0 40 +2 10 2 0 0 40 0 0101000 -+91 0 -91 1 * ++58 0 -58 1 * Ed 1e-07 1 1 0 -1 7 0 0 5 +1 7 0 0 50 +2 11 2 0 0 50 +2 12 2 2 0 50 0 0101000 -+101 0 -91 0 * ++58 0 -71 0 * Wi 0101100 -+100 0 -90 0 -89 0 +89 1 * -Fa -0 1e-07 3 0 - -0101000 -+88 0 * ++57 0 -56 0 +56 1 -70 0 * Ve 1e-07 -5 5 0 +0 27.5 31.5 0 0 0101101 * Ed 1e-07 1 1 0 -1 8 0 0 45 -2 2 4 0 0 45 -2 3 4 2 0 45 +1 8 0 0 6.28318530717959 +2 13 2 0 0 6.28318530717959 +2 14 5 0 0 6.28318530717959 0 -0101000 -+91 0 -86 0 * +0101100 ++54 0 -54 0 * +Wi + +0101100 +-53 0 * Ve 1e-07 -5 50 0 +0 27.5 15.5 0 0 0101101 * Ed 1e-07 1 1 0 -1 9 0 0 45 -2 4 6 0 0 45 -2 5 6 2 0 45 -0 - -0101000 -+86 0 -84 0 * -Ed - 1e-07 1 1 0 -1 10 0 0 5 +1 9 0 0 6.28318530717959 +2 15 2 0 0 6.28318530717959 +2 16 6 0 0 6.28318530717959 0 -0101000 -+84 0 -96 0 * -Wi - 0101100 -+99 0 +89 0 +85 0 +83 0 +82 0 +94 0 * -Fa -0 1e-07 5 0 - -0101000 -+81 0 * -Ed - 1e-07 1 1 0 -1 11 0 0 40 -2 6 6 0 0 40 -0 - -0101000 -+84 0 -84 1 * ++51 0 -51 0 * Wi 0101100 -+79 0 -95 0 -82 0 +82 1 * +-50 0 * Fa -0 1e-07 7 0 - -0101000 -+78 0 * -Ed - 1e-07 1 1 0 -1 12 0 0 40 -2 7 4 0 0 40 -2 8 6 0 0 40 -0 +0 1e-07 2 0 0101000 -+86 0 -86 1 * -Wi - -0101100 -+90 0 -85 0 +85 1 -76 0 * ++55 0 +52 0 +49 0 * Ve -1.50000001776357e-07 -30.8541019662497 5 28 -0 0 - -0101101 -* -Ve -1.50000000888178e-07 -24.1458980337503 5 28 +1e-07 +50 5 0 0 0 0101101 * Ed - 1.5e-07 1 1 0 -1 13 0 7.89589803375031 14.6041019662497 -2 9 4 0 7.89589803375031 14.6041019662497 -2 10 8 0 7.89589803375031 14.6041019662497 + 1e-07 1 1 0 +1 10 0 0 5 0 0101000 -+74 0 -73 0 * ++69 0 -47 0 * Ve -1.50000001776357e-07 -30.8541019662497 5 35 +1e-07 +5 5 0 0 0 0101101 * Ed 1e-07 1 1 0 -1 14 0 0 7 -2 11 4 0 0 7 -2 12 9 0 0 7 +1 11 0 0 45 +2 17 8 0 0 45 +2 18 8 2 0 45 0 0101000 -+74 0 -71 0 * ++47 0 -45 0 * Ve -1.50000000888178e-07 -24.1458980337503 5 35 +1e-07 +5 50 0 0 0 0101101 * Ed - 1.5e-07 1 1 0 -1 15 0 7.89589803375031 14.6041019662497 -2 13 4 0 7.89589803375031 14.6041019662497 -2 14 10 0 7.89589803375031 14.6041019662497 + 1e-07 1 1 0 +1 12 0 0 45 +2 19 9 0 0 45 +2 20 9 2 0 45 0 0101000 -+71 0 -69 0 * ++45 0 -43 0 * Ed 1e-07 1 1 0 -1 16 0 0 7 -2 15 4 0 0 7 -2 16 9 0 0 7 +1 13 0 0 5 0 0101000 -+73 0 -69 0 * ++43 0 -58 0 * Wi 0101100 -+72 0 -70 0 -68 0 +67 0 * -Ve -1.50000001776357e-07 -30.8541019662497 5 12 -0 0 - -0101101 -* -Ve -1.50000000888178e-07 -24.1458980337503 5 12 -0 0 - -0101101 -* -Ed - 1.5e-07 1 1 0 -1 17 0 7.89589803375031 14.6041019662497 -2 17 4 0 7.89589803375031 14.6041019662497 -2 18 11 0 7.89589803375031 14.6041019662497 -0 - -0101000 -+65 0 -64 0 * -Ve -1.50000001776357e-07 -30.8541019662497 5 19 -0 0 - -0101101 -* -Ed - 1e-07 1 1 0 -1 18 0 0 7 -2 19 4 0 0 7 -2 20 12 0 0 7 -0 ++68 0 +46 0 +44 0 +42 0 +41 0 +56 0 * +Fa +0 1e-07 7 0 0101000 -+65 0 -62 0 * -Ve -1.50000000888178e-07 -24.1458980337503 5 19 -0 0 - -0101101 -* ++40 0 * Ed 1e-07 1 1 0 -1 19 0 0 7 -2 21 4 0 0 7 -2 22 12 0 0 7 -0 - -0101000 -+64 0 -60 0 * -Ed - 1.5e-07 1 1 0 -1 20 0 7.89589803375031 14.6041019662497 -2 23 4 0 7.89589803375031 14.6041019662497 -2 24 13 0 7.89589803375031 14.6041019662497 +1 14 0 0 40 +2 21 8 0 0 40 0 0101000 -+62 0 -60 0 * ++47 0 -47 1 * Wi 0101100 -+63 0 -61 0 +59 0 -58 0 * ++67 0 -38 0 -46 0 +46 1 * Fa -0 1e-07 4 0 - -0101000 -+75 0 +66 0 +57 0 * -Wi - -0101100 -+76 0 -83 0 +83 1 -79 0 * -Ve -1.50000001776357e-07 -5 24.1458980337503 28 -0 0 - -0101101 -* -Ve -1.50000000888178e-07 -5 30.8541019662497 28 -0 0 - -0101101 -* -Ed - 1.5e-07 1 1 0 -1 21 0 7.89589803375032 14.6041019662497 -2 25 6 0 7.89589803375032 14.6041019662497 -2 26 14 0 7.89589803375032 14.6041019662497 -0 +0 1e-07 10 0 0101000 -+54 0 -53 0 * ++37 0 * Ve -1.50000001776357e-07 -5 24.1458980337503 35 +1e-07 +27.5 5 31.5 0 0 0101101 * Ed 1e-07 1 1 0 -1 22 0 0 7 -2 27 6 0 0 7 -2 28 15 0 0 7 -0 - -0101000 -+54 0 -51 0 * -Ve -1.50000000888178e-07 -5 30.8541019662497 35 -0 0 - -0101101 -* -Ed - 1.5e-07 1 1 0 -1 23 0 7.89589803375032 14.6041019662497 -2 29 6 0 7.89589803375032 14.6041019662497 -2 30 16 0 7.89589803375032 14.6041019662497 +1 15 0 0 6.28318530717959 +2 22 8 0 0 6.28318530717959 +2 23 3 0 0 6.28318530717959 0 -0101000 -+51 0 -49 0 * +0101100 ++35 0 -35 0 * Ed 1e-07 1 1 0 -1 24 0 0 7 -2 31 6 0 0 7 -2 32 15 0 0 7 +1 16 0 1 6 +3 24 25CN 3 0 1 6 0 0101000 -+53 0 -49 0 * ++65 0 -35 0 * Wi 0101100 -+52 0 -50 0 -48 0 +47 0 * -Ve -1.50000001776357e-07 -5 24.1458980337503 12 -0 0 - -0101101 -* -Ve -1.50000000888178e-07 -5 30.8541019662497 12 -0 0 - -0101101 -* -Ed - 1.5e-07 1 1 0 -1 25 0 7.89589803375032 14.6041019662497 -2 33 6 0 7.89589803375032 14.6041019662497 -2 34 17 0 7.89589803375032 14.6041019662497 -0 +-34 0 +33 0 +64 0 -33 0 * +Fa +0 1e-07 3 0 0101000 -+45 0 -44 0 * ++32 0 * Ve -1.50000001776357e-07 -5 24.1458980337503 19 +1e-07 +27.5 5 15.5 0 0 0101101 * Ed 1e-07 1 1 0 -1 26 0 0 7 -2 35 6 0 0 7 -2 36 18 0 0 7 +1 17 0 0 6.28318530717959 +2 26 8 0 0 6.28318530717959 +2 27 4 0 0 6.28318530717959 0 -0101000 -+45 0 -42 0 * -Ve -1.50000000888178e-07 -5 30.8541019662497 19 -0 0 - -0101101 -* +0101100 ++30 0 -30 0 * Ed 1e-07 1 1 0 -1 27 0 0 7 -2 37 6 0 0 7 -2 38 18 0 0 7 -0 - -0101000 -+44 0 -40 0 * -Ed - 1.5e-07 1 1 0 -1 28 0 7.89589803375032 14.6041019662497 -2 39 6 0 7.89589803375032 14.6041019662497 -2 40 19 0 7.89589803375032 14.6041019662497 +1 18 0 1 6 +3 28 29CN 4 0 1 6 0 0101000 -+42 0 -40 0 * ++62 0 -30 0 * Wi 0101100 -+43 0 -41 0 +39 0 -38 0 * +-29 0 +28 0 +61 0 -28 0 * Fa -0 1e-07 6 0 +0 1e-07 4 0 0101000 -+55 0 +46 0 +37 0 * ++27 0 * Ed 1e-07 1 1 0 -1 29 0 3.43134435502584 5.99343360574354 -2 41 9 0 3.43134435502584 5.99343360574354 -2 42 8 0 3.43134435502584 5.99343360574354 +1 19 0 0 40 +2 30 9 0 0 40 0 0101000 -+73 0 -74 0 * ++43 0 -43 1 * Wi 0101100 -+72 0 +35 0 * ++25 0 -57 0 -41 0 +41 1 * Fa -0 1e-07 8 0 +0 1e-07 11 0 0101000 -+34 0 * ++24 0 * +Ve +1e-07 +5 27.5 31.5 +0 0 + +0101101 +* Ed 1e-07 1 1 0 -1 30 0 3.43134435502584 5.99343360574354 -2 43 9 0 3.43134435502584 5.99343360574354 -2 44 10 0 3.43134435502584 5.99343360574354 +1 20 0 0 6.28318530717959 +2 31 9 0 0 6.28318530717959 +2 32 5 0 0 6.28318530717959 0 -0101000 -+69 0 -71 0 * -Wi - 0101100 --32 0 +70 0 +35 0 -67 0 * -Fa -0 1e-07 9 0 - -0101000 -+31 0 * -Wi - -0101100 -+68 0 +32 0 * -Fa -0 1e-07 10 0 - -0101000 -+29 0 * ++22 0 -22 0 * Ed 1e-07 1 1 0 -1 31 0 3.43134435502584 5.99343360574354 -2 45 12 0 3.43134435502584 5.99343360574354 -2 46 11 0 3.43134435502584 5.99343360574354 +1 21 0 1 6 +3 33 34CN 5 0 1 6 0 0101000 -+64 0 -65 0 * ++54 0 -22 0 * Wi 0101100 -+63 0 +27 0 * +-21 0 +20 0 +53 0 -20 0 * Fa -0 1e-07 11 0 +0 1e-07 5 0 0101000 -+26 0 * ++19 0 * +Ve +1e-07 +5 27.5 15.5 +0 0 + +0101101 +* Ed 1e-07 1 1 0 -1 32 0 3.43134435502584 5.99343360574354 -2 47 12 0 3.43134435502584 5.99343360574354 -2 48 13 0 3.43134435502584 5.99343360574354 +1 22 0 0 6.28318530717959 +2 35 9 0 0 6.28318530717959 +2 36 6 0 0 6.28318530717959 0 -0101000 -+60 0 -62 0 * -Wi - 0101100 --24 0 +61 0 +27 0 -59 0 * -Fa -0 1e-07 12 0 - -0101000 -+23 0 * -Wi - -0101100 -+58 0 +24 0 * -Fa -0 1e-07 13 0 - -0101000 -+21 0 * ++17 0 -17 0 * Ed 1e-07 1 1 0 -1 33 0 1.86054802823094 4.42263727894864 -2 49 15 0 1.86054802823094 4.42263727894864 -2 50 14 0 1.86054802823094 4.42263727894864 +1 23 0 1 6 +3 37 38CN 6 0 1 6 0 0101000 -+53 0 -54 0 * ++51 0 -17 0 * Wi 0101100 -+52 0 +19 0 * +-16 0 +15 0 +50 0 -15 0 * Fa -0 1e-07 14 0 +0 1e-07 6 0 0101000 -+18 0 * ++14 0 * Ed 1e-07 1 1 0 -1 34 0 1.86054802823094 4.42263727894864 -2 51 15 0 1.86054802823094 4.42263727894864 -2 52 16 0 1.86054802823094 4.42263727894864 +1 24 0 0 40 +2 39 8 0 0 40 +2 40 9 0 0 40 0 0101000 -+49 0 -51 0 * ++45 0 -45 1 * Wi 0101100 --16 0 +50 0 +19 0 -47 0 * -Fa -0 1e-07 15 0 - -0101000 -+15 0 * ++38 0 -44 0 +44 1 -12 0 * Wi 0101100 -+48 0 +16 0 * -Fa -0 1e-07 16 0 - -0101000 -+13 0 * -Ed - 1e-07 1 1 0 -1 35 0 1.86054802823094 4.42263727894864 -2 53 18 0 1.86054802823094 4.42263727894864 -2 54 17 0 1.86054802823094 4.42263727894864 -0 - -0101000 -+44 0 -45 0 * ++34 0 * Wi 0101100 -+43 0 +11 0 * ++29 0 * Fa -0 1e-07 17 0 - -0101000 -+10 0 * -Ed - 1e-07 1 1 0 -1 36 0 1.86054802823094 4.42263727894864 -2 55 18 0 1.86054802823094 4.42263727894864 -2 56 19 0 1.86054802823094 4.42263727894864 -0 +0 1e-07 8 0 0101000 -+40 0 -42 0 * ++11 0 +10 0 +9 0 * Wi 0101100 --8 0 +41 0 +11 0 -39 0 * -Fa -0 1e-07 18 0 ++12 0 -42 0 +42 1 -25 0 * +Wi -0101000 -+7 0 * +0101100 ++21 0 * Wi 0101100 -+38 0 +8 0 * ++16 0 * Fa -0 1e-07 19 0 +0 1e-07 9 0 0101000 -+5 0 * ++7 0 +6 0 +5 0 * Sh 0101100 --97 0 -92 0 -87 0 -80 0 +80 1 -77 0 -56 0 -36 0 +33 0 -30 0 --28 0 +25 0 -22 0 -20 0 +17 0 -14 0 -12 0 +9 0 -6 0 -4 0 -* +-59 0 -48 0 -39 0 +39 1 -36 0 -31 0 -26 0 -23 0 -18 0 -13 0 +-8 0 -4 0 * So 0100000 diff --git a/recipes/01-mounting-bracket/output.png b/recipes/01-mounting-bracket/output.png index 7889ead..7151596 100644 Binary files a/recipes/01-mounting-bracket/output.png and b/recipes/01-mounting-bracket/output.png differ diff --git a/recipes/02-helical-spring/README.md b/recipes/02-helical-spring/README.md index 45a9fb9..ef04d58 100644 --- a/recipes/02-helical-spring/README.md +++ b/recipes/02-helical-spring/README.md @@ -20,25 +20,35 @@ Mean coil radius is derived: `meanRadius = (outsideDia − wireDia) / 2`. The coil centre-line is a helix about Z (`Wire.helix`). The wire cross-section is a circle placed at the helix start point `(meanRadius, 0, 0)` and oriented along the start -tangent `(0, R, pitch/2π)`. The section is then swept along the helix with `Shape.sweep` -(which wraps `BRepOffsetAPI_MakePipe`). `sweep` orientation-normalises its result, so the -solid comes back with positive volume regardless of the section's sense. +tangent `(0, R, pitch/2π)`. The section is then swept along the helix with +`Shape.pipeShell(spine:profile:mode:solid:)` (which wraps +`BRepOffsetAPI_MakePipeShell`), passing `solid: true` so the swept ends are capped into +a genuine solid rather than an open tube surface (see Gotchas). `mode: .correctedFrenet` +keeps the round section true along the coil. ## OCCTSwift APIs used - `Wire.helix(radius:pitch:turns:)`: the coil centre-line - `Wire.circle(origin:normal:radius:)`: the wire cross-section -- `Shape.sweep(profile:along:)`: pipe-sweep the section along the helix +- `Shape.pipeShell(spine:profile:mode:solid:)`: pipe-sweep the section along the helix into a capped solid - `Shape.volume`: sanity print ## Gotchas +- **Use `Shape.pipeShell(..., solid: true)`, not `Shape.sweep`, for a spring.** + `Shape.sweep(profile:along:)` wraps `BRepOffsetAPI_MakePipe`, which never caps the + ends of the swept tube, it returns a **shell** even for a closed circular profile + (OCCTSwiftScripts #100). `Shape.pipeShell` wraps `BRepOffsetAPI_MakePipeShell`, which + has an explicit `solid:` flag that caps the ends into a real solid. This is the + documented canonical spring recipe (OCCTSwift cookbook, Helices & Springs). - The section circle **must** sit on the spine start and face along the tangent, or the pipe sweep fails. Don't leave it at the origin. -- `Shape.sweep` orientation-normalises since OCCTSwift v1.3.1, so you no longer need to - flip the section sense to avoid a negative-volume solid. Use `Shape.signedVolume` if you - need to inspect the raw orientation, or `Shape.orientedForward()` to normalise explicitly. - Ground/closed/squared ends are **out of scope**: this is an open-coil spring. Closed ends need either a variable-pitch helix or an end-grinding boolean. - `Wire.helix` uses `turns:` (a coil count), **not** a `height:`. Free length ≈ `pitch · activeCoils`. +- Checking a swept result: assert `shape.subShapeCount(ofType: .solid) >= 1`. Neither + `shapeType` nor a positive `volume` is sufficient, since a shell reports a plausible + volume and a compound wrapping one solid is healthy. If you are debugging a sweep's + orientation rather than its topology, `Shape.signedVolume` inspects the raw sense and + `orientedForward()` normalises it. diff --git a/recipes/02-helical-spring/main.swift b/recipes/02-helical-spring/main.swift index ad00880..6545c0b 100644 --- a/recipes/02-helical-spring/main.swift +++ b/recipes/02-helical-spring/main.swift @@ -4,11 +4,16 @@ // Outputs: one solid body: a constant-pitch round-wire compression spring. // Notes: The coil centre-line is a helix (Wire.helix); the wire cross-section is a // circle placed at the helix start and oriented along the start tangent, then -// swept along the path (Shape.sweep → BRepOffsetAPI_MakePipe). The section +// swept along the path with Shape.pipeShell(..., solid: true) (OCCTSwiftScripts +// #100). Shape.sweep wraps BRepOffsetAPI_MakePipe, which never caps the ends of +// the swept tube and so returns a shell even for a closed circular profile; +// Shape.pipeShell wraps BRepOffsetAPI_MakePipeShell, which has an explicit +// `solid:` flag that caps the ends into a genuine solid. This is the documented +// canonical spring recipe (OCCTSwift cookbook, Helices & Springs). The section // MUST sit on the spine start and face along the tangent or the pipe fails. -// Shape.sweep orientation-normalises its result (OCCTSwift v1.3.1, #170), so the -// solid has positive volume regardless of section sense. Ground/closed ends are -// out of scope here; this is an open-coil spring. +// `mode: .correctedFrenet` keeps the round section true along the coil (plain +// .frenet also builds a valid solid but lets the section twist slightly). +// Ground/closed ends are out of scope here; this is an open-coil spring. // // Run: swift run occtkit run recipes/02-helical-spring/main.swift --format brep @@ -39,7 +44,7 @@ let tLen = (t.x * t.x + t.y * t.y + t.z * t.z).squareRoot() let tangent = SIMD3(t.x / tLen, t.y / tLen, t.z / tLen) let section = Wire.circle(origin: SIMD3(meanRadius, 0, 0), normal: tangent, radius: wireDia / 2)! -let spring = Shape.sweep(profile: section, along: path)! +let spring = Shape.pipeShell(spine: path, profile: section, mode: .correctedFrenet, solid: true)! try ctx.add(spring, color: C.steel, name: "Compression spring") print("Free length ≈ \(pitch * activeCoils) mm, spring volume: \(spring.volume ?? 0) mm³") diff --git a/recipes/02-helical-spring/output.brep b/recipes/02-helical-spring/output.brep index 8c7f939..56bba28 100644 --- a/recipes/02-helical-spring/output.brep +++ b/recipes/02-helical-spring/output.brep @@ -39,132 +39,134 @@ Curve2ds 24 1 0 0 0 1 1 0 6.2831853071795862 1 0 Curves 13 -7 1 0 9 19 3 -15.33436018494295 0.7919759069610679 7.465407333532827 1.6690784610682365 -15.343646259983883 6.1551670372370495 6.8996549934860383 1.6690784610682248 -13.246460057477288 11.634001816198964 6.3215890780833988 1.6690784610682914 -8.9453390743402608 16.282433873999352 5.732002004789706 1.6690784610681222 -2.8190847531960119 19.081218232206748 5.1277568522507506 1.6690784610683778 4.1641568253474617 19.233359951592021 4.5137981346447784 1.669078461068116 10.684494759716259 16.547393638430481 3.8842892685871533 1.6690784610683136 15.522617334694585 11.612891253369121 3.2434474148041144 1.6690784610682001 18.002191582319647 5.4469051320668758 2.5891607306685405 1.6690784610682476 18.01199040249012 -0.8404260746955905 1.9220394065928479 1.6690784610682365 18.02184176246864 -7.1277419380158893 1.2549196307366426 1.6690784610682219 15.562286928667723 -13.536563922193306 0.57496266385126482 1.6690784610682809 10.529674505531396 -18.959722212172782 -0.11845214619857281 1.6690784610681595 3.3846445061657491 -22.202647482647116 -0.8231645489625059 1.6690784610683351 -4.7290125037339674 -22.354709057345147 -1.5434705641623749 1.6690784610681413 -12.267919208672714 -19.224543215878736 -2.2734289495233737 1.6690784610683038 -17.837253490720528 -13.515465353116038 -3.0180627740799366 1.6690784610682032 -20.678999521460312 -6.4198508615514793 -3.7741873932812937 1.6690784610682463 -20.688226218449401 0.79112568573515041 -4.5426058127385192 1.6690784610682365 - 0 10 3.1415926535897931 9 6.2831853071795862 10 -7 1 1 6 6 2 -15.33436018494295 0.7919759069610679 7.465407333532827 1.6690784610682365 -18.462461367543298 1.0246292718067047 8.5625659233241365 1.0367296232096095 -20.291880826845855 0.64993307188286886 4.8713382783415966 1.0383466998475139 -17.853075129661661 0.047277213715821276 0.44223072795767848 0.85353433019613967 -13.137394276972596 0.11781621491241623 2.3619544970872575 1.0383466998475139 -12.206259002342584 0.55932254211543997 6.3682487437415247 1.036729623209609 +7 1 0 8 17 3 -17.981645427977348 0.84042479581638307 7.9220273534400798 1.6690784610682365 -17.651525746634203 7.9017901844604577 7.1720282178533461 1.6690784610682363 -14.151654723836403 14.815211272597905 6.4220176486073202 1.669078461068235 -7.565719127310512 19.920196011290212 5.6720540063761264 1.669078461068239 1.010800390546561 21.610435431606462 4.921990994118576 1.6690784610682357 9.3897650711165497 19.12810248963525 4.1720538760121739 1.6690784610682354 15.471968343321269 13.430437818599531 3.422017899710359 1.6690784610682377 18.311649940172344 6.2209404266564272 2.6720280296821808 1.6690784610682368 17.981645427977362 -0.84042479581636342 1.9220273534400825 1.6690784610682365 17.651520194607123 -7.901790183108985 1.1720282305890279 1.669078461068231 14.151676524040745 -14.8152112779044 0.4220175986002514 1.6690784610682536 7.5656689223818292 -19.920195999070245 -0.32794587845969753 1.6690784610682063 -1.0107178972447652 -21.610435451684385 -1.0780091951113446 1.6690784610682667 -9.3898681877429553 -19.128102464538504 -1.8279458874503698 1.6690784610682168 -15.471867933466303 -13.430437843037685 -2.5779823306181822 1.6690784610682459 -18.311726240884774 -6.2209404080857142 -3.3279717952927421 1.6690784610682345 -17.981601011762418 0.84042478500589646 -4.0779727484456618 1.6690784610682365 + 0 9 3.1415926535897931 8 6.2831853071795862 9 +7 1 1 6 6 2 -17.981645427977348 0.84042479581638307 7.9220273534400798 1.6690784610682365 -21.302697966129521 0.95666423173145976 7.922010511520071 1.0367296232096095 -21.794689359051336 0.54006415268315333 3.8358481100945641 1.0383466998475139 -18.009281437167871 0.049761820772909499 0.46564759779054737 0.85353433019613967 -14.198891036479008 0.27420527144072698 3.8358866303607408 1.0383466998475139 -14.660592889825161 0.72418535990130772 7.9220441953600975 1.036729623209609 0 6 6.2831853071795862 6 -7 1 1 6 6 2 -20.688226218449401 0.79112568573515041 -4.5426058127385192 1.6690784610682365 -23.816056971873621 0.78828666043748186 -5.6649107114989006 1.0367296232096095 -22.883927741871624 0.37981371503255712 -9.6744766828783177 1.0383466998475139 -18.167768369691117 0.046492600722604749 -11.565164075288306 0.85353433019613967 -15.730059708405067 0.38630703705804104 -7.1075791196853082 1.0383466998475139 -17.560395465025167 0.79396471103282185 -3.420300913978136 1.036729623209609 +7 1 1 6 6 2 -17.981601011762418 0.84042478500589646 -4.0779727484456618 1.6690784610682365 -21.30265348157679 0.95666617457940151 -4.0779711775688918 1.0367296232096095 -21.794667774331305 0.54006638495909953 -8.1641308512000208 1.0383466998475139 -18.00927882622068 0.049761826232070309 -11.534352350757937 0.85353433019613967 -14.198869608058903 0.27420303537561397 -8.1641344440558967 1.0383466998475139 -14.660548541948049 0.72418339543239341 -4.0779743193224256 1.036729623209609 0 6 6.2831853071795862 6 -7 1 0 9 19 3 -20.68822621844939 0.79112568573516828 -4.5426058127385183 1.6690784610682365 -20.697502373664047 8.0020859267435824 -5.3110403309267227 1.6690784610682248 -17.87460671315522 15.326294039171907 -6.0913427783722476 1.6690784610682914 -12.122194104924988 21.495369111979837 -6.8854746999082597 1.6690784610681222 -3.9952386720332944 25.149829743936827 -7.6862298942756908 1.6690784610683778 5.1825278496042113 25.284133649624284 -8.5066453186561795 1.669078461068116 13.65735276390479 21.729271876896366 -9.3296928308491935 1.6690784610683136 19.883798938124222 15.307686569113526 -10.169051579975578 1.6690784610682001 23.044253031030053 7.3769180914753116 -11.016610787945169 1.6690784610682476 23.051839759156319 -0.64980803724873404 -11.874493271661178 1.6690784610682365 23.059467112274572 -8.6765187931633605 -12.732407628915684 1.6690784610682219 19.914512476258761 -16.795058827233131 -13.599840494707257 1.6690784610682809 13.53769876348224 -23.594496226646175 -14.479866193042149 1.6690784610681595 4.5798593363311095 -27.580027928776193 -15.361070602319076 1.6690784610683351 -5.471962138118915 -27.68096173627141 -16.263715509660255 1.6690784610681413 -14.691213830693888 -23.77029685386503 -17.161666129103846 1.6690784610683038 -21.424254475133395 -16.781131863723637 -18.075666897423481 1.6690784610682032 -24.822889347097895 -8.2068064658876398 -18.993624132182703 1.6690784610682463 -24.827958977815964 0.4329074026988029 -19.918733591844209 1.6690784610682365 - 0 10 3.1415926535897931 9 6.2831853071795862 10 -7 1 1 6 6 2 -24.827958977815964 0.4329074026988029 -19.918733591844209 1.6690784610682365 -26.542839309752694 0.24777393751153601 -22.759123110047124 1.0367296232096095 -23.270156136415309 -0.0024170231958509092 -25.276916520462354 1.0383466998475139 -18.406689281263905 0.024868259754237787 -23.768968687463175 0.85353433019613967 -19.347940212669421 0.42101393676838672 -18.780474296208389 1.0383466998475139 -23.113078645879256 0.61804086788606893 -17.078344073641304 1.036729623209609 +7 1 0 8 17 3 -17.981601011762422 0.84042478500591256 -4.07797274844566 1.6690784610682365 -17.651481334665629 7.9017727274930616 -4.8279718841551205 1.6690784610682363 -14.151618145018965 14.81517639586642 -5.5779824533658111 1.669078461068235 -7.5656981997410986 19.920147745521252 -6.3279460959010763 1.669078461068239 1.0108003775285432 21.610382094554989 -7.0780091074318774 1.6690784610682357 9.389744120056351 19.128054234098531 -7.8279462265800586 1.6690784610682354 15.471931747499729 13.430402959655801 -8.5779822016559137 1.6690784610682377 18.311605519702333 6.2209229913777149 -9.3279720727810709 1.6690784610682368 17.981601011762443 -0.84042478500589224 -10.077972748445656 1.6690784610682365 17.651475782638656 -7.9017727261383994 -10.827971871388556 1.669078461068231 14.151639945222831 -14.815176401185434 -11.577982503494111 1.6690784610682536 7.5656479948134034 -19.920147733272273 -12.327945980457901 1.6690784610682063 -1.0107178842281845 -21.610382114680867 -13.078009297119898 1.6690784610682667 -9.3898472366811685 -19.128054208941528 -13.82794598947036 1.6690784610682168 -15.471831337646179 -13.430402984152828 -14.577982432541411 1.6690784610682459 -18.311681820413739 -6.2209229727621693 -15.327971897332898 1.6690784610682345 -17.981556595548057 0.84042477416930628 -16.077972850577659 1.6690784610682365 + 0 9 3.1415926535897931 8 6.2831853071795862 9 +7 1 1 6 6 2 -17.981556595548057 0.84042477416930628 -16.077972850577659 1.6690784610682365 -21.302608996921393 0.95666811740119206 -16.077952866904482 1.0367296232096095 -21.794646189493321 0.54006861722236821 -20.164109812614274 1.0383466998475139 -18.009276215273218 0.049761831689707277 -23.534352299320901 0.85353433019613967 -14.198848179756961 0.2742007992979073 -20.164155518591343 1.0383466998475139 -14.660504194174742 0.72418143093741028 -16.077992834250825 1.036729623209609 0 6 6.2831853071795862 6 -7 1 0 9 19 3 -24.827958977815968 0.43290740269881267 -19.918733591844216 1.6690784610682365 -24.833055675883486 9.0726086196943054 -20.843886993205345 1.6690784610682248 -21.444777165957674 17.772051013274933 -21.775102544954663 1.6690784610682914 -14.611574995944872 25.012989467063765 -22.716209828155428 1.6690784610681222 -5.0705191247153039 29.210626652850149 -23.6529141836223 1.6690784610683778 5.5636561462608034 29.266458646558164 -24.610345922703363 1.669078461068116 15.249271456457757 25.110260937867203 -25.556302912075843 1.6690784610683136 22.279475686148231 17.764449653030773 -26.516182439223456 1.6690784610682001 25.808065262736569 8.8130056576317717 -27.475314331020328 1.6690784610682476 25.81003338866708 -0.16564783853246023 -28.437595642004052 1.6690784610682365 25.812011876557854 -9.1442928756144912 -29.399927852760097 1.6690784610682219 22.287441492314876 -18.143653105580867 -30.36416086907845 1.6690784610682809 15.218938360357333 -25.585887796398303 -31.334434175748317 1.6690784610681595 5.4101576683968489 -29.8519984660355 -32.295234945519333 1.6690784610683351 -5.4469464896555824 -29.856241962040102 -33.273639532280868 1.6690784610681413 -15.26662736608546 -25.593335494457204 -34.235123342631979 1.6690784610683038 -22.350006208829512 -18.143286821035634 -35.206782983192582 1.6690784610682032 -25.885211574595594 -9.12501885759281 -36.173077832005433 1.6690784610682463 -25.883854472099124 -0.1208902006147201 -37.138153038280777 1.6690784610682365 - 0 10 3.1415926535897931 9 6.2831853071795862 10 -7 1 1 6 6 2 -25.883854472099124 -0.1208902006147201 -37.138153038280777 1.6690784610682365 -25.411261294467828 -0.35278714951684842 -40.419278007168558 1.0367296232096095 -21.276126544774648 -0.32412521248165049 -40.308944772642533 1.0383466998475139 -18.461929598833933 -0.0078292085509965581 -36.077135066119283 0.85353433019613967 -22.357025574426338 0.20626159568988056 -32.804467427428705 1.0383466998475139 -26.356447649730448 0.11100674828741708 -33.857028069393003 1.036729623209609 +7 1 0 8 17 3 -17.981556595548064 0.84042477416931349 -16.077972850577655 1.6690784610682365 -17.651436922707909 7.9017552704998106 -16.827971986409722 1.6690784610682363 -14.151581566222374 14.815141519113631 -17.577982555585621 1.669078461068235 -7.565677272200511 19.920099479740987 -18.327946198423724 1.669078461068239 1.0108003644792891 21.610328757503691 -19.078009209229581 1.6690784610682357 9.3897231689679561 19.128005978575185 -19.827946329417752 1.6690784610682354 15.471895151658197 13.430368100733737 -20.577982303268872 1.6690784610682377 18.311561099222587 6.220905556125448 -21.327972175490466 1.6690784610682368 17.981556595548085 -0.84042477416929595 -22.077972850577652 1.6690784610682365 17.651431370681003 -7.9017552691418027 -22.827971973612428 1.669078461068231 14.151603366425944 -14.815141524445746 -23.57798260583461 1.6690784610682536 7.5656270672735495 -19.920099467461998 -24.327946082702546 1.6690784610682063 -1.0107178711801446 -21.610328777678635 -25.078009399374526 1.6690784610682667 -9.3898262855912904 -19.128005953357086 -25.827946091736706 1.6690784610682168 -15.471794741806017 -13.430368125290087 -26.577982534710866 1.6690784610682459 -18.311637399933009 -6.2209055374649322 -27.327971999619319 1.6690784610682345 -17.98151217933427 0.84042476330658145 -28.077972952955907 1.6690784610682365 + 0 9 3.1415926535897931 8 6.2831853071795862 9 +7 1 1 6 6 2 -17.98151217933427 0.84042476330658145 -28.077972952955907 1.6690784610682365 -21.302564512163315 0.95667006019682888 -28.077934556486706 1.0367296232096095 -21.794624604537383 0.54007084947294304 -32.16408877414819 1.0383466998475139 -18.009273604325458 0.049761837145803046 -35.53435224789834 0.85353433019613967 -14.198826751573165 0.27419856320759906 -32.1641765932456 1.0383466998475139 -14.660459846505233 0.72417946641632991 -28.078011349425104 1.036729623209609 0 6 6.2831853071795862 6 -7 1 0 9 19 3 -25.883854472099131 -0.12089020061470013 -37.138153038280777 1.6690784610682365 -25.882489821148685 8.8832351735196724 -38.103280183133748 1.6690784610682248 -22.344509372568691 17.866650329004255 -39.065925737912913 1.6690784610682914 -15.289156662309743 25.24656706746919 -40.030057698124786 1.6690784610681222 -5.5592773337444141 29.42955622454884 -40.980749102569312 1.6690784610683778 5.1354057010545411 29.381723927426762 -41.943873554581138 1.669078461068116 14.74126318630087 25.163342265297647 -42.886598974151504 1.6690784610683136 21.627643827038497 17.873587202892327 -43.834570136302546 1.6690784610682001 25.045356695620381 9.106561070182007 -44.773183239330208 1.6690784610682476 25.040837342321705 0.3933843056650983 -45.706349473999239 1.6690784610682365 25.036293407987753 -8.3197947340156873 -46.639562645980945 1.6690784610682219 21.609344203578011 -16.973256206965221 -47.56620042400467 1.6690784610682809 14.814063994790557 -24.03448795424492 -48.489597864312408 1.6690784610681595 5.5005365262359254 -27.992427064241298 -49.397149773661056 1.6690784610683351 -4.6652638378442415 -27.898087736260084 -50.310518083388104 1.6690784610681413 -13.734275168638735 -23.870286514332033 -51.202381372633837 1.6690784610683038 -20.196394332325617 -16.986715014790494 -52.093950272151361 1.6690784610682032 -23.386169989106946 -8.7597788095030573 -52.973256123802472 1.6690784610682463 -23.37901911071296 -0.62014528077302133 -53.843521314559368 1.6690784610682365 - 0 10 3.1415926535897931 9 6.2831853071795862 10 -7 1 1 6 6 2 -23.37901911071296 -0.62014528077302133 -53.843521314559368 1.6690784610682365 -20.932398411859303 -0.74215410107286539 -56.088975070846161 1.0367296232096095 -17.802439392693191 -0.44001183948491374 -53.401150500771152 1.0383466998475139 -18.308540117168594 -0.036832042470852595 -48.350480336047056 0.85353433019613967 -23.398266976517984 -0.16095741865715496 -48.265425100622316 1.0383466998475139 -25.82563980956661 -0.49813646047316285 -51.598067558272582 1.036729623209609 +7 1 0 8 17 3 -17.981512179334274 0.84042476330659777 -28.077972952955911 1.6690784610682365 -17.651392510760992 7.9017378134806817 -28.827972088910567 1.6690784610682363 -14.151544987446817 14.815106642339725 -29.577982658051724 1.669078461068235 -7.5656563446885654 19.920051213949069 -30.327946301192675 1.669078461068239 1.010800351398685 21.610275420453149 -31.078009311273391 1.6690784610682357 9.3897022178514007 19.127957723064561 -31.827946432501822 1.6690784610682354 15.471858555796647 13.430333241833845 -32.577982405128026 1.6690784610682377 18.311516678733131 6.2208881208994775 -33.327972278446104 1.6690784610682368 17.981512179334292 -0.84042476330657978 -34.077972952955911 1.6690784610682365 17.651386958734061 -7.9017378121194062 -34.827972076082553 1.669078461068231 14.151566787650477 -14.815106647684685 -35.577982708421388 1.6690784610682536 7.5656061397615959 -19.920051201640543 -36.327946185193419 1.6690784610682063 -1.0107178580999587 -21.610275440676507 -37.078009501875435 1.6690784610682667 -9.3898053344737917 -19.127957697786055 -37.8279461942493 1.6690784610682168 -15.471758145945618 -13.430333266449047 -38.577982637126595 1.6690784610682459 -18.311592979442608 -6.2208881021941487 -39.327972102151982 1.6690784610682345 -17.98146776312106 0.84042475241772485 -40.077973055580415 1.6690784610682365 + 0 9 3.1415926535897931 8 6.2831853071795862 9 +7 1 1 6 6 2 -17.98146776312106 0.84042475241772485 -40.077973055580415 1.6690784610682365 -21.302520027302581 0.95667200296628163 -40.077916246315567 1.0367296232096095 -21.79460301946348 0.54007308171081425 -44.164067735801787 1.0383466998475139 -18.009270993377413 0.049761842600367923 -47.534352196490246 0.85353433019613967 -14.198805323507534 0.27419632710468295 -44.164197668018659 1.0383466998475139 -14.660415498939546 0.7241775018691734 -40.078029864845256 1.036729623209609 0 6 6.2831853071795862 6 -7 1 0 9 19 3 -23.379019110712967 -0.6201452807730039 -53.843521314559368 1.6690784610682365 -23.371829477309433 7.5194958165401777 -54.713822982903466 1.6690784610682248 -20.167440653252903 15.56736634959719 -55.574220126475787 1.6690784610682914 -13.84891037718463 22.090606946000495 -56.427027018768278 1.6690784610681222 -5.240766398980961 25.707739251661071 -57.263426130715651 1.6690784610683778 4.0911951748167974 25.577870103823962 -58.098348588772026 1.669078461068116 12.362769114340839 21.864541758553365 -58.913160925132587 1.6690784610683136 18.222702226431739 15.585807410655619 -59.722172974170007 1.6690784610682001 21.10060349149143 8.1250004744868853 -60.517443095504262 1.6690784610682476 21.091657842035357 0.77480237949982866 -61.301130130116334 1.6690784610682365 21.082663770535806 -6.575407697312059 -62.084838940526645 1.6690784610682219 18.186482216942441 -13.812476106711713 -62.856465923507422 1.6690784610682809 12.505936556877963 -19.640984074240212 -63.617035436348445 1.6690784610681595 4.8101764364594217 -22.841186312628242 -64.362543031008158 1.6690784610683351 -3.4799599609242722 -22.690896430372316 -65.099452642635882 1.6690784610681413 -10.786241772704578 -19.379362359069127 -65.819985701007624 1.6690784610683038 -15.936094367086207 -13.833780338421825 -66.52988710731303 1.6690784610682032 -18.4544529136524 -7.2760464326348693 -67.226165798566242 1.6690784610682463 -18.444757966731014 -0.83937004179244967 -67.90966601067079 1.6690784610682365 - 0 10 3.1415926535897931 9 6.2831853071795862 10 -7 1 1 6 6 2 -18.444757966731014 -0.83937004179244967 -67.90966601067079 1.6690784610682365 -15.129122256127143 -0.74446992696344338 -68.110801215660985 1.0367296232096095 -14.417980187777893 -0.29773688575525892 -64.060240652490435 1.0383466998475139 -18.01579896186416 -0.049041156271865116 -60.465548522719359 0.85353433019613967 -22.001389326760815 -0.5147891981619761 -63.600211057919552 1.0383466998475139 -21.760393677334871 -0.93427015662147106 -67.708530805680596 1.036729623209609 +7 1 0 8 17 3 -17.981467763121064 0.84042475241774195 -40.077973055580415 1.6690784610682365 -17.651348098824968 7.901720356435602 -40.827972191657778 1.6690784610682363 -14.151508408692141 14.815071765544909 -41.577982760763661 1.669078461068235 -7.5656354172054607 19.920002948145257 -42.32794640420866 1.669078461068239 1.0108003382870434 21.610222083403336 -43.078009413562462 1.6690784610682357 9.3896812667062655 19.127909467567058 -43.827946535833028 1.6690784610682354 15.471821959915417 13.430298382955772 -44.577982507232939 1.6690784610682377 18.311472258233881 6.2208706856998877 -45.327972381648166 1.6690784610682368 17.981467763121088 -0.84042475241772407 -46.077973055580415 1.6690784610682365 17.651342546798109 -7.9017203550710597 -46.827972178798916 1.669078461068231 14.151530208895462 -14.815071770902657 -47.577982811254472 1.6690784610682536 7.5655852122792089 -19.920002935807194 -48.327946287930438 1.6690784610682063 -1.0107178449892711 -21.610222103675376 -49.078009604622707 1.6690784610682667 -9.3897843833276742 -19.127909442227619 -49.827946297008062 1.6690784610682168 -15.47172155006535 -13.430298407630239 -50.577982739788581 1.6690784610682459 -18.311548558942498 -6.2208706669496099 -51.327972204930916 1.6690784610682345 -17.981423346908429 0.84042474150274549 -52.077973158451172 1.6690784610682365 + 0 9 3.1415926535897931 8 6.2831853071795862 9 +7 1 1 6 6 2 -17.981423346908429 0.84042474150274549 -52.077973158451172 1.6690784610682365 -21.302475542339199 0.95667394570956743 -52.077897936391068 1.0367296232096095 -21.794581434271631 0.54007531393598873 -56.164046697575053 1.0383466998475139 -18.009268382429081 0.049761848053397582 -59.534352145096641 0.85353433019613967 -14.198783895560062 0.27419409098916941 -56.164218742910514 1.0383466998475139 -14.66037115147766 0.72417553729592543 -52.078048380511284 1.036729623209609 0 6 6.2831853071795862 6 -7 1 0 9 19 3 -18.444757966731007 -0.8393700417924399 -67.90966601067079 1.6690784610682365 -18.435010561885594 5.5973213507091391 -68.593170764436493 1.6690784610682248 -15.896840776778301 11.912667179762195 -69.263821421638909 1.6690784610682914 -10.941321180007915 16.970493681166445 -69.921233298323813 1.6690784610681222 -4.2588412986322304 19.726128697165983 -70.566680716001542 1.6690784610683778 2.9026406601250123 19.572901957298019 -71.19740870837731 1.669078461068116 9.1880324628532009 16.703757638445044 -71.817398197187458 1.6690784610683136 13.602487568394078 11.934382532423003 -72.423161056628032 1.6690784610682001 15.755447422359968 6.3116442174880021 -73.017004642541977 1.6690784610682476 15.746135789731261 0.80633949128572402 -73.59836040622271 1.6690784610682365 15.736773763792979 -4.698981511817184 -74.179702949292235 1.6690784610682219 13.564785931510363 -10.088874319407127 -74.748913969793279 1.6690784610682809 9.337018285879104 -14.389695487160269 -75.304244479320857 1.6690784610681595 3.650877481362798 -16.72482624509049 -75.852099372761685 1.6690784610683351 -2.4263755482558942 -16.586488060821875 -76.380825167265471 1.6690784610681413 -7.7540019681316652 -14.148882078280831 -76.90569932262207 1.6690784610683038 -11.493264298818001 -10.108500932774499 -77.414406329958027 1.6690784610682032 -13.317462848385645 -5.3439471934803873 -77.914283635598252 1.6690784610682463 -13.309622564979785 -0.67955195450329464 -78.403416023855883 1.6690784610682365 - 0 10 3.1415926535897931 9 6.2831853071795862 10 -7 1 1 6 6 2 -13.309622564979785 -0.67955195450329464 -78.403416023855883 1.6690784610682365 -10.62247365759298 -0.35868868795490405 -76.474898696575025 1.0367296232096095 -12.651334771300277 0.038441382712321115 -72.891835116947391 1.0383466998475139 -17.715922229514717 -0.038942322315054234 -72.370369255013784 0.85353433019613967 -18.797290286531982 -0.69542615892537407 -77.302674304623082 1.0383466998475139 -15.996771472366575 -1.0004152210516883 -80.331933351136712 1.036729623209609 +7 1 0 8 17 3 -17.981423346908436 0.84042474150276025 -52.077973158451172 1.6690784610682365 -17.651303686899773 7.901702899364615 -52.82797229465114 1.6690784610682363 -14.151471829958467 14.815036888729058 -53.577982863722262 1.669078461068235 -7.5656144897509101 19.919954682329525 -54.327946507470031 1.669078461068239 1.010800325143709 21.610168746354738 -55.078009516098987 1.6690784610682357 9.3896603155335026 19.127861212081889 -55.827946639409433 1.6690784610682354 15.471785364013735 13.430263524100026 -56.577982609584673 1.6690784610682377 18.311427837725113 6.2208532505265657 -57.327972485096325 1.6690784610682368 17.981423346908457 -0.84042474150274704 -58.077973158451172 1.6690784610682365 17.651298134873038 -7.9017028979968487 -58.827972281761525 1.669078461068231 14.151493630161406 -14.81503689409948 -59.577982914333752 1.6690784610682536 7.5655642848254931 -19.91995466996228 -60.327946390913958 1.6690784610682063 -1.0107178318473107 -21.610168766674757 -61.078009707615855 1.6690784610682667 -9.3897634321531775 -19.127861186682274 -61.827946400013374 1.6690784610682168 -15.471684954165285 -13.430263548833294 -62.577982842696727 1.6690784610682459 -18.311504138432603 -6.2208532317314829 -63.327972307956102 1.6690784610682345 -17.981378930696401 0.84042473056162958 -64.077973261568189 1.6690784610682365 + 0 9 3.1415926535897931 8 6.2831853071795862 9 +7 1 1 6 6 2 -17.981378930696401 0.84042473056162958 -64.077973261568189 1.6690784610682365 -21.302431057273182 0.9566758884266735 -64.077879626713212 1.0367296232096095 -21.794559848961839 0.54007754614846382 -68.16402565946801 1.0383466998475139 -18.009265771480464 0.04976185350488864 -71.534352093717501 0.85353433019613967 -14.198762467730774 0.27419185486104541 -68.164239817921157 1.0383466998475139 -14.660326804119629 0.72417357269658322 -64.078066896423167 1.036729623209609 0 6 6.2831853071795862 6 Polygon3D 0 PolygonOnTriangulations 0 -Surfaces 6 -9 1 1 1 0 6 9 6 19 2 3 -15.33436018494295 0.7919759069610679 7.465407333532827 1.6690784610682365 -15.343646259983885 6.1551670372370495 6.8996549934860383 1.6690784610682248 -13.246460057477288 11.634001816198964 6.3215890780833988 1.6690784610682914 -8.9453390743402608 16.282433873999352 5.732002004789706 1.6690784610681222 -2.8190847531960115 19.081218232206748 5.1277568522507497 1.6690784610683778 4.1641568253474617 19.233359951592025 4.5137981346447784 1.669078461068116 10.684494759716259 16.547393638430481 3.8842892685871533 1.6690784610683136 15.522617334694585 11.612891253369121 3.2434474148041144 1.6690784610682001 18.002191582319647 5.4469051320668758 2.5891607306685405 1.6690784610682476 18.01199040249012 -0.8404260746955905 1.9220394065928481 1.6690784610682365 18.02184176246864 -7.1277419380158893 1.2549196307366426 1.6690784610682219 15.562286928667723 -13.536563922193306 0.57496266385126482 1.6690784610682809 10.529674505531396 -18.959722212172782 -0.11845214619857281 1.6690784610681595 3.3846445061657491 -22.202647482647116 -0.8231645489625059 1.6690784610683351 -4.7290125037339674 -22.354709057345147 -1.5434705641623747 1.6690784610681413 -12.267919208672714 -19.224543215878736 -2.2734289495233737 1.6690784610683038 -17.837253490720528 -13.51546535311604 -3.0180627740799366 1.6690784610682032 -20.678999521460312 -6.4198508615514793 -3.7741873932812933 1.6690784610682463 -20.688226218449401 0.79112568573515052 -4.5426058127385192 1.6690784610682365 --18.462461367543298 1.0246292718067047 8.5625659233241365 1.0367296232096095 -18.432987562130755 7.4674146606388785 7.878392773153557 1.0367296232096073 -15.873112066391814 14.025764578012662 7.180359832517734 1.0367296232096246 -10.677237832621076 19.56550467177663 6.4675693915230603 1.0367296232095771 -3.3192540218307416 22.859823676542767 5.7432179576696338 1.0367296232096401 5.0256695953041488 22.974710794132001 5.0011548550002995 1.0367296232095977 12.768432272483759 19.714195589090288 4.2497309499151026 1.036729623209605 18.473749099579472 13.804734070901564 3.4819970996200134 1.0367296232096164 21.363400372863936 6.4781987527929665 2.7022691197328665 1.0367296232096075 21.333065500669996 -0.95533077572994474 1.9094429847854393 1.0367296232096095 21.302783165630402 -8.3888426742051152 1.1165968399273751 1.0367296232096055 18.352983279340542 -15.926689352453234 0.31118131427588303 1.036729623209615 12.386931670731141 -22.261748182353426 -0.50912757857662605 1.0367296232096119 3.9818092318742275 -25.992052560660579 -1.3357626464320269 1.0367296232095931 -5.4934672231450676 -26.084922539410023 -2.184167212942536 1.0367296232096359 -14.226325589323023 -22.372104480176873 -3.0342133408958523 1.0367296232095855 -20.624094140783527 -15.708747349484105 -3.9020375957218496 1.0367296232096228 -23.848330364489222 -7.5021929649037133 -4.7781020103730736 1.0367296232096057 -23.816056971873621 0.78828666043748186 -5.6649107114989006 1.0367296232096095 --20.291880826845855 0.64993307188286886 4.8713382783415966 1.0383466998475139 -20.251985767989268 7.7241059215920576 4.1179081354580926 1.0383466998474999 -17.433641388053069 14.854216760728058 3.3567448569433349 1.0383466998475714 -11.782300482548802 20.795261852198394 2.5862964432626612 1.0383466998473936 -3.8833057408869758 24.246024142784229 1.8122976172816152 1.0383466998476718 4.9484373479360579 24.277024163637016 1.0244352878831453 1.038346699847368 13.027591800173365 20.79039425461902 0.23613214572694829 1.0383466998476121 18.907387235719028 14.615028147675364 -0.56335853247236756 1.0383466998474677 21.850628519659338 7.0593890391300942 -1.3676977576961313 1.0383466998475264 21.809408316871391 -0.53853611001966994 -2.1785533527232488 1.0383466998475139 21.768213550963068 -8.1364512110005336 -2.9894328884640586 1.0383466998475062 18.742849879182891 -15.773567333418447 -3.806221506288475 1.0383466998475326 12.693012097167987 -22.113321435101614 -4.6311705436971993 1.0383466998474922 4.2682394996371995 -25.769797497405531 -5.4558961789109084 1.0383466998475241 -5.110782157415251 -25.775634436242868 -6.2952454804937306 1.0383466998475215 -13.650520397550515 -22.064641217143937 -7.1300937667606039 1.0383466998475004 -19.839979030618053 -15.537908032165856 -7.9756014260317301 1.0383466998475213 -22.926989892840041 -7.5889574794028629 -8.8229500318196763 1.0383466998475122 -22.883927741871624 0.37981371503255712 -9.6744766828783177 1.0383466998475139 --17.853075129661661 0.047277213715821276 0.44223072795767848 0.85353433019613967 -17.853500039815948 6.2797542054916455 -0.21887373423444245 0.85353433019612557 -15.405891256549983 12.519089723929635 -0.88070679776060423 0.85353433019619729 -10.50807278970751 17.666288314910503 -1.5432271577239494 0.85353433019601743 -3.7173114495619055 20.620714298651791 -2.2065994411011669 0.85353433019630476 3.7975004788207514 20.629540795008495 -2.8705676273957597 0.85353433019598357 10.611396573268816 17.681499634645501 -3.535430525346146 0.85353433019624458 15.540693403072568 12.517225202557897 -4.200975089300119 0.85353433019609182 18.010614387220343 6.2372469266241204 -4.8673053993283641 0.8535343301961521 18.011065150223388 -0.049757732128203891 -5.534390936777819 0.85353433019613967 18.011519001447333 -6.3367614818772049 -6.2014764504771014 0.853534330196136 15.542524644619702 -12.630915027059396 -6.8693156840345786 0.85353433019614511 10.601589268838685 -17.823715374348964 -7.5379504323602813 0.853534330196143 3.7508569862789471 -20.804222007872564 -8.2072337314350996 0.85353433019612113 -3.8303992648924043 -20.812975359150006 -8.8774528712892611 0.8535343301961672 -10.704076835269404 -17.838799382751034 -9.5482143759732292 0.8535343301961168 -15.676232532688612 -12.629060808095526 -10.219848165173085 0.85353433019615088 -18.167355498019578 -6.2945948067937918 -10.892147229433931 0.85353433019613645 -18.167768369691117 0.046492600722604749 -11.565164075288306 0.85353433019613967 --13.137394276972596 0.11781621491241623 2.3619544970872575 1.0383466998475139 -13.186149497372133 4.7227778239094054 1.8793724002858383 1.0383466998474999 -11.426052319801132 9.3838583832369551 1.3925936184235148 1.0383466998475714 -7.8211605933454518 13.286334073376221 0.90393175372116552 1.0383466998473936 -2.739335614532084 15.603726387478144 0.40463592616761979 1.0383466998476718 2.9780146648427657 15.719933865464292 -0.090230414167388417 1.038346699847368 8.2612808544806811 13.547392625350327 -0.59969362882174337 1.0383466998476121 12.157659114320085 9.6019198618226174 -1.1089612517802454 1.0383466998474677 14.162986183463429 4.7006493731965371 -1.6263954151563187 1.0383466998475264 14.213558395771647 -0.27572998896444734 -2.1497432455250234 1.0383466998475139 14.264156051029465 -5.2521045328024769 -2.6730657095855435 1.0383466998475062 12.360064176237421 -10.306953804923252 -3.2029097821849568 1.0383466998475326 8.4451567266354655 -14.561040031162792 -3.7376309926555225 1.0383466998474922 2.9024246654158512 -17.102799187547188 -4.2834992583006333 1.0383466998475241 -3.3623473438486711 -17.244017129858133 -4.8298659135725117 1.0383466998475215 -9.1713199843794939 -14.865646230799106 -5.3900536025532144 1.0383466998475004 -13.466011954865039 -10.521508105469495 -5.9538043028946621 1.0383466998475213 -15.678204267018831 -5.1134614616052154 -6.5268306910655722 1.0383466998475122 -15.730059708405067 0.38630703705804104 -7.1075791196853082 1.0383466998475139 --12.206259002342584 0.55932254211543997 6.3682487437415247 1.036729623209609 -12.254304957836968 4.8429194138351495 5.9209172138182709 1.0367296232096048 -10.619808048563076 9.2422390543858288 5.4628183236499339 1.0367296232096304 -7.2134403160588745 12.99936307622059 4.9964346180546784 1.0367296232095649 -2.3189154845616766 15.302612787873151 4.5122957468340434 1.0367296232096572 3.3026440553905356 15.492009109049373 4.0264414142871949 1.0367296232095797 8.6005572469495615 13.380591687772846 3.5188475872607015 1.0367296232096159 12.571485569808942 9.4210484358356226 3.0048977299874355 1.036729623209611 14.640982791775629 4.4156115113410586 2.4760523416044506 1.0367296232096082 14.690915304310247 -0.72552137366124514 1.9346358284002534 1.036729623209609 14.74090035930678 -5.866641201826801 1.3932424215458834 1.0367296232096044 12.771590577995241 -11.146438491933145 0.83874401342684379 1.0367296232096184 8.6724173403312097 -15.657696241992012 0.27222328617897062 1.036729623209603 2.7874797804572724 -18.413242404634655 -0.31056645149215889 1.0367296232096022 -3.9645577843219133 -18.62449557527874 -0.90277391538309182 1.0367296232096306 -10.309512828023886 -16.076981951581615 -1.5126445581502956 1.0367296232095844 -15.050412840656477 -11.322183356747741 -2.1340879524382901 1.0367296232096244 -17.509668678431773 -5.3375087581992045 -2.7702727761894499 1.0367296232096046 -17.560395465025167 0.79396471103282185 -3.420300913978136 1.036729623209609 +Surfaces 8 +9 1 1 1 0 6 8 6 17 2 3 -17.981645427977348 0.84042479581638307 7.9220273534400798 1.6690784610682365 -17.651525746634203 7.9017901844604568 7.1720282178533461 1.6690784610682363 -14.151654723836403 14.815211272597905 6.4220176486073202 1.669078461068235 -7.565719127310512 19.920196011290212 5.6720540063761264 1.669078461068239 1.010800390546561 21.610435431606462 4.921990994118576 1.6690784610682357 9.3897650711165497 19.12810248963525 4.1720538760121739 1.6690784610682354 15.471968343321269 13.430437818599531 3.422017899710359 1.6690784610682377 18.311649940172344 6.2209404266564272 2.6720280296821803 1.6690784610682368 17.981645427977362 -0.84042479581636331 1.9220273534400825 1.6690784610682365 17.651520194607123 -7.901790183108985 1.1720282305890279 1.669078461068231 14.151676524040745 -14.8152112779044 0.42201759860025145 1.6690784610682536 7.5656689223818292 -19.920195999070245 -0.32794587845969758 1.6690784610682063 -1.0107178972447652 -21.610435451684385 -1.0780091951113446 1.6690784610682667 -9.3898681877429553 -19.128102464538504 -1.8279458874503698 1.6690784610682168 -15.471867933466303 -13.430437843037685 -2.5779823306181826 1.6690784610682459 -18.311726240884774 -6.2209404080857142 -3.3279717952927421 1.6690784610682345 -17.981601011762418 0.84042478500589635 -4.0779727484456618 1.6690784610682365 +-21.302697966129521 0.95666423173145976 7.9220105115200719 1.0367296232096095 -20.926920827240266 9.3224992625060921 7.1720206718299329 1.0367296232096126 -16.796079943872275 17.518070333098894 6.4220060343316083 1.0367296232095986 -9.0050746754239182 23.583502504752364 5.6720700797472139 1.0367296232096301 1.1503872710547158 25.598509399521703 4.9219441128518158 1.0367296232095846 11.081723785551993 22.681807282568585 4.1720935087587163 1.0367296232096292 18.298896816663543 15.941797072017934 3.4219609060865954 1.036729623209599 21.678360526092145 7.4091655404558212 2.6720544899564223 1.0367296232096128 21.302697966129553 -0.95666423173144355 1.9220105115200559 1.0367296232096095 20.926915266670918 -9.3224995053620248 1.1720183829660522 1.036729623209607 16.796101777618034 -17.518069379517378 0.42201502162573146 1.0367296232096181 9.0050243932506326 -23.583504700809971 -0.32795061760313615 1.0367296232095955 -1.1503046508297476 -25.598505791109563 -1.0780218786784213 1.0367296232096217 -11.081827060832289 -22.681811793083675 -1.8279490018286051 1.0367296232096028 -18.298796252319569 -15.941792679902818 -2.5779976992124554 1.0367296232096113 -21.678436944199358 -7.4091688779913349 -3.3279769655731353 1.0367296232096099 -21.30265348157679 0.95666617457940151 -4.0779711775688918 1.0367296232096095 +-21.794689359051336 0.54006415268315333 3.8358481100945641 1.0383466998475139 -21.582553357338913 9.0991519565156889 3.0858591751669016 1.0383466998475122 -17.528589952674476 17.561085426352239 2.3358493981697377 1.038346699847519 -9.6891034659903603 23.921772893660531 1.5858987131569844 1.0383466998475051 0.6493001376095302 26.189329245731088 0.83579610097123336 1.0383466998475235 10.861616042640595 23.412713025460523 0.085925632411224306 1.0383466998475073 18.376909047245007 16.671251016982342 -0.66420245287411639 1.0383466998475175 22.006770271522463 8.0190177383825993 -1.4141019687871683 1.038346699847513 21.794689359051333 -0.54006415268314034 -2.164151889905451 1.0383466998475139 21.582550659248867 -9.099152235549921 -2.9141434546712843 1.0383466998475084 17.528600546807731 -17.56108433071552 -3.6641402756900594 1.0383466998475321 9.6890790681589287 -23.921775416865295 -4.4141250674980741 1.0383466998474844 -0.64926004876298204 -26.189325099772709 -5.1641648242837679 1.0383466998475408 -10.861666153698367 -23.412718207909204 -5.9141232110200326 1.0383466998474993 -18.376860251583107 -16.671245970570684 -6.6641548915639985 1.038346699847519 -22.006807350988112 -8.0190215731138359 -7.4141381102777846 1.0383466998475133 -21.794667774331305 0.54006638495909953 -8.1641308512000208 1.0383466998475139 +-18.009281437167871 0.049761820772909499 0.46564759779054743 0.85353433019613967 -17.98973495002387 7.121990421628662 -0.28435232240090436 0.85353433019614056 -14.795468660970846 14.18553230677265 -1.0343529563403466 0.85353433019613723 -8.4368037404808405 19.577650130193863 -1.784350732898452 0.853534330196145 0.059849136426688432 21.64364713480871 -2.5343546330789182 0.85353433019613245 8.5448070782024068 19.530749873055193 -3.2843506670656382 0.85353433019614688 14.87364450994502 14.103539517419806 -4.0343530831454615 0.85353433019613489 18.02882115664314 7.0224667544291837 -4.7843522273759174 0.85353433019614156 18.009281437167868 -0.049761820772889188 -5.534352402209449 0.85353433019613967 17.989734623655579 -7.1219904223109562 -6.2843523288323455 0.85353433019613456 14.795469942466003 -14.185532304093362 -7.0343529310870672 0.85353433019615799 8.4368007892524908 -19.577650136364628 -7.7843507910557168 0.85353433019610858 -0.059844287169797283 -21.643647124669009 -8.5343545375188015 0.85353433019617031 -8.5448131397737939 -19.530749885729783 -9.2843507865157697 0.85353433019612057 -14.873638607487397 -14.103539505078166 -10.034352966830959 0.85353433019614688 -18.028825641877461 -7.0224667638073628 -10.784352315762344 0.85353433019613867 -18.00927882622068 0.049761826232070309 -11.534352350757938 0.85353433019613967 +-14.198891036479008 0.27420527144072698 3.8358866303607408 1.0383466998475139 -14.091181217567854 5.8497545116056955 3.0858764341747547 1.0383466998475122 -11.480350600913976 11.379198183664707 2.3358759619460345 1.038346699847519 -6.3970584494343807 15.543182974212932 1.5858619506892966 1.0383466998475051 0.33004177579987282 17.067942213224924 0.83590332620934316 1.0383466998475235 6.9918256622314479 15.2848003848167 0.085834985742039294 1.0383466998475073 11.911254466607431 10.92735561474305 -0.66407209899772646 1.0383466998475175 14.306544416213985 5.3013497031582553 -1.4141624878257133 1.038346699847513 14.198891036479008 -0.27420527144070034 -2.1641133696392365 1.0383466998475139 14.091178539015296 -5.8497542320974603 -2.9141209315232151 1.0383466998475084 11.480361118332635 -11.379199281162395 -3.6641343817216696 1.0383466998475321 6.3970342282735446 -15.543180446723506 -4.4141142282905239 1.0383466998474844 -0.33000197724636759 -17.067946366221801 -5.164135814860817 1.0383466998475408 -6.9918754104231926 -15.284795193571194 -5.9141160879202133 1.0383466998474993 -11.911206024286239 -10.927360669720366 -6.6641197410382347 1.038346699847519 -14.306581227178686 -5.3013458619179117 -7.4141262849884795 1.0383466998475133 -14.198869608058903 0.27420303537561397 -8.1641344440558967 1.0383466998475139 +-14.660592889825161 0.72418535990130772 7.9220441953600966 1.036729623209609 -14.376130666028125 6.4810811064146412 7.1720357638767593 1.0367296232096108 -11.507229503800639 12.112352212097603 6.42202926288308 1.0367296232096026 -6.1263635791970685 16.25688951782665 5.6720379330049537 1.0367296232096219 0.87121351003874903 17.622361463693 4.9220378753854712 1.0367296232095928 7.6978063566803643 15.574397696700581 4.1720142432655569 1.0367296232096221 12.645039869979676 10.919078565181778 3.422074893334158 1.0367296232096015 14.944939354252284 5.0327153128568787 2.6720015694079597 1.0367296232096117 14.660592889825182 -0.72418535990128641 1.9220441953601162 1.036729623209609 14.376125122543232 -6.4810808608559034 1.1720380782120063 1.0367296232096064 11.507251270463655 -12.112353176291487 0.42202017557475191 1.0367296232096179 6.1263134515126412 -16.256887297330305 -0.32794113931625279 1.0367296232095975 -0.8711311436593796 -17.622365112259601 -1.0779965115441943 1.0367296232096139 -7.6979093146538862 -15.574393135992928 -1.8279427730722322 1.0367296232096126 -12.644939614612955 -10.91908300617283 -2.5779669620238161 1.0367296232096035 -14.945015537570187 -5.0327119381800243 -3.3279666250123761 1.0367296232096119 -14.660548541948049 0.72418339543239341 -4.0779743193224256 1.036729623209609 0 6 6.2831853071795862 6 -0 10 -3.1415926535897931 9 -6.2831853071795862 10 +0 9 +3.1415926535897931 8 +6.2831853071795862 9 -9 1 1 1 0 6 9 6 19 2 3 -20.68822621844939 0.79112568573516828 -4.5426058127385183 1.6690784610682365 -20.697502373664047 8.0020859267435824 -5.3110403309267227 1.6690784610682248 -17.87460671315522 15.326294039171909 -6.0913427783722476 1.6690784610682914 -12.122194104924988 21.495369111979837 -6.8854746999082597 1.6690784610681222 -3.9952386720332944 25.149829743936827 -7.6862298942756908 1.6690784610683778 5.1825278496042113 25.284133649624284 -8.5066453186561795 1.669078461068116 13.657352763904791 21.729271876896366 -9.3296928308491935 1.6690784610683136 19.883798938124222 15.307686569113528 -10.169051579975578 1.6690784610682001 23.044253031030053 7.3769180914753116 -11.016610787945169 1.6690784610682476 23.051839759156323 -0.64980803724873404 -11.874493271661178 1.6690784610682365 23.059467112274568 -8.6765187931633605 -12.732407628915686 1.6690784610682219 19.914512476258761 -16.795058827233131 -13.599840494707257 1.6690784610682809 13.53769876348224 -23.594496226646175 -14.479866193042149 1.6690784610681595 4.5798593363311095 -27.580027928776197 -15.361070602319076 1.6690784610683351 -5.471962138118915 -27.680961736271414 -16.263715509660255 1.6690784610681413 -14.69121383069389 -23.770296853865027 -17.161666129103846 1.6690784610683038 -21.424254475133395 -16.781131863723637 -18.075666897423481 1.6690784610682032 -24.822889347097895 -8.2068064658876398 -18.993624132182703 1.6690784610682463 -24.827958977815964 0.4329074026988029 -19.918733591844212 1.6690784610682365 --23.816056971873635 0.7882866604375045 -5.6649107114989032 1.0367296232096095 -23.783825675112762 9.0787499754850245 -6.5517560300568984 1.0367296232096073 -20.495479907162789 17.448362279876189 -7.4484187290349464 1.0367296232096246 -13.87564227160618 24.440217553433314 -8.3583781873478191 1.0367296232095771 -4.604579386536253 28.512156125324605 -9.2686940267179239 1.0367296232096401 5.7763969823048491 28.566608027203767 -10.202305185553085 1.0367296232095977 15.275659912613653 24.483682387299151 -11.129647396882213 1.036729623209605 22.191586665405691 17.235808748367333 -12.074169157201853 1.0367296232096164 25.657801698442352 8.3710721451230903 -13.022218355256834 1.0367296232096075 25.622680899651865 -0.54292301106754692 -13.977408626454725 1.0367296232096095 25.587586859958535 -9.4569050762355538 -14.932647838402969 1.0367296232096055 22.051444283770191 -18.413823233378601 -15.893810878471335 1.036729623209615 14.970242800887197 -25.847571735561917 -16.865127269840489 1.0367296232096119 5.1151405873455946 -30.127063607050065 -17.830789518339486 1.0367296232095931 -5.8415560819216967 -30.131164252928041 -18.818563455575177 1.0367296232096359 -15.794404856152809 -25.803367279566672 -19.792886606342265 1.0367296232095855 -22.99393804158672 -18.208331498365997 -20.781793579158823 1.0367296232096228 -26.581385266656458 -8.9837916029498111 -21.769104572568089 1.0367296232096057 -26.542839309752694 0.24777393751153598 -22.759123110047124 1.0367296232096095 --22.883927741871624 0.37981371503257311 -9.6744766828783177 1.0383466998475139 -22.840881106643693 8.3485770093242202 -10.526034628902007 1.0383466998474999 -19.667984274375051 16.333155671597925 -11.380990580579098 1.0383466998475714 -13.345222788900355 22.932015868352984 -12.242032687350619 1.0383466998473936 -4.5778359406079776 26.707701196739528 -13.09910437662735 1.0383466998476718 5.1350051335717719 26.681277612506559 -13.969858844088467 1.038346699847368 13.933774827654064 22.827165087884207 -14.831693486361273 1.0383466998476121 20.282266218022471 16.102020906370374 -15.702420545666859 1.0383466998474677 23.435718958352453 7.9513709449644994 -16.57176631345591 1.0383466998475264 23.390479861012974 -0.19222421305264126 -17.442466086810331 1.0383466998475139 23.345244553899779 -8.3358145408264726 -18.31320084037004 1.0383466998475062 20.101457787388544 -16.467905488797623 -19.18442752124092 1.0383466998475326 13.663084926693761 -23.156136603390298 -20.058957766543799 1.0383466998474922 4.776091120706786 -26.950663472038478 -20.926233130431829 1.0383466998475241 -5.0182893103752813 -26.888633601282962 -21.80465875202859 1.0383466998475215 -13.844414542630844 -22.989289569526452 -22.670782634054476 1.0383466998475004 -20.182813830924133 -16.241764311303982 -23.542998669066925 1.0383466998475213 -23.317654014382587 -8.1044832349452651 -24.410771261193169 1.0383466998475122 -23.270156136415309 -0.0024170231958509092 -25.276916520462354 1.0383466998475139 --18.167768369691128 0.046492600722619848 -11.565164075288306 0.85353433019613967 -18.168184125493084 6.3875790497624125 -12.238181931417312 0.85353433019612557 -15.677910362920569 12.735277076973542 -12.911890973913145 0.85353433019619729 -10.694871897305591 17.971643536020903 -13.586411235130715 0.85353433019601743 -3.7867849926142299 20.976121681977553 -14.261301254617816 0.85353433019630476 3.8565242191376634 20.983766806068179 -14.93735821975765 0.85353433019598357 10.784685172884153 17.984797984476774 -15.61354212847662 0.85353433019624458 15.795031673534135 12.733578320537923 -16.290687501699921 0.85353433019609182 18.304648568711482 6.350575007167202 -16.968300310581064 0.8535343301961521 18.30496127820053 -0.03786153189151209 -17.646509982585414 0.85353433019613967 18.305276332323874 -6.4262971744724027 -18.324721581322251 0.853534330196136 15.796303980798372 -12.820039282911875 -19.003481453133556 0.85353433019614511 10.777072545076617 -18.092869769100492 -19.682973906984941 0.853534330196143 3.8209172878040669 -21.116422567650709 -20.362514328457582 0.85353433019612113 -3.8728371885224009 -21.122053261637468 -21.043317091564198 0.8535343301961672 -10.843847389208296 -18.102516803607021 -21.723816613211341 0.8535343301961168 -15.883275300165945 -12.818623069891707 -22.405254969808336 0.85353433019615088 -18.4065273566343 -6.398677414314033 -23.086908561636353 0.85353433019613645 -18.406689281263905 0.024868259754237787 -23.768968687463175 0.85353433019613967 --15.730059708405072 0.38630703705805702 -7.1075791196853082 1.0383466998475139 -15.781947504495863 5.8860676447618951 -7.6883119135953901 1.0383466998474999 -13.673612314878259 11.479633422866478 -8.2771326586607934 1.0383466998475714 -9.3347958263061042 16.196658750435926 -8.8732579658817574 1.0383466998473936 -3.1841725992652439 19.017502744806446 -9.4797462771517615 1.0383466998476718 3.7767278675007661 19.173713945664012 -10.09160331375406 1.038346699847368 10.232437801410903 16.527371123699481 -10.714898670163281 1.0383466998476121 15.003972681149625 11.692085487812037 -11.345100469831207 1.0383466998474677 17.458099406770526 5.6775756326872733 -11.984608952795426 1.0383466998475264 17.510539511306572 -0.43668800675909614 -12.632749666804553 1.0383466998475139 17.563015119672038 -6.5509415971371396 -13.280886325472833 1.0383466998475062 15.21394009458623 -12.765522638908134 -13.937736542145082 1.0383466998475326 10.386618965577835 -18.002978990056882 -14.603469821712466 1.0383466998474922 3.551814063402142 -21.125170165234003 -15.277576090524921 1.0383466998475241 -4.1729666224234787 -21.284613805694075 -15.961297492587327 1.0383466998475215 -11.321233579854566 -18.339320093945304 -16.652744720554487 1.0383466998475004 -16.592687006951287 -12.977521886272765 -17.353637834314608 1.0383466998475213 -19.295682003225352 -6.3273892766412319 -18.062786870334548 1.0383466998475122 -19.347940212669421 0.42101393676838672 -18.780474296208389 1.0383466998475139 --17.560395465025174 0.7939647110328325 -3.4203009139781386 1.036729623209609 -17.611179072215229 6.9254218780021146 -4.0703246317968187 1.0367296232096048 -15.253733519147957 13.20422579846802 -4.7342668277084989 1.0367296232096304 -10.368745938243492 18.550520670525046 -5.4125712124707732 1.0367296232095649 -3.3858979575301165 21.78750336255148 -6.1037657618308572 1.0367296232096572 4.5886587169024047 22.001659272041831 -6.8109854517615958 1.0367296232095797 12.039045615197743 18.974861366495897 -7.5297382648146538 1.0367296232096159 17.576011210841347 13.379564389858739 -8.2639340027500303 1.036729623209611 20.430704363618254 6.3827640378276866 -9.0110032206333113 1.0367296232096082 20.480998618660802 -0.75669306342991138 -9.7715779168676242 1.036729623209609 20.531347364590385 -7.8961325100910935 -10.532167419428383 1.0367296232096044 17.777580668748161 -15.176294421088187 -11.305870110943294 1.0367296232096184 12.105154726076105 -21.341420717728823 -12.094605116243526 1.036729623209603 4.0445780853170792 -25.032992250505163 -12.89135168629916 1.0367296232096022 -5.1023681943149208 -25.23075921961172 -13.70886756374475 1.0367296232096306 -13.588022805237092 -21.73722642816524 -14.530445651865886 1.0367296232095844 -19.854570908678628 -15.353932229080783 -15.369540215687895 1.0367296232096244 -23.064393427539784 -7.4298213288254455 -16.21814369179739 1.0367296232096046 -23.113078645879256 0.61804086788606893 -17.078344073641304 1.036729623209609 +9 1 1 1 0 6 8 6 17 2 3 -17.981601011762422 0.84042478500591256 -4.07797274844566 1.6690784610682365 -17.651481334665629 7.9017727274930607 -4.8279718841551205 1.6690784610682363 -14.151618145018965 14.81517639586642 -5.5779824533658111 1.669078461068235 -7.5656981997410986 19.920147745521252 -6.3279460959010763 1.669078461068239 1.0108003775285432 21.610382094554989 -7.0780091074318765 1.6690784610682357 9.389744120056351 19.128054234098531 -7.8279462265800586 1.6690784610682354 15.471931747499729 13.430402959655801 -8.5779822016559137 1.6690784610682377 18.311605519702333 6.2209229913777149 -9.3279720727810709 1.6690784610682368 17.981601011762443 -0.84042478500589224 -10.077972748445656 1.6690784610682365 17.651475782638656 -7.9017727261383994 -10.827971871388556 1.669078461068231 14.151639945222831 -14.815176401185434 -11.577982503494111 1.6690784610682536 7.5656479948134034 -19.920147733272273 -12.327945980457901 1.6690784610682063 -1.0107178842281845 -21.610382114680871 -13.078009297119898 1.6690784610682667 -9.3898472366811685 -19.128054208941528 -13.827945989470361 1.6690784610682168 -15.471831337646179 -13.430402984152829 -14.577982432541411 1.6690784610682459 -18.311681820413739 -6.2209229727621693 -15.327971897332898 1.6690784610682345 -17.981556595548057 0.84042477416930628 -16.077972850577659 1.6690784610682365 +-21.302653481576797 0.95666617457941083 -4.0779711775688909 1.0367296232096095 -20.926875579534922 9.3224837323349412 -4.8279610173797494 1.0367296232096126 -16.796041774205399 17.518037012207387 -5.577975654867604 1.0367296232095986 -9.0050515954553489 23.583455085328985 -6.3279116096710304 1.0367296232096301 1.1503896077509825 25.598455980344106 -7.0780375759866772 1.0367296232095846 11.081704922285907 22.681758032070128 -7.8278881809751617 1.0367296232096292 18.298861699204068 15.941760549858458 -8.5780207825047015 1.036729623209599 21.678316804415623 7.4091461246561483 -9.3279271997088067 1.0367296232096128 21.302653481576819 -0.95666617457940339 -10.0779711775689 1.0367296232096095 20.926870018952734 -9.3224839751875415 -10.827963306212784 1.036729623209607 16.79606360800156 -17.518036058638927 -11.577966667694575 1.0367296232096181 9.0050013131660354 -23.583457281356697 -12.327932306742511 1.0367296232095955 -1.1503069873354343 -25.598452371980894 -13.078003567975147 1.0367296232096217 -11.081808197804362 -22.681762542524236 -13.827930690989708 1.0367296232096028 -18.298761134628194 -15.941756157802638 -14.577979388361451 1.0367296232096113 -21.678393222699128 -7.4091494621466518 -15.327958654814616 1.0367296232096099 -21.302608996921393 0.95666811740119206 -16.077952866904482 1.0367296232096095 +-21.794667774331309 0.5400663849591123 -8.1641308512000208 1.0383466998475139 -21.582530895778675 9.0991457105494042 -8.9141197861848429 1.0383466998475122 -17.528570419122708 17.561070320835334 -9.6641295631932227 1.038346699847519 -9.6890908676769669 23.921750492555422 -10.41408024825615 1.0383466998475051 0.64930282241633464 26.189303325726357 -11.164182860257903 1.0383466998475235 10.861608289214685 23.412688520474507 -11.914053329155088 1.0383466998475073 18.376893020604889 16.671232233317699 -12.664181413942083 1.0383466998475175 22.006749563331802 8.0190070278968104 -13.414080930359958 1.038346699847513 21.794667774331323 -0.54006638495910464 -14.164130851200031 1.0383466998475139 21.582528197673987 -9.0991459895820253 -14.914122416008073 1.0383466998475084 17.528581013313485 -17.561069225204935 -15.664119237111734 1.0383466998475321 9.6890664697128788 -23.921753015745534 -16.414104028775974 1.0383466998474844 -0.64926273335147133 -26.189299179792162 -17.164143785735153 1.0383466998475408 -10.861658400545743 -23.412693702893055 -17.914102172308507 1.0383466998474993 -18.376844224676585 -16.671227186935155 -18.66413385290252 1.038346699847519 -22.006786643000034 -8.0190108626061072 -19.414117071644977 1.0383466998475133 -21.794646189493321 0.54006861722236821 -20.164109812614274 1.0383466998475139 +-18.00927882622069 0.049761826232086553 -11.534352350757938 0.85353433019613967 -17.989732336932367 7.1219894015389649 -12.28435227095661 0.85353433019614056 -14.795466505947147 14.18553026161222 -13.034352904893979 0.85353433019613723 -8.4368025036680461 19.577647295827589 -13.784350681469896 0.853534330196145 0.0598491429919914 21.643643999462185 -14.534354581607754 0.85353433019613245 8.5448058532358342 19.530747033546284 -15.284350615655649 0.85353433019614688 14.873642363496922 14.103537463262761 -16.034353031663382 0.85353433019613489 18.028818547838874 7.0224657234251469 -16.784352175958372 0.85353433019614156 18.00927882622068 -0.049761826232058728 -17.534352350757935 0.85353433019613967 17.989732010563998 -7.1219894022210379 -18.284352277386226 0.85353433019613456 14.795467787442599 -14.185530258933852 -19.034352879647869 0.85353433019615799 8.4367995524390533 -19.577647301996116 -19.784350739610659 0.85353433019610858 -0.059844293734123255 -21.64364398932608 -20.534354486074704 0.85353433019617031 -8.5448119148083226 -19.530747046216661 -21.284350735072035 0.85353433019612057 -14.873636461038377 -14.103537450924904 -22.034352915381664 0.85353433019614688 -18.02882303307377 -7.0224657328006064 -22.784352264319914 0.85353433019613867 -18.009276215273218 0.049761831689707284 -23.534352299320901 0.85353433019613967 +-14.198869608058907 0.27420303537562513 -8.1641344440558967 1.0383466998475139 -14.091160667476331 5.8497438587369057 -8.9141446403035189 1.0383466998475122 -11.480334705898676 11.379179519682602 -9.6641451124871445 1.038346699847519 -6.3970507740154829 15.543158637376516 -10.414159123987254 1.0383466998475051 0.33003908642052693 17.067916481054759 -11.16411774794885 1.0383466998475235 6.9918131336737908 15.284778155474456 -11.914186089086424 1.0383466998475073 11.911235058707829 10.927340635128141 -12.664093173138207 1.0383466998475175 14.306522109766695 5.3013435224528225 -13.414183562523364 1.038346699847513 14.198869608058908 -0.27420303537560531 -14.164134444055879 1.0383466998475139 14.091157988938479 -5.8497435792270931 -14.914142005986601 1.0383466998475084 11.480345223259542 -11.379180617186419 -15.664155456213264 1.0383466998475321 6.3970265529878141 -15.543156109873067 -16.414135302832637 1.0383466998474844 -0.32999928808601275 -17.067920634074678 -17.164156889239788 1.0383466998475408 -6.9918628815915751 -15.284772964199995 -17.914137162472816 1.0383466998474993 -11.91118661665357 -10.927345690133825 -18.664140815447286 1.038346699847519 -14.306558920528484 -5.3013396811908544 -19.414147359482044 1.0383466998475133 -14.198848179756961 0.2742007992979073 -20.164155518591343 1.0383466998475139 +-14.660548541948049 0.72418339543241483 -4.0779743193224238 1.036729623209609 -14.376087089796282 6.4810617226511855 -4.8279827509303939 1.0367296232096108 -11.507194515832689 12.112315779525483 -5.5779892518643379 1.0367296232096026 -6.1263448040266688 16.256840405713227 -6.3279805821305377 1.0367296232096219 0.87121114730613947 17.622308208766412 -7.0779806388777509 1.0367296232095928 7.697783317826465 15.574350436126592 -7.8280042721843923 1.0367296232096221 12.645001795795784 10.919045369453183 -8.5779436208074173 1.0367296232096015 14.944894234988878 5.0326998580993312 -9.3280169458532409 1.0367296232096117 14.660548541948073 -0.72418339543238852 -10.077974319322408 1.036729623209609 14.376081546324395 -6.4810614770891455 -10.827980436564371 1.0367296232096064 11.50721628244459 -12.112316743732281 -11.577998339293462 1.0367296232096179 6.1262946764599544 -16.256838185187235 -12.327959654173656 1.0367296232095975 -0.87112878112010872 -17.6223118573816 -13.078015026264204 1.0367296232096139 -7.6978862755584965 -15.574345875358302 -13.827961287951318 1.0367296232096126 -12.644901540663987 -10.91904981050325 -14.577985476721221 1.0367296232096035 -14.944970418128385 -5.0326964833776398 -15.32798513985121 1.0367296232096119 -14.660504194174742 0.72418143093741028 -16.077992834250825 1.036729623209609 0 6 6.2831853071795862 6 -0 10 -3.1415926535897931 9 -6.2831853071795862 10 +0 9 +3.1415926535897931 8 +6.2831853071795862 9 -9 1 1 1 0 6 9 6 19 2 3 -24.827958977815968 0.43290740269881267 -19.918733591844216 1.6690784610682365 -24.833055675883486 9.0726086196943054 -20.843886993205345 1.6690784610682248 -21.444777165957674 17.772051013274933 -21.775102544954663 1.6690784610682914 -14.611574995944872 25.012989467063765 -22.716209828155428 1.6690784610681222 -5.0705191247153039 29.210626652850145 -23.6529141836223 1.6690784610683778 5.5636561462608034 29.266458646558164 -24.610345922703367 1.669078461068116 15.249271456457757 25.110260937867203 -25.556302912075843 1.6690784610683136 22.279475686148231 17.764449653030773 -26.516182439223456 1.6690784610682001 25.808065262736569 8.8130056576317717 -27.475314331020328 1.6690784610682476 25.81003338866708 -0.16564783853246023 -28.437595642004052 1.6690784610682365 25.812011876557854 -9.1442928756144912 -29.399927852760097 1.6690784610682219 22.287441492314876 -18.143653105580867 -30.36416086907845 1.6690784610682809 15.218938360357333 -25.585887796398303 -31.334434175748317 1.6690784610681595 5.4101576683968498 -29.8519984660355 -32.295234945519333 1.6690784610683351 -5.4469464896555824 -29.856241962040102 -33.273639532280868 1.6690784610681413 -15.26662736608546 -25.593335494457204 -34.235123342631979 1.6690784610683038 -22.350006208829512 -18.143286821035634 -35.206782983192582 1.6690784610682032 -25.885211574595594 -9.12501885759281 -36.173077832005433 1.6690784610682463 -25.883854472099124 -0.12089020061472011 -37.138153038280777 1.6690784610682365 --26.542839309752701 0.24777393751154086 -22.759123110047121 1.0367296232096095 -26.504301663288437 9.4793311313602953 -23.749197194272149 1.0367296232096073 -22.839928421864748 18.710795724514895 -24.740612795821985 1.0367296232096246 -15.54343872301596 26.320145087998661 -25.73785709727273 1.0367296232095771 -5.4541180677168555 30.648972339603695 -26.724094984658691 1.0367296232096401 5.6813669655295893 30.596644056151035 -27.728689126654718 1.0367296232095977 15.722233940188294 26.177688853472695 -28.714214511821709 1.036729623209605 22.937840306236346 18.513217872529601 -29.710032708293355 1.0367296232096164 26.511674633431539 9.2690962670351169 -30.699316631438876 1.0367296232096075 26.469524088876668 0.062836746899527007 -31.686559842864018 1.0367296232096095 26.427362439656427 -9.1434201444299319 -32.673858721478837 1.0367296232096055 22.769237023054146 -18.304743888992547 -33.657760939453219 1.036729623209615 15.528571282818257 -25.802980570431036 -34.642488889862506 1.0367296232096119 5.5820910711516731 -30.017187916266099 -35.612138840184272 1.0367296232095931 -5.3144585288992872 -29.908915327694501 -36.594254538827144 1.0367296232096359 -15.067540147352219 -25.563116076800476 -37.553900710316853 1.0367296232095855 -22.029817241295774 -18.115011676239643 -38.51835241367769 1.0367296232096228 -25.456776667386052 -9.1938071613631251 -39.472090962739976 1.0367296232096057 -25.411261294467828 -0.35278714951684842 -40.419278007168558 1.0367296232096095 --23.270156136415324 -0.0024170231958393629 -25.276916520462354 1.0383466998475139 -23.22264988238404 8.0996479930783032 -26.143096347596035 1.0383466998474999 -19.99286042111099 16.162146305294137 -27.006804978769324 1.0383466998475714 -13.609633323601756 22.759619935595367 -27.870649853752433 1.0383466998473936 -4.8399493219792609 26.470429476739554 -28.724799895414353 1.0383466998476718 4.7742079377122932 26.373588322987754 -29.586270556779496 1.038346699847368 13.39283153085346 22.532160696584118 -30.433487753133857 1.0383466998476121 19.553187499972744 15.940887047236714 -31.283289181863779 1.0383466998474677 22.58652520430671 8.0304884399557235 -32.126101210206514 1.0383466998475264 22.536949392154376 0.18147455264916834 -32.964493977763766 1.0383466998475139 22.487354011725103 -7.6675419161187417 -33.802916851218072 1.0383466998475062 19.354821304561071 -15.451435817451888 -34.636192951428697 1.0383466998475326 13.191084034523207 -21.788578034394121 -35.466421582538125 1.0383466998474922 4.7619842735177231 -25.322847131403599 -36.285643690103377 1.0383466998475241 -4.4311460054867169 -25.196038011657574 -37.107505022483522 1.0383466998475215 -12.631541799957498 -21.508939422322019 -37.914818325636041 1.0383466998475004 -18.46660844992315 -15.234379076773482 -38.720908231099514 1.0383466998475213 -21.327357795174599 -7.7379916472500394 -39.518275049942723 1.0383466998475122 -21.276126544774648 -0.32412521248165049 -40.308944772642533 1.0383466998475139 --18.406689281263908 0.024868259754249777 -23.768968687463175 0.85353433019613967 -18.406852738367789 6.4484132036061332 -24.451031432335427 0.85353433019612557 -15.88393713234943 12.875344381557396 -25.133435777025991 0.85353433019619729 -10.838631840496024 18.17329629397846 -25.816408871343381 0.85353433019601743 -3.8492845199701424 21.208808633950522 -26.499102566516015 0.85353433019630476 3.8774410865733469 21.211752959367612 -27.183007196507937 0.85353433019598357 10.874683324169839 18.178265948695255 -27.866213663786937 0.85353433019624458 15.930701283923133 12.874304934989162 -28.550227158580409 0.85353433019609182 18.461144057364031 6.4333080481343519 -29.234178656333516 0.8535343301961521 18.461122109703588 -0.0090238127616477648 -29.918299082279443 0.85353433019613967 18.461100704140065 -6.4513551946305219 -30.602422514927774 0.853534330196136 15.930618682978091 -12.894760769185236 -31.286641148855946 0.85353433019614511 10.872390859631761 -18.203570057307982 -31.97119855685478 0.853534330196143 3.8685877745347863 -21.242536014903372 -32.655181693331343 0.85353433019612113 -3.8698005115117939 -21.242434439490584 -33.34018353328031 0.8535343301961672 -10.873606969991664 -18.203236313614028 -34.024173479680002 0.8535343301961168 -15.931794308103626 -12.894148496741666 -34.708744796578202 0.85353433019615088 -18.462147123130002 -6.4504396033880695 -35.392984092533347 0.85353433019613645 -18.461929598833933 -0.0078292085509965581 -36.077135066119283 0.85353433019613967 --19.347940212669421 0.42101393676839827 -18.780474296208389 1.0383466998475139 -19.400232946215738 7.1694061085022014 -19.498169747280052 1.0383466998474999 -16.801917957055593 14.015081354939962 -20.224190873650073 1.0383466998475714 -11.478306326017163 19.769938092626557 -20.95964107129911 1.0383466998473936 -3.9625948765703209 23.180694180721357 -21.700499704783155 1.0383466998476718 4.5049837585472003 23.33123353128919 -22.454102123530916 1.038346699847368 12.311087836862779 20.09077590135627 -23.210819831856767 1.0383466998476121 18.047398350460696 14.228329862326593 -23.978423559399552 1.0383466998474677 20.977253801258236 6.9873335226379076 -24.752272887961826 1.0383466998475264 21.028584710519034 -0.34110761394417421 -25.533573646488122 1.0383466998475139 21.079945149238632 -7.6695379971773328 -26.314893607036666 1.0383466998475062 18.252874966113453 -15.082994460877376 -27.103182978723559 1.0383466998475326 12.48290215361979 -21.292050831069929 -27.900351440683604 1.0383466998474922 4.368744047043811 -24.945031443599913 -28.699334003701708 1.0383466998475241 -4.7341679596748421 -25.075565282628968 -29.512707407308376 1.0383466998475215 -13.086887310073005 -21.578056245779141 -30.32422369551314 1.0383466998475004 -19.19893375780503 -15.299049025512364 -31.146799349595568 1.0383466998475213 -22.307259531786706 -7.5806613802980767 -31.972884509833971 1.0383466998475122 -22.357025574426338 0.20626159568988056 -32.804467427428705 1.0383466998475139 --23.113078645879263 0.61804086788608048 -17.078344073641304 1.036729623209609 -23.161809688478236 8.6658861080279816 -17.93857679213869 1.0367296232096048 -20.049625910051759 16.833306302036455 -18.809592294086894 1.0367296232096304 -13.679711268871658 23.705833846125312 -19.694562559038772 1.0367296232095649 -4.6869201817161006 27.772280966102244 -20.581733382585366 1.0367296232096572 5.445945326993443 27.93627323695889 -21.492002718752303 1.0367296232095797 14.776308972727071 24.042833022266738 -22.398391312329863 1.0367296232096159 21.62111106605974 17.015681433529544 -23.32233217015358 1.036729623209611 25.104455892041791 8.3569150482289682 -24.251312030601788 1.0367296232096082 25.150542688457499 -0.39413242396444303 -25.188631441144089 1.036729623209609 25.196661313459053 -9.1451656067986686 -26.125996984041421 1.0367296232096044 21.805645961576715 -17.982562322171042 -27.070560798703447 1.0367296232096184 14.909305437894355 -25.36879502236096 -28.026379461634562 1.036729623209603 5.238224265644118 -29.686809015812241 -28.978331050853868 1.0367296232096022 -5.5794344504126947 -29.803568596377907 -29.953024525735071 1.0367296232096306 -15.465714584819199 -25.623554912119207 -30.916345974946807 1.0367296232095844 -22.670195176362547 -18.1715619658295 -31.895213552707546 1.0367296232096244 -26.313646481805449 -9.0562305538229158 -32.874064701270903 1.0367296232096046 -26.356447649730448 0.11100674828741708 -33.857028069393003 1.036729623209609 +9 1 1 1 0 6 8 6 17 2 3 -17.981556595548064 0.84042477416931349 -16.077972850577655 1.6690784610682365 -17.651436922707909 7.9017552704998106 -16.827971986409722 1.6690784610682363 -14.151581566222372 14.815141519113631 -17.577982555585621 1.669078461068235 -7.565677272200511 19.920099479740983 -18.327946198423724 1.669078461068239 1.0108003644792891 21.610328757503691 -19.078009209229581 1.6690784610682357 9.3897231689679561 19.128005978575185 -19.827946329417752 1.6690784610682354 15.471895151658197 13.430368100733737 -20.577982303268868 1.6690784610682377 18.311561099222587 6.220905556125448 -21.327972175490466 1.6690784610682368 17.981556595548085 -0.84042477416929595 -22.077972850577652 1.6690784610682365 17.651431370681003 -7.9017552691418027 -22.827971973612428 1.669078461068231 14.151603366425944 -14.815141524445746 -23.57798260583461 1.6690784610682536 7.5656270672735495 -19.920099467461998 -24.327946082702546 1.6690784610682063 -1.0107178711801446 -21.610328777678635 -25.078009399374526 1.6690784610682667 -9.3898262855912904 -19.128005953357086 -25.827946091736706 1.6690784610682168 -15.471794741806015 -13.430368125290087 -26.577982534710866 1.6690784610682459 -18.311637399933009 -6.2209055374649322 -27.327971999619322 1.6690784610682345 -17.98151217933427 0.84042476330658145 -28.077972952955907 1.6690784610682365 +-21.302608996921386 0.95666811740120483 -16.077952866904482 1.0367296232096095 -20.926830331737197 9.3224682020971947 -16.827942706836055 1.0367296232096126 -16.796003604474407 17.518003691214112 -17.577957344313472 1.0367296232095986 -9.0050285154670071 23.583407665781003 -18.327893299335855 1.0367296232096301 1.1503919444161657 25.598402561044075 -19.078019265071894 1.0367296232095846 11.0816860589426 22.681708781471613 -19.827869870955542 1.0367296232096292 18.298826581639773 15.941724027640461 -20.578002471342757 1.036729623209599 21.678273082626035 7.4091267088421411 -21.327908889620595 1.0367296232096128 21.302608996921414 -0.95666811740119573 -22.077952866904493 1.0367296232096095 20.926824771142293 -9.3224684449464768 -22.827944995638255 1.036729623209607 16.796025438320584 -17.518002737658612 -23.577948357261484 1.0367296232096181 9.0049782330623298 -23.583409861778922 -24.32791399612859 1.0367296232095955 -1.1503093238107622 -25.598398952729671 -25.077985257518357 1.0367296232096217 -11.08178933469873 -22.681713291864902 -25.82791238039756 1.0367296232096028 -18.298726016832148 -15.941719635643786 -26.577961077757028 1.0367296232096113 -21.678349501085826 -7.4091300462877223 -27.327940344302739 1.0367296232096099 -21.302564512163315 0.95667006019682888 -28.077934556486706 1.0367296232096095 +-21.794646189493328 0.54006861722238786 -20.164109812614271 1.0383466998475139 -21.582508434105556 9.0991394645238692 -20.914098747656269 1.0383466998475122 -17.528550885483355 17.561055215216157 -21.664108524675783 1.038346699847519 -9.6890782693224775 23.92172809131463 -22.414059209789006 1.0383466998475051 0.64930550720871949 26.189277405581912 -23.164161821606761 1.0383466998475235 10.861600535718813 23.412664015364644 -23.914032290840893 1.0383466998475073 18.376876993857813 16.671213449571802 -24.664160375129882 1.0383466998475175 22.006728855018203 8.0189963173771481 -25.414059892052343 1.038346699847513 21.794646189493335 -0.54006861722237165 -26.164109812614281 1.0383466998475139 21.582505735986047 -9.0991397435552273 -26.914101377464533 1.0383466998475084 17.528561479732431 -17.561054119590839 -27.66409819865304 1.0383466998475321 9.6890538712242407 -23.921730614492638 -28.414082990173611 1.0383466998474844 -0.6492654179238162 -26.189273259668429 -29.164122747306141 1.0383466998475408 -10.861650647324415 -23.41266919775618 -29.914081133716657 1.0383466998474993 -18.376828197662554 -16.671208403216653 -30.664112814360731 1.038346699847519 -22.006765934889117 -8.0190001520650025 -31.414096033131838 1.0383466998475133 -21.794624604537383 0.54007084947294304 -32.16408877414819 1.0383466998475139 +-18.009276215273225 0.049761831689716131 -23.534352299320901 0.85353433019613967 -17.989729723841116 7.1219883814476672 -24.284352219526777 0.85353433019614056 -14.7954643509246 14.185528216450155 -25.034352853462167 0.85353433019613723 -8.4368012668563761 19.577644461460419 -25.784350630055624 0.853534330196145 0.059849149554774606 21.643640864115177 -26.534354530151347 0.85353433019613245 8.5448046282682402 19.530744194037929 -27.284350564259867 0.85353433019614688 14.873640217046818 14.103535409106616 -28.034352980195926 0.85353433019613489 18.028815939033905 7.0224646924225658 -28.784352124555262 0.85353433019614156 18.009276215273218 -0.04976183168969768 -29.534352299320897 0.85353433019613967 17.989729397472743 -7.1219883821295484 -30.284352225954581 0.85353433019613456 14.795465632420031 -14.185528213772523 -31.034352828223149 0.85353433019615799 8.4367983156274438 -19.577644467627334 -31.784350688180073 0.85353433019610858 -0.05984430029696064 -21.643640853981683 -32.534354434645124 0.85353433019617031 -8.5448106898408192 -19.530744206704941 -33.2843506836427 0.85353433019612057 -14.873634314587978 -14.103535396772163 -34.034352863946914 0.85353433019614688 -18.028820424269192 -7.0224647017954078 -34.784352212891946 0.85353433019613867 -18.009273604325458 0.04976183714580304 -35.53435224789834 0.85353433019613967 +-14.198848179756961 0.27420079929792857 -20.164155518591343 1.0383466998475139 -14.091140117507869 5.8497332059019005 -20.914165714900545 1.0383466998475122 -11.480318810990772 11.379160855782875 -21.66416618703931 1.038346699847519 -6.3970430986655495 15.543134300662643 -22.414180198782347 1.0383466998475051 0.33003639702539722 17.067890749026226 -23.164138822226086 1.0383466998475235 6.9918006051587511 15.284755926266818 -23.914207164033606 1.0383466998475073 11.911215650895302 10.927325655616189 -24.664114247397507 1.0383466998475175 14.306499803432738 5.3013373418064766 -25.414204637339822 1.038346699847513 14.198848179756959 -0.27420079929790386 -26.164155518591329 1.0383466998475139 14.091137438984768 -5.8497329263904971 -26.914163080568787 1.0383466998475084 11.480329328293633 -11.379161953292961 -27.664176530823664 1.0383466998475321 6.3970188777715951 -15.543131773144736 -28.414156377493608 1.0383466998474844 -0.32999659891064326 -17.067894902069842 -29.16417796373749 1.0383466998475408 -6.9918503528019134 -15.28475073496285 -29.914158237144282 1.0383466998474993 -11.911167209108335 -10.927330710650493 -30.664161889975151 1.038346699847519 -14.306536613991481 -5.301333500522813 -31.41416843409441 1.0383466998475133 -14.198826751573165 0.27419856320759906 -32.1641765932456 1.0383466998475139 +-14.660504194174752 0.72418143093742648 -16.077992834250821 1.036729623209609 -14.37604351367855 6.4810423389023573 -16.828001265983424 1.0367296232096108 -11.507159527970416 12.112279347013514 -17.578007766857674 1.0367296232096026 -6.1263260289341739 16.256791293699973 -18.327999097511842 1.0367296232096219 0.87120878454305561 17.622254953964831 -19.077999153386827 1.0367296232095928 7.6977602789923729 15.57430317567737 -19.828022787880357 1.0367296232096221 12.64496372167733 10.919012173827745 -20.577962135194738 1.0367296232096015 14.944849115818903 5.0326844034085596 -21.328035461360379 1.0367296232096117 14.660504194174765 -0.72418143093740539 -22.077992834250807 1.036729623209609 14.376037970219622 -6.4810420933371207 -22.827998951586611 1.0367296232096064 11.507181294531476 -12.112280311232926 -23.578016854407647 1.0367296232096179 6.1262759014845933 -16.256789073144834 -24.327978169276747 1.0367296232095975 -0.87112641854952688 -17.622258602628087 -25.078033541230319 1.0367296232096139 -7.6978632364836628 -15.574298614848823 -25.827979803076122 1.0367296232096126 -12.644863466780102 -10.91901661493662 -26.578003991664598 1.0367296232096035 -14.944925298780101 -5.0326810286421164 -27.328003654935905 1.0367296232096119 -14.660459846505233 0.72417946641632991 -28.078011349425104 1.036729623209609 0 6 6.2831853071795862 6 -0 10 -3.1415926535897931 9 -6.2831853071795862 10 +0 9 +3.1415926535897931 8 +6.2831853071795862 9 -9 1 1 1 0 6 9 6 19 2 3 -25.883854472099131 -0.12089020061470013 -37.138153038280777 1.6690784610682365 -25.882489821148685 8.8832351735196724 -38.103280183133748 1.6690784610682248 -22.344509372568691 17.866650329004255 -39.06592573791292 1.6690784610682914 -15.289156662309743 25.24656706746919 -40.030057698124793 1.6690784610681222 -5.5592773337444141 29.42955622454884 -40.980749102569312 1.6690784610683778 5.1354057010545411 29.381723927426762 -41.943873554581138 1.669078461068116 14.74126318630087 25.163342265297647 -42.886598974151504 1.6690784610683136 21.627643827038494 17.873587202892327 -43.834570136302546 1.6690784610682001 25.045356695620381 9.106561070182007 -44.773183239330201 1.6690784610682476 25.040837342321705 0.3933843056650983 -45.706349473999239 1.6690784610682365 25.036293407987753 -8.3197947340156873 -46.639562645980945 1.6690784610682219 21.609344203578011 -16.973256206965221 -47.56620042400467 1.6690784610682809 14.814063994790555 -24.03448795424492 -48.489597864312408 1.6690784610681595 5.5005365262359254 -27.992427064241298 -49.397149773661049 1.6690784610683351 -4.6652638378442415 -27.898087736260084 -50.310518083388104 1.6690784610681413 -13.734275168638735 -23.870286514332033 -51.202381372633837 1.6690784610683038 -20.196394332325617 -16.986715014790494 -52.093950272151361 1.6690784610682032 -23.386169989106946 -8.7597788095030573 -52.973256123802472 1.6690784610682463 -23.37901911071296 -0.62014528077302122 -53.843521314559368 1.6690784610682365 --25.411261294467845 -0.35278714951684309 -40.419278007168558 1.0367296232096095 -25.365716693176264 8.4882362597842267 -41.366514339668925 1.0367296232096073 -21.847591012266655 17.242888770869872 -42.30601098399773 1.0367296232096246 -14.927369461642265 24.356220869896539 -43.241233888041286 1.0367296232095771 -5.4841772148956913 28.305182533151832 -44.159061388680364 1.0367296232096401 4.7834997072114795 28.147956202708983 -45.082014084676928 1.0367296232095977 13.906459876325048 24.031119549181362 -45.981709169498416 1.036729623209605 20.375465702638461 17.06002155950328 -46.880164371046206 1.0367296232096164 23.539368768225639 8.7666798926447136 -47.764972925468953 1.0367296232096075 23.491119632698393 0.58835802679087079 -48.63948121949975 1.0367296232096095 23.442826544148275 -7.5899728704205947 -49.51402666477334 1.0367296232096055 20.18217150056223 -15.648716838929371 -50.377389609100661 1.036729623209615 13.809748908670471 -22.148114218721691 -51.231875868875818 1.0367296232096119 5.1717632090113037 -25.712050676582486 -52.068673002748127 1.0367296232095931 -4.1502373704908555 -25.518554152032809 -52.902658388317761 1.0367296232096359 -12.374018800758208 -21.759859961416801 -53.715302413757655 1.0367296232095855 -18.167175429837727 -15.470935638528236 -54.520806045391645 1.0367296232096228 -20.982432326398598 -8.0373864332945182 -55.31131607031967 1.0367296232096057 -20.932398411859303 -0.74215410107286539 -56.088975070846161 1.0367296232096095 --21.276126544774652 -0.3241252124816314 -40.308944772642533 1.0383466998475139 -21.224866809542831 7.0897472836212367 -41.099636608539655 1.0383466998474999 -18.261540011768414 14.418424781454696 -41.883104791188728 1.0383466998475714 -12.456111471670365 20.355936414185038 -42.660695643515311 1.0383466998473936 -4.5512627758230657 23.641372393474242 -43.427249084340787 1.0383466998476718 4.0289992639391476 23.492923693704512 -44.191453012327713 1.038346699847368 11.649078125258217 20.038619364403463 -44.942505763894729 1.0383466998476121 17.049438373308494 14.204402432148708 -45.688670579523027 1.0383466998474677 19.686584322186512 7.2610082280830879 -46.425392509385205 1.0383466998475264 19.634312645595411 0.41377970915215956 -47.153918496946538 1.0383466998475139 19.582006880206414 -6.433457649237873 -47.882456003770741 1.0383466998475062 16.840157660138374 -13.183245297132487 -48.602533201524381 1.0383466998475326 11.490187904176025 -18.628301471349474 -49.314586152879649 1.0383466998474922 4.2322902941018166 -21.621549244618691 -50.016855199097527 1.0383466998475241 -3.6145346214730436 -21.462305885543952 -50.712058808042258 1.0383466998475215 -10.559694295085194 -18.292188663153752 -51.397037065994823 1.0383466998475004 -15.466484432085885 -12.970736334281153 -52.074032102241304 1.0383466998475213 -17.85501548899083 -6.6550080832898146 -52.741962048369565 1.0383466998475122 -17.802439392693191 -0.44001183948491374 -53.401150500771152 1.0383466998475139 --18.46192959883394 -0.0078292085509752418 -36.077135066119283 0.85353433019613967 -18.461711563216529 6.4347810141641473 -36.761289084326499 0.85353433019612557 -15.930919888451712 12.876030453054835 -37.445280834454408 0.85353433019619729 -10.874423660058525 18.180170428019412 -38.129341984530917 0.85353433019601743 -3.8765822153598393 21.213682447367109 -38.81260077673678 0.85353433019630476 3.8508040098301706 21.210529656276261 -39.496567571717563 0.85353433019598357 10.840743499275227 18.174524016142161 -40.179326417479153 0.85353433019624458 15.886427261495808 12.87584608499407 -40.862373369504503 0.85353433019609182 18.40941990426025 6.4480797976747146 -41.544856886981229 0.8535343301961521 18.409017843206207 0.023730913371150297 -42.227005103246917 0.85353433019613967 18.408614276874456 -6.4006181257404995 -42.909156047905398 0.853534330196136 15.884805720642746 -12.821331640496737 -43.590906126223807 0.85353433019614511 10.844493841021357 -18.105818622530116 -44.272448158171009 0.853534330196143 3.8723381437981983 -21.125603403406668 -44.953053056798133 0.85353433019612113 -3.8226607444034757 -21.119748917213801 -45.633972920523028 0.8535343301961672 -10.779914708318561 -18.09546809959846 -46.313629254446184 0.8535343301961168 -15.79987602051995 -12.821526144723595 -46.993246927804272 0.85353433019615088 -18.309094214745059 -6.4265030602175646 -47.672135275118876 0.85353433019613645 -18.308540117168594 -0.036832042470852588 -48.350480336047056 0.85353433019613967 --22.357025574426341 0.20626159568989655 -32.804467427428705 1.0383466998475139 -22.406812717808002 7.9931753540600932 -33.636078520367576 1.0383466998474999 -19.398074771239564 15.845070985492782 -34.472492103050755 1.0383466998475714 -13.283578842446918 22.392305931478116 -35.316202764633687 1.0383466998473936 -4.7230292113799237 26.213001628771998 -36.157921407613586 1.0383466998476718 4.8338666748043151 26.314755238427718 -37.014004808584673 1.038346699847368 13.558411840626125 22.628200621871017 -37.863475077113186 1.0383466998476121 19.913377557529898 16.065162079387406 -38.722891112398699 1.0383466998474677 23.131028648588675 8.0383728883990422 -39.582672974419332 1.0383466998475264 23.178774241426364 -0.032157549249891559 -40.445359407197074 1.0383466998475139 23.22653005241715 -8.1026813738211274 -41.308079741603578 1.0383466998475062 20.104338488071271 -16.212686654754442 -42.172876985225408 1.0383466998475326 13.78722318405751 -22.942751270444781 -43.042541243081459 1.0383466998474922 4.9842494344045525 -26.837148498546032 -43.906638203403027 1.0383466998475241 -4.792485627024142 -26.904694104311368 -44.783403734427097 1.0383466998475215 -13.670826359008434 -23.119084439842219 -45.649569596075366 1.0383466998475004 -20.107644834872588 -16.437575329246098 -46.52341018351634 1.0383466998475213 -23.352762452206282 -8.3072393372099533 -47.394430922074982 1.0383466998475122 -23.398266976517984 -0.16095741865715496 -48.265425100622316 1.0383466998475139 --26.356447649730445 0.11100674828743262 -33.857028069393003 1.036729623209609 -26.399262949120907 9.2782340872552815 -34.840046026598628 1.0367296232096048 -22.841427732871484 18.490411887138254 -35.825840491828032 1.0367296232096304 -15.650943862976014 26.136913265042253 -36.818881508208264 1.0367296232095649 -5.6343774525939914 30.553929915945801 -37.802436816458531 1.0367296232096572 5.4873116948971612 30.615491652144271 -38.805733024484937 1.0367296232095797 15.57606649627833 26.295564981414223 -39.791488778804997 1.0367296232096159 22.879821951437005 18.687152846281389 -40.788975901558686 1.036729623209611 26.551344623015673 9.4464422477191619 -41.781393553191499 1.0367296232096082 26.590555051945024 0.19841058453933647 -42.773217728498743 1.036729623209609 26.629760271826875 -9.0496165976107896 -43.765098627188578 1.0367296232096044 23.036516906594951 -18.297795575001409 -44.755011238908558 1.0367296232096184 15.81837908090894 -25.920861689766436 -45.74731985974919 1.036729623209603 5.829309843461739 -30.272803451903865 -46.725626544573963 1.0367296232096022 -5.1802903051973868 -30.277621320482631 -47.718377778458112 1.0367296232096306 -15.094531536520421 -25.980713067250655 -48.689460331510539 1.0367296232095844 -22.225613234812638 -18.502494391051393 -49.667094498910743 1.0367296232096244 -25.789907651815554 -9.4821711857118203 -50.635196177285387 1.0367296232096046 -25.82563980956661 -0.49813646047316285 -51.598067558272582 1.036729623209609 +9 1 1 1 0 6 8 6 17 2 3 -17.981512179334274 0.84042476330659766 -28.077972952955911 1.6690784610682365 -17.651392510760992 7.9017378134806808 -28.827972088910567 1.6690784610682363 -14.151544987446817 14.815106642339725 -29.577982658051724 1.669078461068235 -7.5656563446885645 19.920051213949069 -30.327946301192675 1.669078461068239 1.010800351398685 21.610275420453149 -31.078009311273391 1.6690784610682357 9.3897022178514007 19.127957723064561 -31.827946432501825 1.6690784610682354 15.471858555796647 13.430333241833845 -32.577982405128026 1.6690784610682377 18.311516678733131 6.2208881208994775 -33.327972278446104 1.6690784610682368 17.981512179334292 -0.84042476330657978 -34.077972952955911 1.6690784610682365 17.651386958734061 -7.9017378121194062 -34.827972076082553 1.669078461068231 14.151566787650477 -14.815106647684685 -35.577982708421388 1.6690784610682536 7.5656061397615959 -19.92005120164054 -36.327946185193419 1.6690784610682063 -1.0107178580999587 -21.610275440676507 -37.078009501875435 1.6690784610682667 -9.3898053344737917 -19.127957697786055 -37.8279461942493 1.6690784610682168 -15.471758145945618 -13.430333266449047 -38.577982637126595 1.6690784610682459 -18.311592979442608 -6.2208881021941487 -39.327972102151982 1.6690784610682345 -17.98146776312106 0.84042475241772485 -40.077973055580415 1.6690784610682365 +-21.302564512163308 0.95667006019684209 -28.07793455648671 1.0367296232096095 -20.926785083847118 9.3224526717929841 -28.827924396539018 1.0367296232096126 -16.79596543467942 17.517970370118565 -29.577939034005869 1.0367296232095986 -9.0050054354585498 23.583360246109493 -30.327874989247498 1.0367296232096301 1.1503942810496897 25.598349141620222 -31.078000954403539 1.0367296232095846 11.081667195522662 22.681659530774549 -31.827851561182715 1.0367296232096292 18.298791463970272 15.941687505362991 -32.577984160427349 1.036729623209599 21.678229360723535 7.4091072930141468 -33.327890579779051 1.0367296232096128 21.302564512163343 -0.95667006019682033 -34.077934556486724 1.0367296232096095 20.92677952323934 -9.3224529146389443 -34.827926685310359 1.036729623209607 16.795987268576123 -17.517969416576069 -35.57793004707505 1.0367296232096181 9.0049551529375691 -23.583362442077483 -36.327895685761305 1.0367296232095955 -1.1503116602532941 -25.59834553335487 -37.077966947308205 1.0367296232096217 -11.081770471517395 -22.681664041106583 -37.827894070052068 1.0367296232096028 -18.29869089893041 -15.941683113425798 -38.577942767399229 1.0367296232096113 -21.678305779359732 -7.4091106304146397 -39.327922034037499 1.0367296232096099 -21.302520027302581 0.95667200296628163 -40.077916246315567 1.0367296232096095 +-21.794624604537386 0.54007084947295625 -32.16408877414819 1.0383466998475139 -21.582485972319436 9.0991332184395173 -32.914077709247366 1.0383466998475122 -17.528531351757028 17.561040109493202 -33.664087486278035 1.038346699847519 -9.6890656709257357 23.921705689941007 -34.414038171441646 1.0383466998475051 0.64930819198544842 26.189251485294239 -35.16414078307497 1.0383466998475235 10.86159278215364 23.412639510133864 -35.914011252646802 1.0383466998475073 18.376860967003715 16.671194665743155 -36.664139336437053 1.0383466998475175 22.006708146581566 8.0189856068240122 -37.414038853864504 1.038346699847513 21.79462460453739 -0.54007084947294459 -38.164088774148205 1.0383466998475139 21.582483274185112 -9.0991334974691469 -38.914080339040659 1.0383466998475084 17.528541946064177 -17.561039013874566 -39.664077160314108 1.0383466998475321 9.6890412726939275 -23.921708213103859 -40.414061951690769 1.0383466998474844 -0.64926810248116773 -26.189247339405295 -41.164101708996945 1.0383466998475408 -10.861642894033364 -23.412644692495185 -41.914060095244416 1.0383466998474993 -18.376812170541637 -16.671189619417063 -42.66409177593863 1.038346699847519 -22.006745226655166 -8.0189894414899481 -43.414074994738364 1.0383466998475133 -21.79460301946348 0.54007308171081425 -44.164067735801787 1.0383466998475139 +-18.009273604325472 0.049761837145821081 -35.53435224789834 0.85353433019613967 -17.989727110750195 7.1219873613547096 -36.284352168111418 0.85353433019614056 -14.795462195902928 14.1855261712866 -37.034352802044808 0.85353433019613723 -8.4368000300465376 19.577641627092277 -37.784350578655904 0.853534330196145 0.059849156116241531 21.643637728767708 -38.534354478709297 0.85353433019613245 8.5448034032982747 19.530741354530022 -39.284350512878689 0.85353433019614688 14.873638070595643 14.103533354951546 -40.034352928742884 0.85353433019613489 18.028813330227919 7.022463661421412 -40.78435207316663 0.85353433019614156 18.009273604325458 -0.049761837145799848 -41.53435224789834 0.85353433019613967 17.989726784381752 -7.1219873620364655 -42.284352174537418 0.85353433019613456 14.795463477398634 -14.185526168609476 -43.034352776812902 0.85353433019615799 8.4367970788169053 -19.577641633257947 -43.784350636763961 0.85353433019610858 -0.059844306857321783 -21.643637718636469 -44.534354383230024 0.85353433019617031 -8.5448094648720563 -19.530741367193993 -45.284350632227842 0.85353433019612057 -14.873632168135847 -14.103533342620278 -46.034352812526635 0.85353433019614688 -18.028817815463796 -7.0224636707916819 -46.784352161478445 0.85353433019613867 -18.009270993377413 0.049761842600367923 -47.534352196490246 0.85353433019613967 +-14.198826751573161 0.27419856320761904 -32.1641765932456 1.0383466998475139 -14.091119567662586 5.849722553100702 -32.914186789616402 1.0383466998475122 -11.480302916189874 11.379142191965517 -33.664187261710147 1.038346699847519 -6.3970354233855078 15.543109964071213 -34.414201273696534 1.0383466998475051 0.33003370761587281 17.067865017139567 -35.164159896621783 1.0383466998475235 6.9917880766849949 15.284733697193527 -35.914228239099828 1.0383466998475073 11.91119624317064 10.927310676207377 -36.664135321775518 1.0383466998475175 14.306477497211844 5.3013311612191236 -37.414225712275112 1.038346699847513 14.198826751573172 -0.27419856320759717 -38.164176593245585 1.0383466998475139 14.091116889154222 -5.8497222735877523 -38.914184155269801 1.0383466998475084 11.480313433434809 -11.379143289481732 -39.664197605552836 1.0383466998475321 6.3970112026249462 -15.543107436539099 -40.414177452273407 1.0383466998474844 -0.32999390972029463 -17.067869170206624 -41.164199038354006 1.0383466998475408 -6.9918378240541328 -15.28472850586021 -41.914179311934561 1.0383466998474993 -11.911147801650596 -10.927315731270255 -42.664182964621801 1.038346699847519 -14.306514307567678 -5.3013273199137858 -43.414189508825594 1.0383466998475133 -14.198805323507534 0.27419632710468295 -44.164197668018659 1.0383466998475139 +-14.660459846505239 0.72417946641635 -28.078011349425104 1.036729623209609 -14.375999937674855 6.4810229551683074 -28.828019781282222 1.0367296232096108 -11.507124540214253 12.112242914561266 -29.578026282097177 1.0367296232096026 -6.1263072539187178 16.256742181787757 -30.328017613138556 1.0367296232096219 0.87120642174833574 17.622201699287281 -31.078017668142351 1.0367296232095928 7.6977372401791291 15.574255915353747 -31.828041303821703 1.0367296232096221 12.644925647623779 10.918978978305024 -32.577980649828234 1.0367296232096015 14.944803996742507 5.0326689487847434 -33.328053977113299 1.0367296232096117 14.660459846505258 -0.72417946641632991 -34.07801134942509 1.036729623209609 14.375994394228943 -6.4810227095997979 -34.828017466854732 1.0367296232096064 11.507146306724259 -12.112243878793514 -35.578035369767711 1.0367296232096179 6.1262571265865491 -16.256739961203021 -36.327996684625681 1.0367296232095975 -0.87112405594762166 -17.622205347999117 -37.07805205644236 1.0367296232096139 -7.6978401974294455 -15.574251354464524 -37.82799831844676 1.0367296232096126 -12.644825392961224 -10.918983419472923 -38.578022506853856 1.0367296232096035 -14.944880179525374 -5.0326655739734685 -39.328022170266472 1.0367296232096119 -14.660415498939546 0.7241775018691734 -40.078029864845256 1.036729623209609 0 6 6.2831853071795862 6 -0 10 -3.1415926535897931 9 -6.2831853071795862 10 +0 9 +3.1415926535897931 8 +6.2831853071795862 9 -9 1 1 1 0 6 9 6 19 2 3 -23.379019110712967 -0.6201452807730039 -53.843521314559368 1.6690784610682365 -23.371829477309429 7.5194958165401777 -54.713822982903466 1.6690784610682248 -20.167440653252903 15.56736634959719 -55.574220126475787 1.6690784610682914 -13.84891037718463 22.090606946000495 -56.427027018768271 1.6690784610681222 -5.240766398980961 25.707739251661071 -57.263426130715651 1.6690784610683778 4.0911951748167974 25.577870103823962 -58.098348588772019 1.669078461068116 12.362769114340839 21.864541758553365 -58.913160925132587 1.6690784610683136 18.222702226431739 15.585807410655619 -59.722172974170014 1.6690784610682001 21.100603491491434 8.1250004744868853 -60.517443095504262 1.6690784610682476 21.091657842035357 0.77480237949982866 -61.301130130116341 1.6690784610682365 21.082663770535806 -6.575407697312059 -62.084838940526645 1.6690784610682219 18.186482216942441 -13.812476106711713 -62.856465923507422 1.6690784610682809 12.505936556877963 -19.640984074240212 -63.617035436348445 1.6690784610681595 4.8101764364594208 -22.841186312628242 -64.362543031008158 1.6690784610683351 -3.4799599609242722 -22.690896430372312 -65.099452642635882 1.6690784610681413 -10.786241772704578 -19.379362359069127 -65.819985701007624 1.6690784610683038 -15.936094367086206 -13.833780338421825 -66.52988710731303 1.6690784610682032 -18.4544529136524 -7.2760464326348693 -67.226165798566242 1.6690784610682463 -18.444757966731014 -0.83937004179244967 -67.90966601067079 1.6690784610682365 --20.932398411859307 -0.74215410107285162 -56.088975070846161 1.0367296232096095 -20.882310931084358 6.5530918488668979 -56.866654739502877 1.0367296232096073 -17.966655356881585 13.7076193571556 -57.631009684711238 1.0367296232096246 -12.305681230366687 19.435448278798795 -58.382916820408084 1.0367296232095771 -4.6811806600640153 22.539355799623369 -59.118898946439387 1.0367296232096401 3.4883155860294162 22.326490603569745 -59.844459001923873 1.0367296232095977 10.648429309346785 19.013469228883753 -60.553075436543189 1.036729623209605 15.661755438728228 13.532553709090102 -61.249482060347511 1.0367296232096164 18.083321516424995 7.0907386116568203 -61.931291293275116 1.0367296232096075 18.032659364034402 0.79628994354864258 -62.599193365899453 1.0367296232096095 17.981940261579471 -5.4981753477334481 -63.267097194132553 1.0367296232096055 15.458691916294537 -11.645332652004534 -63.921083792475429 1.036729623209615 10.590079183881446 -16.533687497399416 -64.560498573000487 1.0367296232096119 4.0694809544336783 -19.156060560364562 -65.187605144206785 1.0367296232095931 -2.8747113183738011 -18.942980659097419 -65.797890972337797 1.0367296232096359 -8.9303656270653899 -16.111333760964563 -66.397600980158927 1.0367296232095855 -13.150568893878866 -11.47029629753591 -66.981452392118882 1.0367296232096228 -15.179183045457954 -6.0368250779473822 -67.552799727256286 1.0367296232096057 -15.129122256127143 -0.74446992696344338 -68.110801215660985 1.0367296232096095 --17.802439392693199 -0.44001183948490308 -53.401150500771152 1.0383466998475139 -17.749827567927071 5.7749949970780348 -54.060338509267474 1.0383466998474999 -15.255971270328857 11.889540268522886 -54.710813591645007 1.0383466998475714 -10.405643619323151 16.806585302847378 -55.352050128309301 1.0383466998473936 -3.8421611406885514 19.49826926652122 -55.985894886330669 1.0383466998476718 3.2359514739037696 19.340331513733968 -56.608779525530551 1.038346699847368 9.4900781786605819 16.472745233338838 -57.225553358355853 1.0383466998476121 13.901833314845469 11.676847690743184 -57.832177896699434 1.0383466998474677 16.045650191281297 5.9904648741888762 -58.431168800322013 1.0383466998475264 15.993541083689877 0.39977098660371979 -59.021889397413723 1.0383466998475139 15.941398762933204 -5.190934018316538 -59.61259760943306 1.0383466998475062 13.693210856247571 -10.6877587191412 -60.195353694689267 1.0383466998475326 9.3286036803987535 -15.102641007029522 -60.768730766364548 1.0383466998474922 3.4262446608985435 -17.518455360691622 -61.337968618109471 1.0383466998475241 -2.9372764452382309 -17.373771646708608 -61.893625837133385 1.0383466998475215 -8.5646187956558464 -14.791877869393637 -62.447997020262392 1.0383466998475004 -12.537443217248914 -10.473206878205932 -62.991233948536262 1.0383466998475213 -14.468905205838084 -5.3446604190321505 -63.529155888790996 1.0383466998475122 -14.417980187777893 -0.29773688575525892 -64.060240652490435 1.0383466998475139 --18.308540117168597 -0.036832042470837933 -48.350480336047056 0.85353433019613967 -18.307983695412826 6.3528394390191201 -49.02882749176684 0.85353433019612557 -15.797638941045282 12.737025428321687 -49.706581801328156 0.85353433019619729 -10.78608203524205 17.989161245977677 -50.383874811098494 0.85353433019601743 -3.8563491162681602 20.988541871832275 -51.060204896470637 0.85353433019630476 3.7886435840190904 20.98064939976517 -51.736420279855764 0.85353433019598357 10.698194568382092 17.97526222495534 -52.411463491597473 0.85353433019624458 15.682205900998792 12.737505712500351 -53.086145774085047 0.85353433019609182 18.172837244310941 6.3882186176240472 -53.760017653191177 0.8535343301961521 18.172181291254052 0.045609024374098972 -54.433201441650844 0.85353433019613967 18.171522465401122 -6.2970012876327317 -55.106386447612294 0.853534330196136 15.679556448402742 -12.632916050896409 -55.778855571972855 0.85353433019614511 10.705981135179414 -17.843764751291943 -56.450663787666805 0.853534330196143 3.830474547033166 -20.818437168911171 -57.121595271567102 0.85353433019612113 -3.7527084911608535 -20.809407423946872 -57.791995724340964 0.8535343301961672 -10.605086571367469 -17.827885511157429 -58.461451678028183 0.8535343301961168 -15.547101130930258 -12.633555788435547 -59.130266409559525 0.85353433019615088 -18.016494744266925 -6.3376786880408718 -59.798283903263354 0.85353433019613645 -18.01579896186416 -0.049041156271865116 -60.465548522719359 0.85353433019613967 --23.398266976517998 -0.16095741865714119 -48.265425100622316 1.0383466998475139 -23.443769648093465 7.9853212572773336 -49.136454994116392 1.0383466998474999 -20.289532489394325 16.143090287174594 -50.006594523487323 1.0383466998475714 -13.935264795163917 22.879373829615353 -50.878605548989583 1.0383466998473936 -5.1220265954412083 26.744888051919556 -51.742120619184462 1.0383466998476718 4.6148371484332111 26.77677603556733 -52.615135223044703 1.038346699847368 13.411057827584401 22.993621277791814 -53.474796707615411 1.0383466998476121 19.75914363763026 16.372979667878361 -54.338968541664002 1.0383466998474677 22.946674821771172 8.355993402429835 -55.197463327244847 1.0383466998475264 22.98997827973588 0.35062536150952628 -56.053003348281813 1.0383466998475139 23.033268029534582 -7.6547431812097635 -56.908576773742332 1.0383466998475062 19.932119982786869 -15.644375463060893 -57.760395942474069 1.0383466998475326 13.710487451555561 -22.209543970758176 -58.610873994011961 1.0383466998474922 5.1203381554400469 -25.946949546183244 -59.450914636440501 1.0383466998475241 -4.3215805388988988 -25.945877026413466 -60.296181463030649 1.0383466998475215 -12.809315545256982 -22.266401641131864 -61.126895014779038 1.0383466998475004 -18.908402265262612 -15.878887127749227 -61.958429199602833 1.0383466998475213 -21.959990964043378 -8.178965320594628 -62.782089885126013 1.0383466998475122 -22.001389326760815 -0.5147891981619761 -63.600211057919552 1.0383466998475139 --25.825639809566635 -0.49813646047315263 -51.598067558272582 1.036729623209609 -25.861348023534408 8.4858997842136716 -52.56099122630409 1.0367296232096048 -22.368225949624275 17.427113342038368 -53.517430568240293 1.0367296232096304 -15.392139524003323 24.74576561320259 -54.471137217128486 1.0367296232095649 -5.800352137895409 28.876122703698478 -55.407953314992007 1.0367296232096572 4.6940747636001321 28.829249604078399 -56.352238175619974 1.0367296232095797 14.077108919338936 24.715614288222877 -57.273246413722163 1.0367296232096159 20.783649014132806 17.639061112221249 -58.194863887992419 1.036729623209611 24.11788546655858 9.1592623373168571 -59.103594897733444 1.0367296232096082 24.150656320036305 0.75331481545101298 -60.003066894333237 1.036729623209609 24.183387279491797 -7.6526400468904452 -60.902580686920736 1.0367296232096044 20.91427251759151 -15.979619561420012 -61.791848054539386 1.0367296232096184 14.421793929872372 -22.74828065107819 -62.673572299696531 1.036729623209603 5.5508719184872897 -26.526312064896441 -63.537480917809411 1.0367296232096022 -4.0852086034757331 -26.438812201642424 -64.401014312933853 1.0367296232096306 -12.642117918343917 -22.647390957176778 -65.242370421856663 1.0367296232095844 -18.721619840293123 -16.197264379306635 -66.078321822506908 1.0367296232096244 -21.729722781847002 -8.5152677873225073 -66.899531869876284 1.0367296232096046 -21.760393677334871 -0.93427015662147106 -67.708530805680596 1.036729623209609 +9 1 1 1 0 6 8 6 17 2 3 -17.981467763121064 0.84042475241774195 -40.077973055580415 1.6690784610682365 -17.651348098824968 7.901720356435602 -40.827972191657778 1.6690784610682363 -14.151508408692141 14.815071765544909 -41.577982760763661 1.669078461068235 -7.5656354172054607 19.920002948145257 -42.32794640420866 1.669078461068239 1.0108003382870434 21.610222083403336 -43.078009413562462 1.6690784610682357 9.3896812667062655 19.127909467567058 -43.827946535833036 1.6690784610682354 15.471821959915417 13.430298382955771 -44.577982507232939 1.6690784610682377 18.311472258233881 6.2208706856998877 -45.327972381648166 1.6690784610682368 17.981467763121088 -0.84042475241772407 -46.077973055580415 1.6690784610682365 17.651342546798109 -7.9017203550710597 -46.827972178798916 1.669078461068231 14.151530208895462 -14.815071770902655 -47.577982811254472 1.6690784610682536 7.5655852122792089 -19.920002935807194 -48.327946287930445 1.6690784610682063 -1.0107178449892711 -21.610222103675376 -49.078009604622707 1.6690784610682667 -9.3897843833276742 -19.127909442227619 -49.827946297008062 1.6690784610682168 -15.47172155006535 -13.430298407630239 -50.577982739788581 1.6690784610682459 -18.311548558942498 -6.2208706669496099 -51.327972204930916 1.6690784610682345 -17.981423346908429 0.8404247415027456 -52.077973158451172 1.6690784610682365 +-21.302520027302585 0.9566720029662954 -40.077916246315567 1.0367296232096095 -20.926739835864666 9.3224371414221743 -40.827906086488618 1.0367296232096126 -16.795927264820303 17.517937048921166 -41.577920723944956 1.0367296232095986 -9.0049823554303856 23.583312826313538 -42.327856679405691 1.0367296232096301 1.1503966176521212 25.598295722073711 -43.077982643981919 1.0367296232095846 11.081648332025583 22.681610279977654 -43.827833251656415 1.0367296232096292 18.298756346195848 15.941650983026875 -44.577965849758634 1.036729623209599 21.678185638708033 7.4090878771718423 -45.32787227018413 1.0367296232096128 21.302520027302617 -0.95667200296628385 -46.077916246315581 1.0367296232096095 20.926734275244016 -9.3224373842650241 -46.827908375229121 1.036729623209607 16.795949098767554 -17.517936095391033 -47.577911737135153 1.0367296232096181 9.0049320727930429 -23.58331502225283 -48.327877375640796 1.0367296232095955 -1.1503139966646554 -25.598292113855898 -49.077948637344548 1.0367296232096217 -11.081751608259003 -22.68161479024992 -49.827875759953322 1.0367296232096028 -18.298655780923703 -15.941646591148254 -50.577924457287978 1.0367296232096113 -21.678262057520648 -7.4090912145275745 -51.327903724018924 1.0367296232096099 -21.302475542339199 0.95667394570956743 -52.077897936391068 1.0367296232096095 +-21.79460301946348 0.54007308171083479 -44.164067735801787 1.0383466998475139 -21.582463510420286 9.0991269722962258 -44.914056670958118 1.0383466998475122 -17.528511817943716 17.561025003666831 -45.664066448000014 1.038346699847519 -9.6890530724867823 23.921683288434039 -46.414017133213783 1.0383466998475051 0.64931087674635091 26.189225564863836 -47.164119744663147 1.0383466998475235 10.861585028519642 23.412615004781895 -47.913990214572046 1.0383466998475073 18.376844940042147 16.671175881831818 -48.664118297864121 1.0383466998475175 22.006687438022073 8.0189748962374008 -49.414017815796264 1.038346699847513 21.794603019463494 -0.54007308171081969 -50.164067735801801 1.0383466998475139 21.58246081227119 -9.0991272513241519 -50.914059300736469 1.0383466998475084 17.52852241230876 -17.561023908054811 -51.664056122094763 1.0383466998475321 9.689028674121662 -23.921685811581789 -52.414040913327767 1.0383466998474844 -0.64927078702308094 -26.189221418999342 -53.164080670807252 1.0383466998475408 -10.861635140673116 -23.412620187113028 -53.914039056891937 1.0383466998474993 -18.376796143313438 -16.671170835534788 -54.664070737636173 1.038346699847519 -22.006724518298316 -8.0189787308814147 -55.414053956464564 1.0383466998475133 -21.794581434271631 0.54007531393598873 -56.164046697575053 1.0383466998475139 +-18.00927099337742 0.049761842600382487 -47.534352196490246 0.85353433019613967 -17.989724497659612 7.1219863412600732 -48.284352116710537 0.85353433019614056 -14.795460040882173 14.18552412612174 -49.034352750641958 0.85353433019613723 -8.4367987932382604 19.577638792722698 -49.784350527270604 0.853534330196145 0.059849162675867262 21.643634593420447 -50.534354427281755 0.85353433019613245 8.5448021783264778 19.53073851502203 -51.284350461511963 0.85353433019614688 14.873635924143063 14.103531300797794 -52.034352877304293 0.85353433019613489 18.028810721421046 7.0224626304215825 -52.784352021792508 0.85353433019614156 18.00927099337741 -0.049761842600363336 -53.534352196490246 0.85353433019613967 17.989724171291108 -7.121986341941656 -54.284352123134724 0.85353433019613456 14.795461322378145 -14.185524123445262 -55.034352725417172 0.85353433019615799 8.4367958420081237 -19.577638798886827 -55.784350585362269 0.85353433019610858 -0.059844313416238748 -21.643634583291838 -56.534354331829398 0.85353433019617031 -8.5448082399010623 -19.53073852768264 -57.284350580827486 0.85353433019612057 -14.873630021682541 -14.103531288469865 -58.034352761120786 0.85353433019614688 -18.02881520665742 -7.0224626397892687 -58.784352110079453 0.85353433019613867 -18.009268382429081 0.049761848053397582 -59.534352145096641 0.85353433019613967 +-14.198805323507537 0.27419632710470521 -44.164197668018659 1.0383466998475139 -14.091099017940342 5.8497119003333529 -44.914207864451043 1.0383466998475122 -11.480287021496423 11.379123528230449 -45.664208336499883 1.038346699847519 -6.397027748174418 15.543085627602277 -46.414222348729261 1.0383466998475051 0.33003101819054859 17.06783928539485 -47.164180971136645 1.0383466998475235 6.9917755482538917 15.28471146825445 -47.914249314284547 1.0383466998475073 11.911176835533027 10.927295696901805 -48.664156396272475 1.0383466998475175 14.306455191104284 5.3013249806907652 -49.414246787329155 1.038346699847513 14.198805323507543 -0.27419632710468161 -50.164197668018637 1.0383466998475139 14.091096339446771 -5.8497116208187512 -50.9142052300896 1.0383466998475084 11.48029753868332 -11.379124625753041 -51.664218680400872 1.0383466998475321 6.397003527547505 -15.543083100055608 -52.414198527171884 1.0383466998474844 -0.32999122051457963 -17.067843438485657 -53.164220113089456 1.0383466998475408 -6.9918252953485256 -15.284706276891599 -53.914200386843511 1.0383466998474993 -11.91112839428023 -10.927300751993293 -54.664204039387307 1.038346699847519 -14.306492001257091 -5.3013211393637389 -55.414210583675569 1.0383466998475133 -14.198783895560062 0.27419409098916941 -56.164218742910514 1.0383466998475139 +-14.660415498939553 0.72417750186918883 -40.078029864845256 1.036729623209609 -14.375956361785244 6.4810035714488556 -40.82803829682701 1.0367296232096108 -11.50708955256402 12.112206482169308 -41.578044797582187 1.0367296232096026 -6.1262884789806016 16.256693069975498 -42.328036129011814 1.0367296232096219 0.87120405892228892 17.622148444734997 -43.078036183142963 1.0367296232095928 7.6977142013864972 15.574208655154777 -43.828059820009514 1.0367296232096221 12.644887573635295 10.918945782885483 -44.577999164707308 1.0367296232096015 14.944758877759661 5.0326534942277341 -45.328072493112181 1.0367296232096117 14.660415498939567 -0.72417750186916707 -46.078029864845242 1.036729623209609 14.375950818352223 -6.4810033258771478 -46.828035982368746 1.0367296232096064 11.507111319023338 -12.112207446414146 -47.578053885373492 1.0367296232096179 6.1262383517653651 -16.256690849361721 -48.328015200220882 1.0367296232095975 -0.87112169331398714 -17.622152093494702 -49.078070571899765 1.0367296232096139 -7.6978171583960489 -15.574204094205488 -49.828016834063689 1.0367296232096126 -12.644787319207296 -10.9189502241121 -50.57804102228878 1.0367296232096035 -14.944835060364234 -5.0326501193717155 -51.328040685842971 1.0367296232096119 -14.66037115147766 0.72417553729592543 -52.078048380511284 1.036729623209609 0 6 6.2831853071795862 6 -0 10 -3.1415926535897931 9 -6.2831853071795862 10 +0 9 +3.1415926535897931 8 +6.2831853071795862 9 -9 1 1 1 0 6 9 6 19 2 3 -18.444757966731007 -0.8393700417924399 -67.90966601067079 1.6690784610682365 -18.435010561885594 5.5973213507091391 -68.593170764436493 1.6690784610682248 -15.896840776778301 11.912667179762195 -69.263821421638909 1.6690784610682914 -10.941321180007915 16.970493681166445 -69.921233298323813 1.6690784610681222 -4.2588412986322304 19.726128697165983 -70.566680716001542 1.6690784610683778 2.9026406601250123 19.572901957298019 -71.19740870837731 1.669078461068116 9.1880324628532009 16.703757638445044 -71.817398197187458 1.6690784610683136 13.602487568394078 11.934382532423003 -72.423161056628032 1.6690784610682001 15.755447422359968 6.3116442174880021 -73.017004642541977 1.6690784610682476 15.746135789731259 0.80633949128572402 -73.59836040622271 1.6690784610682365 15.736773763792979 -4.698981511817184 -74.179702949292235 1.6690784610682219 13.564785931510361 -10.088874319407127 -74.748913969793279 1.6690784610682809 9.337018285879104 -14.389695487160269 -75.304244479320857 1.6690784610681595 3.650877481362798 -16.72482624509049 -75.852099372761685 1.6690784610683351 -2.4263755482558942 -16.586488060821875 -76.380825167265471 1.6690784610681413 -7.7540019681316643 -14.148882078280831 -76.90569932262207 1.6690784610683038 -11.493264298818001 -10.108500932774497 -77.414406329958041 1.6690784610682032 -13.317462848385645 -5.3439471934803873 -77.914283635598252 1.6690784610682463 -13.309622564979787 -0.67955195450329464 -78.403416023855868 1.6690784610682365 --15.129122256127157 -0.74446992696342473 -68.110801215660985 1.0367296232096095 -15.079007755807055 4.5479029222311365 -68.668785317140021 1.0367296232096073 -12.949940129101357 9.7016865255826481 -69.213878302783087 1.0367296232096246 -8.8624555228394328 13.780286755178015 -69.743969586556673 1.0367296232095771 -3.407800573276563 15.955618994887342 -70.266801536388527 1.0367296232096401 2.3807825361829176 15.761503323439573 -70.768369842069603 1.0367296232095977 7.4196267789038659 13.390952011791249 -71.266959657748501 1.036729623209605 10.925649570514164 9.5239897993230684 -71.747887053163439 1.0367296232096164 12.607748303140415 4.9982087491428331 -72.219857345963078 1.0367296232096075 12.559448543384018 0.59272036390122818 -72.68059527815565 1.0367296232096095 12.511104557931485 -3.8127847391502407 -73.141298677020103 1.0367296232096055 10.732150624908673 -8.1027136942421478 -73.591636364570846 1.036729623209615 7.3237210321969224 -11.49544767758119 -74.028286583020503 1.0367296232096119 2.7730884075886904 -13.310220510892353 -74.463571268356802 1.0367296232095931 -2.0639697698160302 -13.152042594414372 -74.875621858839537 1.0367296232096359 -6.2919013333203742 -11.168685724334528 -75.292637301970828 1.0367296232095855 -9.2457403290197586 -7.9199763138052202 -75.692241233482633 1.0367296232096228 -10.668057516927323 -4.0956735821875014 -76.087476207966205 1.0367296232096057 -10.62247365759298 -0.35868868795490405 -76.474898696575025 1.0367296232096095 --14.417980187777896 -0.29773688575523716 -64.060240652490435 1.0383466998475139 -14.367028334320718 4.7491969997067081 -64.591302500627791 1.0383466998474999 -12.333614737745123 9.7176596022113362 -65.116097962014351 1.0383466998475714 -8.3843204467252725 13.714625621060684 -65.632464108847515 1.0383466998473936 -3.0329090892679829 15.912346308205901 -66.148425776408502 1.0383466998476718 2.7532433932079767 15.791323711735952 -66.649765212793781 1.038346699847368 7.8909407261677229 13.445059919542128 -67.154792521902976 1.0383466998476121 11.531983351627197 9.4997890694504097 -67.64899627232559 1.0383466998474677 13.308145162263738 4.7926973474837755 -68.140821230019625 1.0383466998475264 13.258983633069928 0.14577540319061066 -68.628037420729171 1.0383466998475139 13.209804767018685 -4.5011549273927436 -69.115222800686738 1.0383466998475062 11.335294620256057 -9.0920587927805734 -69.598556434557707 1.0383466998475326 7.6826075831516443 -12.803955816296092 -70.075390176314755 1.0383466998474922 2.7078966555595096 -14.866721578317783 -70.555602036674998 1.0383466998475241 -2.7052540997927288 -14.777015552335964 -71.02185011360514 1.0383466998475215 -7.5473881100734301 -12.588917075831542 -71.49633067855585 1.0383466998475004 -11.002381805616707 -8.869796080624015 -71.961557905693439 1.0383466998475213 -12.698358493957539 -4.3987651797930942 -72.42761862460857 1.0383466998475122 -12.651334771300277 0.038441382712321115 -72.891835116947391 1.0383466998475139 --18.015798961864157 -0.049041156271836694 -60.465548522719359 0.85353433019613967 -18.015100092136365 6.239597265689472 -61.132813340720901 0.85353433019612557 -15.544290426878817 12.521110714904337 -61.799322494236137 0.85353433019619729 -10.61350632624216 17.686537753787103 -62.465047987889115 0.85353433019601743 -3.7977234710623371 20.635071305120579 -63.130084902439798 0.85353433019630476 3.719034470713801 20.625937257305704 -63.794236210878601 0.85353433019598357 10.511418538852748 17.670476859404619 -64.457780530441767 0.85353433019624458 15.410273468624556 12.521765035886153 -65.120477906869681 0.85353433019609182 17.85824827528031 6.2807607187109049 -65.782483922854894 0.8535343301961521 17.85757932154754 0.046729304759574042 -66.443759835537733 0.85353433019613967 17.856907424994176 -6.1873030673045353 -67.105034904641485 0.853534330196136 15.407571387222102 -12.414611614242769 -67.765602405405048 0.85353433019614511 10.519411794576939 -17.535764675111956 -68.425354627918651 0.853534330196143 3.7619046139099819 -20.459768473041716 -69.084686503231396 0.85353433019612113 -3.6915375803397668 -20.451575222097425 -69.742881186250003 0.8535343301961672 -10.428083420716444 -17.521341816508418 -70.400876978127613 0.8535343301961168 -15.287635032936368 -12.415133952788485 -71.057918601755745 0.85353433019615088 -17.71650081655353 -6.2240838791646098 -71.714455141342384 0.85353433019613645 -17.715922229514717 -0.038942322315054234 -72.370369255013784 0.85353433019613967 --22.001389326760808 -0.51478919816195745 -63.600211057919552 1.0383466998475139 -22.042763720049589 7.1493911089944682 -64.418359469468442 1.0383466998474999 -19.073665591883859 14.774539296625203 -65.230326163486637 1.0383466998475714 -13.139031216931347 21.011158313238415 -66.037895636662725 1.0383466998473936 -4.9793804683974239 24.536127757856232 -66.834299228666367 1.0383466998476718 3.9468195311709771 24.508624933897543 -67.631048304099025 1.038346699847368 11.935578013130126 21.021996186849208 -68.413736813363087 1.0383466998476121 17.654356105599156 15.012757283136931 -69.193459987930581 1.0383466998474677 20.507455445693914 7.796742243688664 -69.964029393286495 1.0383466998475264 20.547466233780231 0.63435780013133769 -70.727118582560408 1.0383466998475139 20.587445578653579 -6.5280340212832435 -71.490225706803002 1.0383466998475062 17.814001675675822 -13.634737769302248 -72.245442381562739 1.0383466998475326 12.287352532734523 -19.423580891344855 -72.993717645407159 1.0383466998474922 4.715545946725813 -22.676491586504891 -73.731396254057373 1.0383466998475241 -3.5341362605953486 -22.632162320718901 -74.46449988620688 1.0383466998475215 -10.891454914723845 -19.405120736024852 -75.185671226443802 1.0383466998475004 -16.142842127641856 -13.875315095665631 -75.900435294931285 1.0383466998475213 -18.757988187049673 -7.2537740945408427 -76.605830391830779 1.0383466998475122 -18.797290286531982 -0.69542615892537407 -77.302674304623082 1.0383466998475139 --21.760393677334875 -0.9342701566214493 -67.708530805680596 1.036729623209609 -21.791013367964101 6.6467397791869143 -68.51755621173298 1.0367296232096048 -18.843741424455487 14.123647833942744 -69.313764540494589 1.0367296232096304 -13.020186837175853 20.160700607152538 -70.098497010091634 1.0367296232095649 -5.1098820239884919 23.496638399448205 -70.866559895613207 1.0367296232096572 3.4244987840673078 23.384300591152645 -71.626447574686466 1.0367296232095797 10.956438146802888 20.01656326510156 -72.367836736625563 1.0367296232096159 16.279325566273506 14.344775265521729 -73.098435060092854 1.036729623209611 18.903146541579744 7.6250796858334517 -73.81415193912089 1.0367296232096082 18.932823036078492 1.0199586186702168 -74.516125534289756 1.036729623209609 18.962442969654315 -5.5851782844841615 -75.218107221564267 1.0367296232096044 16.397421238112464 -12.075034944572165 -75.906191575016209 1.0367296232096184 11.350315539560725 -17.28394329673883 -76.580202375620019 1.036729623209603 4.5286665551370646 -20.139431979289842 -77.240627477168587 1.0367296232096022 -2.7887813266950867 -20.020933527227882 -77.886028475689102 1.0367296232096306 -9.2161026029440887 -17.129078432228077 -78.518761343275088 1.0367296232095844 -13.740788268615425 -12.297025551743525 -79.136571426432567 1.0367296232096244 -15.966868179844191 -6.5922208047732598 -79.741091063230499 1.0367296232096046 -15.996771472366575 -1.0004152210516883 -80.331933351136712 1.036729623209609 +9 1 1 1 0 6 8 6 17 2 3 -17.981423346908436 0.84042474150276025 -52.077973158451172 1.6690784610682365 -17.651303686899773 7.9017028993646141 -52.82797229465114 1.6690784610682363 -14.151471829958467 14.815036888729058 -53.577982863722262 1.669078461068235 -7.5656144897509101 19.919954682329529 -54.327946507470031 1.669078461068239 1.010800325143709 21.610168746354738 -55.078009516098987 1.6690784610682357 9.3896603155335026 19.127861212081889 -55.827946639409433 1.6690784610682354 15.471785364013735 13.430263524100026 -56.577982609584666 1.6690784610682377 18.311427837725113 6.2208532505265648 -57.327972485096325 1.6690784610682368 17.981423346908457 -0.84042474150274704 -58.077973158451172 1.6690784610682365 17.651298134873038 -7.9017028979968487 -58.827972281761525 1.669078461068231 14.151493630161406 -14.81503689409948 -59.577982914333752 1.6690784610682536 7.5655642848254931 -19.91995466996228 -60.327946390913958 1.6690784610682063 -1.0107178318473107 -21.610168766674757 -61.078009707615863 1.6690784610682667 -9.3897634321531775 -19.127861186682274 -61.827946400013367 1.6690784610682168 -15.471684954165285 -13.430263548833294 -62.577982842696734 1.6690784610682459 -18.311504138432603 -6.2208532317314829 -63.327972307956102 1.6690784610682345 -17.981378930696401 0.84042473056162958 -64.077973261568189 1.6690784610682365 +-21.302475542339206 0.95667394570958242 -52.077897936391061 1.0367296232096095 -20.926694587789818 9.3224216109850602 -52.827887776684825 1.0367296232096126 -16.795889094897209 17.517903727621015 -53.577902414130676 1.0367296232095986 -9.004959275382177 23.583265406394705 -54.327838369810578 1.0367296232096301 1.1503989542229949 25.598242302402969 -55.07796433380679 1.0367296232095846 11.081629468451863 22.681561029082236 -55.827814942376982 1.0367296232096292 18.298721228316154 15.941614460631362 -56.577947539336414 1.036729623209599 21.678141916579655 7.4090684613155053 -57.327853960835888 1.0367296232096128 21.302475542339245 -0.95667394570957187 -58.077897936391082 1.0367296232096095 20.926689027156364 -9.3224218538243466 -58.827890065394492 1.036729623209607 16.795910928894806 -17.517902774104719 -59.577893427442042 1.0367296232096181 9.0049089926288683 -23.583267602302751 -60.327859065766646 1.0367296232095955 -1.1503163330449473 -25.598238694235558 -61.07793032762784 1.0367296232096217 -11.081732744923523 -22.681565539292382 -61.827857450100893 1.0367296232096028 -18.298620662812006 -15.941610068812587 -62.577906147423562 1.0367296232096113 -21.678218335568602 -7.4090717986260932 -63.327885414246921 1.0367296232096099 -21.302431057273182 0.9566758884266735 -64.077879626713212 1.0367296232096095 +-21.794581434271635 0.54007531393601049 -56.164046697575053 1.0383466998475139 -21.582441048408242 9.0991207260936875 -56.914035632788568 1.0383466998475122 -17.528492284042891 17.561009897738192 -57.664045409841563 1.038346699847519 -9.6890404740065925 23.921660886791315 -58.413996095105738 1.0383466998475051 0.64931356149267039 26.189199644293829 -59.164098706370865 1.0383466998475235 10.861577274815749 23.41259049930601 -59.913969176617115 1.0383466998475073 18.376828912973615 16.67115709783922 -60.664097259410724 1.0383466998475175 22.006666729339642 8.018964185616916 -61.413996777847743 1.038346699847513 21.794581434271649 -0.54007531393599639 -62.164046697575074 1.0383466998475139 21.582438350244459 -9.0991210051200557 -62.914038262551948 1.0383466998475084 17.528502878465709 -17.561008802132331 -63.664035083995103 1.0383466998475321 9.6890160755083077 -23.921663409924886 -64.414019875084392 1.0383466998474844 -0.64927347155042803 -26.189195498452705 -65.164059632737221 1.0383466998475408 -10.861627387243024 -23.412595681607819 -65.914018018659135 1.0383466998474993 -18.376780115978292 -16.671152051570832 -66.664049699453372 1.038346699847519 -22.006703809818468 -8.0189680202391465 -67.41403291831044 1.0383466998475133 -21.794559848961839 0.54007754614846382 -68.16402565946801 1.0383466998475139 +-18.009268382429084 0.049761848053409469 -59.534352145096641 0.85353433019613967 -17.989721884569278 7.1219853211639137 -60.284352065324128 0.85353433019614056 -14.795457885862643 14.185522080954886 -61.03435269925356 0.85353433019613723 -8.4367975564309923 19.577635958353035 -61.784350475899807 0.853534330196145 0.059849169232926158 21.643631458071592 -62.53435437586873 0.85353433019613245 8.5448009533535636 19.530735675515619 -63.284350410159654 0.85353433019614688 14.87363377768864 14.10352924664441 -64.034352825880234 0.85353433019613489 18.028808112613369 7.0224615994233757 -64.784351970432837 0.85353433019614156 18.009268382429084 -0.049761848053393606 -65.534352145096634 0.85353433019613967 17.989721558200792 -7.1219853218452087 -66.284352071746511 0.85353433019613456 14.795459167358521 -14.18552207827951 -67.034352674035901 0.85353433019615799 8.4367946052010634 -19.577635964514752 -67.784350533975072 0.85353433019610858 -0.059844319973462845 -21.643631447946753 -68.534354280443239 0.85353433019617031 -8.544807014928212 -19.530735688171774 -69.284350529441596 0.85353433019612057 -14.873627875227788 -14.10352923432046 -70.034352709729433 0.85353433019614688 -18.02881259785018 -7.0224616087882685 -70.784352058694921 0.85353433019613867 -18.009265771480464 0.04976185350488864 -71.534352093717501 0.85353433019613967 +-14.198783895560071 0.27419409098918945 -56.164218742910514 1.0383466998475139 -14.091078468341244 5.8497012475997598 -56.914228939404481 1.0383466998475122 -11.480271126910047 11.379104864577872 -57.664229411408435 1.038346699847519 -6.3970200730330617 15.543061291255638 -58.414243423880791 1.0383466998475051 0.33002832875057919 17.067813553792195 -59.164202045770267 1.0383466998475235 6.9917630198642851 15.284689239449543 -59.914270389588125 1.0383466998475073 11.911157427983211 10.927280717699459 -60.664177470888212 1.0383466998475175 14.306432885109766 5.3013188002213978 -61.414267862502022 1.038346699847513 14.198783895560082 -0.27419409098916175 -62.164218742910492 1.0383466998475139 14.091075789862456 -5.8497009680836713 -62.914226305028194 1.0383466998475084 11.480281644038969 -11.379105962106365 -63.664239755367646 1.0383466998475321 6.3969958525396446 -15.543058763695276 -64.414219602189334 1.0383466998474844 -0.32998853129395034 -17.067817706905679 -65.164241187943475 1.0383466998475408 -6.9918127666847409 -15.284684048058105 -65.914221461871421 1.0383466998474993 -11.911108986997412 -10.927285772819049 -66.664225114271545 1.038346699847519 -14.306469695059665 -5.3013149588728448 -67.414231658644368 1.0383466998475133 -14.198762467730774 0.27419185486104541 -68.164239817921157 1.0383466998475139 +-14.660371151477655 0.72417553729594031 -52.078048380511277 1.036729623209609 -14.375912786009616 6.4809841877441592 -52.828056812617618 1.0367296232096108 -11.507054565020022 12.112170049837111 -53.578063313313301 1.0367296232096026 -6.1262697041193634 16.256643958264178 -54.328054645130493 1.0367296232096219 0.87120169606449949 17.622095190306894 -55.078054698389955 1.0367296232095928 7.6976911626147277 15.574161395081186 -55.828078336442886 1.0367296232096221 12.644849499711723 10.918912587568828 -56.578017679832371 1.0367296232096015 14.944713758870398 5.0326380397376083 -57.32809100935691 1.0367296232096117 14.660371151477696 -0.72417553729591788 -58.078048380511262 1.036729623209609 14.375907242589617 -6.4809839421691837 -58.828054498128594 1.0367296232096064 11.507076331428303 -12.112171014094784 -59.57807240122532 1.0367296232096179 6.126219577021585 -16.256641737620861 -60.328033716061526 1.0367296232095975 -0.87111933064907721 -17.622098839115125 -61.078089087603601 1.0367296232096139 -7.6977941193832677 -15.57415683407126 -61.828035349926004 1.0367296232096126 -12.644749245518378 -10.918917028854443 -62.578059537969828 1.0367296232096035 -14.944789941296655 -5.0326346648367766 -63.328059201665283 1.0367296232096119 -14.660326804119629 0.72417357269658322 -64.078066896423167 1.036729623209609 0 6 6.2831853071795862 6 -0 10 -3.1415926535897931 9 -6.2831853071795862 10 +0 9 +3.1415926535897931 8 +6.2831853071795862 9 +1 -17.989015598496628 0.62956508343253303 5.9335061499341517 -0.034784647283530576 -0.99380957274300352 0.10551095411249596 1.1358075826780451e-19 -0.10557484473127868 -0.99441135962938731 0.99939483104194626 -0.034590248399444308 0.0036723837359910346 +1 -17.988815994796553 0.62956504430958793 -66.066494218788407 -0.034784645119012039 -0.99380944996750142 0.10551211124433463 -3.125479721775522e-20 -0.10557600255584298 -0.99441123670457832 0.99939483111728389 -0.034590241971126631 0.0036724237819889052 Triangulations 0 -TShapes 33 +TShapes 38 Ve -3.83731338058618e-05 --15.334360184943 0.791975906961068 7.46540733353283 +4.8625352787909e-05 +-17.9816454279773 0.840424795816383 7.92202735344008 0 0 0101101 * Ve -3.83731338066297e-05 --20.6882262184494 0.791125685735164 -4.54260581273852 +4.86253527915444e-05 +-17.9816010117624 0.840424785005909 -4.07797274844566 0 0 0101101 @@ -176,7 +178,7 @@ Ed 0 0101000 -+33 0 -32 0 * ++38 0 -37 0 * Ed 1e-07 1 1 0 1 2 0 0 6.28318530717959 @@ -184,7 +186,7 @@ Ed 0 0101000 -+33 0 -33 0 * ++38 0 -38 0 * Ed 1e-07 1 1 0 1 3 0 0 6.28318530717959 @@ -194,19 +196,19 @@ Ed 0 0101100 -+32 0 -32 0 * ++37 0 -37 0 * Wi 0101100 -+31 0 +30 0 -31 0 -29 0 * ++36 0 +35 0 -36 0 -34 0 * Fa 0 1e-07 1 0 0101000 -+28 0 * ++33 0 * Ve -4.48160960002918e-05 --24.827958977816 0.432907402698813 -19.9187335918442 +4.86255790186068e-05 +-17.9815565955481 0.840424774169314 -16.0779728505777 0 0 0101101 @@ -218,7 +220,7 @@ Ed 0 0101000 -+32 0 -26 0 * ++37 0 -31 0 * Ed 1e-07 1 1 0 1 5 0 0 6.28318530717959 @@ -228,19 +230,19 @@ Ed 0 0101100 -+26 0 -26 0 * ++31 0 -31 0 * Wi 0101100 -+25 0 +29 0 -25 0 -24 0 * ++30 0 +34 0 -30 0 -29 0 * Fa 0 1e-07 2 0 0101000 -+23 0 * ++28 0 * Ve -4.5981087239931e-05 --25.8838544720991 -0.120890200614708 -37.1381530382808 +4.8625805246486e-05 +-17.9815121793343 0.84042476330659 -28.0779729529559 0 0 0101101 @@ -252,7 +254,7 @@ Ed 0 0101000 -+26 0 -21 0 * ++31 0 -26 0 * Ed 1e-07 1 1 0 1 7 0 0 6.28318530717959 @@ -262,19 +264,19 @@ Ed 0 0101100 -+21 0 -21 0 * ++26 0 -26 0 * Wi 0101100 -+20 0 +24 0 -20 0 -19 0 * ++25 0 +29 0 -25 0 -24 0 * Fa 0 1e-07 3 0 0101000 -+18 0 * ++23 0 * Ve -4.45102645845952e-05 --23.379019110713 -0.620145280773002 -53.8435213145594 +4.86260314721378e-05 +-17.9814677631211 0.840424752417738 -40.0779730555804 0 0 0101101 @@ -286,7 +288,7 @@ Ed 0 0101000 -+21 0 -16 0 * ++26 0 -21 0 * Ed 1e-07 1 1 0 1 9 0 0 6.28318530717959 @@ -296,19 +298,19 @@ Ed 0 0101100 -+16 0 -16 0 * ++21 0 -21 0 * Wi 0101100 -+15 0 +19 0 -15 0 -14 0 * ++20 0 +24 0 -20 0 -19 0 * Fa 0 1e-07 4 0 0101000 -+13 0 * ++18 0 * Ve -4.40143445631001e-05 --18.444757966731 -0.83937004179244 -67.9096660106708 +4.8626257694568e-05 +-17.9814233469084 0.840424741502758 -52.0779731584512 0 0 0101101 @@ -320,7 +322,7 @@ Ed 0 0101000 -+16 0 -11 0 * ++21 0 -16 0 * Ed 1e-07 1 1 0 1 11 0 0 6.28318530717959 @@ -330,19 +332,19 @@ Ed 0 0101100 -+11 0 -11 0 * ++16 0 -16 0 * Wi 0101100 -+10 0 +14 0 -10 0 -9 0 * ++15 0 +19 0 -15 0 -14 0 * Fa 0 1e-07 5 0 0101000 -+8 0 * ++13 0 * Ve -4.38788977961802e-05 --13.3096225649798 -0.679551954503295 -78.4034160238559 +4.86264839104557e-05 +-17.9813789306964 0.84042473056163 -64.0779732615682 0 0 0101101 @@ -354,7 +356,7 @@ Ed 0 0101000 -+11 0 -6 0 * ++16 0 -11 0 * Ed 1e-07 1 1 0 1 13 0 0 6.28318530717959 @@ -362,19 +364,41 @@ Ed 0 0101000 -+6 0 -6 0 * ++11 0 -11 0 * Wi 0101100 -+5 0 +9 0 -5 0 -4 0 * ++10 0 +14 0 -10 0 -9 0 * Fa 0 1e-07 6 0 0101000 -+3 0 * ++8 0 * +Wi + +0101100 ++35 0 * +Fa +0 1e-07 7 0 + +0101000 ++6 0 * +Wi + +0101100 ++9 0 * +Fa +0 1e-07 8 0 + +0101000 ++4 0 * Sh -1101000 -+27 0 +22 0 +17 0 +12 0 +7 0 +2 0 * +0101100 ++32 0 +27 0 +22 0 +17 0 +12 0 +7 0 -5 0 +3 0 * +So + +1100100 +-2 0 * --1 0 \ No newline at end of file ++1 0 \ No newline at end of file diff --git a/recipes/02-helical-spring/output.png b/recipes/02-helical-spring/output.png index d436092..56df5d0 100644 Binary files a/recipes/02-helical-spring/output.png and b/recipes/02-helical-spring/output.png differ diff --git a/recipes/03-pipe-flange/README.md b/recipes/03-pipe-flange/README.md index 63ac6c0..1b3c714 100644 --- a/recipes/03-pipe-flange/README.md +++ b/recipes/03-pipe-flange/README.md @@ -23,22 +23,31 @@ patterning a single bolt hole around the axis. Shows revolve + circular pattern The flange is a surface of revolution. Its half-section is drawn in the XY plane as a closed polygon of `(radius, axial)` pairs, bore wall, back face, OD, disk front, the raised-face step, and back to the bore, with every radius `≥ boreRadius` so the profile -never crosses the axis. It is revolved a full turn about the **Y axis** (the bore axis). -The bolt circle is cut with `Shape.circularPatternCut`: a single cylindrical hole tool is -built at the bolt-circle radius (oriented along Y), then patterned `boltCount` times around -the axis and subtracted as one compound. Finally a small all-edge chamfer breaks the sharp +never crosses the axis. The section is faced with `Shape.face(from:)`, and the **face** +(not the wire) is revolved a full turn about the **Y axis** (the bore axis), which is +what closes the result into a solid rather than a shell (see Gotchas). The bolt circle +is cut with `Shape.circularPatternCut`: a single cylindrical hole tool is built at the +bolt-circle radius (oriented along Y), then patterned `boltCount` times around the axis +and subtracted as one compound. Finally a small all-edge chamfer breaks the sharp corners; it falls back to the un-chamfered body if the blend fails. ## OCCTSwift APIs used - `Wire.polygon(_:closed:)`: the `(radius, axial)` half-section -- `Shape.revolve(profile:axisOrigin:axisDirection:angle:)`: surface of revolution +- `Shape.face(from:)`: face the half-section before revolving +- `Shape.revolved(axisOrigin:axisDirection:)`: surface of revolution (on the faced section) - `Shape.cylinder(at:direction:radius:height:)`: the bolt-hole tool - `Shape.circularPatternCut(tool:axisPoint:axisDirection:count:angle:)`: the bolt circle (OCCTSwift v1.3.1) - `Shape.chamfered(distance:)`: edge break (optional) ## Gotchas +- **Face the wire before revolving it.** `Shape.revolve(profile: wire, ...)` revolves + the curve itself and returns a **shell**, not a solid, this is standard + `BRepPrimAPI_MakeRevol` behaviour on a wire, not an OCCTSwift bug (OCCTSwiftScripts + #100). `Shape.face(from: wire)` followed by `face.revolved(...)` gives a solid with + the same volume. `Shape.extrude(profile: wire, ...)` faces the wire for you and so does + not have this trap, `Shape.revolve(profile: wire, ...)` does; the two aren't symmetric. - The revolve axis is **Y**, so the half-section uses `x` for radius and `y` for axial position. Revolving an XY profile about Z would sweep a flat disk, not a solid. - Keep every profile radius `≥ boreRadius`: a profile that touches or crosses the axis diff --git a/recipes/03-pipe-flange/main.swift b/recipes/03-pipe-flange/main.swift index f759b58..fd1a45c 100644 --- a/recipes/03-pipe-flange/main.swift +++ b/recipes/03-pipe-flange/main.swift @@ -4,10 +4,14 @@ // Outputs: one solid body: a raised-face pipe flange with a bolt circle. // Notes: The flange is a surface of revolution. The half-section is drawn in the XY // plane as (radius, axial) pairs with radius ≥ bore (so it never crosses the -// axis) and revolved a full turn about the Y axis. The bolt circle is cut with -// Shape.circularPatternCut (OCCTSwift v1.3.1, #169), which patterns a single hole -// tool around the axis and subtracts the whole compound in one call. A small -// all-edge chamfer breaks sharp corners; it degrades gracefully if it fails. +// axis), faced, and the face revolved a full turn about the Y axis. +// Shape.revolve(profile: wire, ...) revolves the curve itself and returns a +// shell (BRepPrimAPI_MakeRevol on a wire), not a solid; facing the wire first +// with Shape.face(from:) and revolving the face closes the ends into a solid +// (OCCTSwiftScripts #100). The bolt circle is cut with Shape.circularPatternCut +// (OCCTSwift v1.3.1, #169), which patterns a single hole tool around the axis +// and subtracts the whole compound in one call. A small all-edge chamfer breaks +// sharp corners; it degrades gracefully if it fails. // // Run: swift run occtkit run recipes/03-pipe-flange/main.swift --format brep @@ -41,9 +45,11 @@ let section = Wire.polygon([ SIMD2(boreRadius, thickness + raisedHeight), // raised face → bore ])! -// ── Revolve a full turn about the Y axis (the bore axis) ────────────────────── -var flange = Shape.revolve(profile: section, axisOrigin: .zero, - axisDirection: SIMD3(0, 1, 0), angle: 2 * .pi)! +// ── Face the half-section, then revolve the face a full turn about the Y axis +// (the bore axis). Revolving the wire directly would only sweep out the curve +// and return a shell; revolving the face closes the ends into a solid. +let sectionFace = Shape.face(from: section)! +var flange = sectionFace.revolved(axisOrigin: .zero, axisDirection: SIMD3(0, 1, 0))! // ── Bolt circle: one axial hole tool, patterned + subtracted around the Y axis ─ let depth = thickness + raisedHeight + 2 diff --git a/recipes/03-pipe-flange/output.brep b/recipes/03-pipe-flange/output.brep index efcfb1c..574cf54 100644 --- a/recipes/03-pipe-flange/output.brep +++ b/recipes/03-pipe-flange/output.brep @@ -2,7 +2,7 @@ DBRep_DrawableShape CASCADE Topology V3, (c) Open Cascade Locations 0 -Curve2ds 50 +Curve2ds 52 2 0 0 -1 0 0 1 75 1 0 0 1 0 2 -42.426406871192839 -42.42640687119286 0.70710678118654768 -0.70710678118654735 -0.70710678118654735 -0.70710678118654768 7 @@ -27,33 +27,35 @@ Curve2ds 50 2 0 0 1 0 -0 1 75 1 6.2831853071795862 0 0 1 1 0 0 0 1 +2 42.426406871192839 -42.42640687119286 -0.70710678118654768 -0.70710678118654735 0.70710678118654735 -0.70710678118654768 7 +1 1.0146536357569551e-17 16 1 0 +1 6.2831853071795862 -0 0 1 +1 0 -0 0 1 +2 -1.3322676295501878e-14 -60 -1 2.2204460492503131e-16 -2.2204460492503131e-16 -1 7 +1 0 16 1 0 +2 -42.42640687119286 -42.426406871192846 -0.70710678118654746 0.70710678118654768 -0.70710678118654768 -0.70710678118654746 7 +1 0 16 1 0 +2 60 0 0 -1 1 0 7 +1 0 16 1 0 +2 42.426406871192853 42.426406871192846 0.70710678118654746 -0.70710678118654757 0.70710678118654757 0.70710678118654746 7 +1 -1.0146536357569526e-17 16 1 0 2 0 0 1 0 -0 1 25 1 0 0 1 0 1 6.2831853071795862 0 0 1 1 0 0 0 1 -2 -42.42640687119286 -42.426406871192846 -0.70710678118654746 0.70710678118654768 -0.70710678118654768 -0.70710678118654746 7 -1 0 16 1 0 -2 -1.3322676295501878e-14 -60 -1 2.2204460492503131e-16 -2.2204460492503131e-16 -1 7 -1 0 16 1 0 -2 42.426406871192839 -42.42640687119286 -0.70710678118654768 -0.70710678118654735 0.70710678118654735 -0.70710678118654768 7 -1 1.0146536357569551e-17 16 1 0 2 -60 7.3478807948841199e-15 1.2246467991473532e-16 1 -1 1.2246467991473532e-16 7 1 0 16 1 0 +2 6.6613381477509392e-15 60 1 -1.1102230246251565e-16 1.1102230246251565e-16 1 7 +1 0 16 1 0 2 -42.426406871192846 42.426406871192853 0.70710678118654757 0.70710678118654746 -0.70710678118654746 0.70710678118654757 7 1 1.0146536357569526e-17 16 1 0 2 0 0 1 0 -0 1 50 1 0 0 1 0 -2 60 0 0 -1 1 0 7 -1 0 16 1 0 -2 6.6613381477509392e-15 60 1 -1.1102230246251565e-16 1.1102230246251565e-16 1 7 -1 0 16 1 0 -2 42.426406871192853 42.426406871192846 0.70710678118654746 -0.70710678118654757 0.70710678118654757 0.70710678118654746 7 -1 -1.0146536357569526e-17 16 1 0 1 0 2 1 0 2 0 0 1 0 -0 1 50 1 6.2831853071795862 0 0 1 1 0 0 0 1 -Curves 25 +Curves 33 2 0 0 0 0 1 0 1 0 0 0 0 -1 75 2 42.426406871192839 0 42.42640687119286 0 1 0 -0.70710678118654768 0 0.70710678118654735 0.70710678118654735 -0 0.70710678118654768 7 2 -1.3322676295501878e-14 0 60 0 1 0 -1 0 -2.2204460492503131e-16 -2.2204460492503131e-16 0 1 7 @@ -66,17 +68,25 @@ Curves 25 2 -42.426406871192846 0 -42.426406871192853 0 1 0 0.70710678118654757 0 -0.70710678118654746 -0.70710678118654746 0 -0.70710678118654757 7 2 0 15 0 0 1 0 1 0 0 0 0 -1 75 1 75 0 0 0 1 0 +2 42.426406871192839 15 42.42640687119286 0 1 0 -0.70710678118654768 0 0.70710678118654735 0.70710678118654735 -0 0.70710678118654768 7 +1 37.476659402887002 -1 47.37615433949869 0 1 0 +2 -1.3322676295501878e-14 15 60 0 1 0 -1 0 -2.2204460492503131e-16 -2.2204460492503131e-16 0 1 7 +1 -7.0000000000000133 -1 60 0 1 0 +2 -42.42640687119286 15 42.426406871192846 0 1 0 -0.70710678118654746 0 -0.70710678118654768 -0.70710678118654768 0 0.70710678118654746 7 +1 -47.37615433949869 -1 37.476659402887009 0 1 0 +2 60 15 0 0 1 0 0 -0 1 1 0 -0 7 +1 60 -1 7 0 1 0 +2 42.426406871192853 15 -42.426406871192846 0 1 0 0.70710678118654746 -0 0.70710678118654757 0.70710678118654757 0 -0.70710678118654746 7 +1 47.376154339498683 -1 -37.476659402887016 0 1 0 2 0 17 0 0 1 0 1 0 0 0 0 -1 25 1 25 17 0 0 -1 0 -2 -42.42640687119286 15 42.426406871192846 0 1 0 -0.70710678118654746 0 -0.70710678118654768 -0.70710678118654768 0 0.70710678118654746 7 -2 -1.3322676295501878e-14 15 60 0 1 0 -1 0 -2.2204460492503131e-16 -2.2204460492503131e-16 0 1 7 -2 42.426406871192839 15 42.42640687119286 0 1 0 -0.70710678118654768 0 0.70710678118654735 0.70710678118654735 -0 0.70710678118654768 7 2 -60 15 -7.3478807948841199e-15 0 1 0 1.2246467991473532e-16 0 -1 -1 0 -1.2246467991473532e-16 7 +1 -60 -1 -7.0000000000000071 0 1 0 +2 6.6613381477509392e-15 15 -60 0 1 0 1 -0 1.1102230246251565e-16 1.1102230246251565e-16 0 -1 7 +1 7.0000000000000071 -1 -60 0 1 0 2 -42.426406871192846 15 -42.426406871192853 0 1 0 0.70710678118654757 0 -0.70710678118654746 -0.70710678118654746 0 -0.70710678118654757 7 +1 -37.476659402887016 -1 -47.376154339498683 0 1 0 2 0 15 0 0 1 0 1 0 0 0 0 -1 50 -2 60 15 0 0 1 0 0 -0 1 1 0 -0 7 -2 6.6613381477509392e-15 15 -60 0 1 0 1 -0 1.1102230246251565e-16 1.1102230246251565e-16 0 -1 7 -2 42.426406871192853 15 -42.426406871192846 0 1 0 0.70710678118654746 -0 0.70710678118654757 0.70710678118654757 0 -0.70710678118654746 7 2 0 17 0 0 1 0 1 0 0 0 0 -1 50 1 50 15 0 0 1 0 Polygon3D 0 @@ -98,7 +108,7 @@ Surfaces 14 2 0 15 0 0 1 0 1 0 0 0 0 -1 50 Triangulations 0 -TShapes 80 +TShapes 105 Ve 1e-07 75 0 0 @@ -114,11 +124,11 @@ Ed 0 0101000 -+80 0 -80 0 * ++105 0 -105 0 * Wi 0101100 --79 0 * +-104 0 * Ve 1.00000007105427e-07 37.476659402887 0 47.3761543394987 @@ -134,11 +144,11 @@ Ed 0 0101100 -+77 0 -77 0 * ++102 0 -102 0 * Wi 0101100 -+76 0 * ++101 0 * Ve 1e-07 -7.00000000000001 0 60 @@ -154,11 +164,11 @@ Ed 0 0101100 -+74 0 -74 0 * ++99 0 -99 0 * Wi 0101100 -+73 0 * ++98 0 * Ve 1e-07 -47.3761543394987 0 37.476659402887 @@ -174,11 +184,11 @@ Ed 0 0101100 -+71 0 -71 0 * ++96 0 -96 0 * Wi 0101100 -+70 0 * ++95 0 * Ve 1e-07 60 0 7 @@ -194,11 +204,11 @@ Ed 0 0101100 -+68 0 -68 0 * ++93 0 -93 0 * Wi 0101100 -+67 0 * ++92 0 * Ve 1.00000007105427e-07 47.3761543394987 0 -37.476659402887 @@ -214,11 +224,11 @@ Ed 0 0101100 -+65 0 -65 0 * ++90 0 -90 0 * Wi 0101100 -+64 0 * ++89 0 * Ve 1e-07 25 0 0 @@ -234,11 +244,11 @@ Ed 0 0101000 -+62 0 -62 0 * ++87 0 -87 0 * Wi 0101100 -+61 0 * ++86 0 * Ve 1e-07 -60 0 -7.00000000000001 @@ -254,11 +264,11 @@ Ed 0 0101100 -+59 0 -59 0 * ++84 0 -84 0 * Wi 0101100 -+58 0 * ++83 0 * Ve 1e-07 7.00000000000001 0 -60 @@ -274,11 +284,11 @@ Ed 0 0101100 -+56 0 -56 0 * ++81 0 -81 0 * Wi 0101100 -+55 0 * ++80 0 * Ve 1.00000007105427e-07 -37.476659402887 0 -47.3761543394987 @@ -294,16 +304,16 @@ Ed 0 0101100 -+53 0 -53 0 * ++78 0 -78 0 * Wi 0101100 -+52 0 * ++77 0 * Fa 0 1e-07 1 0 0101000 -+78 0 +75 0 +72 0 +69 0 +66 0 +63 0 +60 0 +57 0 +54 0 +51 0 ++103 0 +100 0 +97 0 +94 0 +91 0 +88 0 +85 0 +82 0 +79 0 +76 0 * Ve 1e-07 @@ -320,7 +330,7 @@ Ed 0 0101000 -+49 0 -49 0 * ++74 0 -74 0 * Ed 1e-07 1 1 0 1 12 0 0 15 @@ -328,56 +338,52 @@ Ed 0 0101000 -+80 0 -49 0 * ++105 0 -74 0 * Wi 0101100 -+79 0 -48 0 -47 0 +47 0 * ++104 0 -73 0 -72 0 +72 0 * Fa 0 1e-07 2 0 0101000 -+46 0 * ++71 0 * Ve -1e-07 -25 17 0 +1.00000007105427e-07 +37.476659402887 15 47.3761543394987 0 0 0101101 * Ed 1e-07 1 1 0 -1 13 0 0 6.28318530717959 -2 25 13 0 0 6.28318530717959 -2 26 8 0 0 6.28318530717959 +1 13 0 2.78178084688463e-16 6.28318530717959 +2 25 12 0 2.78178084688463e-16 6.28318530717959 +2 26 3 0 2.78178084688463e-16 6.28318530717959 0 -0101000 -+44 0 -44 0 * +0101100 ++69 0 -69 0 * Ed 1e-07 1 1 0 -1 14 0 0 17 -3 27 28CN 8 0 0 17 +1 14 0 1 16 +3 27 28CN 3 0 1 16 0 0101000 -+44 0 -62 0 * ++102 0 -69 0 * Wi 0101100 -+43 0 -61 0 -42 0 +42 0 * +-68 0 +67 0 +101 0 -67 0 * Fa -0 1e-07 8 0 +0 1e-07 3 0 0101000 -+41 0 * -Wi - -0101100 -+48 0 * ++66 0 * Ve 1e-07 --47.3761543394987 15 37.476659402887 +-7.00000000000001 15 60 0 0 0101101 @@ -386,135 +392,193 @@ Ed 1e-07 1 1 0 1 15 0 0 6.28318530717959 2 29 12 0 0 6.28318530717959 -2 30 5 0 0 6.28318530717959 +2 30 4 0 0 6.28318530717959 0 0101100 -+38 0 -38 0 * ++64 0 -64 0 * +Ed + 1e-07 1 1 0 +1 16 0 1 16 +3 27 28CN 4 0 1 16 +0 + +0101000 ++99 0 -64 0 * Wi 0101100 --37 0 * +-63 0 +62 0 +98 0 -62 0 * +Fa +0 1e-07 4 0 + +0101000 ++61 0 * Ve 1e-07 --7.00000000000001 15 60 +-47.3761543394987 15 37.476659402887 0 0 0101101 * Ed 1e-07 1 1 0 -1 16 0 0 6.28318530717959 +1 17 0 0 6.28318530717959 2 31 12 0 0 6.28318530717959 -2 32 4 0 0 6.28318530717959 +2 32 5 0 0 6.28318530717959 0 0101100 -+35 0 -35 0 * -Wi - -0101100 --34 0 * -Ve -1.00000007105427e-07 -37.476659402887 15 47.3761543394987 -0 0 - -0101101 -* ++59 0 -59 0 * Ed 1e-07 1 1 0 -1 17 0 2.78178084688463e-16 6.28318530717959 -2 33 12 0 2.78178084688463e-16 6.28318530717959 -2 34 3 0 2.78178084688463e-16 6.28318530717959 +1 18 0 1 16 +3 27 28CN 5 0 1 16 0 -0101100 -+32 0 -32 0 * +0101000 ++96 0 -59 0 * Wi 0101100 --31 0 * +-58 0 +57 0 +95 0 -57 0 * +Fa +0 1e-07 5 0 + +0101000 ++56 0 * Ve 1e-07 --60 15 -7.00000000000001 +60 15 7 0 0 0101101 * Ed 1e-07 1 1 0 -1 18 0 0 6.28318530717959 -2 35 12 0 0 6.28318530717959 -2 36 9 0 0 6.28318530717959 +1 19 0 0 6.28318530717959 +2 33 12 0 0 6.28318530717959 +2 34 6 0 0 6.28318530717959 0 0101100 -+29 0 -29 0 * ++54 0 -54 0 * +Ed + 1e-07 1 1 0 +1 20 0 1 16 +3 27 28CN 6 0 1 16 +0 + +0101000 ++93 0 -54 0 * Wi 0101100 --28 0 * +-53 0 +52 0 +92 0 -52 0 * +Fa +0 1e-07 6 0 + +0101000 ++51 0 * Ve 1.00000007105427e-07 --37.476659402887 15 -47.3761543394987 +47.3761543394987 15 -37.476659402887 0 0 0101101 * Ed 1e-07 1 1 0 -1 19 0 8.86511592917583e-17 6.28318530717959 -2 37 12 0 8.86511592917583e-17 6.28318530717959 -2 38 11 0 8.86511592917583e-17 6.28318530717959 +1 21 0 1.00875766104946e-16 6.28318530717959 +2 35 12 0 1.00875766104946e-16 6.28318530717959 +2 36 7 0 1.00875766104946e-16 6.28318530717959 0 0101100 -+26 0 -26 0 * ++49 0 -49 0 * +Ed + 1e-07 1 1 0 +1 22 0 1 16 +3 27 28CN 7 0 1 16 +0 + +0101000 ++90 0 -49 0 * Wi 0101100 --25 0 * +-48 0 +47 0 +89 0 -47 0 * +Fa +0 1e-07 7 0 + +0101000 ++46 0 * Ve 1e-07 -50 15 0 +25 17 0 0 0 0101101 * Ed 1e-07 1 1 0 -1 20 0 0 6.28318530717959 -2 39 12 0 0 6.28318530717959 -2 40 14 0 0 6.28318530717959 +1 23 0 0 6.28318530717959 +2 37 13 0 0 6.28318530717959 +2 38 8 0 0 6.28318530717959 0 0101000 -+23 0 -23 0 * ++44 0 -44 0 * +Ed + 1e-07 1 1 0 +1 24 0 0 17 +3 39 40CN 8 0 0 17 +0 + +0101000 ++44 0 -87 0 * Wi 0101100 --22 0 * ++43 0 -86 0 -42 0 +42 0 * +Fa +0 1e-07 8 0 + +0101000 ++41 0 * Ve 1e-07 -60 15 7 +-60 15 -7.00000000000001 0 0 0101101 * Ed 1e-07 1 1 0 -1 21 0 0 6.28318530717959 +1 25 0 0 6.28318530717959 2 41 12 0 0 6.28318530717959 -2 42 6 0 0 6.28318530717959 +2 42 9 0 0 6.28318530717959 0 0101100 -+20 0 -20 0 * ++39 0 -39 0 * +Ed + 1e-07 1 1 0 +1 26 0 1 16 +3 27 28CN 9 0 1 16 +0 + +0101000 ++84 0 -39 0 * Wi 0101100 --19 0 * +-38 0 +37 0 +83 0 -37 0 * +Fa +0 1e-07 9 0 + +0101000 ++36 0 * Ve 1e-07 7.00000000000001 15 -60 @@ -524,42 +588,124 @@ Ve * Ed 1e-07 1 1 0 -1 22 0 0 6.28318530717959 +1 27 0 0 6.28318530717959 2 43 12 0 0 6.28318530717959 2 44 10 0 0 6.28318530717959 0 0101100 -+17 0 -17 0 * ++34 0 -34 0 * +Ed + 1e-07 1 1 0 +1 28 0 1 16 +3 27 28CN 10 0 1 16 +0 + +0101000 ++81 0 -34 0 * Wi 0101100 --16 0 * +-33 0 +32 0 +80 0 -32 0 * +Fa +0 1e-07 10 0 + +0101000 ++31 0 * Ve 1.00000007105427e-07 -47.3761543394987 15 -37.476659402887 +-37.476659402887 15 -47.3761543394987 +0 0 + +0101101 +* +Ed + 1e-07 1 1 0 +1 29 0 8.86511592917583e-17 6.28318530717959 +2 45 12 0 8.86511592917583e-17 6.28318530717959 +2 46 11 0 8.86511592917583e-17 6.28318530717959 +0 + +0101100 ++29 0 -29 0 * +Ed + 1e-07 1 1 0 +1 30 0 1 16 +3 27 28CN 11 0 1 16 +0 + +0101000 ++78 0 -29 0 * +Wi + +0101100 +-28 0 +27 0 +77 0 -27 0 * +Fa +0 1e-07 11 0 + +0101000 ++26 0 * +Wi + +0101100 ++73 0 * +Wi + +0101100 +-58 0 * +Wi + +0101100 +-63 0 * +Wi + +0101100 +-68 0 * +Wi + +0101100 +-38 0 * +Wi + +0101100 +-28 0 * +Ve +1e-07 +50 15 0 0 0 0101101 * Ed 1e-07 1 1 0 -1 23 0 1.00875766104946e-16 6.28318530717959 -2 45 12 0 1.00875766104946e-16 6.28318530717959 -2 46 7 0 1.00875766104946e-16 6.28318530717959 +1 31 0 0 6.28318530717959 +2 47 12 0 0 6.28318530717959 +2 48 14 0 0 6.28318530717959 0 +0101000 ++18 0 -18 0 * +Wi + +0101100 +-17 0 * +Wi + 0101100 -+14 0 -14 0 * +-53 0 * Wi 0101100 --13 0 * +-33 0 * +Wi + +0101100 +-48 0 * Fa 0 1e-07 12 0 0101000 -+39 0 +36 0 +33 0 +30 0 +27 0 +24 0 +21 0 +18 0 +15 0 +12 0 ++24 0 +23 0 +22 0 +21 0 +20 0 +19 0 +16 0 +15 0 +14 0 +13 0 * Ve 1e-07 @@ -570,17 +716,17 @@ Ve * Ed 1e-07 1 1 0 -1 24 0 0 6.28318530717959 -2 47 14 0 0 6.28318530717959 -2 48 13 0 0 6.28318530717959 +1 32 0 0 6.28318530717959 +2 49 14 0 0 6.28318530717959 +2 50 13 0 0 6.28318530717959 0 0101000 -+10 0 -10 0 * ++11 0 -11 0 * Wi 0101100 -+9 0 * ++10 0 * Wi 0101100 @@ -589,28 +735,33 @@ Fa 0 1e-07 13 0 0101000 -+8 0 +7 0 * ++9 0 +8 0 * Ed 1e-07 1 1 0 -1 25 0 0 2 -3 49 50CN 14 0 0 2 +1 33 0 0 2 +3 51 52CN 14 0 0 2 0 0101000 -+23 0 -10 0 * ++18 0 -11 0 * Wi 0101100 -+22 0 -9 0 -5 0 +5 0 * ++17 0 -10 0 -6 0 +6 0 * Fa 0 1e-07 14 0 0101000 -+4 0 * ++5 0 * Sh -0101000 -+50 0 +45 0 +40 0 +11 0 +6 0 +3 0 * +0101100 ++75 0 +70 0 -65 0 -60 0 -55 0 -50 0 -45 0 +40 0 -35 0 -30 0 +-25 0 +12 0 +7 0 +4 0 * +So + +0100000 ++3 0 * Co 1100000 diff --git a/recipes/03-pipe-flange/output.png b/recipes/03-pipe-flange/output.png index 50f6ed5..a4e40e0 100644 Binary files a/recipes/03-pipe-flange/output.png and b/recipes/03-pipe-flange/output.png differ