예제 #1
0
 protected Utils.VisualPrimitive GetVisualPrimitive( string name )
 {
   Utils.VisualPrimitive primitive = null;
   if ( m_visualPrimitives.TryGetValue( name, out primitive ) )
     return primitive;
   return null;
 }
예제 #2
0
 protected void RemoveVisualPrimitive(Utils.VisualPrimitive primitive)
 {
     if (m_visualPrimitives.ContainsValue(primitive))
     {
         RemoveVisualPrimitive(m_visualPrimitives.First(kvp => kvp.Value == primitive).Key);
     }
 }
예제 #3
0
 protected void RemoveVisualPrimitive( string name )
 {
   Utils.VisualPrimitive primitive = null;
   if ( m_visualPrimitives.TryGetValue( name, out primitive ) ) {
     primitive.Destruct();
     m_visualPrimitives.Remove( name );
   }
 }
예제 #4
0
 protected Utils.VisualPrimitive GetVisualPrimitive(string name)
 {
     Utils.VisualPrimitive primitive = null;
     if (m_visualPrimitives.TryGetValue(name, out primitive))
     {
         return(primitive);
     }
     return(null);
 }
예제 #5
0
        public ShapeUtils.Direction GetDirection(Utils.VisualPrimitive primitive)
        {
            foreach (ShapeUtils.Direction direction in Enum.GetValues(typeof(ShapeUtils.Direction)))
            {
                if (GetVisual(direction) == primitive)
                {
                    return(direction);
                }
            }

            throw new AGXUnity.Exception("Direction not found.");
        }
예제 #6
0
        private void UpdateVisualPrimitive(Utils.VisualPrimitive vp, ShapeInitializationData shapeInitData, ShapeInitializationData.AxisData axisData)
        {
            if (vp == null)
            {
                return;
            }

            vp.Visible = shapeInitData != null && axisData != null;
            if (!vp.Visible)
            {
                return;
            }

            if (vp is Utils.VisualPrimitiveMesh)
            {
                vp.Node.transform.localScale = shapeInitData.Filter.transform.lossyScale;
                vp.Node.transform.position   = shapeInitData.Filter.transform.position;
                vp.Node.transform.rotation   = shapeInitData.Filter.transform.rotation;
            }
            else
            {
                vp.Node.transform.localScale = Vector3.one;
                vp.Node.transform.position   = shapeInitData.WorldCenter;
#if UNITY_2018_1_OR_NEWER
                vp.Node.transform.rotation = shapeInitData.Rotation * Quaternion.FromToRotation(Vector3.up, axisData.Direction).normalized;
#else
                vp.Node.transform.rotation = shapeInitData.Rotation * Quaternion.FromToRotation(Vector3.up, axisData.Direction).Normalize();
#endif
            }

            if (vp is Utils.VisualPrimitiveBox)
            {
                (vp as Utils.VisualPrimitiveBox).SetSize(shapeInitData.LocalExtents);
            }
            else if (vp is Utils.VisualPrimitiveCylinder)
            {
                (vp as Utils.VisualPrimitiveCylinder).SetSize(axisData.Radius, axisData.Height);
            }
            else if (vp is Utils.VisualPrimitiveCapsule)
            {
                (vp as Utils.VisualPrimitiveCapsule).SetSize(axisData.Radius, axisData.Height);
            }
            else if (vp is Utils.VisualPrimitiveSphere)
            {
                (vp as Utils.VisualPrimitiveSphere).SetSize(axisData.Radius);
            }
            else if (vp is Utils.VisualPrimitiveMesh)
            {
                (vp as Utils.VisualPrimitiveMesh).SetSourceObject(shapeInitData.Filter.sharedMesh);
            }
        }
예제 #7
0
        /// <summary>
        /// Callback when the edge has been picked.
        /// </summary>
        private void OnEdgeClick(Utils.Raycast.Result result, Utils.VisualPrimitive primitive)
        {
            m_collectedData.SelectedEdge = m_collectedData.CurrentEdge;
            EdgeVisual.Pickable          = false;
            NodeVisual.Pickable          = false;

            if (OnEdgeSelect != null && m_collectedData.SelectedEdge.Valid)
            {
                OnEdgeSelect(new EdgeSelectResult()
                {
                    Target = m_collectedData.Target,
                    Edge   = m_collectedData.SelectedEdge
                });
            }
        }
예제 #8
0
        private Utils.VisualPrimitive GetSelectedButtonVisualPrimitive()
        {
            Utils.VisualPrimitive vp = GetVisualPrimitive(m_visualPrimitiveName);

            if (m_buttons.Selected == null || m_buttons.Selected.State.Axis == ShapeInitializationData.Axes.None)
            {
                RemoveVisualPrimitive(m_visualPrimitiveName);
                return(null);
            }

            var desiredType = Type.GetType("AGXUnityEditor.Utils.VisualPrimitive" + m_buttons.Selected.State.ShapeType.ToString() + ", AGXUnityEditor");

            // Desired type doesn't exist - remove current visual primitive if it exists.
            if (desiredType == null)
            {
                RemoveVisualPrimitive(m_visualPrimitiveName);
                return(null);
            }

            // New visual primitive type. Remove old one.
            if (vp != null && vp.GetType() != desiredType)
            {
                RemoveVisualPrimitive(m_visualPrimitiveName);
                vp = null;
            }

            // Same type as selected button shape type.
            if (vp != null)
            {
                return(vp);
            }

            MethodInfo genericMethod = GetType().GetMethod("GetOrCreateVisualPrimitive", BindingFlags.NonPublic | BindingFlags.Instance).MakeGenericMethod(desiredType);

            vp = (Utils.VisualPrimitive)genericMethod.Invoke(this, new object[] { m_visualPrimitiveName, VisualPrimitiveShader });
            if (vp == null)
            {
                return(null);
            }

            vp.Pickable = false;
            vp.Color    = VisualPrimitiveColor;

            return(vp);
        }
예제 #9
0
 private void OnClick(Utils.Raycast.Result result, Utils.VisualPrimitive primitive)
 {
     Selected = true;
 }
예제 #10
0
 private void OnClick(AgXUnity.Utils.Raycast.Hit hit, Utils.VisualPrimitive primitive)
 {
     Selected = true;
 }
예제 #11
0
 /// <summary>
 /// Callback when the node/position has been picked.
 /// </summary>
 private void OnPointClick(Raycast.Hit hit, Utils.VisualPrimitive primitive)
 {
     m_collectedData.PointOnEdgeGiven = true;
 }
예제 #12
0
 /// <summary>
 /// Callback when the edge has been picked.
 /// </summary>
 private void OnEdgeClick(Raycast.Hit hit, Utils.VisualPrimitive primitive)
 {
     m_collectedData.SelectedEdge = m_collectedData.CurrentEdge;
     EdgeVisual.Pickable          = false;
     NodeVisual.Pickable          = false;
 }
예제 #13
0
        private void OnPrimitiveClick(Raycast.Hit hit, Utils.VisualPrimitive primitive)
        {
            OnSelect(Position, GetRotation(Vector3.forward, GetDirection(primitive)));

            PerformRemoveFromParent();
        }
예제 #14
0
 /// <summary>
 /// Callback when the node/position has been picked.
 /// </summary>
 private void OnPointClick(Utils.Raycast.Result result, Utils.VisualPrimitive primitive)
 {
     m_collectedData.PointOnEdgeGiven = true;
 }