コード例 #1
0
    public GraphEventArgs nextLevelArgs(System.Object lastSender, GraphEventType graphEvent, string appendString)
    {
        GraphEventArgs eventArgs = new GraphEventArgs(origin, lastSender, graphEvent, this.timeToLive - 1, this.message + "\n" + timeToLive + ": " + appendString);

        //Debug.Log(eventArgs.ToString());
        return(eventArgs);
    }
コード例 #2
0
        private void onVertexAdded(object sender, GraphEventArgs e)
        {
            int vertexNumber = e.Vertices[0];

            nodes.Add(vertexNumber, new Node(vertexNumber, vertexNumber.ToString(), plot.getCurrentCenterCoords()));
            render();
        }
コード例 #3
0
 private void func(GraphEventArgs e)
 {
     if (items.Contains(e.CurrentVertex))
     {
         //int j = GetIndexOfElement(e.CurrentVertex);
         priorities[items.IndexOf(e.CurrentVertex)] = e.CurrentVertex.Distance;
     }
 }
コード例 #4
0
        internal void OnMonitoredGraphCleared(object sender, GraphEventArgs e)
        {
            SpinWrappedGraph g = (SpinWrappedGraph)GetModifiableGraph(e.Graph.BaseUri);

            g.Clear();
            Storage.DeleteGraph(g.BaseUri);
            _ignoreMonitoredChangeEvents = false;
        }
コード例 #5
0
        internal void RaiseClearedEvent()
        {
            var d    = Cleared;
            var e    = Changed;
            var args = new GraphEventArgs(this);

            d?.Invoke(this, args);
            e?.Invoke(this, args);
        }
コード例 #6
0
    private void OnNodeEvent(System.Object sender, EventArgs e)
    {
        GraphEventArgs graphEvent = (GraphEventArgs)e;

        //Debug.Log(this.id + ": " + graphEvent.ToString());

        //Debug.Log(sender.ToString() + " --> " + this.id + ": received --> " + graphEvent.ToString());

        if (graphEvent.LastSender == (Edge)this)
        {
            //Debug.Log("Edge PingPong-BREAK! " + this.id);
            return;
        }

        GraphEventArgs newGraphEventArgs;

        // Filter PingPong
        if (graphEvent.TimeToLive > 0)
        {
            switch (graphEvent.GraphEvent)
            {
            case GraphEventType.NodeChanged:
                // Recalculate Values
                RefreshEdge();

                if ((Node)sender == this.from)
                {
                    //Debug.Log(this.id + " Edge: NodeChanged (sender" + ((Node)sender).ToString() + ")  --> fire EdgeFromChanged");
                    newGraphEventArgs = graphEvent.nextLevelArgs(sender, GraphEventType.EdgeFromChanged, this.id + ".FromChanged");
                }
                else
                {
                    //Debug.Log(this.id + " Edge: NodeChanged (sender" + ((Node)sender).ToString() + ")  --> fire EdgeToChanged");
                    newGraphEventArgs = graphEvent.nextLevelArgs(sender, GraphEventType.EdgeToChanged, this.id + ".ToChanged");
                }

                _change(this, newGraphEventArgs);
                break;

            case GraphEventType.NodeDeleted:
                //Debug.Log(this.id + " Edge: NodeDeleted (sender" + ((Node)sender).ToString() + ")  --> Delete()  -- > fire EdgeDeleted");
                Delete();
                _change(this, graphEvent.nextLevelArgs(sender, GraphEventType.EdgeDeleted, this.id + ".EdgeDeleted"));
                break;

            case GraphEventType.EdgeChanged:
                //Debug.Log(this.id + " Edge: EdgeChanged (sender" + ((Node)sender).ToString() + ")  --> Do Nothing");
                //_change(this, graphEvent.nextLevelArgs(sender, GraphEventType.EdgeDeleted, this.id + ".EdgeDeleted"));
                break;

            default:
                //Debug.Log("Default???");
                break;
            }
        }
    }
コード例 #7
0
        protected void OnLineHovered(object userData)
        {
            GraphEventArgs args = userData as GraphEventArgs;

            if (LineHovered != null)
            {
                LineHovered.Invoke(args);
            }
            AddOccupiedCategory(args.Category, "line");
        }
コード例 #8
0
        protected override void OnItemSelected(object userData)
        {
            base.OnItemSelected(userData);
            GraphEventArgs args = userData as GraphEventArgs;

            if (PointClicked != null)
            {
                PointClicked.Invoke(args);
            }
        }
コード例 #9
0
 /// <summary>
 /// Event handler to monitor the current Dataset
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="args"></param>
 protected void OnDatasetDescriptionChanged(object sender, GraphEventArgs args)
 {
     DatasetDescriptionChanged = true;
     if (!Configuration.IsChanged)
     {
         Configuration.Changed -= OnDatasetDescriptionChanged;
         Configuration.EnableUpdateControl();
         Configuration.Changed += OnDatasetDescriptionChanged;
     }
 }
コード例 #10
0
        private void OnModificableGraphCleared(object sender, GraphEventArgs e)
        {
            SpinWrappedGraph graph = (SpinWrappedGraph)e.Graph;

            graph.Reset();

            IUriNode sourceGraph = RDFUtil.CreateUriNode(graph.BaseUri);
            IUriNode graphNode   = RDFUtil.CreateUriNode(GetUpdateControlUri(graph.BaseUri));

            this.Retract(graphNode, RDFRuntime.PropertyUpdatesGraph, sourceGraph);
            this.Assert(graphNode, RDFRuntime.PropertyReplacesGraph, sourceGraph);
        }
コード例 #11
0
    private void OnEdgeEvent(System.Object sender, EventArgs e)
    {
        GraphEventArgs graphEventArgs = (GraphEventArgs)e;

        // Catch PingPong
        if (graphEventArgs.LastSender == this)
        {
            return;
        }

        if (graphEventArgs.TimeToLive > 0)
        {
            GraphEventArgs args;

            // Just to make sure
            RefreshEdges();

            switch (graphEventArgs.GraphEvent)
            {
            case GraphEventType.NodeChanged:
                //Debug.Log(this.id + "NodeChanged\n" + graphEventArgs.ToString());
                args = graphEventArgs.nextLevelArgs(sender, GraphEventType.NodeChanged, this.id + ".NodeChanged");
                _changeGraphLayer(this, args);
                break;

            case GraphEventType.NodeDeleted:
                //Debug.Log(this.id + ": NodeDeleted\n" + graphEventArgs.ToString());
                break;

            case GraphEventType.EdgeFromChanged:
                //Debug.Log(this.id + ": EdgeFromChanged\n" + graphEventArgs.ToString());
                args = graphEventArgs.nextLevelArgs(sender, GraphEventType.NodeChanged, this.id + ".NodeChanged");
                _changeGraphLayer(this, args);
                break;

            case GraphEventType.EdgeToChanged:
                //Debug.Log(this.id + ": EdgeToChanged\n" + graphEventArgs.ToString());
                args = graphEventArgs.nextLevelArgs(sender, GraphEventType.NodeChanged, this.id + ".NodeChanged");
                _changeGraphLayer(this, args);
                break;

            case GraphEventType.EdgeDeleted:
                //Debug.Log(this.id + ": EdgeDeletedChanged\n" + graphEventArgs.ToString());
                args = graphEventArgs.nextLevelArgs(sender, GraphEventType.EdgeDeleted, this.id + ".EdgeDeleted");
                _changeGraphLayer(this, args);
                break;

            default:
                break;
            }
        }
    }
コード例 #12
0
        private void onRewrite(object sender, GraphEventArgs e)
        {
            reset(true);
            nodes.Clear();
            int ind = 0;

            foreach (int vertexNumber in e.Vertices)
            {
                //if (!nodes.ContainsKey(vertexNumber))
                nodes.Add(vertexNumber, new Node(vertexNumber, vertexNumber.ToString(), getCoordsByN(ind)));
                ind++;
            }
            render(true);
        }
コード例 #13
0
        protected void RaiseClearedEvent()
        {
            GraphEventHandler d    = this.Cleared;
            GraphEventHandler e    = this.Changed;
            GraphEventArgs    args = new GraphEventArgs(this);

            if (d != null)
            {
                d(this, args);
            }
            if (e != null)
            {
                e(this, args);
            }
        }
コード例 #14
0
 private void OnModificableGraphChange(object sender, GraphEventArgs e)
 {
     if (e.TripleEvent != null)
     {
         Uri      graphUri  = e.TripleEvent.GraphUri;
         IUriNode graphNode = RDFUtil.CreateUriNode(GetUpdateControlUri(graphUri));
         if (e.TripleEvent.WasAsserted)
         {
             this.Assert(RDFUtil.CreateUriNode(GetTripleAdditionsMonitorUri(graphUri)), RDFRuntime.PropertyAddTriplesTo, graphNode);
         }
         else
         {
             this.Assert(RDFUtil.CreateUriNode(GetTripleRemovalsMonitorUri(graphUri)), RDFRuntime.PropertyDeleteTriplesFrom, graphNode);
         }
     }
 }
コード例 #15
0
        protected override void OnItemLeave(object userData)
        {
            GraphEventArgs args = userData as GraphEventArgs;

            if (args == null)
            {
                return;
            }
            string category = args.Category;

            mOccupiedCateogies.Remove(category);
            mOccupiedCateogies.RemoveWhere(x => !Data.HasCategory(x));
            if (mOccupiedCateogies.Count == 0)
            {
                if (NonHovered != null)
                {
                    NonHovered.Invoke();
                }
            }
        }
コード例 #16
0
        internal void OnMonitoredGraphChanged(object sender, GraphEventArgs e)
        {
            if (_ignoreMonitoredChangeEvents)
            {
                return;
            }
            Uri graphUri       = e.Graph.BaseUri;
            SpinWrappedGraph g = (SpinWrappedGraph)GetModifiableGraph(graphUri);

            if (e.TripleEvent != null)
            {
                if (e.TripleEvent.WasAsserted)
                {
                    g.Assert(e.TripleEvent.Triple);
                }
                else
                {
                    g.Retract(e.TripleEvent.Triple);
                }
            }
        }
コード例 #17
0
        protected override void OnItemHoverted(object userData)
        {
            base.OnItemHoverted(userData);
            GraphEventArgs args = userData as GraphEventArgs;

            if (args == null)
            {
                return;
            }
            foreach (BillboardText t in mActiveTexts)
            {
                if (t.UIText == null)
                {
                    continue;
                }
                foreach (ChartItemEffect effect in t.UIText.GetComponents <ChartItemEffect>())
                {
                    effect.TriggerOut(false);
                }
            }
            mActiveTexts.Clear();
            List <BillboardText> catgoryTexts;

            if (m3DTexts.TryGetValue(args.Category, out catgoryTexts))
            {
                if (args.Index < catgoryTexts.Count)
                {
                    BillboardText b = catgoryTexts[args.Index];
                    mActiveTexts.Add(b);
                    GameObject t = b.UIText;
                    if (t != null)
                    {
                        foreach (ChartItemEffect effect in t.GetComponents <ChartItemEffect>())
                        {
                            effect.TriggerIn(false);
                        }
                    }
                }
            }
        }
コード例 #18
0
        protected override void OnItemLeave(object userData, string type)
        {
            GraphEventArgs args = userData as GraphEventArgs;

            if (args == null)
            {
                return;
            }

            string item = args.Category + "|" + type;

            mOccupiedCateogies.Remove(item);
            mOccupiedCateogies.RemoveWhere(x => !Data.HasCategory(x.Split('|')[0]));

            if (mOccupiedCateogies.Count == 0)
            {
                if (NonHovered != null)
                {
                    NonHovered.Invoke();
                }
            }
        }
コード例 #19
0
    private void OnGraphEvent(System.Object sender, EventArgs e)
    {
        GraphEventArgs args = (GraphEventArgs)e;

        //Debug.Log("Edge-Behaviour " + gameObject.name +  "  \n" + args.ToString());
        switch (args.GraphEvent)
        {
        //case GraphEventType.NodeChanged:
        //    Debug.Log(this.name + " EdgeBehaviour: NodeChanged (sender" + ((Edge)sender).ToString() + ")");
        //    break;
        //case GraphEventType.NodeDeleted:
        //    Debug.Log(this.name + " EdgeBehaviour: NodeDeleted (sender" + ((Edge)sender).ToString() + ")");
        //    break;
        case GraphEventType.EdgeChanged:
            //Debug.Log(this.name + " EdgeBehaviour: EdgeChanged (sender" + ((Edge)sender).ToString() + ")");
            this.transform.position = edge.Position;
            break;

        case GraphEventType.EdgeFromChanged:
            //Debug.Log(this.name + " EdgeBehaviour: EdgeFromChanged (sender" + ((Edge)sender).ToString() + ")");
            this.fromBehaviour = graphBehaviour.GetNodeBehaviourByID(this.edge.From.Id);
            break;

        case GraphEventType.EdgeToChanged:
            //Debug.Log(this.name + " EdgeBehaviour: EdgeToChanged (sender" + ((Edge)sender).ToString() + ")");
            this.toBehaviour = graphBehaviour.GetNodeBehaviourByID(this.edge.To.Id);
            break;

        case GraphEventType.EdgeDeleted:
            //Debug.Log(this.name + " EdgeBehaviour: EdgeDeleted (sender" + ((Edge)sender).ToString() + ")");
            // TODO: wenn andere auf das Edge-Behaviour hören, muss HIER zuerst weitergefeuert werden.
            this.Edge = null;
            return;

        default:
            break;
        }
    }
コード例 #20
0
    private void OnGraphEvent(System.Object sender, EventArgs e)
    {
        transform.position = node.Position;
        GraphEventArgs graphEventArgs = (GraphEventArgs)e;

        switch (graphEventArgs.GraphEvent)
        {
        case GraphEventType.NodeChanged:
            break;

        case GraphEventType.NodeDeleted:
            if (graphEventArgs.Origin == this.node)
            {
                this.Node = null;
                //Delete();
            }
            break;

        case GraphEventType.EdgeChanged:
            break;

        case GraphEventType.EdgeFromChanged:
            break;

        case GraphEventType.EdgeToChanged:
            break;

        case GraphEventType.EdgeDeleted:
            break;

        case GraphEventType.EdgeEndsSwitched:
            break;

        default:
            break;
        }
    }
コード例 #21
0
 internal void OnMonitoredGraphClearRequested(object sender, GraphEventArgs e)
 {
     _ignoreMonitoredChangeEvents = true;
 }
コード例 #22
0
        public override void InternalGenerateChart()
        {
            if (gameObject.activeInHierarchy == false)
            {
                return;
            }
            base.InternalGenerateChart();
            ClearChart();

            if (Data == null)
            {
                return;
            }

            double        minX = (float)((IInternalGraphData)Data).GetMinValue(0, false);
            double        minY = (float)((IInternalGraphData)Data).GetMinValue(1, false);
            double        maxX = (float)((IInternalGraphData)Data).GetMaxValue(0, false);
            double        maxY = (float)((IInternalGraphData)Data).GetMaxValue(1, false);
            DoubleVector3 min  = new DoubleVector3(minX, minY);
            DoubleVector3 max  = new DoubleVector3(maxX, maxY);

            Rect viewRect = new Rect(0f, 0f, widthRatio, heightRatio);

            int    index         = 0;
            int    total         = ((IInternalGraphData)Data).TotalCategories + 1;
            double positiveDepth = 0f;
            double maxThickness  = 0f;
            bool   edit          = false;

            m3DTexts.Clear();
            mActiveTexts.Clear();
            foreach (GraphData.CategoryData data in ((IInternalGraphData)Data).Categories)
            {
                maxThickness = Math.Max(data.LineThickness, maxThickness);
                DoubleVector3[] points = data.getPoints().ToArray();
                TransformPoints(points, viewRect, min, max);
                if (points.Length == 0 && ChartCommon.IsInEditMode)
                {
                    edit = true;
                    int           tmpIndex = total - 1 - index;
                    float         y1       = (((float)tmpIndex) / (float)total);
                    float         y2       = (((float)tmpIndex + 1) / (float)total);
                    DoubleVector3 pos1     = ChartCommon.interpolateInRect(viewRect, new DoubleVector3(0f, y1, -1f)).ToDoubleVector3();
                    DoubleVector3 pos2     = ChartCommon.interpolateInRect(viewRect, new DoubleVector3(0.5f, y2, -1f)).ToDoubleVector3();
                    DoubleVector3 pos3     = ChartCommon.interpolateInRect(viewRect, new DoubleVector3(1f, y1, -1f)).ToDoubleVector3();
                    points = new DoubleVector3[] { pos1, pos2, pos3 };
                    index++;
                }

                /*if (data.FillMaterial != null)
                 * {
                 *  CanvasLines fill = CreateDataObject(data);
                 *  fill.material = data.FillMaterial;
                 *  fill.SetLines(list);
                 *  fill.MakeFillRender(viewRect, data.StetchFill);
                 * }*/

                if (data.Depth > 0)
                {
                    positiveDepth = Math.Max(positiveDepth, data.Depth);
                }
                // if (data.DotPrefab != null)
                //{
                for (int i = 0; i < points.Length; i++)
                {
                    DoubleVector3 pointValue = points[i];
                    if (edit == false)
                    {
                        pointValue = Data.GetPoint(data.Name, i);
                    }

                    string xFormat = StringFromAxisFormat(pointValue.x, mHorizontalAxis);
                    string yFormat = StringFromAxisFormat(pointValue.y, mVerticalAxis);

                    GraphEventArgs    args   = new GraphEventArgs(i, (points[i] + new DoubleVector3(0.0, 0.0, data.Depth)).ToVector3(), pointValue.ToDoubleVector2(), (float)pointValue.z, data.Name, xFormat, yFormat);
                    GameObject        point  = CreatePointObject(data);
                    ChartItemEvents[] events = point.GetComponentsInChildren <ChartItemEvents>();

                    for (int j = 0; j < events.Length; ++j)
                    {
                        if (events[j] == null)
                        {
                            continue;
                        }
                        InternalItemEvents comp = (InternalItemEvents)events[j];
                        comp.Parent   = this;
                        comp.UserData = args;
                    }

                    double pointSize = points[i].z * data.PointSize;
                    if (pointSize < 0f)
                    {
                        pointSize = data.PointSize;
                    }



                    point.transform.localScale = new DoubleVector3(pointSize, pointSize, pointSize).ToVector3();

                    if (data.PointMaterial != null)
                    {
                        Renderer rend = point.GetComponent <Renderer>();
                        if (rend != null)
                        {
                            rend.material = data.PointMaterial;
                        }
                        ChartMaterialController controller = point.GetComponent <ChartMaterialController>();
                        if (controller != null && controller.Materials != null)
                        {
                            Color hover    = controller.Materials.Hover;
                            Color selected = controller.Materials.Selected;
                            controller.Materials = new ChartDynamicMaterial(data.PointMaterial, hover, selected);
                        }
                    }
                    DoubleVector3 position = points[i];
                    position.z = data.Depth;
                    point.transform.localPosition = position.ToVector3();
                    if (mItemLabels != null && mItemLabels.isActiveAndEnabled)
                    {
                        Vector3 labelPos = (points[i] + new DoubleVector3(mItemLabels.Location.Breadth, mItemLabels.Seperation, mItemLabels.Location.Depth + data.Depth)).ToVector3();
                        if (mItemLabels.Alignment == ChartLabelAlignment.Base)
                        {
                            labelPos.y -= (float)points[i].y;
                        }
                        FormatItem(mRealtimeStringBuilder, xFormat, yFormat);
                        string        formatted = mRealtimeStringBuilder.ToString();
                        string        toSet     = mItemLabels.TextFormat.Format(formatted, data.Name, "");
                        BillboardText billboard = ChartCommon.CreateBillboardText(null, mItemLabels.TextPrefab, transform, toSet, labelPos.x, labelPos.y, labelPos.z, 0f, null, hideHierarchy, mItemLabels.FontSize, mItemLabels.FontSharpness);
                        TextController.AddText(billboard);
                        AddBillboardText(data.Name, billboard);
                    }
                }
                //}
                for (int i = 0; i < points.Length; i++)
                {
                    points[i].z = 0f;
                }
                Vector3[] floatPoints = points.Select(x => x.ToVector3()).ToArray();
                if (data.LinePrefab != null)
                {
                    PathGenerator lines = CreateLineObject(data);
                    //    float tiling = 1f;

                    if (data.LineTiling.EnableTiling == true && data.LineTiling.TileFactor > 0f)
                    {
                        float length = 0f;
                        for (int i = 1; i < points.Length; i++)
                        {
                            length += (float)(points[i - 1] - points[i]).magnitude;
                        }
                        //  tiling = length / data.LineTiling.TileFactor;
                    }

                    lines.Generator(floatPoints, (float)data.LineThickness, false);
                    Vector3 tmp = lines.transform.localPosition;
                    tmp.z = (float)data.Depth;
                    lines.transform.localPosition = tmp;
                    if (data.LineMaterial != null)
                    {
                        Renderer rend = lines.GetComponent <Renderer>();
                        if (rend != null)
                        {
                            rend.material = data.LineMaterial;
                        }
                        ChartMaterialController controller = lines.GetComponent <ChartMaterialController>();
                        if (controller != null && controller.Materials != null)
                        {
                            Color hover    = controller.Materials.Hover;
                            Color selected = controller.Materials.Selected;
                            controller.Materials = new ChartDynamicMaterial(data.LineMaterial, hover, selected);
                        }
                    }
                }
                totalDepth = (float)(positiveDepth + maxThickness * 2f);


                if (data.FillPrefab != null)
                {
                    FillPathGenerator fill = CreateFillObject(data);
                    Vector3           tmp  = fill.transform.localPosition;
                    tmp.z = (float)data.Depth;
                    fill.transform.localPosition = tmp;

                    if (data.LinePrefab == null || !(data.LinePrefab is SmoothPathGenerator))
                    {
                        fill.SetLineSmoothing(false, 0, 0f);
                    }
                    else
                    {
                        SmoothPathGenerator smooth = ((SmoothPathGenerator)data.LinePrefab);
                        fill.SetLineSmoothing(true, smooth.JointSmoothing, smooth.JointSize);
                    }

                    fill.SetGraphBounds(viewRect.yMin, viewRect.yMax);
                    fill.SetStrechFill(data.StetchFill);
                    fill.Generator(floatPoints, (float)data.LineThickness * 1.01f, false);

                    if (data.FillMaterial != null)
                    {
                        Renderer rend = fill.GetComponent <Renderer>();
                        if (rend != null)
                        {
                            rend.material = data.FillMaterial;
                        }
                        ChartMaterialController controller = fill.GetComponent <ChartMaterialController>();

                        if (controller != null && controller.Materials != null)
                        {
                            Color hover    = controller.Materials.Hover;
                            Color selected = controller.Materials.Selected;
                            controller.Materials = new ChartDynamicMaterial(data.FillMaterial, hover, selected);
                        }
                    }
                }
            }
            GenerateAxis(true);
        }
コード例 #23
0
 private void onEdgesChanged(object sender, GraphEventArgs e)
 {
     render();
 }
コード例 #24
0
 protected void changeSource(GraphEventArgs e)
 {
     source = e.CurrentVertex;
 }
コード例 #25
0
        public override void InternalGenerateChart()
        {
            if (gameObject.activeInHierarchy == false)
            {
                return;
            }
            base.InternalGenerateChart();
            ClearChart();

            if (Data == null)
            {
                return;
            }

            double minX = ((IInternalGraphData)Data).GetMinValue(0, false);
            double minY = ((IInternalGraphData)Data).GetMinValue(1, false);
            double maxX = ((IInternalGraphData)Data).GetMaxValue(0, false);
            double maxY = ((IInternalGraphData)Data).GetMaxValue(1, false);

            double xScroll = GetScrollOffset(0);
            double yScroll = GetScrollOffset(1);
            double xSize   = maxX - minX;
            double ySize   = maxY - minY;
            double xOut    = minX + xScroll + xSize;
            double yOut    = minY + yScroll + ySize;

            DoubleVector3 min = new DoubleVector3(xScroll + minX, yScroll + minY);
            DoubleVector3 max = new DoubleVector3(xOut, yOut);

            Rect viewRect = new Rect(0f, 0f, widthRatio, heightRatio);

            int    index         = 0;
            int    total         = ((IInternalGraphData)Data).TotalCategories + 1;
            double positiveDepth = 0f;
            double maxThickness  = 0f;
            bool   edit          = false;

            m3DTexts.Clear();
            mActiveTexts.Clear();
            foreach (GraphData.CategoryData data in ((IInternalGraphData)Data).Categories)
            {
                mClipped.Clear();
                maxThickness = Math.Max(data.LineThickness, maxThickness);
                DoubleVector3[] points = data.getPoints().ToArray();
                Rect            uv;
                int             refrenceIndex = ClipPoints(points, mClipped, out uv);
                TransformPoints(mClipped, mTransformed, viewRect, min, max);

                if (points.Length == 0 && ChartCommon.IsInEditMode)
                {
                    edit = true;
                    int           tmpIndex = total - 1 - index;
                    float         y1       = (((float)tmpIndex) / (float)total);
                    float         y2       = (((float)tmpIndex + 1) / (float)total);
                    DoubleVector3 pos1     = ChartCommon.interpolateInRect(viewRect, new DoubleVector3(0f, y1, -1f)).ToDoubleVector3();
                    DoubleVector3 pos2     = ChartCommon.interpolateInRect(viewRect, new DoubleVector3(0.5f, y2, -1f)).ToDoubleVector3();
                    DoubleVector3 pos3     = ChartCommon.interpolateInRect(viewRect, new DoubleVector3(1f, y1, -1f)).ToDoubleVector3();
                    points = new DoubleVector3[] { pos1, pos2, pos3 };
                    mTransformed.AddRange(points.Select(x => (Vector4)x.ToVector3()));
                    index++;
                }

                /*if (data.FillMaterial != null)
                 * {
                 *  CanvasLines fill = CreateDataObject(data);
                 *  fill.material = data.FillMaterial;
                 *  fill.SetLines(list);
                 *  fill.MakeFillRender(viewRect, data.StetchFill);
                 * }*/

                if (data.Depth > 0)
                {
                    positiveDepth = Math.Max(positiveDepth, data.Depth);
                }
                // if (data.DotPrefab != null)
                //{
                float minViewX = Math.Min(viewRect.xMin, viewRect.xMax);
                float maxViewX = Math.Max(viewRect.xMin, viewRect.xMax);
                float minViewY = Math.Min(viewRect.yMin, viewRect.yMax);
                float maxViewY = Math.Max(viewRect.yMin, viewRect.yMax);

                for (int i = 0; i < mTransformed.Count; i++)
                {
                    float transX = mTransformed[i].x;
                    float transY = mTransformed[i].y;
                    if (minViewX > transX || maxViewX < transX)
                    {
                        continue;
                    }
                    if (minViewX > transY || maxViewX < transY)
                    {
                        continue;
                    }
                    DoubleVector3 pointValue = points[i];
                    if (edit == false)
                    {
                        pointValue = Data.GetPoint(data.Name, i + refrenceIndex);
                    }

                    string xFormat = StringFromAxisFormat(pointValue, mHorizontalAxis, true);
                    string yFormat = StringFromAxisFormat(pointValue, mVerticalAxis, false);

                    GraphEventArgs    args   = new GraphEventArgs(i, (mTransformed[i] + new Vector4(0f, 0f, (float)data.Depth)), pointValue.ToDoubleVector2(), (float)pointValue.z, data.Name, xFormat, yFormat);
                    GameObject        point  = CreatePointObject(data);
                    ChartItemEvents[] events = point.GetComponentsInChildren <ChartItemEvents>();

                    for (int j = 0; j < events.Length; ++j)
                    {
                        if (events[j] == null)
                        {
                            continue;
                        }
                        InternalItemEvents comp = (InternalItemEvents)events[j];
                        comp.Parent   = this;
                        comp.UserData = args;
                    }

                    double pointSize = mTransformed[i].w * data.PointSize;
                    if (pointSize < 0f)
                    {
                        pointSize = data.PointSize;
                    }



                    point.transform.localScale = new DoubleVector3(pointSize, pointSize, pointSize).ToVector3();

                    if (data.PointMaterial != null)
                    {
                        Renderer rend = point.GetComponent <Renderer>();
                        if (rend != null)
                        {
                            rend.material = data.PointMaterial;
                        }
                        ChartMaterialController controller = point.GetComponent <ChartMaterialController>();
                        if (controller != null && controller.Materials != null)
                        {
                            Color hover    = controller.Materials.Hover;
                            Color selected = controller.Materials.Selected;
                            controller.Materials = new ChartDynamicMaterial(data.PointMaterial, hover, selected);
                        }
                    }

                    DoubleVector3 position = new DoubleVector3(mTransformed[i]);
                    position.z = data.Depth;
                    point.transform.localPosition = position.ToVector3();
                    if (mItemLabels != null && mItemLabels.isActiveAndEnabled)
                    {
                        Vector3 labelPos = (new DoubleVector3(mTransformed[i]) + new DoubleVector3(mItemLabels.Location.Breadth, mItemLabels.Seperation, mItemLabels.Location.Depth + data.Depth)).ToVector3();
                        if (mItemLabels.Alignment == ChartLabelAlignment.Base)
                        {
                            labelPos.y -= (float)mTransformed[i].y;
                        }
                        FormatItem(mRealtimeStringBuilder, xFormat, yFormat);
                        string        formatted = mRealtimeStringBuilder.ToString();
                        string        toSet     = mItemLabels.TextFormat.Format(formatted, data.Name, "");
                        BillboardText billboard = ChartCommon.CreateBillboardText(null, mItemLabels.TextPrefab, transform, toSet, labelPos.x, labelPos.y, labelPos.z, 0f, null, hideHierarchy, mItemLabels.FontSize, mItemLabels.FontSharpness);
                        TextController.AddText(billboard);
                        AddBillboardText(data.Name, billboard);
                    }
                }
                //}
                for (int i = 0; i < mTransformed.Count; i++)
                {
                    var t = mTransformed[i];
                    t.z             = 0f;
                    t.w             = 0f;
                    mTransformed[i] = t;
                }
                Vector3[] floatPoints = mTransformed.Select(x => (Vector3)x).ToArray();
                if (floatPoints.Length >= 2)
                {
                    Vector2 res;
                    float   maxF    = Math.Max(floatPoints[0].y, floatPoints[1].y);
                    float   minF    = Math.Min(floatPoints[0].y, floatPoints[1].y);
                    float   firstX  = viewRect.x;
                    float   secondX = viewRect.x + viewRect.width;
                    if (min.x > max.x)
                    {
                        float tmp = firstX;
                        firstX  = secondX;
                        secondX = tmp;
                    }
                    if (ChartCommon.SegmentIntersection(floatPoints[0], floatPoints[1], new Vector3(firstX, maxF, 0f), new Vector3(firstX, minF, 0f), out res))
                    {
                        floatPoints[0] = res;
                    }
                    Vector3 last       = floatPoints[floatPoints.Length - 1];
                    Vector3 secondLast = floatPoints[floatPoints.Length - 2];
                    maxF = Math.Max(last.y, secondLast.y);
                    minF = Math.Min(last.y, secondLast.y);

                    if (ChartCommon.SegmentIntersection(last, secondLast, new Vector3(secondX, maxF, 0f), new Vector3(secondX, minF, 0f), out res))
                    {
                        floatPoints[floatPoints.Length - 1] = res;
                    }
                }
                List <List <Vector3> > clippedLines     = new List <List <Vector3> >(8);
                List <List <Vector3> > fillClippedLines = new List <List <Vector3> >(8);
                List <Vector3>         current          = null;
                List <Vector3>         currentFill      = null;
                for (int i = 1; i < floatPoints.Length; i++)
                {
                    Vector3 v1   = floatPoints[i - 1];
                    Vector3 v2   = floatPoints[i];
                    bool    last = i == floatPoints.Length - 1;
                    if ((v1.y <= minViewY && v2.y <= minViewY))
                    {
                        continue;
                    }
                    if (currentFill == null)
                    {
                        currentFill = new List <Vector3>(30);
                        fillClippedLines.Add(currentFill);
                    }
                    if ((v1.y >= maxViewY && v2.y >= maxViewY))
                    {
                        currentFill.Add(new Vector3(v1.x, maxViewY, v1.z));
                        if (last)
                        {
                            currentFill.Add(new Vector3(v2.x, maxViewY, v2.z));
                        }
                        continue;
                    }
                    if (current == null)
                    {
                        current = new List <Vector3>(30);
                        clippedLines.Add(current);
                    }

                    if ((v1.y >= minViewY && v2.y >= minViewY) && (v1.y <= maxViewY && v2.y <= maxViewY))
                    {
                        current.Add(v1);
                        currentFill.Add(v1);
                        if (last)
                        {
                            current.Add(v2);
                            currentFill.Add(v2);
                        }
                        continue;
                    }
                    if (v1.y <= minViewY)
                    {
                        var v = ChartCommon.LineCrossing(v1, v2, minViewY);
                        current.Add(v);
                        currentFill.Add(v);
                    }
                    else
                    {
                        if (v1.y >= maxViewY)
                        {
                            var v = ChartCommon.LineCrossing(v1, v2, maxViewY);
                            current.Add(v);
                            currentFill.Add(new Vector3(v1.x, maxViewY, v1.z));
                            currentFill.Add(v);
                        }
                        else
                        {
                            current.Add(v1);
                            currentFill.Add(v1);
                        }
                    }
                    if (v2.y <= minViewY)
                    {
                        var v = ChartCommon.LineCrossing(v1, v2, minViewY);
                        current.Add(v);
                        currentFill.Add(v);
                        currentFill = null;
                    }
                    else
                    {
                        if (v2.y >= maxViewY)
                        {
                            var v = ChartCommon.LineCrossing(v1, v2, maxViewY);
                            current.Add(v);
                            currentFill.Add(v);
                            if (last)
                            {
                                currentFill.Add(new Vector3(v2.x, maxViewY, v2.z));
                            }
                        }
                        else
                        {
                            current.Add(v2);
                            if (last)
                            {
                                currentFill.Add(v2);
                            }
                        }
                    }
                    current = null;
                }
                if (data.LinePrefab != null)
                {
                    for (int i = 0; i < clippedLines.Count; i++)
                    {
                        if (clippedLines[i].Count == 0)
                        {
                            continue;
                        }

                        PathGenerator lines = CreateLineObject(data);
                        //    float tiling = 1f;

                        if (data.LineTiling.EnableTiling == true && data.LineTiling.TileFactor > 0f)
                        {
                            float length = 0f;
                            for (int j = 1; j < mTransformed.Count; j++)
                            {
                                length += (float)(((Vector3)mTransformed[j - 1]) - (Vector3)mTransformed[j]).magnitude;
                            }
                            //  tiling = length / data.LineTiling.TileFactor;
                        }

                        lines.Generator(clippedLines[i].ToArray(), (float)data.LineThickness, false);
                        Vector3 tmp = lines.transform.localPosition;
                        tmp.z = (float)data.Depth;
                        lines.transform.localPosition = tmp;
                        if (data.LineMaterial != null)
                        {
                            Renderer rend = lines.GetComponent <Renderer>();
                            if (rend != null)
                            {
                                rend.material = data.LineMaterial;
                            }
                            ChartMaterialController controller = lines.GetComponent <ChartMaterialController>();
                            if (controller != null && controller.Materials != null)
                            {
                                Color hover    = controller.Materials.Hover;
                                Color selected = controller.Materials.Selected;
                                controller.Materials = new ChartDynamicMaterial(data.LineMaterial, hover, selected);
                            }
                        }
                    }
                }
                totalDepth = (float)(positiveDepth + maxThickness * 2f);


                if (data.FillPrefab != null)
                {
                    for (int i = 0; i < fillClippedLines.Count; i++)
                    {
                        if (fillClippedLines[i].Count == 0)
                        {
                            continue;
                        }
                        FillPathGenerator fill = CreateFillObject(data);
                        Vector3           tmp  = fill.transform.localPosition;
                        tmp.z = (float)data.Depth;
                        fill.transform.localPosition = tmp;

                        if (data.LinePrefab == null || !(data.LinePrefab is SmoothPathGenerator))
                        {
                            fill.SetLineSmoothing(false, 0, 0f);
                        }
                        else
                        {
                            SmoothPathGenerator smooth = ((SmoothPathGenerator)data.LinePrefab);
                            fill.SetLineSmoothing(true, smooth.JointSmoothing, smooth.JointSize);
                        }

                        fill.SetGraphBounds(viewRect.yMin, viewRect.yMax);
                        fill.SetStrechFill(data.StetchFill);
                        fill.Generator(fillClippedLines[i].ToArray(), (float)data.LineThickness * 1.01f, false);

                        if (data.FillMaterial != null)
                        {
                            Renderer rend = fill.GetComponent <Renderer>();
                            if (rend != null)
                            {
                                rend.material = data.FillMaterial;
                            }
                            ChartMaterialController controller = fill.GetComponent <ChartMaterialController>();

                            if (controller != null && controller.Materials != null)
                            {
                                Color hover    = controller.Materials.Hover;
                                Color selected = controller.Materials.Selected;
                                controller.Materials = new ChartDynamicMaterial(data.FillMaterial, hover, selected);
                            }
                        }
                    }
                }
            }
            GenerateAxis(true);
        }
コード例 #26
0
 private void onVertexRemoved(object sender, GraphEventArgs e)
 {
     nodes.Remove(e.Vertices[0]);
     render();
 }