예제 #1
0
 public void Connect(InfoObject o, Color color, AGraphicalPrimitive p)
 {
     if (trees.ContainsKey(p.Base()))
     {
         if (connectedInfObs.Contains(o))
         {
             foreach (var tree in trees.Values)
             {
                 if (!tree.Connects(o))
                 {
                     tree.Connect(this, o, p, color);
                     p.Brush(color);
                 }
             }
         }
     }
     else
     {
         var tree = Instantiate(VisBridgeTreePrefab);
         tree.Assign(this, p.Base());
         trees.Add(p.Base(), tree);
         tree.Subscribe(this);
         tree.Connect(this, o, p, color);
         p.Brush(color);
     }
 }
예제 #2
0
 public BridgePath(InfoObject iD, VisBridgeBranch trunk, VisBridgeBranch branch, AGraphicalPrimitive offset)
 {
     ID          = iD;
     this.trunk  = trunk;
     this.branch = branch;
     this.offset = offset;
 }
예제 #3
0
        public void Connect(VisBridge bridge, InfoObject infO, AGraphicalPrimitive prim, Color color)
        {
            if (paths.ContainsKey(infO))
            {
                return;
            }

            if (center == null)
            {
                center = Services.PrimFactory3D().CreatePhantomPrimitive();
            }

            var bridgeCenter = bridge.centroids[infO];

            var offset = Services.PrimFactory3D().CreateBoxPrimitive();

            offset.transform.parent     = center.transform;
            offset.transform.localScale = new Vector3(.05f, .005f, .05f);
            offset.SetColor(color, color);

            // Connect visBridgeCenter with treeCenter
            var trunk = Instantiate(branchPrefab);

            trunk.Init(bridgeCenter, offset, color, infO);

            var branch = Instantiate(branchPrefab);

            branch.Init(offset, prim, color, infO);

            paths.Add(infO, new BridgePath(infO, trunk, branch, offset));
            Observe(branch);

            UpdateCenter();
        }
예제 #4
0
        public void OnChange(AGraphicalPrimitive observable)
        {
            if (initialized)
            {
                LineRenderer lr = gameObject.GetComponent <LineRenderer>();

                // check if one port is inactive
                if (origin != null && target != null && origin.isActiveAndEnabled && target.isActiveAndEnabled)
                {
                    paused = false;

                    lr.enabled = true;
                }
                else
                {
                    paused     = true;
                    lr.enabled = false;
                }

                if (!paused)
                {
                    UpdatePorts();
                    UpdatePadding();
                }
            }

            foreach (var o in observers)
            {
                o.OnChange(this);
            }
        }
예제 #5
0
        public static Vector3 GetOptimalPaddingPosition(GameObject visBridgeAnchor, AGraphicalPrimitive primitive)
        {
            // Set the first padding object as default
            Vector3 optimum = primitive.visBridgePortPadding[0].transform.position;
            int     optimalPort = 0;
            float   oldDistance, newDistance;

            // If there are more than 1 padding objects
            if (primitive.visBridgePortPadding.Length > 1)
            {
                // Lookup all but the first padding objects
                for (int i = 1; i < primitive.visBridgePortPadding.Length; i++)
                {
                    Vector3 pad = primitive.visBridgePortPadding[i].transform.position;

                    // Look if it is nearer to the other representative object than the currently set padding
                    oldDistance = Vector3.Distance(optimum, visBridgeAnchor.transform.position);
                    newDistance = Vector3.Distance(pad, visBridgeAnchor.transform.position);

                    if (newDistance < oldDistance)
                    {
                        optimalPort = i;
                        optimum     = pad;
                    }
                }
            }

            float anchorDistance = Vector3.Distance(primitive.visBridgePortPadding[optimalPort].transform.position, visBridgeAnchor.transform.position);

            optimum = primitive.visBridgePortPadding[optimalPort].transform.localPosition * anchorDistance;
            optimum = primitive.visBridgePort.transform.TransformPoint(optimum);

            return(optimum);
        }
예제 #6
0
        public override void ToggleVisBridgeFor(AGraphicalPrimitive prim)
        {
            // VisBridge aktivation/deactivation
            // Get all represented Information Objects
            var infOs = representedInfoObjects[prim];

            // for every represented information object, toggle it in the visbridge
            foreach (var infO in infOs)
            {
                ToggleVisBridgeFor(infO);
            }
        }
예제 #7
0
        public void OnDispose(AGraphicalPrimitive observable)
        {
            if (observable.Equals(origin))
            {
                target.Unsubscribe(this);
            }
            else
            {
                origin.Unsubscribe(this);
            }

            origin = null;
            target = null;

            Dispose();
        }
예제 #8
0
        public override void OnDispose(AGraphicalPrimitive prim)
        {
            if (prim.disposed)
            {
                foreach (var infO in representedInfoObjects[prim])
                {
                    if (observedVisElements.ContainsKey(infO))
                    {
                        if (observedVisElements[infO].Contains(prim))
                        {
                            observedVisElements[infO].Remove(prim);
                        }
                    }
                }

                if (representedInfoObjects.ContainsKey(prim))
                {
                    representedInfoObjects.Remove(prim);
                }
            }
        }
예제 #9
0
        public override void RegisterGraphicalPrimitive(InfoObject o, AGraphicalPrimitive p)
        {
            p.Subscribe(this);

            // Create lookup table entries
            if (!observedVisElements.ContainsKey(o))
            {
                observedVisElements.Add(o, new List <AGraphicalPrimitive>());
            }
            observedVisElements[o].Add(p);

            if (!representedInfoObjects.ContainsKey(p))
            {
                representedInfoObjects.Add(p, new List <InfoObject>());
            }
            representedInfoObjects[p].Add(o);

            // Add to visbridge if there is one
            if (visBridges.ContainsKey(o.dataSetID) && visBridges[o.dataSetID].Connects(o))
            {
                visBridges[o.dataSetID].Connect(o, o.dataSet.colorTableBrushing[o], p);
            }
        }
예제 #10
0
        public void Init(AGraphicalPrimitive origin, AGraphicalPrimitive target, Color color, InfoObject infO)
        {
            this.ID = infO;
            Observe(origin);
            Observe(target);

            this.origin = origin;
            this.target = target;
            this.color  = color;

            var lr = gameObject.GetComponent <LineRenderer>();

            lr.startColor     = color;
            lr.endColor       = color;
            lr.material       = material;
            lr.material.color = color;

            curvedLinePoints[0] = AddCurvedLinePoint(origin.visBridgePort.transform.position);
            curvedLinePoints[1] = AddCurvedLinePoint(new Vector3());
            curvedLinePoints[2] = AddCurvedLinePoint(new Vector3());
            curvedLinePoints[3] = AddCurvedLinePoint(target.visBridgePort.transform.position);

            initialized = true;
        }
예제 #11
0
 public void Ignore(AGraphicalPrimitive observable)
 {
 }
예제 #12
0
 // .................................................................... IPrimitiveObserver
 public void Observe(AGraphicalPrimitive observable)
 {
     observable.Subscribe(this);
 }
예제 #13
0
 public void Ignore(AGraphicalPrimitive observable)
 {
     subscriptions.Remove(observable);
 }
예제 #14
0
 public void Observe(AGraphicalPrimitive observable)
 {
     subscriptions.Add(observable);
 }
예제 #15
0
 public abstract void OnChange(AGraphicalPrimitive observable);
예제 #16
0
 public override void OnChange(AGraphicalPrimitive observable)
 {
     // Remove visbridge twig, if prim is disabled,
     // leave it, if it is invisible
 }
예제 #17
0
        // .................................................................... IObserver

        /// <summary>
        /// Generates lookup tables for easy representational relation access.
        /// </summary>
        /// <param name="o"></param>
        /// <param name="p"></param>
        public abstract void RegisterGraphicalPrimitive(InfoObject o, AGraphicalPrimitive p);
예제 #18
0
 public abstract void ToggleVisBridgeFor(AGraphicalPrimitive prim);
예제 #19
0
 public void RememberRelationOf(InfoObject o, AGraphicalPrimitive p)
 {
     infoObject2primitive.Add(o, p);
     p.Assign(this);
     Services.VisBridgeSys().RegisterGraphicalPrimitive(o, p);
 }
예제 #20
0
 public override void OnChange(AGraphicalPrimitive observable)
 {
     // Do Nothing
 }
예제 #21
0
 public override IList <InfoObject> GetInfoObjectsRepresentedBy(AGraphicalPrimitive p)
 {
     return(representedInfoObjects[p]);
 }
예제 #22
0
 public abstract IList <InfoObject> GetInfoObjectsRepresentedBy(AGraphicalPrimitive p);
예제 #23
0
 public override void RegisterGraphicalPrimitive(InfoObject o, AGraphicalPrimitive p)
 {
     // Do Nothing
 }
예제 #24
0
 public virtual void OnDispose(AGraphicalPrimitive observable)
 {
     subscriptions.Remove(observable);
 }
예제 #25
0
 public override void ToggleVisBridgeFor(AGraphicalPrimitive prim)
 {
     // Do Nothing
 }