python-cad-tools 0.1.7__tar.gz → 0.1.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/.github/workflows/ci.yml +120 -6
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/.gitignore +1 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/CHANGELOG.md +43 -0
- {python_cad_tools-0.1.7/src/python_cad_tools.egg-info → python_cad_tools-0.1.10}/PKG-INFO +77 -1
- python_cad_tools-0.1.7/PKG-INFO → python_cad_tools-0.1.10/README.md +57 -37
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/docs/drawing-extensions.md +16 -3
- python_cad_tools-0.1.10/docs/neutral-model.md +138 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/docs/public-api.md +9 -2
- python_cad_tools-0.1.10/docs/toolchain.md +102 -0
- python_cad_tools-0.1.10/docs/two-tier-contract.md +51 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/pyproject.toml +34 -0
- python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/asset-manifest.json +1 -0
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/animationGroup-CkBwZBaC.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/animationGroup-BFpCrP0o.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/bakedVertexAnimation-BRwXBaR8.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/bakedVertexAnimation-DKIsxzCh.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/basisTextureLoader-BRWOHjz-.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/basisTextureLoader-BWlCMZKU.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/brdfTextureTools-_z9j6IDT.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/brdfTextureTools-CpZi6QbK.js +2 -2
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/bumpFragment-D1ib6sWk.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/bumpFragment-ChvT23CB.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/bumpVertex-rRJFggby.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/bumpVertex-nEs2VPot.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/bumpVertexDeclaration-DpYJme-Y.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/bumpVertexDeclaration-BBNawFh8.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/clipPlaneFragment-8V4Sc9NG.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/clipPlaneFragment-C77PAFKo.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/clipPlaneVertex-05ivX8eb.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/clipPlaneVertex-CBvbot7K.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/cubemapToSphericalPolynomial-BOak-Hxf.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/cubemapToSphericalPolynomial-BCMcxsAF.js +1 -1
- python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/dds-0RTqNYDh.js +1 -0
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/dds.pure-Ce-RwcPa.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/dds.pure-OdUDHE0G.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/ddsTextureLoader-DmqLHZsO.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/ddsTextureLoader-1l_GkUW1.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/default.fragment-skPC2PC5.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/default.fragment-DJkWvM0e.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/default.vertex-Bf7EZhGi.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/default.vertex-CMrXZjYP.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/defaultUboDeclaration-DveD0pj_.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/defaultUboDeclaration-Da9s8wLf.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/dumpTools-E15xCOlX.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/dumpTools-BfBU44JR.js +2 -2
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/envTextureLoader-Bw7xWacU.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/envTextureLoader-CUgicy-i.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/exrTextureLoader-DdM34m4d.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/exrTextureLoader-4Fy-_N6F.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphApplyForceBlock-C2CCzJfK.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphApplyForceBlock-UxcpUOb4.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphApplyImpulseBlock-DaQNBsAi.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphApplyImpulseBlock-8doxumAC.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphArrayIndexBlock-Bm_uAgA1.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphArrayIndexBlock-q8W2FV-w.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphBezierCurveEasingBlock-BIRe7y9_.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphBezierCurveEasingBlock-3ZEqX4ZJ.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphBinaryOperationBlock-DMJBYgfr.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphBinaryOperationBlock-D3ayisoN.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphBranchBlock-QxXghWCp.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphBranchBlock-BR9ohqut.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphCachedOperationBlock-I8EAYjjd.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphCachedOperationBlock-DKeQ8sZI.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphCancelDelayBlock-BzNEnhY9.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphCancelDelayBlock-DzimG9bV.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphCodeExecutionBlock-B7ItpxKe.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphCodeExecutionBlock-BDp2kDKe.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphConditionalDataBlock-BhbDYfGS.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphConditionalDataBlock-DUy-bdD8.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphConsoleLogBlock-DXpJ7TNt.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphConsoleLogBlock-CZsZDCqO.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphConstantBlock-DNvjca7m.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphConstantBlock-D4jP5Zis.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphContextBlock-aSW2fQMB.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphContextBlock-iDbQUT2i.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphCounterBlock-CQB87ocL.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphCounterBlock-fNm-N_rD.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphDataSwitchBlock-DuoW5gn_.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphDataSwitchBlock-a2hfmRfA.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphDebounceBlock-CKgVrKHO.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphDebounceBlock-B-ua6-rc.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphDebugBlock-DoCK3CbK.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphDebugBlock-CFvv9NT9.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphDoNBlock-BGQscpK_.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphDoNBlock-QrVeUF7s.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphEasingBlock-C8ByegaL.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphEasingBlock-BL-amui0.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphFlipFlopBlock-DZZ6IZdT.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphFlipFlopBlock-DGNR6aQc.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphForLoopBlock-jnLx7y5R.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphForLoopBlock-CGGzIxtA.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphFunctionReferenceBlock-DVCyAPqf.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphFunctionReferenceBlock-BbPKAgEi.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphGLTFDataProvider-Co3We5bN.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphGLTFDataProvider-5JE9USOH.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphGetAngularVelocityBlock-6xyNjSA6.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphGetAngularVelocityBlock-DIu658Lh.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphGetAssetBlock-Cmz2b6ZC.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphGetAssetBlock-DTCqvYE6.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphGetLinearVelocityBlock-DAEGIqYD.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphGetLinearVelocityBlock-RW4Yofih.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphGetPhysicsMassPropertiesBlock-BjCZBRGe.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphGetPhysicsMassPropertiesBlock-aiF5BOL9.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphGetPropertyBlock-1qAsVO8r.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphGetPropertyBlock-D15fpxe7.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphGetSoundVolumeBlock-CjzseaZ_.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphGetSoundVolumeBlock-CwR7xfkj.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphGetVariableBlock-BIHX5QMz.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphGetVariableBlock-eTZrs7GE.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphIndexOfBlock-CiQsoigA.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphIndexOfBlock-DPZf_95j.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphInterpolationBlock-Bw0KkJ0e.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphInterpolationBlock-DiAJzLOE.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphIsKeyPressedBlock-DndaXIf-.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphIsKeyPressedBlock-CADmRrDd.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphIsSoundPlayingBlock-B6Qttnxj.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphIsSoundPlayingBlock-D8B4F2Z5.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphJsonPointerParserBlock-DNYimm79.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphJsonPointerParserBlock-Xfl-dDJk.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphKeyDownEventBlock-C4bd_Uk_.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphKeyDownEventBlock-Cm2zaYXU.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphKeyUpEventBlock-BbiC-9yS.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphKeyUpEventBlock-C_BP5Hf5.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphKeyboardEventBlock-8jNrKia4.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphKeyboardEventBlock-C05IFCUh.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphMathBlocks-Bp9VLo95.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphMathBlocks-DlWMU189.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphMathCombineExtractBlocks-RBcvT17x.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphMathCombineExtractBlocks-qSe8QChR.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphMatrixMathBlocks-CDMmeteR.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphMatrixMathBlocks-DbzURNpp.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphMeshPickEventBlock-BLD5qZLm.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphMeshPickEventBlock-DxJxxG3S.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphMultiGateBlock-Bp_x5hf9.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphMultiGateBlock-BPZd8mbK.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphPauseAnimationBlock-BJEgts2P.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphPauseAnimationBlock-C3c7bzsQ.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphPauseSoundBlock-mB4vOhyw.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphPauseSoundBlock-DJvpN7CX.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphPhysicsCollisionEventBlock-DHywozhh.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphPhysicsCollisionEventBlock-CNunrdNk.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphPlayAnimationBlock-db7Y-Q7u.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphPlayAnimationBlock-ByRpWDZ5.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphPlaySoundBlock-CxsvloFb.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphPlaySoundBlock-D5G_NhMs.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphPointerDownEventBlock-CVZzeLa6.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphPointerDownEventBlock-pWyOiXvU.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphPointerMoveEventBlock-kgytqAo-.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphPointerMoveEventBlock-BIgzBvv9.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphPointerOutEventBlock-DIiGO9Sz.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphPointerOutEventBlock-DaEitrdC.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphPointerOverEventBlock-yJsL04S3.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphPointerOverEventBlock-Bwc4ooou.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphPointerUpEventBlock-oGalI3fw.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphPointerUpEventBlock-BtmDICq5.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphReceiveCustomEventBlock-CGU30qtJ.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphReceiveCustomEventBlock-BKnkEvuu.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphSceneReadyEventBlock-CxumRn2U.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphSceneReadyEventBlock-CawN6pQ_.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphSceneTickEventBlock-_hKXW4nX.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphSceneTickEventBlock-zXyWDNoE.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphSendCustomEventBlock-BadQ6Fmt.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphSendCustomEventBlock-C4QwZQD_.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphSequenceBlock-ZX23Dn7h.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphSequenceBlock-C2DrAckq.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphSetAngularVelocityBlock-DaDY5MFY.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphSetAngularVelocityBlock-B2_GCxnR.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphSetDelayBlock-ClLunIUZ.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphSetDelayBlock-CoxLB_JO.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphSetLinearVelocityBlock-Cdu7nMQr.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphSetLinearVelocityBlock-Dcl_TlE4.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphSetPhysicsMotionTypeBlock-BXRAhWUV.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphSetPhysicsMotionTypeBlock-VH0XyIek.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphSetPropertyBlock-BzUyWEvj.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphSetPropertyBlock-BMVB2YpZ.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphSetSoundVolumeBlock-D_eRVaRX.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphSetSoundVolumeBlock-B3LlN1_P.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphSetVariableBlock-C48wCF3K.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphSetVariableBlock-DjPcD-uk.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphSoundEndedEventBlock-JilA8K68.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphSoundEndedEventBlock-B3BPhieu.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphStopAnimationBlock-DVVhNH2l.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphStopAnimationBlock-DB-YMsd0.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphStopSoundBlock-MkvXT-pz.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphStopSoundBlock-rkBjhxoU.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphSwitchBlock-BA1OpeUq.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphSwitchBlock-zgP4JU9F.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphThrottleBlock-aR7ATriv.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphThrottleBlock-BFCejhG2.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphTransformCoordinatesSystemBlock-_Z_XQ1KU.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphTransformCoordinatesSystemBlock-B5sXEjm6.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphTypeToTypeBlocks-CbmOuO1Y.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphTypeToTypeBlocks-GWfI6VCP.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphUnaryOperationBlock-BMYbqqlw.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphUnaryOperationBlock-C3x4cBoo.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphVectorMathBlocks-IvfUhMXD.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphVectorMathBlocks-DHmbwNwJ.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphWaitAllBlock-XXcp6Uu_.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphWaitAllBlock-D2S-o8ta.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/flowGraphWhileLoopBlock-CiCB0FD8.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/flowGraphWhileLoopBlock-BIaIe1G3.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/fogFragment-Dzpo6VdR.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/fogFragment-lpu2fSrY.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/gaussianSplatting-DyyJ3SmK.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/gaussianSplatting-C3mITXca.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/gaussianSplatting-eKQ5MVB9.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/gaussianSplatting-r2QTVyrX.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/gaussianSplatting.fragment-BA9M7qMm.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/gaussianSplatting.fragment-BRSDLsfp.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/gaussianSplatting.fragment-BL60TTsE.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/gaussianSplatting.fragment-BTuradYo.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/gaussianSplatting.vertex-CKsJZAkY.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/gaussianSplatting.vertex-WPP1vXOl.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/gaussianSplatting.vertex-Bo6VgkDg.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/gaussianSplatting.vertex-s39KAVkx.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.fragment-BKNvofx9.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.fragment-BMmjNFoS.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.fragment-CwwM4G1X.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.fragment-egtcopGg.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.vertex-CRzxSOuN.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.vertex-6Odgg2pj.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.vertex-CzPcN15t.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.vertex-Bo8-VkdD.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/geometry.fragment-D7dB1cPB.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/geometry.fragment-CuLpqUUk.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/geometry.fragment-D6FSJnnh.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/geometry.fragment-DHXfK03n.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/geometry.vertex-B30SEDfq.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/geometry.vertex-Bm0A4YY1.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/geometry.vertex-CEqGE1RP.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/geometry.vertex-DSbpeedB.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/glowBlurPostProcess.fragment-qbxgPsfh.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/glowBlurPostProcess.fragment-Qbdz4gLu.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/glowMapGeneration.fragment-pr52K7ES.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/glowMapGeneration.fragment-1hOZT_4N.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/glowMapGeneration.vertex-Bu7wD6_v.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/glowMapGeneration.vertex-Cg1UfAtC.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/glowMapMerge.fragment-DQIuOzG_.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/glowMapMerge.fragment-BoiNEY2n.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/glowMapMerge.vertex--Gv__zWj.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/glowMapMerge.vertex-CpWKznSe.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/harmonicsFunctions-KdJGOHc6.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/harmonicsFunctions-DIzIowqF.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/helperFunctions-DgEuNo6U.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/helperFunctions-7oODcxNt.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/iesTextureLoader-CtVX46fM.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/iesTextureLoader-wAQEvbfd.js +1 -1
- python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/index-CnrKUEff.css +1 -0
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/index-BlqB2_Pr.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/index-D6uexFRQ.js +153 -155
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/kernelBlur.fragment-BX7Lt7ea.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/kernelBlur.fragment-Bt6sD8qx.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/kernelBlur.fragment-DYsyjXaA.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/kernelBlur.fragment-DGSh46Om.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/kernelBlur.vertex-ClVvwFB7.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/kernelBlur.vertex-BlhNG48F.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/kernelBlur.vertex-DPBXY9JC.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/kernelBlur.vertex-C1fudmM_.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/kernelBlurVaryingDeclaration-Dug6rT1B.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/kernelBlurVaryingDeclaration-BWYB4Ycu.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/kernelBlurVaryingDeclaration-BYwqlIXx.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/kernelBlurVaryingDeclaration-DFH4bO-3.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/ktxTextureLoader-BIXHU16K.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/ktxTextureLoader-DsFCeiiH.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/lightFragment-DHmrE5GX.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/lightFragment-CHOWnPK9.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/logDepthDeclaration-DYQ6buM5.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/logDepthDeclaration-k15gEJ3y.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/logDepthVertex-N8cjnWeq.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/logDepthVertex-CHajYpMu.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/mainUVVaryingDeclaration-04-YeMcZ.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/mainUVVaryingDeclaration-BGrReuHo.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/meshUboDeclaration-Cxie7MAJ.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/meshUboDeclaration-DJwUrZx2.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/oitFragment-Yqa_2p-U.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/oitFragment-BsvP7q4R.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/openpbr.fragment-B-ILUybs.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/openpbr.fragment-B8VN-IrQ.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/openpbr.fragment-CYJW19wI.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/openpbr.fragment-C06kkVuL.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/openpbr.vertex-CZ4PwccK.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/openpbr.vertex-A4s3IgoK.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/openpbr.vertex-6zrdkvEg.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/openpbr.vertex-DJCYXObK.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/openpbrMaterial.pure-BsEUy5d2.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/openpbrMaterial.pure-Bs5DC-y9.js +3 -3
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/openpbrMaterialLoadingAdapter-BqYCxfaV.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/openpbrMaterialLoadingAdapter-C_c5atIs.js +2 -2
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/openpbrTransmissionLayerData-Bi8t7k_g.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/openpbrTransmissionLayerData-CYdsV_SL.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/openpbrTransmissionLayerData-DlDoA2Eg.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/openpbrTransmissionLayerData-DaaAXfx7.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/openpbrUboDeclaration-Cq9kCjmQ.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/openpbrUboDeclaration-3JPIOWr0.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/openpbrUboDeclaration-SB6Z4wg9.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/openpbrUboDeclaration-rQewqvT4.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/packingFunctions-BPvmjixW.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/packingFunctions-Bn1t67wx.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/packingFunctions-BPDUaRnj.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/packingFunctions-DMIYB28m.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/pass.fragment-CGW86Knk.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/pass.fragment-DYkGKBSd.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/passCube.fragment-BXLbB-Q5.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/passCube.fragment-D3u4_FLI.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/passCube.fragment-CagZgpfr.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/passCube.fragment-DNC6H8VG.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/pbr.fragment-CMmf0u9q.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/pbr.fragment-BiEI1YfJ.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/pbr.vertex-SKsjk5Pj.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/pbr.vertex-A6knpQsw.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/pbrBRDFFunctions-DNsUN6qQ.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/pbrBRDFFunctions-BeK39hzl.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/pbrDebug-Dw9FHwdO.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/pbrDebug-mLga6xKt.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/pbrIBLFunctions-ynQ9EJMa.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/pbrIBLFunctions-Db54NySa.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/pbrMaterial.pure-DD-Qp64W.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/pbrMaterial.pure-Dp6NmN9w.js +2 -2
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/pbrMaterialLoadingAdapter-BbrOLlOF.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/pbrMaterialLoadingAdapter-CvXJgU4i.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/pbrUboDeclaration-Bqvz9xQU.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/pbrUboDeclaration-BW-aS_Fc.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/postprocess.vertex-BMFYhnff.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/postprocess.vertex-BIWUhm9k.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/procedural.vertex-pqGGkP1-.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/procedural.vertex-DGnTrHzl.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/procedural.vertex-BfaBXzj0.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/procedural.vertex-WXmVjrA9.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/reflectionFunction-BCniWKEL.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/reflectionFunction-DrJ5CgYG.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/rgbdDecode.fragment-DCuzC7q7.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/rgbdDecode.fragment-7H1BkSqs.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/rgbdEncode.fragment-b49hhC5d.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/rgbdEncode.fragment-CTyiKQCb.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/rgbdEncode.fragment-BAhasmlV.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/rgbdEncode.fragment-CoVaziaW.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/sceneUboDeclaration-DPddq9hQ.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/sceneUboDeclaration-Ck43xulU.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/textureProcessor.fragment-C5g8djMT.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/textureProcessor.fragment-Bspm0dPH.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/textureProcessor.fragment-CbjSik1W.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/textureProcessor.fragment-CD-iXyeA.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/tgaTextureLoader-DqTGNNaJ.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/tgaTextureLoader-DrtUlmLD.js +1 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/vertexColorMixing-Bp9_JGdC.js → python_cad_tools-0.1.10/src/python_cad_tools/_viewer_static/assets/vertexColorMixing-7aNKbB6k.js +1 -1
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/_viewer_static/index.html +2 -2
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/artifacts.py +50 -3
- python_cad_tools-0.1.10/src/python_cad_tools/build-info.json +1 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/drawings/__init__.py +14 -1
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/drawings/_validation.py +15 -1
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/elements.py +17 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/exporters/base.py +1 -10
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/exporters/drawings/annotations.py +58 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/exporters/drawings/dxf.py +1 -0
- python_cad_tools-0.1.10/src/python_cad_tools/exporters/ifc.py +547 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/manifests.py +17 -1
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/templates/project/model.py +2 -2
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/units.py +0 -7
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/validation.py +115 -1
- python_cad_tools-0.1.10/src/python_cad_tools.egg-info/PKG-INFO +229 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools.egg-info/SOURCES.txt +171 -168
- python_cad_tools-0.1.10/src/python_cad_tools.egg-info/requires.txt +42 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools.egg-info/scm_file_list.json +275 -270
- python_cad_tools-0.1.10/src/python_cad_tools.egg-info/scm_version.json +8 -0
- python_cad_tools-0.1.7/README.md +0 -116
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/asset-manifest.json +0 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/dds-Wp2qLmYy.js +0 -1
- python_cad_tools-0.1.7/src/python_cad_tools/_viewer_static/assets/index-DcTTrc-8.css +0 -1
- python_cad_tools-0.1.7/src/python_cad_tools/build-info.json +0 -1
- python_cad_tools-0.1.7/src/python_cad_tools/exporters/ifc.py +0 -229
- python_cad_tools-0.1.7/src/python_cad_tools.egg-info/requires.txt +0 -16
- python_cad_tools-0.1.7/src/python_cad_tools.egg-info/scm_version.json +0 -8
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/.gitattributes +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/.githooks/pre-push +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/.github/workflows/downstream-compatibility.yml +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/.github/workflows/release-candidate.yml +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/.github/workflows/release.yml +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/.opencode/commands/autocommit.md +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/.opencode/tools/specrepo-autocommit.js +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/.opencode/tools/specrepo-autocommit.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/AGENTS.md +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/CLAUDE.md +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/LICENSE +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/MANIFEST.in +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/docs/build-semantics.md +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/docs/manifests.md +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/docs/project-configuration.md +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/docs/spikes/format-feasibility.md +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/docs/viewer-delivery.md +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/setup.cfg +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/__init__.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/__main__.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/_locking.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/_project_loader.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/_project_state.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/_scaffold.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/_transaction.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/_viewer_static/app.webmanifest +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/_viewer_static/assets/hdrTextureLoader-BGQvgh0h.js +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/_viewer_static/assets/mesh.vertexData.functions-ayNlGC5K.js +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/_viewer_static/favicon.svg +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/_viewer_static/sw.js +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/build.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/cli.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/context.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/determinism.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/drawings/_catalog.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/exceptions.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/exporters/__init__.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/exporters/drawings/__init__.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/exporters/drawings/model.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/exporters/drawings/pdf.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/exporters/drawings/primitives.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/exporters/drawings/projection.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/exporters/drawings/svg.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/exporters/glb.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/exporters/quantities.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/exporters/step.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/geometry.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/project_config.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/py.typed +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/runtime_sync.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/schemas/build-manifest-1.json +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/schemas/design-manifest-1.json +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/schemas/download-manifest-2.json +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/schemas/drawing-annotations-1.json +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/schemas/glb-manifest-1.json +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/schemas/ifc-validation-1.json +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/schemas/quantities-1.json +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/schemas/run-metadata-1.json +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/schemas/site-metadata-1.json +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/schemas/step-validation-1.json +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/site.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/templates/project/.gitignore +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/templates/project/README.md +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/templates/project/config.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/templates/project/drawing_annotations.py +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/templates/project/generated/.gitkeep +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools/templates/project/pyproject.toml +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools.egg-info/dependency_links.txt +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools.egg-info/entry_points.txt +0 -0
- {python_cad_tools-0.1.7 → python_cad_tools-0.1.10}/src/python_cad_tools.egg-info/top_level.txt +0 -0
|
@@ -250,11 +250,127 @@ jobs:
|
|
|
250
250
|
name: ${{ matrix.lock }}
|
|
251
251
|
path: ${{ matrix.lock }}
|
|
252
252
|
|
|
253
|
+
toolchain-matrix:
|
|
254
|
+
name: Toolchain matrix (${{ matrix.os }}, py${{ matrix.python }}, ${{ matrix.group }})
|
|
255
|
+
strategy:
|
|
256
|
+
fail-fast: false
|
|
257
|
+
matrix:
|
|
258
|
+
os: [ubuntu-latest, macos-latest]
|
|
259
|
+
python: ["3.12", "3.13"]
|
|
260
|
+
group: [core, cad, bim, mesh, drawings, engineering, visualization, all]
|
|
261
|
+
runs-on: ${{ matrix.os }}
|
|
262
|
+
steps:
|
|
263
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
264
|
+
# Full matrix on main/tags/release-candidates; a fast core+all subset on pull requests.
|
|
265
|
+
- name: Determine whether this matrix cell runs
|
|
266
|
+
id: gate
|
|
267
|
+
run: |
|
|
268
|
+
if [ "${{ github.event_name }}" = "pull_request" ] && \
|
|
269
|
+
! { [ "${{ matrix.os }}" = "ubuntu-latest" ] && [ "${{ matrix.python }}" = "3.13" ] && \
|
|
270
|
+
{ [ "${{ matrix.group }}" = "core" ] || [ "${{ matrix.group }}" = "all" ]; }; }; then
|
|
271
|
+
echo "run=false" >> "$GITHUB_OUTPUT"
|
|
272
|
+
else
|
|
273
|
+
echo "run=true" >> "$GITHUB_OUTPUT"
|
|
274
|
+
fi
|
|
275
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
276
|
+
if: steps.gate.outputs.run == 'true'
|
|
277
|
+
with:
|
|
278
|
+
python-version: ${{ matrix.python }}
|
|
279
|
+
cache: pip
|
|
280
|
+
- run: python -m pip install --upgrade pip
|
|
281
|
+
if: steps.gate.outputs.run == 'true'
|
|
282
|
+
- name: Install capability group
|
|
283
|
+
if: steps.gate.outputs.run == 'true'
|
|
284
|
+
run: |
|
|
285
|
+
if [ "${{ matrix.group }}" = "core" ]; then
|
|
286
|
+
pip install -e .
|
|
287
|
+
else
|
|
288
|
+
pip install -e ".[${{ matrix.group }}]"
|
|
289
|
+
fi
|
|
290
|
+
- run: pip check
|
|
291
|
+
if: steps.gate.outputs.run == 'true'
|
|
292
|
+
- name: Import declared libraries for this group
|
|
293
|
+
if: steps.gate.outputs.run == 'true'
|
|
294
|
+
run: |
|
|
295
|
+
python - <<'PY'
|
|
296
|
+
import importlib
|
|
297
|
+
import json
|
|
298
|
+
import sys
|
|
299
|
+
|
|
300
|
+
GROUPS = {
|
|
301
|
+
"core": ["build123d", "OCP", "ifcopenshell", "trimesh", "numpy", "ezdxf", "reportlab", "pypdf"],
|
|
302
|
+
"cad": ["build123d", "OCP"],
|
|
303
|
+
"bim": ["ifcopenshell"],
|
|
304
|
+
"mesh": ["trimesh", "numpy"],
|
|
305
|
+
"drawings": ["ezdxf", "reportlab", "pypdf"],
|
|
306
|
+
"engineering": ["shapely", "manifold3d", "meshio"],
|
|
307
|
+
"visualization": [],
|
|
308
|
+
"all": [
|
|
309
|
+
"build123d", "OCP", "ifcopenshell", "trimesh", "numpy", "ezdxf", "reportlab", "pypdf",
|
|
310
|
+
"shapely", "manifold3d", "meshio",
|
|
311
|
+
],
|
|
312
|
+
}
|
|
313
|
+
group = "${{ matrix.group }}"
|
|
314
|
+
modules = GROUPS[group]
|
|
315
|
+
results = {}
|
|
316
|
+
for name in modules:
|
|
317
|
+
try:
|
|
318
|
+
module = importlib.import_module(name)
|
|
319
|
+
results[name] = getattr(module, "__version__", "unknown")
|
|
320
|
+
except ImportError as error:
|
|
321
|
+
print(f"::error::failed to import {name!r} for group {group!r}: {error}", file=sys.stderr)
|
|
322
|
+
sys.exit(1)
|
|
323
|
+
report = {
|
|
324
|
+
"schema_id": "urn:python-cad-tools:schema:toolchain-compatibility:1",
|
|
325
|
+
"schema_version": 1,
|
|
326
|
+
"os": "${{ matrix.os }}",
|
|
327
|
+
"python": "${{ matrix.python }}",
|
|
328
|
+
"group": group,
|
|
329
|
+
"resolved_versions": results,
|
|
330
|
+
"ok": True,
|
|
331
|
+
}
|
|
332
|
+
with open("toolchain-compatibility.json", "w", encoding="utf-8") as stream:
|
|
333
|
+
json.dump(report, stream, indent=2, sort_keys=True)
|
|
334
|
+
print(json.dumps(report, indent=2, sort_keys=True))
|
|
335
|
+
PY
|
|
336
|
+
- name: Tier-2 interop smoke and no-GUI assertion
|
|
337
|
+
if: steps.gate.outputs.run == 'true' && matrix.group == 'all'
|
|
338
|
+
run: |
|
|
339
|
+
python - <<'PY'
|
|
340
|
+
import sys
|
|
341
|
+
|
|
342
|
+
from build123d import Box
|
|
343
|
+
from python_cad_tools.geometry import tessellate
|
|
344
|
+
|
|
345
|
+
solid = Box(10, 10, 10)
|
|
346
|
+
vertices, triangles = tessellate(solid, 0.5, 0.25)
|
|
347
|
+
assert vertices and triangles, "tessellation produced no geometry"
|
|
348
|
+
|
|
349
|
+
import trimesh
|
|
350
|
+
mesh = trimesh.Trimesh(vertices=vertices, faces=triangles, process=False)
|
|
351
|
+
assert mesh.is_watertight or len(mesh.faces) > 0, "trimesh failed to load the tessellated shape"
|
|
352
|
+
|
|
353
|
+
import ifcopenshell
|
|
354
|
+
file = ifcopenshell.file(schema="IFC4")
|
|
355
|
+
file.createIfcCartesianPoint((0.0, 0.0, 0.0))
|
|
356
|
+
|
|
357
|
+
import ezdxf
|
|
358
|
+
document = ezdxf.new("R2018")
|
|
359
|
+
document.modelspace().add_line((0, 0), (1, 1))
|
|
360
|
+
|
|
361
|
+
forbidden = [name for name in sys.modules if name.startswith(("vtk", "pyvista", "PyQt", "PySide", "tkinter"))]
|
|
362
|
+
assert not forbidden, f"GUI/visualization modules present after Tier-2 interop smoke: {forbidden}"
|
|
363
|
+
print("Tier-2 interop smoke and no-GUI assertion passed.")
|
|
364
|
+
PY
|
|
365
|
+
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
|
|
366
|
+
if: steps.gate.outputs.run == 'true'
|
|
367
|
+
with:
|
|
368
|
+
name: toolchain-compatibility-${{ matrix.os }}-py${{ matrix.python }}-${{ matrix.group }}
|
|
369
|
+
path: toolchain-compatibility.json
|
|
370
|
+
|
|
253
371
|
build-publish:
|
|
254
372
|
name: Build and publish to PyPI
|
|
255
|
-
if:
|
|
256
|
-
(github.event_name == 'push' && github.ref == 'refs/heads/main') ||
|
|
257
|
-
(github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v'))
|
|
373
|
+
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
|
|
258
374
|
needs:
|
|
259
375
|
- lint-type-unit
|
|
260
376
|
- exporter-integration
|
|
@@ -298,9 +414,7 @@ jobs:
|
|
|
298
414
|
|
|
299
415
|
provenance:
|
|
300
416
|
name: Generate SLSA provenance
|
|
301
|
-
if:
|
|
302
|
-
(github.event_name == 'push' && github.ref == 'refs/heads/main') ||
|
|
303
|
-
(github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v'))
|
|
417
|
+
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
|
|
304
418
|
needs: [build-publish]
|
|
305
419
|
permissions:
|
|
306
420
|
actions: read
|
|
@@ -7,6 +7,49 @@ stable release is published.
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.1.10] - 2026-08-11
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Capability-based dependency extras (`cad`, `bim`, `mesh`, `drawings`,
|
|
15
|
+
`engineering`, `visualization`, `all`); the Tier 1 verified stack stays
|
|
16
|
+
required in `[project.dependencies]`. See `docs/toolchain.md`.
|
|
17
|
+
- A documented two-tier authoring contract (`docs/two-tier-contract.md`) and a
|
|
18
|
+
neutral-model field reference (`docs/neutral-model.md`).
|
|
19
|
+
- `DesignElement.properties` now exports as `Pset_PythonCadUser` on IFC-exported
|
|
20
|
+
elements; property values must be `str`, `bool`, `int`, or `float`.
|
|
21
|
+
- Computed quantities now export as an `IfcElementQuantity` named
|
|
22
|
+
`Qto_PythonCadDesign` on IFC-exported elements with a quantity record.
|
|
23
|
+
- `DesignElement.storey` now drives on-demand `IfcBuildingStorey` creation; a
|
|
24
|
+
model with no declared storey is unaffected.
|
|
25
|
+
- New `DesignElement.openings: list[Opening]` field; each opening exports an
|
|
26
|
+
`IfcOpeningElement` + `IfcRelVoidsElement` on its host. Openings add IFC
|
|
27
|
+
semantics only — geometry in every other format is unaffected.
|
|
28
|
+
- New public `python_cad_tools.drawings.Dimension` annotation primitive,
|
|
29
|
+
rendered through the verified annotation pipeline in SVG, DXF, and PDF.
|
|
30
|
+
|
|
31
|
+
### Changed
|
|
32
|
+
|
|
33
|
+
- The IFC unit assignment gains a `MASSUNIT` (`KILO`/`GRAM`) entry. This
|
|
34
|
+
changes the emitted IFC file, and therefore its artifact hash, for every
|
|
35
|
+
project — a one-time change from this release.
|
|
36
|
+
|
|
37
|
+
## [0.1.9] - 2026-08-03
|
|
38
|
+
|
|
39
|
+
### Fixed
|
|
40
|
+
|
|
41
|
+
- Made iPhone panning substantially faster and added visible, press-and-hold pan and zoom controls for reliable touch navigation when browser gestures are inconsistent.
|
|
42
|
+
- Added a selectable 1×–100× navigation speed that adjusts drag, wheel, pinch, and on-screen pan/zoom controls, with the previous speed retained as the minimum.
|
|
43
|
+
|
|
44
|
+
## [0.1.8] - 2026-07-21
|
|
45
|
+
|
|
46
|
+
### Fixed
|
|
47
|
+
- Made CI publish to PyPI and generate release provenance only for version-tag
|
|
48
|
+
pushes, preventing the following `main` push from attempting to upload the
|
|
49
|
+
same immutable distribution files a second time.
|
|
50
|
+
- Corrected Pan mode to replace Babylon's higher-priority primary-touch Rotate
|
|
51
|
+
mapping on iPhone instead of only adding a buttonless-touch fallback.
|
|
52
|
+
|
|
10
53
|
## [0.1.7] - 2026-07-21
|
|
11
54
|
|
|
12
55
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-cad-tools
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.10
|
|
4
4
|
Summary: Typed, headless Python tooling for CAD/BIM models and artifacts
|
|
5
5
|
Author: Brandon Benge
|
|
6
6
|
License: AGPL-3.0-only
|
|
@@ -26,6 +26,25 @@ Requires-Dist: numpy<3,>=2.3
|
|
|
26
26
|
Requires-Dist: ezdxf<2,>=1.4
|
|
27
27
|
Requires-Dist: reportlab<5,>=4.4
|
|
28
28
|
Requires-Dist: pypdf<7,>=6
|
|
29
|
+
Provides-Extra: cad
|
|
30
|
+
Requires-Dist: build123d<0.12,>=0.11.1; extra == "cad"
|
|
31
|
+
Requires-Dist: cadquery-ocp-novtk<7.10,>=7.9.3.1.1; extra == "cad"
|
|
32
|
+
Provides-Extra: bim
|
|
33
|
+
Requires-Dist: ifcopenshell<0.9,>=0.8.5; extra == "bim"
|
|
34
|
+
Provides-Extra: mesh
|
|
35
|
+
Requires-Dist: trimesh<5,>=4.12; extra == "mesh"
|
|
36
|
+
Requires-Dist: numpy<3,>=2.3; extra == "mesh"
|
|
37
|
+
Provides-Extra: drawings
|
|
38
|
+
Requires-Dist: ezdxf<2,>=1.4; extra == "drawings"
|
|
39
|
+
Requires-Dist: reportlab<5,>=4.4; extra == "drawings"
|
|
40
|
+
Requires-Dist: pypdf<7,>=6; extra == "drawings"
|
|
41
|
+
Provides-Extra: engineering
|
|
42
|
+
Requires-Dist: shapely<3,>=2.1; extra == "engineering"
|
|
43
|
+
Requires-Dist: manifold3d<4,>=3; extra == "engineering"
|
|
44
|
+
Requires-Dist: meshio<6,>=5.3; extra == "engineering"
|
|
45
|
+
Provides-Extra: visualization
|
|
46
|
+
Provides-Extra: all
|
|
47
|
+
Requires-Dist: python-cad-tools[bim,cad,drawings,engineering,mesh,visualization]; extra == "all"
|
|
29
48
|
Provides-Extra: dev
|
|
30
49
|
Requires-Dist: build<2,>=1.2; extra == "dev"
|
|
31
50
|
Requires-Dist: twine<7,>=6; extra == "dev"
|
|
@@ -50,6 +69,17 @@ The canonical project identities are:
|
|
|
50
69
|
|
|
51
70
|
Licensed under [AGPL-3.0-only](LICENSE). Published on [PyPI](https://pypi.org/project/python-cad-tools/).
|
|
52
71
|
|
|
72
|
+
## Install
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
pip install "python-cad-tools[all]"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Capability-based extras (`cad`, `bim`, `mesh`, `drawings`, `engineering`,
|
|
79
|
+
`visualization`) install a subset of the curated, version-tested toolchain.
|
|
80
|
+
See [`docs/toolchain.md`](docs/toolchain.md) for the supported-library table,
|
|
81
|
+
the dependency license policy, and the compatibility verification matrix.
|
|
82
|
+
|
|
53
83
|
## Install for development
|
|
54
84
|
|
|
55
85
|
Python 3.12 or 3.13 is required.
|
|
@@ -66,6 +96,43 @@ python3 -m pip install ./dist/python_cad_tools-*.whl
|
|
|
66
96
|
python-cad --version
|
|
67
97
|
```
|
|
68
98
|
|
|
99
|
+
## Build locally
|
|
100
|
+
|
|
101
|
+
Building the complete distribution requires Python 3.12 or 3.13 and Node.js
|
|
102
|
+
22.15.0. From a fresh checkout, create and activate the Python environment
|
|
103
|
+
before building the viewer. Activation is important because the viewer staging
|
|
104
|
+
script reads the installed `python-cad-tools` version from that environment.
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
python3 -m venv .venv
|
|
108
|
+
source .venv/bin/activate
|
|
109
|
+
python -m pip install --upgrade pip
|
|
110
|
+
python -m pip install -e '.[dev]'
|
|
111
|
+
|
|
112
|
+
cd viewer
|
|
113
|
+
npm ci
|
|
114
|
+
npm test
|
|
115
|
+
npm run build
|
|
116
|
+
cd ..
|
|
117
|
+
|
|
118
|
+
python -m build --wheel --sdist --outdir dist .
|
|
119
|
+
python -m twine check dist/*
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
The viewer build compiles the private TypeScript source and stages its verified,
|
|
123
|
+
model-free static shell under `src/python_cad_tools/_viewer_static/`. The final
|
|
124
|
+
wheel and source archive are written to `dist/`. To inspect the viewer while
|
|
125
|
+
developing its source, run `npm run preview` from `viewer/` after
|
|
126
|
+
`npm run build` and open the local URL printed by Vite.
|
|
127
|
+
|
|
128
|
+
To build and serve an actual CAD project with the locally installed editable
|
|
129
|
+
package, change to that project's directory and run:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
python-cad build
|
|
133
|
+
python-cad serve
|
|
134
|
+
```
|
|
135
|
+
|
|
69
136
|
## Create a new project
|
|
70
137
|
|
|
71
138
|
```bash
|
|
@@ -125,6 +192,14 @@ documented in [`docs/drawing-extensions.md`](docs/drawing-extensions.md). One
|
|
|
125
192
|
annotation set is validated and rendered consistently to SVG, DXF, and PDF
|
|
126
193
|
before artifact hashes are recorded.
|
|
127
194
|
|
|
195
|
+
Python CAD Tools is a curated engineering platform with a two-tier authoring
|
|
196
|
+
contract: verified authoring through the neutral model (Tier 1), and
|
|
197
|
+
supported-but-unverified direct use of a pinned library such as
|
|
198
|
+
`ifcopenshell` or `trimesh` (Tier 2). See
|
|
199
|
+
[`docs/two-tier-contract.md`](docs/two-tier-contract.md),
|
|
200
|
+
[`docs/neutral-model.md`](docs/neutral-model.md), and
|
|
201
|
+
[`docs/toolchain.md`](docs/toolchain.md).
|
|
202
|
+
|
|
128
203
|
## Verification
|
|
129
204
|
|
|
130
205
|
```bash
|
|
@@ -138,6 +213,7 @@ before artifact hashes are recorded.
|
|
|
138
213
|
.venv/bin/python -m twine check dist/*
|
|
139
214
|
```
|
|
140
215
|
|
|
216
|
+
|
|
141
217
|
The default pytest command runs the fast unit suite. Integration, packaging,
|
|
142
218
|
and external typing suites are explicit release gates. Packaging tests inspect wheel and sdist inventories, install the wheel
|
|
143
219
|
non-editably into an isolated environment outside the checkout, prove the
|
|
@@ -1,40 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: python-cad-tools
|
|
3
|
-
Version: 0.1.7
|
|
4
|
-
Summary: Typed, headless Python tooling for CAD/BIM models and artifacts
|
|
5
|
-
Author: Brandon Benge
|
|
6
|
-
License: AGPL-3.0-only
|
|
7
|
-
Project-URL: Homepage, https://github.com/brandon-benge/python-cad-tools
|
|
8
|
-
Project-URL: Repository, https://github.com/brandon-benge/python-cad-tools
|
|
9
|
-
Project-URL: Issues, https://github.com/brandon-benge/python-cad-tools/issues
|
|
10
|
-
Classifier: Development Status :: 3 - Alpha
|
|
11
|
-
Classifier: Environment :: Console
|
|
12
|
-
Classifier: Intended Audience :: Developers
|
|
13
|
-
Classifier: License :: OSI Approved :: GNU Affero General Public License v3
|
|
14
|
-
Classifier: Programming Language :: Python :: 3
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
-
Classifier: Typing :: Typed
|
|
18
|
-
Requires-Python: <3.14,>=3.12
|
|
19
|
-
Description-Content-Type: text/markdown
|
|
20
|
-
License-File: LICENSE
|
|
21
|
-
Requires-Dist: build123d<0.12,>=0.11.1
|
|
22
|
-
Requires-Dist: cadquery-ocp-novtk<7.10,>=7.9.3.1.1
|
|
23
|
-
Requires-Dist: ifcopenshell<0.9,>=0.8.5
|
|
24
|
-
Requires-Dist: trimesh<5,>=4.12
|
|
25
|
-
Requires-Dist: numpy<3,>=2.3
|
|
26
|
-
Requires-Dist: ezdxf<2,>=1.4
|
|
27
|
-
Requires-Dist: reportlab<5,>=4.4
|
|
28
|
-
Requires-Dist: pypdf<7,>=6
|
|
29
|
-
Provides-Extra: dev
|
|
30
|
-
Requires-Dist: build<2,>=1.2; extra == "dev"
|
|
31
|
-
Requires-Dist: twine<7,>=6; extra == "dev"
|
|
32
|
-
Requires-Dist: pytest<9,>=8.4; extra == "dev"
|
|
33
|
-
Requires-Dist: pytest-cov<8,>=7; extra == "dev"
|
|
34
|
-
Requires-Dist: ruff<0.15,>=0.14; extra == "dev"
|
|
35
|
-
Requires-Dist: mypy<2,>=1.18; extra == "dev"
|
|
36
|
-
Dynamic: license-file
|
|
37
|
-
|
|
38
1
|
# Python CAD Tools
|
|
39
2
|
|
|
40
3
|
Python CAD Tools is an installable, typed Python package for defining shared
|
|
@@ -50,6 +13,17 @@ The canonical project identities are:
|
|
|
50
13
|
|
|
51
14
|
Licensed under [AGPL-3.0-only](LICENSE). Published on [PyPI](https://pypi.org/project/python-cad-tools/).
|
|
52
15
|
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
pip install "python-cad-tools[all]"
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Capability-based extras (`cad`, `bim`, `mesh`, `drawings`, `engineering`,
|
|
23
|
+
`visualization`) install a subset of the curated, version-tested toolchain.
|
|
24
|
+
See [`docs/toolchain.md`](docs/toolchain.md) for the supported-library table,
|
|
25
|
+
the dependency license policy, and the compatibility verification matrix.
|
|
26
|
+
|
|
53
27
|
## Install for development
|
|
54
28
|
|
|
55
29
|
Python 3.12 or 3.13 is required.
|
|
@@ -66,6 +40,43 @@ python3 -m pip install ./dist/python_cad_tools-*.whl
|
|
|
66
40
|
python-cad --version
|
|
67
41
|
```
|
|
68
42
|
|
|
43
|
+
## Build locally
|
|
44
|
+
|
|
45
|
+
Building the complete distribution requires Python 3.12 or 3.13 and Node.js
|
|
46
|
+
22.15.0. From a fresh checkout, create and activate the Python environment
|
|
47
|
+
before building the viewer. Activation is important because the viewer staging
|
|
48
|
+
script reads the installed `python-cad-tools` version from that environment.
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
python3 -m venv .venv
|
|
52
|
+
source .venv/bin/activate
|
|
53
|
+
python -m pip install --upgrade pip
|
|
54
|
+
python -m pip install -e '.[dev]'
|
|
55
|
+
|
|
56
|
+
cd viewer
|
|
57
|
+
npm ci
|
|
58
|
+
npm test
|
|
59
|
+
npm run build
|
|
60
|
+
cd ..
|
|
61
|
+
|
|
62
|
+
python -m build --wheel --sdist --outdir dist .
|
|
63
|
+
python -m twine check dist/*
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
The viewer build compiles the private TypeScript source and stages its verified,
|
|
67
|
+
model-free static shell under `src/python_cad_tools/_viewer_static/`. The final
|
|
68
|
+
wheel and source archive are written to `dist/`. To inspect the viewer while
|
|
69
|
+
developing its source, run `npm run preview` from `viewer/` after
|
|
70
|
+
`npm run build` and open the local URL printed by Vite.
|
|
71
|
+
|
|
72
|
+
To build and serve an actual CAD project with the locally installed editable
|
|
73
|
+
package, change to that project's directory and run:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
python-cad build
|
|
77
|
+
python-cad serve
|
|
78
|
+
```
|
|
79
|
+
|
|
69
80
|
## Create a new project
|
|
70
81
|
|
|
71
82
|
```bash
|
|
@@ -125,6 +136,14 @@ documented in [`docs/drawing-extensions.md`](docs/drawing-extensions.md). One
|
|
|
125
136
|
annotation set is validated and rendered consistently to SVG, DXF, and PDF
|
|
126
137
|
before artifact hashes are recorded.
|
|
127
138
|
|
|
139
|
+
Python CAD Tools is a curated engineering platform with a two-tier authoring
|
|
140
|
+
contract: verified authoring through the neutral model (Tier 1), and
|
|
141
|
+
supported-but-unverified direct use of a pinned library such as
|
|
142
|
+
`ifcopenshell` or `trimesh` (Tier 2). See
|
|
143
|
+
[`docs/two-tier-contract.md`](docs/two-tier-contract.md),
|
|
144
|
+
[`docs/neutral-model.md`](docs/neutral-model.md), and
|
|
145
|
+
[`docs/toolchain.md`](docs/toolchain.md).
|
|
146
|
+
|
|
128
147
|
## Verification
|
|
129
148
|
|
|
130
149
|
```bash
|
|
@@ -138,6 +157,7 @@ before artifact hashes are recorded.
|
|
|
138
157
|
.venv/bin/python -m twine check dist/*
|
|
139
158
|
```
|
|
140
159
|
|
|
160
|
+
|
|
141
161
|
The default pytest command runs the fast unit suite. Integration, packaging,
|
|
142
162
|
and external typing suites are explicit release gates. Packaging tests inspect wheel and sdist inventories, install the wheel
|
|
143
163
|
non-editably into an isolated environment outside the checkout, prove the
|
|
@@ -42,9 +42,20 @@ so the prior generated tree and its recorded hashes remain unchanged.
|
|
|
42
42
|
|
|
43
43
|
The stable home module `python_cad_tools.drawings` exports `Point2`,
|
|
44
44
|
`Direction`, `DrawingStyleToken`, `DrawingSheet`, `Line`, `Polyline`, `Text`,
|
|
45
|
-
`SectionCallout`, `ElevationMarker`, `TableRow`, `Table`,
|
|
46
|
-
and `DrawingAnnotationSet`. The dataclass fields and
|
|
47
|
-
contract; there is no dictionary or
|
|
45
|
+
`Dimension`, `SectionCallout`, `ElevationMarker`, `TableRow`, `Table`,
|
|
46
|
+
`SheetAnnotations`, and `DrawingAnnotationSet`. The dataclass fields and
|
|
47
|
+
literal tokens are the v1 contract; there is no dictionary or
|
|
48
|
+
renderer-specific alternate form.
|
|
49
|
+
|
|
50
|
+
`Dimension(id, sheet_id, start, end, offset_mm, label, style)` draws a
|
|
51
|
+
measurement: a dimension line offset from the measured segment (in Y for a
|
|
52
|
+
predominantly horizontal segment, in X otherwise), extension/witness lines
|
|
53
|
+
back to `start`/`end`, arrowheads at both ends, and a centred label. It uses
|
|
54
|
+
the `"annotation-dimension"` style token. The rendered DXF output is tagged
|
|
55
|
+
geometry (lines, arrowheads, and text with `PYTHON_CAD_TOOLS` XDATA), not a
|
|
56
|
+
native associative `DIMENSION` entity — a project needing an editable CAD
|
|
57
|
+
dimension should treat the drawing as conceptual, consistent with every other
|
|
58
|
+
Python CAD Tools drawing output.
|
|
48
59
|
|
|
49
60
|
`DrawingContext.sheets` contains these standard sheets:
|
|
50
61
|
|
|
@@ -125,6 +136,8 @@ direction.
|
|
|
125
136
|
|
|
126
137
|
Compound IDs are deterministic:
|
|
127
138
|
|
|
139
|
+
- dimension: `.line`, `.extension.start`, `.extension.end`, `.arrow.start`,
|
|
140
|
+
`.arrow.end`, and `.label`;
|
|
128
141
|
- section callout: `.line`, `.arrow.start`, `.arrow.end`, `.label.start`, and
|
|
129
142
|
`.label.end`;
|
|
130
143
|
- elevation marker: `.outline`, `.pointer`, and `.label`;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Neutral model reference
|
|
2
|
+
|
|
3
|
+
This is the Tier 1 authoring reference: the `DesignElement`/`DesignModel`
|
|
4
|
+
field semantics, the `IfcMapping` contract, the new Phase 1 capabilities
|
|
5
|
+
(user properties, computed quantities, multiple storeys, openings, drawing
|
|
6
|
+
dimensions), and the validator invocation model. See
|
|
7
|
+
`docs/two-tier-contract.md` for what "Tier 1" means and
|
|
8
|
+
`docs/public-api.md` for the full module allowlist.
|
|
9
|
+
|
|
10
|
+
## `DesignElement` fields
|
|
11
|
+
|
|
12
|
+
| Field | Type | Semantics |
|
|
13
|
+
| --- | --- | --- |
|
|
14
|
+
| `id` | `str` | Stable, unique identifier. Used to derive every downstream IFC `GlobalId` and to key manifests. |
|
|
15
|
+
| `name` | `str` | Human-readable display name. |
|
|
16
|
+
| `category` | `str` | Free-text classification, exported as `ObjectType` in IFC. |
|
|
17
|
+
| `geometry` | `Any` | A build123d-compatible solid, shell, wire, or edge. Required and opaque — the framework does not restrict how it was built. |
|
|
18
|
+
| `geometry_kind` | `"solid" \| "shell" \| "wire" \| "edge" \| "reference"` | Declares the geometry's topological kind. Physical elements must be `"solid"`. |
|
|
19
|
+
| `placement` | `Placement` | Translation (mm) and rotation (degrees, XYZ) applied on top of `geometry`'s own coordinates. |
|
|
20
|
+
| `dimensions` | `Dimensions` | Declared, author-stated extents. Independent of the geometry's actual bounds; exported into `Pset_PythonCadDesign`. |
|
|
21
|
+
| `material` | `MaterialSpec \| None` | Required for physical elements. Drives IFC material association and quantity mass calculation (`density_kg_m3`). |
|
|
22
|
+
| `color_rgb` | `Color \| None` | Overrides the material color for this element's rendering/styling. |
|
|
23
|
+
| `ifc_mapping` | `IfcMapping` | See below. |
|
|
24
|
+
| `storey` | `str \| None` | The `IfcBuildingStorey` this element belongs to. `None` means the framework's implicit "Default Storey". |
|
|
25
|
+
| `tags` | `set[str]` | Free-text classification tags; not exported to any format. |
|
|
26
|
+
| `properties` | `dict[str, Any]` | User properties. Exported to IFC as `Pset_PythonCadUser` for IFC-exported elements (see below). Values must be `str`, `bool`, `int`, or `float`. |
|
|
27
|
+
| `children` | `list[DesignElement]` | Nested elements, walked depth-first by `DesignModel.walk()`. |
|
|
28
|
+
| `visible` | `bool` | Excludes the element from every exporter when `False`. |
|
|
29
|
+
| `export_formats` | `set[str]` | Which exporters (`step`, `ifc`, `glb`, `drawings`, `quantities`) include this element. |
|
|
30
|
+
| `source_module` | `str` | Free-text provenance, exported into `Pset_PythonCadDesign`. |
|
|
31
|
+
| `physical` | `bool` | Physical elements must be `"solid"` and require a material; non-physical (reference) elements are excluded from IFC, quantities, and mass. |
|
|
32
|
+
| `parent_id` | `str \| None` | Parent element ID, exported as an `IfcRelAggregates` relationship when both ends are IFC-exported. |
|
|
33
|
+
| `openings` | `list[Opening]` | Semantic voids in this host element. See "Openings" below. |
|
|
34
|
+
|
|
35
|
+
## `IfcMapping`
|
|
36
|
+
|
|
37
|
+
```python
|
|
38
|
+
IfcMapping(ifc_class: str | None, predefined_type: str | None = None, exclude_reason: str | None = None)
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Exactly one of `ifc_class` or `exclude_reason` must be set (enforced at
|
|
42
|
+
`validate` time). `ifc_class` is validated live against the installed
|
|
43
|
+
`ifcopenshell` IFC4 schema at export time: it must name a concrete (non-
|
|
44
|
+
abstract) subtype of `IfcElement`, and `predefined_type` (default
|
|
45
|
+
`"NOTDEFINED"`) must be a member of that class's declared `PredefinedType`
|
|
46
|
+
enumeration. Any concrete `IfcElement` subtype is accepted — the framework
|
|
47
|
+
does not restrict the mapping to a fixed list.
|
|
48
|
+
|
|
49
|
+
## Openings
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
Opening(id: str, geometry: Any, name: str | None = None, predefined_type: str | None = None)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
An `Opening` on `DesignElement.openings` produces one `IfcOpeningElement` and
|
|
56
|
+
one `IfcRelVoidsElement` per opening when the host is IFC-exported.
|
|
57
|
+
`predefined_type` maps to `IfcOpeningElementTypeEnum` (`"OPENING"` or
|
|
58
|
+
`"RECESS"`; defaults to `"OPENING"`).
|
|
59
|
+
|
|
60
|
+
**Openings add IFC semantics only.** The host element's `geometry` stays
|
|
61
|
+
authoritative for STEP, GLB, drawings, quantities, and bounds — the framework
|
|
62
|
+
does not boolean-subtract an opening from the host tessellation. The
|
|
63
|
+
supported authoring pattern is to cut the void from the host solid directly
|
|
64
|
+
(`host_solid.cut(opening_solid)`, as `benge-property-cad/model.py` already
|
|
65
|
+
does) and declare the same void as an `Opening` so IFC also carries the
|
|
66
|
+
`IfcOpeningElement`/`IfcRelVoidsElement` pair. Declaring an opening without
|
|
67
|
+
cutting the host geometry produces an IFC void that other formats do not
|
|
68
|
+
reflect — do not do this for artifacts that need Tier 1 multi-format
|
|
69
|
+
consistency.
|
|
70
|
+
|
|
71
|
+
## IFC property sets and quantities
|
|
72
|
+
|
|
73
|
+
Every IFC-exported element carries `Pset_PythonCadDesign`
|
|
74
|
+
(`StableId`, `Category`, `SourceModule`, `GeometryKind`, and any declared
|
|
75
|
+
dimensions) — unchanged from before this document existed, and the sole
|
|
76
|
+
anchor the framework uses to identify its own authored elements.
|
|
77
|
+
|
|
78
|
+
- **`Pset_PythonCadUser`** — present when `element.properties` is non-empty.
|
|
79
|
+
One `IfcPropertySingleValue` per entry, typed by Python type:
|
|
80
|
+
`bool → IfcBoolean`, `int → IfcInteger`, `float → IfcReal`,
|
|
81
|
+
`str → IfcLabel`. Any other value type is a `validate`-time error.
|
|
82
|
+
- **`Qto_PythonCadDesign`** — an `IfcElementQuantity` present when the
|
|
83
|
+
element has a computed quantity record (the same records
|
|
84
|
+
`python-cad build`'s `quantities` exporter produces). Contains `Count`
|
|
85
|
+
(`IfcQuantityCount`), `NetSurfaceArea` (`IfcQuantityArea`, m²), `NetVolume`
|
|
86
|
+
(`IfcQuantityVolume`, m³), and — only when the element's material has a
|
|
87
|
+
density — `NetWeight` (`IfcQuantityWeight`, kg). Units convert from the
|
|
88
|
+
neutral model's mm/mm²/mm³ into the file's declared unit assignment, which
|
|
89
|
+
includes an explicit `MASSUNIT` (`KILO`/`GRAM`).
|
|
90
|
+
|
|
91
|
+
`IfcOpeningElement` entities carry `Pset_PythonCadOpening`
|
|
92
|
+
(`StableId`, `HostId`) instead of `Pset_PythonCadDesign`, so they are never
|
|
93
|
+
mistaken for an authored design element by `_design_products` or by any
|
|
94
|
+
sidecar reconciliation.
|
|
95
|
+
|
|
96
|
+
## Storeys
|
|
97
|
+
|
|
98
|
+
An element with `storey=None` is placed in the implicit "Default Storey"
|
|
99
|
+
(stable ID `<model.id>.ifc.storey` — unchanged from before multi-storey
|
|
100
|
+
support existed). An element with `storey="Some Name"` is placed in an
|
|
101
|
+
`IfcBuildingStorey` named `"Some Name"`, created on demand, one per distinct
|
|
102
|
+
declared name among IFC-exported elements. A model that declares no storey on
|
|
103
|
+
any element produces byte-identical spatial structure to a single-storey
|
|
104
|
+
model. Storey names must be non-empty text (validated).
|
|
105
|
+
|
|
106
|
+
## Drawing dimensions
|
|
107
|
+
|
|
108
|
+
`python_cad_tools.drawings.Dimension` is a public annotation primitive:
|
|
109
|
+
|
|
110
|
+
```python
|
|
111
|
+
Dimension(id: str, sheet_id: str, start: Point2, end: Point2, offset_mm: float, label: str, style: DrawingStyleToken)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
It renders through the same verified annotation-entity pipeline as every
|
|
115
|
+
other annotation primitive (`Line`, `Text`, `Table`, ...): it flattens into
|
|
116
|
+
six identified child entities (dimension line, two extension/witness lines,
|
|
117
|
+
two arrowheads, and a label), each carrying an `SVG data-annotation-id`, a DXF
|
|
118
|
+
`PYTHON_CAD_TOOLS` XDATA tag, and an annotation-manifest record, so it
|
|
119
|
+
round-trip verifies in SVG, DXF, and PDF like any other Tier 1 drawing
|
|
120
|
+
annotation. The dimension line offsets perpendicular to the measured segment:
|
|
121
|
+
in Y for a predominantly horizontal measurement, in X otherwise. The rendered
|
|
122
|
+
DXF output is tagged geometry, not a native associative `DIMENSION` entity.
|
|
123
|
+
|
|
124
|
+
## Validator invocation
|
|
125
|
+
|
|
126
|
+
`validate_model(model)` runs the built-in element/model rules (stable IDs,
|
|
127
|
+
geometry validity, material requirements, IFC mapping intent, storey names,
|
|
128
|
+
user property types, opening identity/geometry) and then every callable in
|
|
129
|
+
`DesignModel.validators` in list order, each receiving the model and
|
|
130
|
+
returning a `list[ValidationIssue]`. `fatal_issues(...)` filters to
|
|
131
|
+
`severity == "error"`; `python-cad build`/`validate` fail on any fatal issue
|
|
132
|
+
before export begins.
|
|
133
|
+
|
|
134
|
+
## Construction recipes (Phase 2)
|
|
135
|
+
|
|
136
|
+
Parametric BREP/SweptSolid IFC representation via a construction-recipe model
|
|
137
|
+
(`python_cad_tools.recipes`) is scoped as a separate SpecRepo proposal and is
|
|
138
|
+
not yet implemented. This section will be extended when that proposal ships.
|
|
@@ -9,7 +9,8 @@ of optional runtime imports.
|
|
|
9
9
|
|
|
10
10
|
- `python_cad_tools.context`: `BuildContext` and `DrawingContext`.
|
|
11
11
|
- `python_cad_tools.elements`: `Color`, `GeometryKind`, `DesignElement`,
|
|
12
|
-
`DesignModel`, `Dimensions`, `IfcMapping`, `MaterialSpec`, and
|
|
12
|
+
`DesignModel`, `Dimensions`, `IfcMapping`, `MaterialSpec`, `Opening`, and
|
|
13
|
+
`Placement`.
|
|
13
14
|
- `python_cad_tools.units`: `Length`, `Area`, `Volume`, `MM`, `INCH`, `FOOT`,
|
|
14
15
|
`mm`, `inches`, `feet`, `feet_inches`, `to_mm`, `square_feet`, `cubic_feet`,
|
|
15
16
|
`cubic_yards`, `metres`, and `square_metres`.
|
|
@@ -17,7 +18,7 @@ of optional runtime imports.
|
|
|
17
18
|
`prism_between`, `sloped_pool`, `bounds`, `combined_bounds`, `tessellate`,
|
|
18
19
|
`is_valid_solid`, and `diagonal`.
|
|
19
20
|
- `python_cad_tools.drawings`: `Point2`, `Direction`, `DrawingStyleToken`,
|
|
20
|
-
`DrawingSheet`, `Line`, `Polyline`, `Text`, `SectionCallout`,
|
|
21
|
+
`DrawingSheet`, `Line`, `Polyline`, `Text`, `Dimension`, `SectionCallout`,
|
|
21
22
|
`ElevationMarker`, `TableRow`, `Table`, `SheetAnnotations`, and
|
|
22
23
|
`DrawingAnnotationSet`.
|
|
23
24
|
- `python_cad_tools.validation`: `ValidationIssue`.
|
|
@@ -35,6 +36,12 @@ of optional runtime imports.
|
|
|
35
36
|
flattened compound entities, file writers, and drawing validators remain
|
|
36
37
|
private. See [Format-neutral drawing extensions](drawing-extensions.md).
|
|
37
38
|
|
|
39
|
+
Python CAD Tools distinguishes Tier 1 (verified authoring through this public
|
|
40
|
+
API) from Tier 2 (supported, unverified direct use of a library named in
|
|
41
|
+
`docs/toolchain.md`). See [The two-tier authoring
|
|
42
|
+
contract](two-tier-contract.md) and the full field reference in
|
|
43
|
+
[Neutral model reference](neutral-model.md).
|
|
44
|
+
|
|
38
45
|
Every public type is inline-typed and the wheel includes `py.typed`. Public
|
|
39
46
|
module `__all__` values are tested as allowlists. Exporter implementations,
|
|
40
47
|
`_project_loader`, `_project_state`, renderer code, staging helpers, and other
|