Example #1
0
        /// <summary>
        /// Method draws a point based on a list of double values
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static GameObject DrawPoint(List <double> data)
        {
            if (data.Count == 3)
            {
                return(DrawingUtils.DrawPoint3D(data.ToVector3(), Color.red, 0.1f));
            }
            if (data.Count == 2)
            {
                return(DrawingUtils.DrawPoint2D(new Vector2((float)data[0], (float)data[1]), Color.red, 0.1f));
            }

            return(null);
        }
        /// <summary>
        /// Method to handle the actual drawing calls
        /// </summary>
        /// <param name="mmuResult"></param>
        /// <param name="instance"></param>
        protected override void HandleDrawingCalls(MSimulationResult mmuResult, MMUContainer instance)
        {
            ////Draw the avatar
            //if (instance.PostureDraw != null)
            //{
            //    GameObject.Destroy(instance.PostureDraw);
            //}

            //instance.PostureDraw = DrawingUtils.DrawAvatarPosture(mmuResult.Posture);
            //instance.PostureDraw.name = instance.MMU.Name;

            //Disable the history drawings
            foreach (MotionTask task in instance.History)
            {
                if (task.Drawings != null)
                {
                    foreach (GameObject obj in task.Drawings)
                    {
                        if (obj != null)
                        {
                            obj.SetActive(false);
                        }
                    }
                }
            }


            //Remove(disable all temporary drawings
            if (!resetThisFrame)
            {
                for (int i = this.temporaryDrawings.Count - 1; i >= 0; i--)
                {
                    this.temporaryDrawings[i].SetActive(false);
                    UnityEngine.Object.Destroy(this.temporaryDrawings[i]);
                    this.temporaryDrawings.RemoveAt(i);
                }
                resetThisFrame = true;
            }



            if (mmuResult.DrawingCalls == null)
            {
                return;
            }

            foreach (MDrawingCall drawingCall in mmuResult.DrawingCalls)
            {
                if (drawingCall == null)
                {
                    continue;
                }

                GameObject drawingObject = null;

                switch (drawingCall.Type)
                {
                case MDrawingCallType.DrawLine2D:
                    GameObject line2D = DrawingUtils.DrawLine2D(drawingCall.Data);
                    line2D.name = instance.MMU.Name + "_" + instance.CurrentTasks[0].Instruction.Name;
                    instance.CurrentTasks[0].Drawings.Add(line2D);

                    //Assign the created object
                    drawingObject = line2D;

                    break;

                case MDrawingCallType.DrawLine3D:
                    GameObject line3D = DrawingUtils.DrawLine3D(drawingCall.Data);
                    line3D.name = instance.MMU.Name + "_" + instance.CurrentTasks[0].Instruction.Name;
                    instance.CurrentTasks[0].Drawings.Add(line3D);

                    //Assign the created object
                    drawingObject = line3D;

                    break;

                case MDrawingCallType.DrawPoint3D:
                    GameObject point = DrawingUtils.DrawPoint(drawingCall.Data);
                    point.name = instance.MMU.Name + "_" + instance.CurrentTasks[0].Instruction.Name;
                    instance.CurrentTasks[0].Drawings.Add(point);

                    //Assign the created object
                    drawingObject = point;
                    break;

                case MDrawingCallType.DrawText:
                    GameObject label    = new GameObject(instance.MMU.Name + "_" + instance.CurrentTasks[0].Instruction.Name);
                    TextMesh   textMesh = label.AddComponent <TextMesh>();
                    label.transform.localPosition = new Vector3(0, 2.0f, 0);
                    label.transform.parent        = this.avatar.transform;
                    label.transform.localScale    = new Vector3(0.01f, 0.01f, 0.01f);
                    textMesh.fontSize             = 100;

                    if (drawingCall.Properties.ContainsKey("Text"))
                    {
                        textMesh.text = drawingCall.Properties["Text"];
                    }
                    else
                    {
                        textMesh.text = instance.MMU.Name + "_" + instance.CurrentTasks[0].Instruction.Name;
                    }

                    instance.CurrentTasks[0].Drawings.Add(label);

                    //Assign the created object
                    drawingObject = label;

                    break;
                }


                //Check if the drawing call has properties
                if (drawingObject != null && drawingCall.Properties != null && drawingCall.Properties.ContainsKey("DrawingMode"))
                {
                    if (drawingCall.Properties["DrawingMode"] == "Frame")
                    {
                        //Remove after next frame
                        this.temporaryDrawings.Add(drawingObject);
                    }
                }
            }
        }