sysmledgraph 0.7.0
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.
- package/README.md +71 -0
- package/dist/bin/cli.d.ts +6 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +61 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +8 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/src/cli/commands.d.ts +22 -0
- package/dist/src/cli/commands.d.ts.map +1 -0
- package/dist/src/cli/commands.js +87 -0
- package/dist/src/cli/commands.js.map +1 -0
- package/dist/src/discovery/find-sysml.d.ts +16 -0
- package/dist/src/discovery/find-sysml.d.ts.map +1 -0
- package/dist/src/discovery/find-sysml.js +30 -0
- package/dist/src/discovery/find-sysml.js.map +1 -0
- package/dist/src/discovery/load-order.d.ts +11 -0
- package/dist/src/discovery/load-order.d.ts.map +1 -0
- package/dist/src/discovery/load-order.js +85 -0
- package/dist/src/discovery/load-order.js.map +1 -0
- package/dist/src/graph/connection.d.ts +6 -0
- package/dist/src/graph/connection.d.ts.map +1 -0
- package/dist/src/graph/connection.js +7 -0
- package/dist/src/graph/connection.js.map +1 -0
- package/dist/src/graph/graph-store.d.ts +37 -0
- package/dist/src/graph/graph-store.d.ts.map +1 -0
- package/dist/src/graph/graph-store.js +108 -0
- package/dist/src/graph/graph-store.js.map +1 -0
- package/dist/src/graph/schema.d.ts +13 -0
- package/dist/src/graph/schema.d.ts.map +1 -0
- package/dist/src/graph/schema.js +21 -0
- package/dist/src/graph/schema.js.map +1 -0
- package/dist/src/index.d.ts +14 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +14 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/indexer/indexer.d.ts +20 -0
- package/dist/src/indexer/indexer.d.ts.map +1 -0
- package/dist/src/indexer/indexer.js +56 -0
- package/dist/src/indexer/indexer.js.map +1 -0
- package/dist/src/indexer/pipeline-phases.d.ts +8 -0
- package/dist/src/indexer/pipeline-phases.d.ts.map +1 -0
- package/dist/src/indexer/pipeline-phases.js +14 -0
- package/dist/src/indexer/pipeline-phases.js.map +1 -0
- package/dist/src/mcp/resources/context.d.ts +6 -0
- package/dist/src/mcp/resources/context.d.ts.map +1 -0
- package/dist/src/mcp/resources/context.js +45 -0
- package/dist/src/mcp/resources/context.js.map +1 -0
- package/dist/src/mcp/resources/schema.d.ts +6 -0
- package/dist/src/mcp/resources/schema.d.ts.map +1 -0
- package/dist/src/mcp/resources/schema.js +14 -0
- package/dist/src/mcp/resources/schema.js.map +1 -0
- package/dist/src/mcp/server.d.ts +8 -0
- package/dist/src/mcp/server.d.ts.map +1 -0
- package/dist/src/mcp/server.js +175 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/dist/src/mcp/tools/clean-index.d.ts +12 -0
- package/dist/src/mcp/tools/clean-index.d.ts.map +1 -0
- package/dist/src/mcp/tools/clean-index.js +22 -0
- package/dist/src/mcp/tools/clean-index.js.map +1 -0
- package/dist/src/mcp/tools/context.d.ts +14 -0
- package/dist/src/mcp/tools/context.d.ts.map +1 -0
- package/dist/src/mcp/tools/context.js +51 -0
- package/dist/src/mcp/tools/context.js.map +1 -0
- package/dist/src/mcp/tools/cypher.d.ts +13 -0
- package/dist/src/mcp/tools/cypher.d.ts.map +1 -0
- package/dist/src/mcp/tools/cypher.js +25 -0
- package/dist/src/mcp/tools/cypher.js.map +1 -0
- package/dist/src/mcp/tools/generate-map.d.ts +13 -0
- package/dist/src/mcp/tools/generate-map.d.ts.map +1 -0
- package/dist/src/mcp/tools/generate-map.js +96 -0
- package/dist/src/mcp/tools/generate-map.js.map +1 -0
- package/dist/src/mcp/tools/impact.d.ts +14 -0
- package/dist/src/mcp/tools/impact.d.ts.map +1 -0
- package/dist/src/mcp/tools/impact.js +47 -0
- package/dist/src/mcp/tools/impact.js.map +1 -0
- package/dist/src/mcp/tools/index-db-graph.d.ts +14 -0
- package/dist/src/mcp/tools/index-db-graph.d.ts.map +1 -0
- package/dist/src/mcp/tools/index-db-graph.js +32 -0
- package/dist/src/mcp/tools/index-db-graph.js.map +1 -0
- package/dist/src/mcp/tools/list-indexed.d.ts +9 -0
- package/dist/src/mcp/tools/list-indexed.d.ts.map +1 -0
- package/dist/src/mcp/tools/list-indexed.js +14 -0
- package/dist/src/mcp/tools/list-indexed.js.map +1 -0
- package/dist/src/mcp/tools/query.d.ts +14 -0
- package/dist/src/mcp/tools/query.d.ts.map +1 -0
- package/dist/src/mcp/tools/query.js +47 -0
- package/dist/src/mcp/tools/query.js.map +1 -0
- package/dist/src/mcp/tools/rename.d.ts +19 -0
- package/dist/src/mcp/tools/rename.d.ts.map +1 -0
- package/dist/src/mcp/tools/rename.js +46 -0
- package/dist/src/mcp/tools/rename.js.map +1 -0
- package/dist/src/parser/lsp-client.d.ts +52 -0
- package/dist/src/parser/lsp-client.d.ts.map +1 -0
- package/dist/src/parser/lsp-client.js +230 -0
- package/dist/src/parser/lsp-client.js.map +1 -0
- package/dist/src/parser/lsp-server-path.d.ts +10 -0
- package/dist/src/parser/lsp-server-path.d.ts.map +1 -0
- package/dist/src/parser/lsp-server-path.js +29 -0
- package/dist/src/parser/lsp-server-path.js.map +1 -0
- package/dist/src/parser/symbols.d.ts +13 -0
- package/dist/src/parser/symbols.d.ts.map +1 -0
- package/dist/src/parser/symbols.js +150 -0
- package/dist/src/parser/symbols.js.map +1 -0
- package/dist/src/parser/sysml-mcp-client.d.ts +109 -0
- package/dist/src/parser/sysml-mcp-client.d.ts.map +1 -0
- package/dist/src/parser/sysml-mcp-client.js +185 -0
- package/dist/src/parser/sysml-mcp-client.js.map +1 -0
- package/dist/src/storage/clean.d.ts +15 -0
- package/dist/src/storage/clean.d.ts.map +1 -0
- package/dist/src/storage/clean.js +44 -0
- package/dist/src/storage/clean.js.map +1 -0
- package/dist/src/storage/list.d.ts +9 -0
- package/dist/src/storage/list.d.ts.map +1 -0
- package/dist/src/storage/list.js +12 -0
- package/dist/src/storage/list.js.map +1 -0
- package/dist/src/storage/location.d.ts +22 -0
- package/dist/src/storage/location.d.ts.map +1 -0
- package/dist/src/storage/location.js +36 -0
- package/dist/src/storage/location.js.map +1 -0
- package/dist/src/storage/registry.d.ts +14 -0
- package/dist/src/storage/registry.d.ts.map +1 -0
- package/dist/src/storage/registry.js +59 -0
- package/dist/src/storage/registry.js.map +1 -0
- package/dist/src/symbol-to-graph/mapping.d.ts +17 -0
- package/dist/src/symbol-to-graph/mapping.d.ts.map +1 -0
- package/dist/src/symbol-to-graph/mapping.js +102 -0
- package/dist/src/symbol-to-graph/mapping.js.map +1 -0
- package/dist/src/types.d.ts +40 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +35 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/worker/client.d.ts +21 -0
- package/dist/src/worker/client.d.ts.map +1 -0
- package/dist/src/worker/client.js +126 -0
- package/dist/src/worker/client.js.map +1 -0
- package/dist/src/worker/gateway.d.ts +79 -0
- package/dist/src/worker/gateway.d.ts.map +1 -0
- package/dist/src/worker/gateway.js +93 -0
- package/dist/src/worker/gateway.js.map +1 -0
- package/dist/src/worker/graph-worker.d.ts +7 -0
- package/dist/src/worker/graph-worker.d.ts.map +1 -0
- package/dist/src/worker/graph-worker.js +91 -0
- package/dist/src/worker/graph-worker.js.map +1 -0
- package/dist/src/worker/protocol.d.ts +21 -0
- package/dist/src/worker/protocol.d.ts.map +1 -0
- package/dist/src/worker/protocol.js +9 -0
- package/dist/src/worker/protocol.js.map +1 -0
- package/docs/INSTALL.md +16 -0
- package/docs/MCP_CLIENT_TEMPLATE_ANALYSIS.md +196 -0
- package/docs/MCP_INTERACTION_GUIDE.md +201 -0
- package/docs/MCP_SERVER_FOR_CURSOR.md +124 -0
- package/docs/PLAN.md +58 -0
- package/docs/PLAN_INDEPENDENT_LSP.md +145 -0
- package/docs/SKILL_DESIGN_PATTERNS.md +305 -0
- package/docs/TOOLS.md +317 -0
- package/lsp/README.md +41 -0
- package/lsp/node_modules/.bin/sysml-mcp +12 -0
- package/lsp/node_modules/.bin/sysml-mcp.cmd +9 -0
- package/lsp/node_modules/.bin/sysml-mcp.ps1 +16 -0
- package/lsp/node_modules/.package-lock.json +22 -0
- package/lsp/node_modules/sysml-v2-lsp/CHANGELOG.md +188 -0
- package/lsp/node_modules/sysml-v2-lsp/LICENSE +21 -0
- package/lsp/node_modules/sysml-v2-lsp/README.md +172 -0
- package/lsp/node_modules/sysml-v2-lsp/dist/server/mcpServer.js +167 -0
- package/lsp/node_modules/sysml-v2-lsp/dist/server/server.js +142 -0
- package/lsp/node_modules/sysml-v2-lsp/index.cjs +23 -0
- package/lsp/node_modules/sysml-v2-lsp/package.json +131 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/.project +17 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/.settings/org.eclipse.jdt.core.prefs +11 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Analysis/.meta.json +10 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Analysis/.project.json +27 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Analysis/AnalysisTooling.sysml +34 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Analysis/SampledFunctions.sysml +119 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Analysis/StateSpaceRepresentation.sysml +143 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Analysis/TradeStudies.sysml +171 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Cause and Effect/.meta.json +8 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Cause and Effect/.project.json +23 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Cause and Effect/CausationConnections.sysml +83 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Cause and Effect/CauseAndEffect.sysml +81 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Geometry/.meta.json +8 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Geometry/.project.json +27 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Geometry/ShapeItems.sysml +899 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Geometry/SpatialItems.sysml +168 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Metadata/.meta.json +10 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Metadata/.project.json +19 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Metadata/ImageMetadata.sysml +78 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Metadata/ModelingMetadata.sysml +143 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Metadata/ParametersOfInterestMetadata.sysml +39 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Metadata/RiskMetadata.sysml +100 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/.meta.json +29 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/.project.json +23 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQ.sysml +42 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQAcoustics.sysml +439 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQAtomicNuclear.sysml +2726 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQBase.sysml +206 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQCharacteristicNumbers.sysml +1991 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQChemistryMolecular.sysml +1353 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQCondensedMatter.sysml +1223 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQElectromagnetism.sysml +2333 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQInformation.sysml +958 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQLight.sysml +1537 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQMechanics.sysml +1564 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQSpaceTime.sysml +1169 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/ISQThermodynamics.sysml +1256 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/MeasurementRefCalculations.sysml +30 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/MeasurementReferences.sysml +526 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/Quantities.sysml +107 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/QuantityCalculations.sysml +70 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/SI.sysml +378 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/SIPrefixes.sysml +48 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/TensorCalculations.sysml +50 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/Time.sysml +274 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/USCustomaryUnits.sysml +260 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Quantities and Units/VectorCalculations.sysml +62 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Requirement Derivation/.meta.json +8 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Requirement Derivation/.project.json +19 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Requirement Derivation/DerivationConnections.sysml +63 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Requirement Derivation/RequirementDerivation.sysml +39 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Data Type Library/.meta.json +9 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Data Type Library/.project.json +11 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Data Type Library/Collections.kerml +147 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Data Type Library/ScalarValues.kerml +23 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Data Type Library/VectorValues.kerml +64 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/.meta.json +23 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/.project.json +15 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/BaseFunctions.kerml +80 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/BooleanFunctions.kerml +22 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/CollectionFunctions.kerml +68 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/ComplexFunctions.kerml +47 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/ControlFunctions.kerml +117 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/DataFunctions.kerml +43 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/IntegerFunctions.kerml +43 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/NaturalFunctions.kerml +27 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/NumericalFunctions.kerml +43 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/OccurrenceFunctions.kerml +154 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/RationalFunctions.kerml +49 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/RealFunctions.kerml +56 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/ScalarFunctions.kerml +33 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/SequenceFunctions.kerml +111 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/StringFunctions.kerml +25 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/TrigFunctions.kerml +35 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Function Library/VectorFunctions.kerml +273 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/.meta.json +22 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/.project.json +15 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Base.kerml +95 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Clocks.kerml +156 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/ControlPerformances.kerml +135 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/FeatureReferencingPerformances.kerml +190 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/KerML.kerml +483 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Links.kerml +67 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Metaobjects.kerml +58 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Objects.kerml +212 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Observation.kerml +161 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Occurrences.kerml +992 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Performances.kerml +293 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/SpatialFrames.kerml +197 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/StatePerformances.kerml +145 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Transfers.kerml +281 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/TransitionPerformances.kerml +66 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Kernel Libraries/Kernel Semantic Library/Triggers.kerml +188 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/.meta.json +27 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/.project.json +19 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Actions.sysml +552 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Allocations.sysml +29 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/AnalysisCases.sysml +38 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Attributes.sysml +25 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Calculations.sysml +37 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Cases.sysml +71 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Connections.sysml +60 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Constraints.sysml +44 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Flows.sysml +126 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Interfaces.sysml +89 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Items.sysml +153 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Metadata.sysml +32 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Parts.sysml +81 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Ports.sysml +54 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Requirements.sysml +194 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/StandardViewDefinitions.sysml +123 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/States.sysml +103 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/SysML.sysml +539 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/UseCases.sysml +57 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/VerificationCases.sysml +103 -0
- package/lsp/node_modules/sysml-v2-lsp/sysml.library/Systems Library/Views.sysml +164 -0
- package/lsp/package-lock.json +30 -0
- package/lsp/package.json +15 -0
- package/lsp/test-server.mjs +120 -0
- package/package.json +61 -0
- package/scripts/access-sysml-mcp.mjs +45 -0
- package/scripts/check-sysml-v2-lsp-version.mjs +39 -0
- package/scripts/clean.mjs +14 -0
- package/scripts/compare-mcp-vs-lsp-symbols.mjs +76 -0
- package/scripts/debug-index.mjs +23 -0
- package/scripts/debug-lsp-symbols.mjs +62 -0
- package/scripts/deploy-skills.mjs +43 -0
- package/scripts/example-sysml-mcp.mjs +27 -0
- package/scripts/export-graph.mjs +80 -0
- package/scripts/generate-map.mjs +110 -0
- package/scripts/index-and-map.mjs +43 -0
- package/scripts/index-and-query.mjs +39 -0
- package/scripts/query-one.mjs +34 -0
- package/scripts/setup-lsp.mjs +36 -0
- package/scripts/test-lsp.mjs +55 -0
- package/scripts/test-mcp-debug.mjs +32 -0
- package/scripts/test-mcp-sysml.mjs +75 -0
- package/scripts/test-mcp-tools.mjs +185 -0
- package/scripts/test-sysml-mcp-from-node_modules.mjs +56 -0
- package/scripts/validate-sysml-file.mjs +69 -0
package/lsp/node_modules/sysml-v2-lsp/sysml.library/Domain Libraries/Geometry/ShapeItems.sysml
ADDED
|
@@ -0,0 +1,899 @@
|
|
|
1
|
+
standard library package ShapeItems {
|
|
2
|
+
doc
|
|
3
|
+
/*
|
|
4
|
+
* This package provides a model of items that represent basic geometric shapes.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
private import ScalarValues::Boolean;
|
|
8
|
+
private import ScalarValues::Positive;
|
|
9
|
+
private import ISQSpaceTime::*;
|
|
10
|
+
private import ISQBase::*;
|
|
11
|
+
private import SI::m;
|
|
12
|
+
private import Occurrences::MatesWith;
|
|
13
|
+
private import Objects::*;
|
|
14
|
+
private import Items::Item;
|
|
15
|
+
private import SequenceFunctions::equals;
|
|
16
|
+
private import SequenceFunctions::isEmpty;
|
|
17
|
+
private import SequenceFunctions::notEmpty;
|
|
18
|
+
private import SequenceFunctions::size;
|
|
19
|
+
private import SequenceFunctions::includes;
|
|
20
|
+
private import ControlFunctions::'if';
|
|
21
|
+
private import ControlFunctions::forAll;
|
|
22
|
+
private import ControlFunctions::exists;
|
|
23
|
+
private import Quantities::scalarQuantities;
|
|
24
|
+
|
|
25
|
+
item def PlanarCurve :> Curve {
|
|
26
|
+
doc
|
|
27
|
+
/*
|
|
28
|
+
* A PlanarCurve is a Curve with a given length embeddable in a plane.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
attribute :>> length [1];
|
|
32
|
+
|
|
33
|
+
attribute :>> outerSpaceDimension;
|
|
34
|
+
assert constraint { notEmpty(outerSpaceDimension) & outerSpaceDimension <= 2 }
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
item def PlanarSurface :> Surface {
|
|
38
|
+
doc
|
|
39
|
+
/*
|
|
40
|
+
* A PlanarSurface is a flat Surface with a given area.
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
attribute :>> area [1];
|
|
44
|
+
attribute :>> outerSpaceDimension = 2;
|
|
45
|
+
|
|
46
|
+
item :>> shape : PlanarCurve;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
item def Line :> PlanarCurve {
|
|
50
|
+
doc
|
|
51
|
+
/*
|
|
52
|
+
* A Line is a Curve that is a straight line of a given length.
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
attribute :>> length [1];
|
|
56
|
+
attribute :>> outerSpaceDimension = 1;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
abstract item def Path :> StructuredSpaceObject::StructuredCurve {
|
|
60
|
+
doc
|
|
61
|
+
/*
|
|
62
|
+
* Path is the most general structured Curve.
|
|
63
|
+
*/
|
|
64
|
+
|
|
65
|
+
item :>> faces [0];
|
|
66
|
+
item :>> edges [1..*] {
|
|
67
|
+
item :>> vertices [0..2];
|
|
68
|
+
}
|
|
69
|
+
item :>> vertices [*] = edges.vertices;
|
|
70
|
+
|
|
71
|
+
assert constraint { isClosed == vertices->forAll{in p1 : Point;
|
|
72
|
+
vertices->exists{p2 : Point; p1 != p2 and
|
|
73
|
+
includes(p1.matingOccurrences, p2) } } }
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
attribute semiMajorAxis : LengthValue [0..*] :> scalarQuantities;
|
|
77
|
+
attribute semiMinorAxis : LengthValue [0..*] :> scalarQuantities;
|
|
78
|
+
attribute xoffset : LengthValue [0..*] :> scalarQuantities default 0 [m];
|
|
79
|
+
attribute yoffset : LengthValue [0..*] :> scalarQuantities default 0 [m];
|
|
80
|
+
attribute baseLength : LengthValue [0..*] :> scalarQuantities;
|
|
81
|
+
attribute baseWidth : LengthValue [0..*] :> scalarQuantities;
|
|
82
|
+
|
|
83
|
+
item def ConicSection :> Path, PlanarCurve {
|
|
84
|
+
doc
|
|
85
|
+
/*
|
|
86
|
+
* A ConicSection is a closed PlanarCurve, possibly disconnected, see Hyperbola.
|
|
87
|
+
*/
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
item :>> edges [1..2];
|
|
91
|
+
|
|
92
|
+
item :>> vertices [0];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
item def Ellipse :> ConicSection {
|
|
96
|
+
doc
|
|
97
|
+
/*
|
|
98
|
+
* An Ellipse is a ConicSection in the shape of an ellipse of a given semiaxes.
|
|
99
|
+
*/
|
|
100
|
+
|
|
101
|
+
attribute :>> semiMajorAxis [1];
|
|
102
|
+
attribute :>> semiMinorAxis [1];
|
|
103
|
+
|
|
104
|
+
item :>> edges [1];
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
item def Circle :> Ellipse {
|
|
108
|
+
doc
|
|
109
|
+
/*
|
|
110
|
+
* A Circle is an Ellipse with semiaxes equal to its radius.
|
|
111
|
+
*/
|
|
112
|
+
|
|
113
|
+
attribute :>> radius [1];
|
|
114
|
+
attribute :>> semiMajorAxis [1] = radius;
|
|
115
|
+
attribute :>> semiMinorAxis [1] = radius;
|
|
116
|
+
|
|
117
|
+
item :>> edges {
|
|
118
|
+
attribute length [1] = Circle::radius * TrigFunctions::pi * 2;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
item def Parabola :> ConicSection {
|
|
123
|
+
doc
|
|
124
|
+
/*
|
|
125
|
+
* A Parabola is a ConicSection in the shape of a parabola of a given focal length.
|
|
126
|
+
*/
|
|
127
|
+
|
|
128
|
+
attribute focalDistance : LengthValue [1] :> scalarQuantities;
|
|
129
|
+
|
|
130
|
+
item :>> edges [1];
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
item def Hyperbola :> ConicSection {
|
|
134
|
+
doc
|
|
135
|
+
/*
|
|
136
|
+
* A Hyperbola is a ConicSection in the shape of a hyperbola with given axes.
|
|
137
|
+
*/
|
|
138
|
+
|
|
139
|
+
attribute tranverseAxis : LengthValue [1] :> scalarQuantities;
|
|
140
|
+
attribute conjugateAxis : LengthValue [1] :> scalarQuantities;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
item def Polygon :> Path, PlanarCurve {
|
|
144
|
+
doc
|
|
145
|
+
/*
|
|
146
|
+
* A Polygon is a closed planar Path with straight edges.
|
|
147
|
+
*/
|
|
148
|
+
|
|
149
|
+
item :>> edges : Line { item :>> vertices [2]; }
|
|
150
|
+
|
|
151
|
+
attribute :>> isClosed = true;
|
|
152
|
+
|
|
153
|
+
assert constraint { (1..size(edges))->forAll {in i;
|
|
154
|
+
edges#(i).vertices->equals((vertices#((2*i)-1), vertices#(2*i))) and
|
|
155
|
+
includes((edges#(i).vertices#(2) as Item).matingOccurrences,
|
|
156
|
+
edges#(if i==size(edges) ? 1 else i+1).vertices#(1)) } }
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
item def Triangle :> Polygon {
|
|
160
|
+
doc
|
|
161
|
+
/*
|
|
162
|
+
* A Triangle is three-sided Polygon with given length (base), width (perpendicular distance
|
|
163
|
+
* from base to apex), and offset of this perpendicular at the base from the center of the base.
|
|
164
|
+
*/
|
|
165
|
+
|
|
166
|
+
attribute :>> length [1];
|
|
167
|
+
attribute :>> width [1];
|
|
168
|
+
attribute :>> xoffset [1];
|
|
169
|
+
|
|
170
|
+
item :>> edges [3] = (base, e2, e3);
|
|
171
|
+
item base [1] { length = Triangle::length; }
|
|
172
|
+
item e2 [1];
|
|
173
|
+
item e3 [1];
|
|
174
|
+
|
|
175
|
+
item :>> vertices [6];
|
|
176
|
+
item v12 [2] ordered = (vertices#(2), vertices#(3));
|
|
177
|
+
item apex [2] ordered = (vertices#(4), vertices#(5));
|
|
178
|
+
item v31 [2] ordered = (vertices#(6), vertices#(1));
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
item def RightTriangle :> Triangle {
|
|
182
|
+
doc
|
|
183
|
+
/*
|
|
184
|
+
* A RightTriangle is a Triangle with sides opposite the hypotenuse at right angles.
|
|
185
|
+
*/
|
|
186
|
+
|
|
187
|
+
attribute :>> xoffset = length / 2;
|
|
188
|
+
|
|
189
|
+
item :>> e2 { attribute :>> length = Triangle::width; }
|
|
190
|
+
|
|
191
|
+
item hypotenuse :>> e3 {
|
|
192
|
+
attribute :>> length = ( Triangle::length^2 + Triangle::width^2 );
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
item def Quadrilateral :> Polygon {
|
|
197
|
+
doc
|
|
198
|
+
/*
|
|
199
|
+
* A Quadrilateral is a four-sided Polygon.
|
|
200
|
+
*/
|
|
201
|
+
|
|
202
|
+
item :>> edges [4] = (e1, e2, e3, e4);
|
|
203
|
+
item e1 [1];
|
|
204
|
+
item e2 [1];
|
|
205
|
+
item e3 [1];
|
|
206
|
+
item e4 [1];
|
|
207
|
+
|
|
208
|
+
item :>> vertices [8];
|
|
209
|
+
item v12 [2] ordered = (vertices#(2), vertices#(3));
|
|
210
|
+
item v23 [2] ordered = (vertices#(4), vertices#(5));
|
|
211
|
+
item v34 [2] ordered = (vertices#(6), vertices#(7));
|
|
212
|
+
item v41 [2] ordered = (vertices#(6), vertices#(1));
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
item def Rectangle :> Quadrilateral {
|
|
216
|
+
doc
|
|
217
|
+
/*
|
|
218
|
+
* A Rectangle is a Quadrilateral four right angles and given length and width.
|
|
219
|
+
*/
|
|
220
|
+
|
|
221
|
+
attribute :>> length [1];
|
|
222
|
+
attribute :>> width [1];
|
|
223
|
+
|
|
224
|
+
item :>> e1 { attribute :>> length = Rectangle::length; }
|
|
225
|
+
item :>> e2 { attribute :>> length = Rectangle::width; }
|
|
226
|
+
item :>> e3 { attribute :>> length = e1.length; }
|
|
227
|
+
item :>> e4 { attribute :>> length = e2.length; }
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
abstract item def Shell :> StructuredSpaceObject::StructuredSurface {
|
|
231
|
+
doc
|
|
232
|
+
/*
|
|
233
|
+
* Shell is the most general structured Surface.
|
|
234
|
+
*/
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
item def Disc :> Shell, PlanarSurface {
|
|
238
|
+
doc
|
|
239
|
+
/*
|
|
240
|
+
* A Disc is a Shell bound by an Ellipse.
|
|
241
|
+
*/
|
|
242
|
+
|
|
243
|
+
attribute :>> semiMajorAxis [1];
|
|
244
|
+
attribute :>> semiMinorAxis [1];
|
|
245
|
+
|
|
246
|
+
item :>> shape : Ellipse [1] {
|
|
247
|
+
attribute :>> semiMajorAxis = Disc::semiMajorAxis;
|
|
248
|
+
attribute :>> semiMinorAxis = Disc::semiMinorAxis;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
item :>> faces : PlanarSurface [1] {
|
|
252
|
+
item :>> edges [1];
|
|
253
|
+
}
|
|
254
|
+
item :>> edges : Ellipse [1] = shape {
|
|
255
|
+
attribute :>> Shell::edges::innerSpaceDimension, Ellipse::innerSpaceDimension;
|
|
256
|
+
ref item :>> Shell::edges::vertices, Ellipse::vertices;
|
|
257
|
+
}
|
|
258
|
+
item :>> vertices [0];
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
item def CircularDisc :> Disc {
|
|
262
|
+
doc
|
|
263
|
+
/*
|
|
264
|
+
* A CircularDisc is a Disc bound by a Circle.
|
|
265
|
+
*/
|
|
266
|
+
|
|
267
|
+
attribute :>> radius [1];
|
|
268
|
+
attribute :>> semiMajorAxis [1] = radius;
|
|
269
|
+
attribute :>> semiMinorAxis [1] = radius;
|
|
270
|
+
|
|
271
|
+
item :>> shape : Circle {
|
|
272
|
+
attribute :>> Disc::shape::semiMajorAxis, Circle::semiMajorAxis;
|
|
273
|
+
attribute :>> Disc::shape::semiMinorAxis, Circle::semiMinorAxis;
|
|
274
|
+
}
|
|
275
|
+
item :>> edges : Circle;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
item def ConicSurface :> Shell {
|
|
279
|
+
doc
|
|
280
|
+
/*
|
|
281
|
+
* A ConicSurface is a Surface that has ConicSection cross-sections.
|
|
282
|
+
*/
|
|
283
|
+
|
|
284
|
+
item :>> faces [1..2];
|
|
285
|
+
item :>> edges [0];
|
|
286
|
+
item :>> vertices [0];
|
|
287
|
+
|
|
288
|
+
attribute :>> genus = 0;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
item def Ellipsoid :> ConicSurface {
|
|
292
|
+
doc
|
|
293
|
+
/*
|
|
294
|
+
* An Ellipsoid is a ConicSurface with only elliptical cross-sections.
|
|
295
|
+
*/
|
|
296
|
+
|
|
297
|
+
attribute semiAxis1 : LengthValue [1] :> scalarQuantities;
|
|
298
|
+
attribute semiAxis2 : LengthValue [1] :> scalarQuantities;
|
|
299
|
+
attribute semiAxis3 : LengthValue [1] :> scalarQuantities;
|
|
300
|
+
|
|
301
|
+
item :>> faces [1];
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
item def Sphere :> Ellipsoid {
|
|
305
|
+
doc
|
|
306
|
+
/*
|
|
307
|
+
* A Sphere is an Ellipsoid with all the same semiaxes.
|
|
308
|
+
*/
|
|
309
|
+
|
|
310
|
+
attribute :>> radius [1];
|
|
311
|
+
attribute :>> semiAxis1 [1] = radius;
|
|
312
|
+
attribute :>> semiAxis2 [1] = radius;
|
|
313
|
+
attribute :>> semiAxis3 [1] = radius;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
item def Paraboloid :> ConicSurface {
|
|
317
|
+
doc
|
|
318
|
+
/*
|
|
319
|
+
* A Paraboloid is a ConicSurface with only parabolic cross-sections.
|
|
320
|
+
*/
|
|
321
|
+
|
|
322
|
+
attribute focalDistance : LengthValue [1] :> scalarQuantities;
|
|
323
|
+
|
|
324
|
+
item :>> faces [1];
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
item def Hyperboloid :> ConicSurface {
|
|
328
|
+
doc
|
|
329
|
+
/*
|
|
330
|
+
* A Hyperboloid is a ConicSurface with only hyperbolic cross-sections.
|
|
331
|
+
*/
|
|
332
|
+
|
|
333
|
+
attribute transverseAxis : LengthValue [1] :> scalarQuantities;
|
|
334
|
+
attribute conjugateAxis : LengthValue [1] :> scalarQuantities;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
item def Toroid :> Shell {
|
|
338
|
+
doc
|
|
339
|
+
/*
|
|
340
|
+
* A Toroid is a surface generated from revolving a planar closed curve about an line coplanar
|
|
341
|
+
* with the curve. It is single sided with one hole.
|
|
342
|
+
*/
|
|
343
|
+
|
|
344
|
+
attribute revolutionRadius : LengthValue [1] :> scalarQuantities;
|
|
345
|
+
|
|
346
|
+
item revolvedCurve : PlanarCurve [1] { attribute :>> isClosed = true; }
|
|
347
|
+
|
|
348
|
+
item :>> faces [1];
|
|
349
|
+
item :>> edges [0];
|
|
350
|
+
item :>> vertices [0];
|
|
351
|
+
|
|
352
|
+
attribute :>> genus = 1;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
item def Torus :> Toroid {
|
|
356
|
+
doc
|
|
357
|
+
/*
|
|
358
|
+
* A Torus is a revolution of a Circle.
|
|
359
|
+
*/
|
|
360
|
+
|
|
361
|
+
attribute majorRadius :>> revolutionRadius;
|
|
362
|
+
attribute minorRadius : LengthValue [1] :> scalarQuantities;
|
|
363
|
+
|
|
364
|
+
item :>> revolvedCurve: Circle [1] { attribute :>> radius = minorRadius; }
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
item def RectangularToroid :> Toroid {
|
|
369
|
+
doc
|
|
370
|
+
/*
|
|
371
|
+
* A RectangularToroid is a revolution of a Rectangle.
|
|
372
|
+
*/
|
|
373
|
+
|
|
374
|
+
attribute rectangleLength : LengthValue [1] :> scalarQuantities;
|
|
375
|
+
attribute rectangleWidth : LengthValue [1] :> scalarQuantities;
|
|
376
|
+
|
|
377
|
+
item :>> revolvedCurve: Rectangle [1] {
|
|
378
|
+
attribute :>> length = rectangleLength;
|
|
379
|
+
attribute :>> width = rectangleWidth;
|
|
380
|
+
attribute :>> revolvedCurve::isClosed, Rectangle::isClosed;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
item def ConeOrCylinder :> Shell {
|
|
385
|
+
doc
|
|
386
|
+
/*
|
|
387
|
+
* A ConeOrCylinder is Shell that a Cone or a Cylinder with a given elliptical base,
|
|
388
|
+
* height, width (perpendicular distance from the base to the center of the top side or vertex),
|
|
389
|
+
* and offsets of this perpendicular at the base from the center of the base.
|
|
390
|
+
*/
|
|
391
|
+
|
|
392
|
+
attribute :>> semiMajorAxis [1];
|
|
393
|
+
attribute :>> semiMinorAxis [1];
|
|
394
|
+
attribute :>> height [1];
|
|
395
|
+
|
|
396
|
+
attribute :>> xoffset [1];
|
|
397
|
+
attribute :>> yoffset [1];
|
|
398
|
+
|
|
399
|
+
item :>> faces [2..3];
|
|
400
|
+
item base : Disc [1] :> faces {
|
|
401
|
+
attribute :>> Disc::innerSpaceDimension, faces::innerSpaceDimension;
|
|
402
|
+
ref :>> Disc::edges, ConeOrCylinder::faces::edges {
|
|
403
|
+
attribute :>> Disc::edges::innerSpaceDimension, ConeOrCylinder::faces::edges::innerSpaceDimension;
|
|
404
|
+
}
|
|
405
|
+
ref :>> Disc::vertices, ConeOrCylinder::faces::vertices;
|
|
406
|
+
}
|
|
407
|
+
item af : Disc [0..1] :> faces {
|
|
408
|
+
attribute :>> Disc::innerSpaceDimension, faces::innerSpaceDimension;
|
|
409
|
+
ref :>> Disc::edges, ConeOrCylinder::faces::edges {
|
|
410
|
+
attribute :>> Disc::edges::innerSpaceDimension, ConeOrCylinder::faces::edges::innerSpaceDimension;
|
|
411
|
+
}
|
|
412
|
+
ref :>> Disc::vertices, ConeOrCylinder::faces::vertices;
|
|
413
|
+
}
|
|
414
|
+
item cf : Surface [1] :> faces;
|
|
415
|
+
|
|
416
|
+
item :>> edges [2..4] = faces.edges;
|
|
417
|
+
item be [2] :> edges {
|
|
418
|
+
attribute :>> semiMajorAxis = ConeOrCylinder::semiMajorAxis;
|
|
419
|
+
attribute :>> semiMinorAxis = ConeOrCylinder::semiMinorAxis;
|
|
420
|
+
}
|
|
421
|
+
item ae [0..2] :> edges {
|
|
422
|
+
attribute :>> semiMajorAxis = be.semiMajorAxis;
|
|
423
|
+
attribute :>> semiMinorAxis = be.semiMinorAxis;
|
|
424
|
+
}
|
|
425
|
+
assert constraint { size(ae) == (if isEmpty(af) ? 0 else 2) and
|
|
426
|
+
size(edges) == (if isEmpty(af) ? 2 else 4) }
|
|
427
|
+
|
|
428
|
+
item :>> vertices [0..1] = faces.vertices;
|
|
429
|
+
assert constraint { isEmpty(af) == notEmpty(vertices) }
|
|
430
|
+
|
|
431
|
+
/* Bind face edges to specific edges */
|
|
432
|
+
binding [1] bind [0..*] base.edges = [0..*] be;
|
|
433
|
+
binding [1] bind [0..*] cf.edges = [0..*] be;
|
|
434
|
+
|
|
435
|
+
/* Meeting edges */
|
|
436
|
+
connection :MatesWith connect [1] be to [1] be;
|
|
437
|
+
|
|
438
|
+
attribute :>> genus = 0;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
item def Cone :> ConeOrCylinder {
|
|
442
|
+
doc
|
|
443
|
+
/*
|
|
444
|
+
* A Cone has one elliptical sides joined to a point by a curved side.
|
|
445
|
+
*/
|
|
446
|
+
|
|
447
|
+
item :>> faces [2];
|
|
448
|
+
|
|
449
|
+
item apex :>> vertices;
|
|
450
|
+
|
|
451
|
+
/* Bind face vertices to specific vertices */
|
|
452
|
+
binding [1] bind [0..*] cf.vertices = [0..*] apex;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
item def EccentricCone :> Cone {
|
|
456
|
+
doc
|
|
457
|
+
/*
|
|
458
|
+
* An EccentricCone is a Cone with least one positive offset.
|
|
459
|
+
*/
|
|
460
|
+
|
|
461
|
+
assert constraint { xoffset > 0 or yoffset > 0 }
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
item def CircularCone :> Cone {
|
|
465
|
+
doc
|
|
466
|
+
/*
|
|
467
|
+
* A CircularCone is a Cone with a circular base.
|
|
468
|
+
*/
|
|
469
|
+
|
|
470
|
+
attribute :>> radius [1];
|
|
471
|
+
attribute :>> semiMajorAxis [1] = radius;
|
|
472
|
+
attribute :>> semiMinorAxis [1] = radius;
|
|
473
|
+
|
|
474
|
+
item :>> base : CircularDisc {
|
|
475
|
+
ref :>> base::edges, CircularDisc::edges;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
item def RightCircularCone :> CircularCone {
|
|
480
|
+
doc
|
|
481
|
+
/*
|
|
482
|
+
* A RightCircularCone is a CircularCone with zero offsets.
|
|
483
|
+
*/
|
|
484
|
+
|
|
485
|
+
attribute :>> xoffset { attribute :>> num = 0; }
|
|
486
|
+
attribute :>> yoffset { attribute :>> num = 0; }
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
item def Cylinder :> ConeOrCylinder {
|
|
490
|
+
doc
|
|
491
|
+
/*
|
|
492
|
+
* A Cylinder has two elliptical sides joined by a curved side.
|
|
493
|
+
*/
|
|
494
|
+
|
|
495
|
+
item :>> af [1];
|
|
496
|
+
|
|
497
|
+
binding [1] bind [0..*] cf.edges = [0..*] ae;
|
|
498
|
+
|
|
499
|
+
connection :MatesWith connect [1] ae to [1] ae {
|
|
500
|
+
doc /* Meeting edges */
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
item def EccentricCylinder :> Cylinder {
|
|
505
|
+
doc
|
|
506
|
+
/*
|
|
507
|
+
* An EccentricCylinder is a Cylinder with least one positive offset.
|
|
508
|
+
*/
|
|
509
|
+
|
|
510
|
+
assert constraint { xoffset > 0 or yoffset > 0 }
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
item def CircularCylinder :> Cylinder {
|
|
514
|
+
doc
|
|
515
|
+
/*
|
|
516
|
+
* A CircularCylinder is a Cylinder with two circular sides.
|
|
517
|
+
*/
|
|
518
|
+
|
|
519
|
+
attribute :>> radius [1];
|
|
520
|
+
attribute :>> semiMajorAxis [1] = radius;
|
|
521
|
+
attribute :>> semiMinorAxis [1] = radius;
|
|
522
|
+
|
|
523
|
+
item :>> base : CircularDisc {
|
|
524
|
+
ref :>> base::edges, CircularDisc::edges;
|
|
525
|
+
}
|
|
526
|
+
item :>> af : CircularDisc {
|
|
527
|
+
ref :>> af::edges, CircularDisc::edges;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
item def RightCircularCylinder :> CircularCylinder {
|
|
532
|
+
doc
|
|
533
|
+
/*
|
|
534
|
+
* A RightCircularCylinder is a CircularCylinder with zero offsets.
|
|
535
|
+
*/
|
|
536
|
+
|
|
537
|
+
attribute :>> xoffset { attribute :>> num = 0; }
|
|
538
|
+
attribute :>> yoffset { attribute :>> num = 0; }
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
item def Polyhedron :> Shell {
|
|
542
|
+
doc
|
|
543
|
+
/*
|
|
544
|
+
* A Polyhedron is a closed Shell with polygonal sides.
|
|
545
|
+
*/
|
|
546
|
+
|
|
547
|
+
attribute :>> isClosed = true;
|
|
548
|
+
|
|
549
|
+
item :>> faces : Polygon [2..*] {
|
|
550
|
+
attribute :>> Polygon::innerSpaceDimension, faces::innerSpaceDimension;
|
|
551
|
+
ref :>> Polygon::edges, ConeOrCylinder::faces::edges;
|
|
552
|
+
ref :>> Polygon::vertices, ConeOrCylinder::faces::vertices;
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
item :>> edges = faces.edges;
|
|
556
|
+
|
|
557
|
+
attribute :>> outerSpaceDimension = if size(faces) > 2 ? 3 else 2;
|
|
558
|
+
|
|
559
|
+
attribute :>> genus = 0;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
item def CuboidOrTriangularPrism :> Polyhedron {
|
|
563
|
+
doc
|
|
564
|
+
/*
|
|
565
|
+
* A CuboidOrTriangularPrism is a Polyhedron that is either a Cuboid or TriangularPrism.
|
|
566
|
+
*/
|
|
567
|
+
|
|
568
|
+
item :>> faces [5..6];
|
|
569
|
+
item tf : Quadrilateral [1] :> faces {
|
|
570
|
+
ref :>> Quadrilateral::edges, ConeOrCylinder::faces::edges;
|
|
571
|
+
ref :>> Quadrilateral::vertices, ConeOrCylinder::faces::vertices;
|
|
572
|
+
}
|
|
573
|
+
item bf : Quadrilateral [1] :> faces {
|
|
574
|
+
ref :>> Quadrilateral::edges, ConeOrCylinder::faces::edges;
|
|
575
|
+
ref :>> Quadrilateral::vertices, ConeOrCylinder::faces::vertices;
|
|
576
|
+
}
|
|
577
|
+
item ff : Polygon [1] :> faces { item :>> Polygon::edges, faces::edges [3..4]; }
|
|
578
|
+
item rf : Polygon [1] :> faces { item :>> Polygon::edges, faces::edges [3..4]; }
|
|
579
|
+
item slf : Quadrilateral [1] :> faces {
|
|
580
|
+
ref :>> Quadrilateral::edges, ConeOrCylinder::faces::edges;
|
|
581
|
+
ref :>> Quadrilateral::vertices, ConeOrCylinder::faces::vertices;
|
|
582
|
+
}
|
|
583
|
+
item srf : Quadrilateral [0..1] :> faces {
|
|
584
|
+
ref :>> Quadrilateral::edges, ConeOrCylinder::faces::edges;
|
|
585
|
+
ref :>> Quadrilateral::vertices, ConeOrCylinder::faces::vertices;
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
item :>> edges;
|
|
589
|
+
assert constraint { size(edges) == 18 or size(edges) == 24 }
|
|
590
|
+
|
|
591
|
+
item tfe [2] :> edges;
|
|
592
|
+
item tre [2] :> edges;
|
|
593
|
+
item tsle [2] :> edges;
|
|
594
|
+
item tsre [0..2] :> edges;
|
|
595
|
+
item bfe [2] :> edges;
|
|
596
|
+
item bre [2] :> edges;
|
|
597
|
+
item bsle [2] :> edges;
|
|
598
|
+
item bsre [2] :> edges;
|
|
599
|
+
item ufle [2] :> edges;
|
|
600
|
+
item ufre [0..2] :> edges;
|
|
601
|
+
item urle [2] :> edges;
|
|
602
|
+
item urre [0..2] :> edges;
|
|
603
|
+
|
|
604
|
+
assert constraint { ( isEmpty(srf) implies isEmpty(tsre) ) and
|
|
605
|
+
( isEmpty(tsre) == isEmpty(ufre) ) and
|
|
606
|
+
( isEmpty(ufre) == isEmpty(urre) ) }
|
|
607
|
+
|
|
608
|
+
item :>> vertices;
|
|
609
|
+
assert constraint { size(vertices) == size(edges) }
|
|
610
|
+
|
|
611
|
+
item tflv [3] :> vertices;
|
|
612
|
+
item tfrv [0..3] :> vertices;
|
|
613
|
+
item trlv [3] :> vertices;
|
|
614
|
+
item trrv [0..3] :> vertices;
|
|
615
|
+
item bflv [3] :> vertices;
|
|
616
|
+
item bfrv [3] :> vertices;
|
|
617
|
+
item brlv [3] :> vertices;
|
|
618
|
+
item brrv [3] :> vertices;
|
|
619
|
+
|
|
620
|
+
assert constraint { ( isEmpty(tfrv) == isEmpty(trrv) ) }
|
|
621
|
+
|
|
622
|
+
/* Bind face edges to specific edges */
|
|
623
|
+
binding [1] bind [0..1] tf.edges = [0..1] tfe;
|
|
624
|
+
binding [1] bind [0..1] tf.edges = [0..1] tre;
|
|
625
|
+
binding [1] bind [0..1] tf.edges = [0..1] tsle;
|
|
626
|
+
binding [1] bind [0..1] bf.edges = [0..1] bfe;
|
|
627
|
+
binding [1] bind [0..1] bf.edges = [0..1] bre;
|
|
628
|
+
binding [1] bind [0..1] bf.edges = [0..1] bsle;
|
|
629
|
+
binding [1] bind [0..1] bf.edges = [0..1] bsre;
|
|
630
|
+
|
|
631
|
+
binding [1] bind [0..1] ff.edges = [0..1] tfe;
|
|
632
|
+
binding [1] bind [0..1] ff.edges = [0..1] bfe;
|
|
633
|
+
binding [1] bind [0..1] ff.edges = [0..1] ufle;
|
|
634
|
+
|
|
635
|
+
binding [1] bind [0..1] rf.edges = [0..1] tre;
|
|
636
|
+
binding [1] bind [0..1] rf.edges = [0..1] bre;
|
|
637
|
+
binding [1] bind [0..1] rf.edges = [0..1] urle;
|
|
638
|
+
|
|
639
|
+
/* Bind edge vertices to specific vertices */
|
|
640
|
+
binding [1] bind [0..1] tfe.vertices = [0..1] tflv;
|
|
641
|
+
binding [1] bind [0..1] tre.vertices = [0..1] trlv;
|
|
642
|
+
binding [1] bind [0..1] tsle.vertices = [0..1] tflv;
|
|
643
|
+
binding [1] bind [0..1] tsle.vertices = [0..1] trlv;
|
|
644
|
+
|
|
645
|
+
binding [1] bind [0..1] bfe.vertices = [0..1] bflv;
|
|
646
|
+
binding [1] bind [0..1] bfe.vertices = [0..1] bfrv;
|
|
647
|
+
binding [1] bind [0..1] bre.vertices = [0..1] brlv;
|
|
648
|
+
binding [1] bind [0..1] bre.vertices = [0..1] brrv;
|
|
649
|
+
binding [1] bind [0..1] bsle.vertices = [0..1] bflv;
|
|
650
|
+
binding [1] bind [0..1] bsle.vertices = [0..1] brlv;
|
|
651
|
+
binding [1] bind [0..1] bsre.vertices = [0..1] bfrv;
|
|
652
|
+
binding [1] bind [0..1] bsre.vertices = [0..1] brrv;
|
|
653
|
+
|
|
654
|
+
binding [1] bind [0..1] ufle.vertices = [0..1] tflv;
|
|
655
|
+
binding [1] bind [0..1] ufle.vertices = [0..1] bflv;
|
|
656
|
+
binding [1] bind [0..1] urle.vertices = [0..1] trlv;
|
|
657
|
+
binding [1] bind [0..1] urle.vertices = [0..1] brlv;
|
|
658
|
+
|
|
659
|
+
/* Meeting edges */
|
|
660
|
+
connection :MatesWith connect [1] tfe to [1] tfe;
|
|
661
|
+
connection :MatesWith connect [1] tre to [1] tre;
|
|
662
|
+
connection :MatesWith connect [1] tsle to [1] tsle;
|
|
663
|
+
connection :MatesWith connect [1] bfe to [1] bfe;
|
|
664
|
+
connection :MatesWith connect [1] bre to [1] bre;
|
|
665
|
+
connection :MatesWith connect [1] bsle to [1] bsle;
|
|
666
|
+
connection :MatesWith connect [1] bsre to [1] bsre;
|
|
667
|
+
connection :MatesWith connect [1] ufle to [1] ufle;
|
|
668
|
+
connection :MatesWith connect [1] urle to [1] urle;
|
|
669
|
+
connection :MatesWith connect [1] bsre to [1] bsre;
|
|
670
|
+
|
|
671
|
+
/* Meeting vertices */
|
|
672
|
+
connection :MatesWith connect [2] tflv to [2] tflv;
|
|
673
|
+
connection :MatesWith connect [2] trlv to [2] trlv;
|
|
674
|
+
connection :MatesWith connect [2] bflv to [2] bflv;
|
|
675
|
+
connection :MatesWith connect [2] bfrv to [2] bfrv;
|
|
676
|
+
connection :MatesWith connect [2] brlv to [2] brlv;
|
|
677
|
+
connection :MatesWith connect [2] brrv to [2] brrv;
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
item def TriangularPrism :> CuboidOrTriangularPrism {
|
|
681
|
+
doc
|
|
682
|
+
/*
|
|
683
|
+
* A TriangularPrism is a Polyhedron with five sides, two triangular and
|
|
684
|
+
* the others quadrilateral.
|
|
685
|
+
*/
|
|
686
|
+
|
|
687
|
+
|
|
688
|
+
item :>> faces [5];
|
|
689
|
+
item :>> ff : Triangle {
|
|
690
|
+
ref :>> Triangle::edges, ConeOrCylinder::faces::edges;
|
|
691
|
+
ref :>> Triangle::vertices, ConeOrCylinder::faces::vertices;
|
|
692
|
+
}
|
|
693
|
+
item :>> rf : Triangle {
|
|
694
|
+
ref :>> Triangle::edges, ConeOrCylinder::faces::edges;
|
|
695
|
+
ref :>> Triangle::vertices, ConeOrCylinder::faces::vertices;
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
item :>> edges [18];
|
|
699
|
+
|
|
700
|
+
item :>> vertices;
|
|
701
|
+
|
|
702
|
+
/* Bind face edges to specific edges */
|
|
703
|
+
binding [1] bind [0..1] tf.edges = [0..1] bsre;
|
|
704
|
+
|
|
705
|
+
/* Bind edge vertices to specific vertices */
|
|
706
|
+
binding [1] bind [0..1] tfe.vertices = [0..1] bfrv;
|
|
707
|
+
binding [1] bind [0..1] tre.vertices = [0..1] bfrv;
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
item def RightTriangularPrism :> TriangularPrism {
|
|
711
|
+
doc
|
|
712
|
+
/*
|
|
713
|
+
* A RightTriangularPrism a TriangularPrism with two right triangluar sides,
|
|
714
|
+
* with given length, width, and height.
|
|
715
|
+
*/
|
|
716
|
+
|
|
717
|
+
attribute :>> length [1];
|
|
718
|
+
attribute :>> width [1];
|
|
719
|
+
attribute :>> height [1];
|
|
720
|
+
|
|
721
|
+
item :>> tf : Rectangle;
|
|
722
|
+
item :>> bf : Rectangle;
|
|
723
|
+
item :>> ff : RightTriangle {
|
|
724
|
+
attribute :>> length = RightTriangularPrism::length;
|
|
725
|
+
attribute :>> width = RightTriangularPrism::width;
|
|
726
|
+
}
|
|
727
|
+
item :>> rf : RightTriangle {
|
|
728
|
+
attribute :>> length = ff.length;
|
|
729
|
+
attribute :>> width = rf.width;
|
|
730
|
+
}
|
|
731
|
+
item :>> slf : Rectangle;
|
|
732
|
+
item :>> srf : Rectangle;
|
|
733
|
+
|
|
734
|
+
item :>> tfe { attribute :>> length = ff.hypotenuse.length; }
|
|
735
|
+
item :>> tre { attribute :>> length = tfe.length; }
|
|
736
|
+
item :>> tsle { attribute :>> length = height; }
|
|
737
|
+
item :>> bfe { attribute :>> length = RightTriangularPrism::length; }
|
|
738
|
+
item :>> bre { attribute :>> length = RightTriangularPrism::length; }
|
|
739
|
+
item :>> bsle { attribute :>> length = height; }
|
|
740
|
+
item :>> bsre { attribute :>> length = height; }
|
|
741
|
+
item :>> ufle { attribute :>> length = width; }
|
|
742
|
+
item :>> urle { attribute :>> length = width; }
|
|
743
|
+
}
|
|
744
|
+
alias Wedge for RightTriangularPrism;
|
|
745
|
+
|
|
746
|
+
item def Cuboid :> CuboidOrTriangularPrism {
|
|
747
|
+
doc
|
|
748
|
+
/*
|
|
749
|
+
* A Cuboid is a Polyhedron with six sides, all quadrilateral.
|
|
750
|
+
*/
|
|
751
|
+
|
|
752
|
+
item :>> faces [6];
|
|
753
|
+
item :>> ff : Quadrilateral {
|
|
754
|
+
ref :>> Quadrilateral::edges, ConeOrCylinder::faces::edges;
|
|
755
|
+
ref :>> Quadrilateral::vertices, ConeOrCylinder::faces::vertices;
|
|
756
|
+
}
|
|
757
|
+
item :>> rf : Quadrilateral {
|
|
758
|
+
ref :>> Quadrilateral::edges, ConeOrCylinder::faces::edges;
|
|
759
|
+
ref :>> Quadrilateral::vertices, ConeOrCylinder::faces::vertices;
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
item :>> edges [24];
|
|
763
|
+
|
|
764
|
+
item :>> vertices;
|
|
765
|
+
|
|
766
|
+
/* Bind face edges to specific edges */
|
|
767
|
+
binding [1] bind [0..1] tf.edges = [0..1] tsre;
|
|
768
|
+
binding [1] bind [0..1] ff.edges = [0..1] ufre;
|
|
769
|
+
binding [1] bind [0..1] rf.edges = [0..1] urre;
|
|
770
|
+
|
|
771
|
+
binding [1] bind [0..1] srf.edges = [0..1] tsre;
|
|
772
|
+
binding [1] bind [0..1] srf.edges = [0..1] bsre;
|
|
773
|
+
binding [1] bind [0..1] srf.edges = [0..1] ufre;
|
|
774
|
+
binding [1] bind [0..1] srf.edges = [0..1] urre;
|
|
775
|
+
|
|
776
|
+
/* Bind edge vertices to specific vertices */
|
|
777
|
+
binding [1] bind [0..1] tfe.vertices = [0..1] tfrv;
|
|
778
|
+
binding [1] bind [0..1] tre.vertices = [0..1] trrv;
|
|
779
|
+
binding [1] bind [0..1] tsre.vertices = [0..1] tfrv;
|
|
780
|
+
binding [1] bind [0..1] tsre.vertices = [0..1] trrv;
|
|
781
|
+
|
|
782
|
+
binding [1] bind [0..1] ufre.vertices = [0..1] tfrv;
|
|
783
|
+
binding [1] bind [0..1] ufre.vertices = [0..1] bfrv;
|
|
784
|
+
binding [1] bind [0..1] urre.vertices = [0..1] trrv;
|
|
785
|
+
binding [1] bind [0..1] urre.vertices = [0..1] brrv;
|
|
786
|
+
|
|
787
|
+
/* Meeting edges */
|
|
788
|
+
connection :MatesWith connect [1] tsre to [1] tsre;
|
|
789
|
+
connection :MatesWith connect [1] ufre to [1] ufre;
|
|
790
|
+
connection :MatesWith connect [1] urre to [1] urre;
|
|
791
|
+
connection :MatesWith connect [1] bsre to [1] bsre;
|
|
792
|
+
|
|
793
|
+
/* Meeting vertices */
|
|
794
|
+
connection :MatesWith connect [2] tfrv to [2] tfrv;
|
|
795
|
+
connection :MatesWith connect [2] trrv to [2] trrv;
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
item def RectangularCuboid :> Cuboid {
|
|
799
|
+
doc
|
|
800
|
+
/*
|
|
801
|
+
* A RectangularCuboid is a Cuboid with all Rectangular sides.
|
|
802
|
+
*/
|
|
803
|
+
|
|
804
|
+
attribute :>> length [1];
|
|
805
|
+
attribute :>> width [1];
|
|
806
|
+
attribute :>> height [1];
|
|
807
|
+
|
|
808
|
+
item :>> tf : Rectangle { attribute :>> length = RectangularCuboid::length;
|
|
809
|
+
attribute :>> width = RectangularCuboid::height; }
|
|
810
|
+
item :>> bf : Rectangle { attribute :>> length = RectangularCuboid::length;
|
|
811
|
+
attribute :>> width = RectangularCuboid::height; }
|
|
812
|
+
item :>> ff : Rectangle { attribute :>> length = RectangularCuboid::length;
|
|
813
|
+
attribute :>> width = RectangularCuboid::width; }
|
|
814
|
+
item :>> rf : Rectangle { attribute :>> length = RectangularCuboid::length;
|
|
815
|
+
attribute :>> width = RectangularCuboid::width; }
|
|
816
|
+
item :>> slf : Rectangle { attribute :>> length = RectangularCuboid::height;
|
|
817
|
+
attribute :>> width = RectangularCuboid::width; }
|
|
818
|
+
item :>> srf : Rectangle { attribute :>> length = RectangularCuboid::height;
|
|
819
|
+
attribute :>> width = RectangularCuboid::width; }
|
|
820
|
+
}
|
|
821
|
+
alias Box for RectangularCuboid;
|
|
822
|
+
|
|
823
|
+
item def Pyramid :> Polyhedron {
|
|
824
|
+
doc
|
|
825
|
+
/*
|
|
826
|
+
* A Pyramid is a Polyhedron with the sides of a polygon (base) forming the bases of triangles
|
|
827
|
+
* that join at an apex point. Its height is the perpendicular distance from the base to the apex,
|
|
828
|
+
* and its offsets are between this perpendicular at the base and the center of the base.
|
|
829
|
+
*/
|
|
830
|
+
|
|
831
|
+
attribute :>> height [1];
|
|
832
|
+
attribute :>> xoffset;
|
|
833
|
+
attribute :>> yoffset;
|
|
834
|
+
|
|
835
|
+
item :>> faces;
|
|
836
|
+
item base [1] :> faces;
|
|
837
|
+
item wall : Triangle :> faces {
|
|
838
|
+
ref :>> Triangle::edges, ConeOrCylinder::faces::edges;
|
|
839
|
+
ref :>> Triangle::vertices, ConeOrCylinder::faces::vertices;
|
|
840
|
+
}
|
|
841
|
+
attribute wallNumber : Positive = size(wall);
|
|
842
|
+
|
|
843
|
+
assert constraint { size(faces) == wallNumber + 1 }
|
|
844
|
+
assert constraint { size(wall) == size(base.edges) }
|
|
845
|
+
|
|
846
|
+
item :>> edges;
|
|
847
|
+
|
|
848
|
+
assert constraint { size(edges) == wallNumber * 4 }
|
|
849
|
+
|
|
850
|
+
item :>> vertices;
|
|
851
|
+
item apex :> vertices = wall.apex;
|
|
852
|
+
|
|
853
|
+
assert constraint { size(apex) == wallNumber }
|
|
854
|
+
|
|
855
|
+
/* Base to wall and wall to wall edge mating. */
|
|
856
|
+
assert constraint { (1..wallNumber)->forAll {in i;
|
|
857
|
+
includes(wall#(i).base.matingOccurrences,
|
|
858
|
+
Pyramid::base.edges#(i)) and
|
|
859
|
+
includes((wall#(i).edges#(3) as Item).matingOccurrences,
|
|
860
|
+
wall#(if i==wallNumber ? 1 else i+1).edges#(2)) } }
|
|
861
|
+
|
|
862
|
+
/* Meeting apices. */
|
|
863
|
+
connection :MatesWith connect [wallNumber] apex to [wallNumber] apex;
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
item def Tetrahedron :> Pyramid {
|
|
867
|
+
doc
|
|
868
|
+
/*
|
|
869
|
+
* A Tetrahedron is Pyramid with a triangular base.
|
|
870
|
+
*/
|
|
871
|
+
|
|
872
|
+
attribute :>> baseLength [1];
|
|
873
|
+
attribute :>> baseWidth [1];
|
|
874
|
+
|
|
875
|
+
item :>> base : Triangle {
|
|
876
|
+
ref :>> Triangle::edges, ConeOrCylinder::faces::edges;
|
|
877
|
+
ref :>> Triangle::vertices, ConeOrCylinder::faces::vertices;
|
|
878
|
+
attribute :>> length = Tetrahedron::baseLength;
|
|
879
|
+
attribute :>> width = Tetrahedron::baseWidth;
|
|
880
|
+
}
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
item def RectangularPyramid :> Pyramid {
|
|
884
|
+
doc
|
|
885
|
+
/*
|
|
886
|
+
* A RectangularPyramid is Pyramid with a rectangular base.
|
|
887
|
+
*/
|
|
888
|
+
|
|
889
|
+
attribute :>> baseLength [1];
|
|
890
|
+
attribute :>> baseWidth [1];
|
|
891
|
+
|
|
892
|
+
item :>> base : Rectangle {
|
|
893
|
+
ref :>> Rectangle::edges, ConeOrCylinder::faces::edges;
|
|
894
|
+
ref :>> Rectangle::vertices, ConeOrCylinder::faces::vertices;
|
|
895
|
+
attribute :>> length = RectangularPyramid::baseLength;
|
|
896
|
+
attribute :>> width = RectangularPyramid::baseWidth;
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
}
|