]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.tutorial/scl/Tutorial/2.09 (Solution) Pipelines again.md
Merge "Fix to OrderedSetTemplate, preference for autocompletion"
[simantics/platform.git] / bundles / org.simantics.scl.tutorial / scl / Tutorial / 2.09 (Solution) Pipelines again.md
1 ## Pipelines again solution\r
2 \r
3 ~~~\r
4 import "Simantics/DB"\r
5 import "http://www.simantics.org/Layer0-1.1" as L0\r
6 import "http://www.simantics.org/Modeling-1.2" as MOD\r
7 import "http://www.simantics.org/Diagram-2.2" as DIA\r
8 import "http://www.apros.fi/Combustion/Configuration-6.0" as Conf\r
9 \r
10 swap (x,y) = (y,x)\r
11 \r
12 connectPoint1 :: Resource -> <ReadGraph> Resource\r
13 connectPoint1 r = do\r
14     c = singleObject r Conf.Relations.PI12_CONNECT_POINT_1_1_1\r
15     singleObject c Conf.Relations.SelfPOINT.Inverse\r
16 \r
17 connectPoint2 :: Resource -> <ReadGraph> Resource\r
18 connectPoint2 r = do\r
19     c = singleObject r Conf.Relations.PI12_CONNECT_POINT_2_1_1\r
20     singleObject c Conf.Relations.SelfPOINT.Inverse\r
21 \r
22 readDiagram :: Resource -> <ReadGraph,Proc> ()\r
23 readDiagram dia = do\r
24     points = filter (flip isInstanceOf Conf.ModuleTypes.POINT) (dia # L0.ConsistsOf)\r
25     indexedPoints = zip [0..length points] points\r
26     for indexedPoints $ \(i,r) -> do\r
27         trans = relatedValue (singleObject r MOD.ComponentToElement) DIA.HasTransform :: [Double]\r
28         print "POINT;\(i);\(relatedValue r Conf.Relations.PO11_ELEV :: Float);\(trans!4);\(trans!5)"\r
29     pointByResource = index (map swap indexedPoints)\r
30     pipes = filter (flip isInstanceOf Conf.ModuleTypes.PIPE) (dia # L0.ConsistsOf)\r
31     for pipes $ \r -> do\r
32         id1 = fromJust (pointByResource (connectPoint1 r))\r
33         id2 = fromJust (pointByResource (connectPoint2 r))\r
34         print "PIPE;\(id1);\(id2);\(relatedValue r Conf.Relations.PI12_LENGTH :: Float)"\r
35 ~~~