--- /dev/null
+%import "layer0.graph" \r
+%import "animation.graph"\r
+%import "image.graph" IMAGE\r
+%define symmetric()\r
+ $subject\r
+ $layer0.InverseOf $subject\r
+%define tag($tagname)\r
+ $subject\r
+ $tagname $subject\r
+%deflib Type _ @ "Types" : TypeLibrary\r
+ PartOf G3DOntology\r
+%deflib Relation _ @ "Relations" : RelationLibrary\r
+ PartOf G3DOntology\r
+%deflib Library G3DOntology\r
+G3DOntology @ "G3D Ontology" : Ontology\r
+ PartOf TypeSystemProject\r
+ HasNamespace "http://www.vtt.fi/Simantics/G3D/1.0" : URI\r
+ HasVersion "1.0" : Version\r
+ HasResourceClass "org.simantics.proconf.g3d.stubs.G3DResource" : String\r
+ HasStubsPackage "org.simantics.proconf.g3d.stubs" : String\r
+\r
+G3DNamespace @ "G3D Namespace" : Namespace\r
+ PartOf TypeSystemNamespaces\r
+ HasNamespace "http://www.vtt.fi/Simantics/G3D/1.0" : URI\r
+ HasNamespaceRoot G3DOntology\r
+\r
+HasTransformationValue <R HasProperty\r
+ InverseOf TransformationValueOf\r
+ HasRange [Double]\r
+HasX <R HasTransformationValue\r
+HasY <R HasTransformationValue\r
+HasZ <R HasTransformationValue\r
+HasAngle <R HasTransformationValue\r
+Tuple3 <T Property\r
+ [HasX card "1"]\r
+ [HasY card "1"]\r
+ [HasZ card "1"]\r
+Position <T Tuple3\r
+Center <T Tuple3\r
+Orientation <T Property\r
+ [HasX card "1"]\r
+ [HasY card "1"]\r
+ [HasZ card "1"]\r
+ [HasAngle card "1"]\r
+Transformation <T Property\r
+Position <T Transformation\r
+Orientation <T Transformation\r
+Center <T Transformation\r
+\r
+# Parent-child relationship\r
+HasChild <R IsRelatedTo\r
+ InverseOf HasParent\r
+ HasDomain [G3DNode]\r
+ HasRange [G3DNode]\r
+HasGeometryDefinition <R HasChild\r
+ InverseOf GeometryDefinitionOf\r
+\r
+# Properties of G3DNode are divided into transformation properties and non-transformation properties \r
+# All 3D properties must be inherited from these two. (Queries that update scene-graph require this) \r
+HasTransformation <R HasProperty\r
+ InverseOf TransformationOf\r
+HasNonTransformation <R HasProperty\r
+ InverseOf NonTransformationOf\r
+ \r
+HasLocalPosition <R HasTransformation\r
+ HasRange [Position]\r
+ InverseOf LocalPositionOf\r
+HasWorldPosition <R HasTransformation\r
+ HasRange [Position]\r
+ InverseOf WorldPositionOf\r
+HasLocalOrientation <R HasTransformation\r
+ HasRange [Orientation]\r
+ InverseOf LocalOrientationOf\r
+HasWorldOrientation <R HasTransformation\r
+ HasRange [Orientation]\r
+ InverseOf WorldOrientationOf\r
+HasCenter <R HasTransformation\r
+ HasRange [Center]\r
+G3DNode @ "G3DNode" <T Entity\r
+ [HasParent card "0..1"]\r
+ [HasChild card "0..*"]\r
+ [HasLocalPosition card "0..1"]\r
+ [HasWorldPosition card "0..1"]\r
+ [HasLocalOrientation card "0..1"]\r
+ [HasWorldOrientation card "0..1"]\r
+ [HasCenter card "0..1"]\r
+ HasDescription "Base node for scene-graph" : String\r
+ Includes\r
+ HasChild\r
+ Propagates\r
+ HasChild\r
+HasG3DNode @ "Has G3DNode" <R DependsOn\r
+ HasRange [G3DNode]\r
+HasRed <R HasProperty\r
+ HasRange [Double]\r
+HasGreen <R HasProperty\r
+ HasRange [Double]\r
+HasBlue <R HasProperty\r
+ HasRange [Double]\r
+HasTransparency <R HasProperty\r
+ HasRange [Double]\r
+HasShininess <R HasProperty\r
+ HasRange [Double]\r
+Color <T Entity\r
+ [HasRed card "1"]\r
+ [HasGreen card "1"]\r
+ [HasBlue card "1"]\r
+HasDiffuseColor <R IsRelatedTo\r
+ InverseOf DiffuseColorOf\r
+ HasRange [Color]\r
+HasSpecularColor <R IsRelatedTo\r
+ InverseOf SpecularColorOf\r
+ HasRange [Color]\r
+HasAmbientColor <R IsRelatedTo\r
+ InverseOf AmbientColorOf\r
+ HasRange [Color]\r
+HasEmissiveColor <R IsRelatedTo\r
+ InverseOf EmissiveColorOf\r
+ HasRange [Color]\r
+\r
+Material <T Entity\r
+ [HasDiffuseColor card "1"]\r
+ [HasSpecularColor card "1"]\r
+ [HasAmbientColor card "1"]\r
+ [HasEmissiveColor card "1"]\r
+ [HasTransparency card "1"]\r
+ [HasShininess card "1"]\r
+ Includes\r
+ HasDiffuseColor\r
+ HasSpecularColor\r
+ HasAmbientColor\r
+ HasEmissiveColor\r
+ HasTransparency\r
+ HasShininess\r
+ Propagates\r
+ HasDiffuseColor\r
+ HasSpecularColor\r
+ HasAmbientColor\r
+ HasEmissiveColor\r
+ HasTransparency\r
+ HasShininess\r
+TextureCoordinateGenerator <T Property\r
+ tag(Enumeration)\r
+HasTextureCoordinateGenerator <R DependsOn\r
+ HasRange [TextureCoordinateGenerator]\r
+TextureCoordinateGenerations : Library\r
+ ConsistsOf\r
+ _sphere @ "sphere" : TextureCoordinateGenerator\r
+ _eye_linear @ "eye linear" : TextureCoordinateGenerator\r
+ _object_linear @ "object linear" : TextureCoordinateGenerator\r
+ _normal @ "normal" : TextureCoordinateGenerator\r
+ _reflection @ "reflection" : TextureCoordinateGenerator\r
+\r
+TextureMode @ "MultiTexture Mode" <T Property\r
+ tag(Enumeration)\r
+ ConsistsOf\r
+ mt_add @ "add" : TextureMode\r
+ mt_modulate @ "modulate" : TextureMode\r
+ mt_blend @ "blend" : TextureMode\r
+ mt_decal @ "decal" : TextureMode\r
+ mt_replace @ "replace" : TextureMode\r
+ mt_combine @ "combine" : TextureMode\r
+HasTextureMode @ "Has Texture Mode" <R DependsOn\r
+ HasRange [TextureMode]\r
+ \r
+CombineMode <T Property\r
+ tag(Enumeration)\r
+ ConsistsOf\r
+ cm_add @ "add" : CombineMode\r
+ cm_replace @ "replace" : CombineMode\r
+ cm_modulate @ "modulate" : CombineMode\r
+ cm_add_signed @ "add signed" : CombineMode\r
+ cm_subtract @ "subtract" : CombineMode\r
+ cm_interpolate @ "interpolate" : CombineMode\r
+ cm_dot3 @ "dot3" : CombineMode\r
+#HasCombineMode <R DependsOn\r
+# HasRange [CombineMode]\r
+ \r
+CombineSource <T Property\r
+ tag(Enumeration)\r
+ ConsistsOf\r
+ cs_object_color @ "object color" : CombineSource\r
+ cs_texture_color @ "texture color" : CombineSource\r
+ cs_constant_color @ "constant color" : CombineSource\r
+ cs_previous_texture_state @ "previous state" : CombineSource\r
+ cs_texture0 @ "texture 0" : CombineSource\r
+ cs_texture1 @ "texture 1" : CombineSource\r
+#HasCombineSource <R DependsOn\r
+# HasRange [CombineSource]\r
+CombineFunction <T Property\r
+ tag(Enumeration)\r
+ ConsistsOf\r
+ cf_src_color @ "src color" : CombineFunction\r
+ cf_one_minus_src_color @ "one minus src color" : CombineFunction\r
+ cf_src_alpha @ "src alpha" : CombineFunction\r
+ cf_one_minus_src_alpha @ "one minus src alpha" : CombineFunction\r
+#HasCombineFunction <R DependsOn\r
+# HasRange [CombineFunction]\r
+\r
+HasCombineDefinition @ "Has Combine Definition" <R HasProperty\r
+ HasRange [LinkedList]\r
+ \r
+#MultiTextureElement @ "MultiTextureElement" <T Entity\r
+# [HasTexture card "1"]\r
+\r
+Texture <T Property\r
+ [HasTextureMode card "0..1"]\r
+ [HasCombineDefinition card "0..1"]\r
+ [HasTextureCoordinateGenerator card "0..1"]\r
+ #[HasCombineMode card "0..1"]\r
+ #[HasCombineSource card "0..1"]\r
+ #[HasCombineFunction card "0..1"]\r
+ \r
+HasTexture <R DependsOn\r
+ HasRange [Texture]\r
+ \r
+Texture1D @ "Texture1D" <T Texture\r
+Texture2D @ "Texture2D" <T Texture\r
+Texture3D @ "Texture3D" <T Texture\r
+CubeMapTexture @ "CubeMap Texture" <T Texture\r
+ \r
+#MultiTextureElementList @ "MultiTextureElementList" <T LinkedList\r
+#HasMultiTextureElementList @ "Has MultiTextureElementList" <R DependsOn : FunctionalRelation\r
+HasMultiTextureElementList @ "Has MultiTextureElementList" <R HasProperty\r
+ HasRange [LinkedList]\r
+ #HasRange [MultiTextureElementList]\r
+# this definition is incorrect: multitexture cannot have texturemode,m etc. itself\r
+MultiTexture @ "MultiTexture" <T Texture\r
+ [HasMultiTextureElementList card "1"]\r
+HasImage <R DependsOn\r
+ HasRange [IMAGE.Image]\r
+ImageTexture @ "ImageTexture" <T Texture2D\r
+ [HasImage card "1"]\r
+HasVertexShader <R HasProperty\r
+ HasRange [String]\r
+HasFragmentShader <R HasProperty\r
+ HasRange [String]\r
+Shader <T Entity\r
+ [HasVertexShader card "1"]\r
+ [HasFragmentShader card "1"]\r
+HasMaterial <R IsRelatedTo\r
+ HasRange [Material]\r
+HasShader <R IsRelatedTo\r
+ HasRange [Shader]\r
+Appearance <T Entity\r
+ [HasMaterial card "0..1"]\r
+ [HasTexture card "0..1"]\r
+ [HasShader card "0..1"]\r
+ Includes\r
+ HasMaterial\r
+ HasTexture\r
+ HasShader\r
+ Propagates\r
+ HasMaterial\r
+ HasTexture\r
+ HasShader\r
+HasAppearance <R HasProperty # HasNonTransformation \r
+ HasRange [Appearance]\r
+Shape <T G3DNode\r
+ [HasAppearance card "0..1"]\r
+ HasDescription "Node for representing geometries" : String\r
+ Includes\r
+ HasAppearance\r
+G3DModel @ "G3DModel" <T G3DNode\r
+ [HasAnimation card "0..*"]\r
+ [HasSizingParameter card "0..*"]\r
+ Includes\r
+ HasAnimation\r
+ HasSizingParameter\r
+ Propagates\r
+ HasAnimation\r
+ HasSizingParameter\r
+HasSizingParameter <R HasNonTransformation\r
+ HasDescription "Sizing parameters are used for defining parameterization of a model" : String\r
+ HasDomain [G3DModel]\r
+ HasRange [Double]\r
+HasDefaultDoubleValue <R HasProperty\r
+ HasDescription "Sizing Parameter's default value" : String\r
+ HasDomain [Double]\r
+ HasRange [Double]\r
+ \r
+HasConstraints <R HasAdapter2 : FunctionalRelation\r
+\r
+\r