Dear Sebastian,
This is a very interesting question.
We have developed a simple application library that implements the functionality that you described. You can download the application library in the "Attachments" section of this post.
Starting from an ADOxx 1.3 Experimentation Library, we have defined a class "Task" and two relation classes "AND" and "OR", both from "Task" to "Task".
In the class Task, we have defined two attributes of type EXPRESSION that will identify the ID's of the left-most (_get_start_point_) and right-most (_get_end_point_) objects of class "Task" that are connected to the current instance as target objects of a connector "OR". These attributes won't be displayed in the notebook.
In the GraphRep of the class "Task", the values of these two attributes are read with the AVAL statement and a pie arc is drawn having the current object as center and the centers of the left-most and right-most objects as points for defining the first and second semi-straight lines.
The expressions in the attribute "_get_start_point_" uses the function ctobjs() for returning the ID's of all objects that are connected to the current object via "OR" connectors. The first ID is set as left-most object and then the expression loops through the whole list of ID's. If the x-coordinate of an object is lower than the current left-most position, the ID is saved and the new x-position is saved. In the end, the value of the attribute "Position" of the left-most object is returned.
If there's less than two objects connected via a "OR" connector, the string "NONE" is returned.
Below is the definition of the attribute "_get_start_point_":
1EXPR type:string expr: (
2
3set ( sToObjIDs, ctobjs ( "OR" ) ),
4
5cond (tokcnt (sToObjIDs, " ") >1 ,
6(
7set ( minXid , VAL token ( sToObjIDs , 0 , " " ) ),
8set ( s1, token ( aval ( minXid , "Position" ) , 1 , " " )),
9set ( s2, token (s1, 1, ":")),
10set ( minX, CMS (VAL s2) ),
11
12fortok ( sObjID , sToObjIDs , " " , (
13 set ( s1, token ( aval ( VAL (sObjID) , "Position" ) , 1 , " " )),
14 set ( s2, token (s1, 1, ":")),
15 set ( crtX, CMS (VAL s2) ),
16
17 cond ( crtX < minX ,
18 (
19 set (minX, crtX),
20 set (minXid, VAL (sObjID) )
21 ),
22 0
23 )
24 )
25),
26
27aval ( minXid, "Position" )
28),
29"NONE"
30)
31)