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); } }
public BridgePath(InfoObject iD, VisBridgeBranch trunk, VisBridgeBranch branch, AGraphicalPrimitive offset) { ID = iD; this.trunk = trunk; this.branch = branch; this.offset = offset; }
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(); }
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); } }
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); }
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); } }
public void OnDispose(AGraphicalPrimitive observable) { if (observable.Equals(origin)) { target.Unsubscribe(this); } else { origin.Unsubscribe(this); } origin = null; target = null; Dispose(); }
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); } } }
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); } }
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; }
public void Ignore(AGraphicalPrimitive observable) { }
// .................................................................... IPrimitiveObserver public void Observe(AGraphicalPrimitive observable) { observable.Subscribe(this); }
public void Ignore(AGraphicalPrimitive observable) { subscriptions.Remove(observable); }
public void Observe(AGraphicalPrimitive observable) { subscriptions.Add(observable); }
public abstract void OnChange(AGraphicalPrimitive observable);
public override void OnChange(AGraphicalPrimitive observable) { // Remove visbridge twig, if prim is disabled, // leave it, if it is invisible }
// .................................................................... 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);
public abstract void ToggleVisBridgeFor(AGraphicalPrimitive prim);
public void RememberRelationOf(InfoObject o, AGraphicalPrimitive p) { infoObject2primitive.Add(o, p); p.Assign(this); Services.VisBridgeSys().RegisterGraphicalPrimitive(o, p); }
public override void OnChange(AGraphicalPrimitive observable) { // Do Nothing }
public override IList <InfoObject> GetInfoObjectsRepresentedBy(AGraphicalPrimitive p) { return(representedInfoObjects[p]); }
public abstract IList <InfoObject> GetInfoObjectsRepresentedBy(AGraphicalPrimitive p);
public override void RegisterGraphicalPrimitive(InfoObject o, AGraphicalPrimitive p) { // Do Nothing }
public virtual void OnDispose(AGraphicalPrimitive observable) { subscriptions.Remove(observable); }
public override void ToggleVisBridgeFor(AGraphicalPrimitive prim) { // Do Nothing }