1 ## Pipelines again solution
\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
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
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
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