{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-guides/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Schematics","description":"Accelerate E&P application development and protect your innovation by consuming our Data and Domain APIs / Platform APIs.","lang":"en-US","meta":[{"name":"robots","content":"noindex"}],"llmstxt":{"hide":true,"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"schematics","__idx":0},"children":["Schematics"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"introduction","__idx":1},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/pages/schematics/overview/schematics#intro"},"children":["#"]}," Introduction"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Out of the box SchematicsJS package offers user set of predefined schematic elements to use. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/Schematics/ElementsCatalog/elementsCatalog"},"children":["Elements Catalog"]}," example for the elements appearances grouped by their categories. All the elements graphics are stored in ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.schematics.factory.componentnodefactoryregistry.componentnodefactoryregistry.html"},"children":["ComponentNodeFactoryRegistry"]}," object. Any component in the registry can be replaced with a custom implementation; or a new component can be added (see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/Schematics/GeneralInformation/customNodes"},"children":["Custom Nodes"]}," tutorial for more details)."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To display wellbore data all elements data are collected in ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.schematics.data.wellboredata.wellboredata.html"},"children":["WellBoreData"]}," that in its turn is passed to ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.schematics.scene.wellborenode.wellborenode.html"},"children":["WellBoreNode"]}," object for visualization purposes. If labeling is needed ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.schematics.scene.wellborewithlabels.wellborewithlabels.html"},"children":["WellBoreWithLabels"]}," wrapper is utilized (see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/Schematics/LabelingStrategy/labelingStrategy"},"children":["Labeling Strategy"]}," tutorial for more details)."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"class-diagram-simplified","__idx":2},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/pages/schematics/overview/schematics#diagram"},"children":["#"]}," Class diagram (simplified)"]},{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/class_diagram.14b26554e63b2c26d922bc8d625e4c6e49d541a9dcf43021cefbbd2b7f76dc5e.e1763555.jpg"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"wellbore-data","__idx":3},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/pages/schematics/overview/schematics#wellbore"},"children":["#"]}," Wellbore data"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.schematics.data.wellboredata.wellboredata.html"},"children":["WellBoreData"]}," is essentially schematics component data container class (see its ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["addComponent(componentName, componentData)"]}," method API). The class is used by ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.schematics.scene.wellborenode.wellborenode.html"},"children":["WellBoreNode"]}," shape to visualize data. If this is the way user chosen, the elements’ data are translated into shapes internally by means of a factory registry associated with the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.schematics.scene.wellborenode.wellborenode.html"},"children":["WellBoreNode"]}," object (see \"User data input to component node\" sequence diagram at the bottom of the document)."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"component-node-factories-and-factory-registry","__idx":4},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/pages/schematics/overview/schematics#factory"},"children":["#"]}," Component node factories and factory registry"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["All schematics element type classes (more specifically, their ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.schematics.factory.abstractcomponentnodefactory.abstractcomponentnodefactory.html"},"children":["AbstractComponentNodeFactory"]}," implementations) are stored in ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.schematics.factory.componentnodefactoryregistry.componentnodefactoryregistry.html"},"children":["ComponentNodeFactoryRegistry"]}," object. Note that list of registered component names is returned by the registry's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getRegisteredComponents"]}," method. By default every ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.schematics.scene.wellborenode.wellborenode.html"},"children":["WellBoreNode"]}," contains an instance of the registry; in opposite case the registry can be created explicitly)."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"component-nodes","__idx":5},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/pages/schematics/overview/schematics#ComponentNodes"},"children":["#"]}," Component nodes"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.schematics.scene.componentnode.componentnode.html"},"children":["ComponentNode"]}," is the most common abstraction representing schematics element visualization to be handled by ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.schematics.scene.wellborenode.wellborenode.html"},"children":["WellBoreNode"]},". However all of predefined elements in SchematicsJS are implemented as reusable ones (i.e. inherited from ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.schematics.scene.reusablecomponentnode.reusablecomponentnode.html"},"children":["ReusableComponentNode"]}," class) for performance/memory consumption reasons. More specifically most of the elements are derived from ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.schematics.scene.regularcomponentnode.regularcomponentnode.html"},"children":["RegularComponentNode"]}," class while the rest is derived from ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.schematics.scene.flippedcomponentnode.flippedcomponentnode.html"},"children":["FlippedComponentNode"]}," class. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/Schematics/GeneralInformation/customNodes"},"children":["Custom Nodes"]}," tutorial for more details."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"wellbore-node","__idx":6},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/pages/schematics/overview/schematics#WellboreNode"},"children":["#"]}," Wellbore node"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The class accepts ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.schematics.data.wellboredata.wellboredata.html"},"children":["WellBoreData"]}," and translates the data into visualization shapes. Currently it supports Regular and Compressed View Modes. Besides that the class provides filtering capabilities via its ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["setVisible"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["setComponentsVisibility"]}," methods."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"labeling-strategies","__idx":7},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/pages/schematics/overview/schematics#LabelingStrategies"},"children":["#"]}," Labeling strategies"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The class ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.schematics.scene.wellborewithlabels.wellborewithlabels.html"},"children":["WellBoreWithLabels"]}," incapsulates ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.schematics.scene.wellborenode.wellborenode.html"},"children":["WellBoreNode"]}," shape object. It provides labeling capability via applied ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/doc/classes/geotoolkit.schematics.labeling.labelingstrategy.labelingstrategy.html"},"children":["LabelingStrategy"]},". There are two labeling strategies implemented in the toolkit at the moment. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/Schematics/LabelingStrategy/labelingStrategy"},"children":["Labeling Strategy"]}," tutorial for more info."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"user-data-input-to-component-node-sequence-diagram","__idx":8},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#/pages/schematics/overview/schematics#sequence"},"children":["#"]}," 'User data input to component node' sequence diagram"]},{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/data-to-nodes-sequence.e155f27e2dbb6674291062c71b74f5cce03e7e91c66938ed69015256456c17ce.e1763555.jpg"},"children":[]}]},"headings":[{"value":"Schematics","id":"schematics","depth":1},{"value":"Introduction","id":"introduction","depth":3},{"value":"Class diagram (simplified)","id":"class-diagram-simplified","depth":3},{"value":"Wellbore data","id":"wellbore-data","depth":3},{"value":"Component node factories and factory registry","id":"component-node-factories-and-factory-registry","depth":3},{"value":"Component nodes","id":"component-nodes","depth":3},{"value":"Wellbore node","id":"wellbore-node","depth":3},{"value":"Labeling strategies","id":"labeling-strategies","depth":3},{"value":"'User data input to component node' sequence diagram","id":"user-data-input-to-component-node-sequence-diagram","depth":3}],"frontmatter":{"title":"Schematics","seo":{"title":"Schematics"}},"lastModified":"2026-02-11T19:54:32.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/solutions/geotoolkit/programmers-guide/architecture-overview/schematics","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}