private void getDeformationAt(AreaElement area, AbstractCase abstractCase, Vector3 request, ref Vector3 deformation)
        {
            Random myRandomizer = new Random(0);

            float max = 0.5f;

            deformation.X += max * (float)myRandomizer.NextDouble();
            deformation.Y += max * (float)myRandomizer.NextDouble();
            deformation.Z += max * (float)myRandomizer.NextDouble();
        }
        public bool GetDeformationVectors(AreaElement area, Vector3[] localAxes, AbstractCase abstractCase, Vector3[] ctrlPoints, Vector3[] deformations)
        {
            // Dummy routine

            int verticesInList= ctrlPoints.Length;

            for (int i = 0; i < verticesInList; ++i)
                getDeformationAt(area, abstractCase, ctrlPoints[i], ref deformations[i]);

            return true;
        }
示例#3
0
        /// <summary>
        /// Constructor de copia que clona un AreaElement a partir de src
        /// </summary>
        /// <param name="src">El AreaElement a copiar.</param>
        internal AreaElement(AreaElement src, Joint j1, Joint j2, Joint j3, Joint j4) : base(src)
        {
            props  = (AreaProps)src.Properties.Clone();
            joints = new Joint[4];
            angle  = src.Angle;
            mass   = src.Mass;
            materialTemperature = src.MaterialTemperature;
            offsets             = src.Offsets;
            //springs = a.Springs;
            //springs = new ManagedList<AreaSprings>();
            flipJoints = src.FlipJoints;

            joints[0] = j1;
            joints[1] = j2;
            joints[2] = j3;
            joints[3] = j4;
        }
示例#4
0
        /// <summary>
        /// Executes the command. 
        /// Creates one AreaElement.
        /// </summary>
        /// <param name="services">CommandServices object to interact with the system</param>
        public override void Run(Canguro.Controller.CommandServices services)
        {
            AreaElement area;
            List<Joint> joints = new List<Joint>();
            Joint joint1, joint2, joint3, joint4;
            AreaProps props = new AreaProps();
            List<LineElement> newLines = new List<LineElement>();

            try
            {
            services.GetProperties(Culture.Get("addAreaProps"), props);

            joint1 = services.GetJoint(newLines);
            services.TrackingService = PolygonTrackingService.Instance;
            services.TrackingService.SetPoint(joint1.Position);
            services.Model.ChangeModel();

            joint2 = services.GetJoint(newLines);
            services.TrackingService.SetPoint(joint2.Position);
            services.Model.ChangeModel();

            joint3 = services.GetJoint(newLines);
            services.TrackingService.SetPoint(joint3.Position);
            services.Model.ChangeModel();

            joint4 = services.GetJoint(newLines);
            if (joint4 != null)
                services.TrackingService.SetPoint(joint4.Position);

            services.Model.AreaList.Add(area = new AreaElement(props, joint1, joint2, joint3, joint4));
            services.Model.ChangeModel();

            }
            catch (Canguro.Controller.CancelCommandException) { }
            //if (newLines.Count == 0)
            //    services.Model.Undo.Rollback();
            //else
            //    JoinCmd.Join(services.Model, new List<Joint>(), newLines);
        }
 private void getCurvedAxis(AreaElement area, AbstractCase ac, DeformationAxis component, float[,] controlPoints)
 {
 }
 public float[] GetCurvedPoint(AreaElement area, AbstractCase ac, DeformationAxis component, float xPos)
 {
     return null;
 }
 public float[,] GetCurvedAxis(AreaElement area, AbstractCase ac, DeformationAxis component, int numPoints)
 {
     return null;
 }
 public Vector3[] GetCurve(AreaElement area, AbstractCase ac, int numPoints, float deformationScale, float paintScaleFactorTranslation, out float[] xPos)
 {
     xPos = null;
     return null;
 }
示例#9
0
 private void store(OleDbConnection cn, AreaElement obj)
 {
     throw new NotImplementedException("Not implemented until version 2.0");
 }
示例#10
0
        /// <summary>
        /// Constructor de copia que clona un AreaElement a partir de src
        /// </summary>
        /// <param name="src">El AreaElement a copiar.</param>
        internal AreaElement(AreaElement src, Joint j1, Joint j2, Joint j3, Joint j4)
            : base(src)
        {
            props = (AreaProps)src.Properties.Clone();
            joints = new Joint[4];
            angle = src.Angle;
            mass = src.Mass;
            materialTemperature = src.MaterialTemperature;
            offsets = src.Offsets;
            //springs = a.Springs;
            //springs = new ManagedList<AreaSprings>();
            flipJoints = src.FlipJoints;

            joints[0] = j1;
            joints[1] = j2;
            joints[2] = j3;
            joints[3] = j4;
        }
示例#11
0
        /// <summary>
        /// Executes the command. 
        /// Asks for selected Items repetitions and a Vector, and makes the copies.
        /// </summary>
        /// <param name="services">CommandServices object to interact with the system</param>
        public override void Run(Canguro.Controller.CommandServices services)
        {
            Dictionary<Joint, Joint> joints = new Dictionary<Joint, Joint>();
            Dictionary<Joint, Joint> jSelection = new Dictionary<Joint, Joint>();
            List<LineElement> lines = new List<LineElement>();
            List<LineElement> lSelection = new List<LineElement>();
            List<AreaElement> areas = new List<AreaElement>();
            List<AreaElement> aSelection = new List<AreaElement>();
            ItemList<Joint> jList = services.Model.JointList;
            ItemList<LineElement> lList = services.Model.LineList;
            ItemList<AreaElement> aList = services.Model.AreaList;
            Joint nJoint;
            LineElement nLine;
            AreaElement nArea;

            List<Item> selection = services.GetSelection();

            if (selection.Count == 0)
                return;

            foreach (Item item in selection)
            {
                if (item is Joint)
                {
                    jSelection.Add((Joint)item, null);
                    joints.Add((Joint)item, null);
                }
                else if (item is LineElement)
                {
                    LineElement l = (LineElement)item;
                    lSelection.Add(l);
                    lines.Add(l);
                    if (!jSelection.ContainsKey(l.I))
                    {
                        jSelection.Add(l.I, null);
                        joints.Add(l.I, null);
                    }
                    if (!jSelection.ContainsKey(l.J))
                    {
                        jSelection.Add(l.J, null);
                        joints.Add(l.J, null);
                    }
                }
                else if (item is AreaElement)
                {
                    AreaElement a = (AreaElement)item;
                    aSelection.Add(a);
                    areas.Add(a);
                    for (int i = 0; i < ((a.J4 != null) ? 4 : 3); i++)
                    {
                        if (!jSelection.ContainsKey(a[i]))
                        {
                            jSelection.Add(a[i], null);
                            joints.Add(a[i], null);
                        }
                    }
                }
            }

            Microsoft.DirectX.Vector3 v;
            services.GetVector(out v);

            uint n;
            string str = services.GetString(Culture.Get("getArrayRepetition"));
            n = Convert.ToUInt32(str);

            List<Joint> newJoints = new List<Joint>();
            List<LineElement> newLines = new List<LineElement>();
            List<AreaElement> newAreas = new List<AreaElement>();
            for (int i = 1; i <= n; i++)
            {
                foreach (Joint j in joints.Keys)
                {
                    jList.Add(nJoint = new Joint(j.X + i * v.X, j.Y + i * v.Y, j.Z + i * v.Z));
                    nJoint.Masses = j.Masses;
                    nJoint.DoF = j.DoF;
                    jSelection[j] = nJoint;
                    newJoints.Add(nJoint);
                }
                foreach (LineElement l in lines)
                {
                    lList.Add(nLine = new LineElement(l, jSelection[l.I], jSelection[l.J]));
                    newLines.Add(nLine);
                }
                foreach (AreaElement a in areas)
                {
                    aList.Add(nArea = new AreaElement(a, jSelection[a.J1], jSelection[a.J2], jSelection[a.J3], jSelection[a.J4]));
                    newAreas.Add(nArea);
                }
                services.ReportProgress((uint)(100 * i / n));
                System.Windows.Forms.Application.DoEvents();
            }
            JoinCmd.Join(services.Model, newJoints, newLines, newAreas);
        }
示例#12
0
        private static bool equals(AreaElement j, AreaElement i)
        {
            return (((j.J4 != null && i.J4 != null) && (j.J1.Id == i.J1.Id || j.J1.Id == i.J2.Id || j.J1.Id == i.J3.Id || j.J1.Id == i.J4.Id) &&
                     (j.J2.Id == i.J1.Id || j.J2.Id == i.J2.Id || j.J2.Id == i.J3.Id || j.J2.Id == i.J4.Id) &&
                     (j.J3.Id == i.J1.Id || j.J3.Id == i.J2.Id || j.J3.Id == i.J3.Id || j.J3.Id == i.J4.Id) &&
                     (j.J4.Id == i.J1.Id || j.J4.Id == i.J2.Id || j.J4.Id == i.J3.Id || j.J4.Id == i.J4.Id)) ||

                     ((j.J4 == null && i.J4 == null) && (j.J1.Id == i.J1.Id || j.J1.Id == i.J2.Id || j.J1.Id == i.J3.Id) &&
                     (j.J2.Id == i.J1.Id || j.J2.Id == i.J2.Id || j.J2.Id == i.J3.Id) &&
                     (j.J3.Id == i.J1.Id || j.J3.Id == i.J2.Id || j.J3.Id == i.J3.Id) &&
                     (j.J4.Id == i.J1.Id || j.J4.Id == i.J2.Id || j.J4.Id == i.J3.Id)));
        }
示例#13
0
        //public override void Run(Canguro.Controller.CommandServices services)
        //{
        //    objectCount = 0;
        //    if (Clipboard.ContainsData("Canguro"))
        //    {
        //        Stream stream = (Stream)Clipboard.GetData("Canguro");
        //        Magnet magnet = services.GetPoint(Culture.Get("pasteCmdTitle"));
        //        BinaryFormatter bformatter = new BinaryFormatter();
        //        Microsoft.DirectX.Vector3 pivot = (Microsoft.DirectX.Vector3)bformatter.Deserialize(stream);
        //        Microsoft.DirectX.Vector3 v = magnet.SnapPosition - pivot;
        //        List<Joint> newJoints = new List<Joint>();
        //        List<LineElement> newLines = new List<LineElement>();
        //        ItemList<Joint> jList = services.Model.JointList;
        //        ItemList<LineElement> lList = services.Model.LineList;
        //        Dictionary<uint, Joint> jSelection = new Dictionary<uint, Joint>();
        //        Joint nJoint;
        //        LineElement nLine;
        //        objectCount = (int) bformatter.Deserialize(stream);
        //        for (int i = 0; i < objectCount; i++)
        //        {
        //            Element elem = (Element)bformatter.Deserialize(stream);
        //            if (elem is Joint)
        //            {
        //                Joint j = (Joint)elem;
        //                jList.Add(nJoint = new Joint(j.X + v.X, j.Y + v.Y, j.Z + v.Z));
        //                nJoint.Masses = j.Masses;
        //                nJoint.DoF = j.DoF;
        //                jSelection.Add(j.Id, nJoint);
        //                newJoints.Add(nJoint);
        //                CopyLoads(services.Model, j, nJoint);
        //            }
        //            if (elem is LineElement)
        //            {
        //                LineElement l = (LineElement)elem;
        //                lList.Add(nLine = new LineElement(l.Properties));
        //                nLine.I = jSelection[l.I.Id];
        //                nLine.J = jSelection[l.J.Id];
        //                nLine.Angle = l.Angle;
        //                newLines.Add(nLine);
        //                CopyLoads(services.Model, l, nLine);
        //            }
        //            JoinCmd.Join(services.Model, newJoints, newLines);
        //        }
        //    }
        //}
        /// <summary>
        /// Executes the command. 
        /// Pastes the Items in the Clpboard under the key Canguro, in the current Model.
        /// </summary>
        /// <param name="services">CommandServices object to interact with the system</param>
        public override void Run(Canguro.Controller.CommandServices services)
        {
            objectCount = 0;
            if (Clipboard.ContainsData("Canguro"))
            {
                object[] data = (object[])Clipboard.GetData("Canguro");
                Dictionary<uint, Joint> joints = (Dictionary<uint, Joint>)data[0];
                Dictionary<uint, Joint> jSelection = new Dictionary<uint, Joint>();
                IList<LineElement> lines = (IList<LineElement>)data[1];
                IList<AreaElement> areas = (IList<AreaElement>)data[2];
                Microsoft.DirectX.Vector3 pivot = (Microsoft.DirectX.Vector3)data[3];

                ItemList<Joint> jList = services.Model.JointList;
                ItemList<LineElement> lList = services.Model.LineList;
                ItemList<AreaElement> aList = services.Model.AreaList;

                Joint nJoint;
                LineElement nLine;
                AreaElement nArea;
                Magnet magnet = services.GetPoint(Culture.Get("pasteCmdTitle"));
                if (magnet == null)
                    objectCount = 0;
                else
                {
                    objectCount = joints.Count + lines.Count;
                    Microsoft.DirectX.Vector3 v = magnet.SnapPosition - pivot;
                    List<Joint> newJoints = new List<Joint>();
                    List<LineElement> newLines = new List<LineElement>();
                    List<AreaElement> newAreas = new List<AreaElement>();

                    Dictionary<string, Layer> layers = new Dictionary<string, Layer>();
                    foreach (Layer l in services.Model.Layers)
                        if (l != null)
                            layers.Add(l.Name, l);

                    foreach (uint jid in joints.Keys)
                    {
                        Joint j = (joints[jid] == null) ? jList[jid] : joints[jid];
                        jList.Add(nJoint = new Joint(j.X + v.X, j.Y + v.Y, j.Z + v.Z));
                        nJoint.Masses = j.Masses;
                        if (!layers.ContainsKey(j.Layer.Name))
                        {
                            Layer lay = new Layer(j.Layer.Name);
                            services.Model.Layers.Add(lay);
                            layers.Add(lay.Name, lay);
                        }
                        nJoint.Layer = layers[j.Layer.Name];
                        nJoint.DoF = j.DoF;
                        jSelection.Add(jid, nJoint);
                        newJoints.Add(nJoint);
                        CopyLoads(services.Model, j, nJoint);
                    }
                    foreach (LineElement l in lines)
                    {
                        if (!layers.ContainsKey(l.Layer.Name))
                        {
                            Layer lay = new Layer(l.Layer.Name);
                            services.Model.Layers.Add(lay);
                            layers.Add(lay.Name, lay);
                        }
                        lList.Add(nLine = new LineElement(l, jSelection[l.I.Id], jSelection[l.J.Id]));
                        nLine.Layer = layers[l.Layer.Name];
                        newLines.Add(nLine);
                        CopyLoads(services.Model, l, nLine);
                    }
                    foreach (AreaElement a in areas)
                    {
                        if (!layers.ContainsKey(a.Layer.Name))
                        {
                            Layer lay = new Layer(a.Layer.Name);
                            services.Model.Layers.Add(lay);
                            layers.Add(lay.Name, lay);
                        }

                        aList.Add(nArea = new AreaElement(a, jSelection[a.J1.Id], jSelection[a.J2.Id], jSelection[a.J3.Id], (a.J4 != null) ? jSelection[a.J4.Id] : null));
                        if (a.J4 != null)
                            nArea.J4 = jSelection[a.J4.Id];
                        nArea.Layer = layers[a.Layer.Name];
                        newAreas.Add(nArea);
                        CopyLoads(services.Model, a, nArea);
                    }
                    JoinCmd.Join(services.Model, newJoints, newLines, newAreas);
                }
            }
        }
示例#14
0
        /// <summary>
        /// Executes the command. 
        /// Copies the selected Items in a series around a given rotation axis.
        /// </summary>
        /// <param name="services">CommandServices object to interact with the system</param>
        public override void Run(Canguro.Controller.CommandServices services)
        {
            Dictionary<Joint, Joint> joints = new Dictionary<Joint, Joint>();
            Dictionary<Joint, Joint> jSelection = new Dictionary<Joint, Joint>();
            List<LineElement> lines = new List<LineElement>();
            List<LineElement> lSelection = new List<LineElement>();
            List<AreaElement> areas = new List<AreaElement>();
            List<AreaElement> aSelection = new List<AreaElement>();
            ItemList<Joint> jList = services.Model.JointList;
            ItemList<LineElement> lList = services.Model.LineList;
            ItemList<AreaElement> aList = services.Model.AreaList;
            Joint nJoint;
            LineElement nLine;
            AreaElement nArea;

            List<Item> selection = services.GetSelection();
            if (selection.Count == 0)
                return;

            foreach (Item item in selection)
            {
                if (item is Joint)
                {
                    jSelection.Add((Joint)item, null);
                    joints.Add((Joint)item, null);
                }
                else if (item is LineElement)
                {
                    LineElement l = (LineElement)item;
                    lSelection.Add(l);
                    lines.Add(l);
                    if (!jSelection.ContainsKey(l.I))
                    {
                        jSelection.Add(l.I, null);
                        joints.Add(l.I, null);
                    }
                    if (!jSelection.ContainsKey(l.J))
                    {
                        jSelection.Add(l.J, null);
                        joints.Add(l.J, null);
                    }
                }
                else if (item is AreaElement)
                {
                    AreaElement a = (AreaElement)item;
                    aSelection.Add(a);
                    areas.Add(a);
                    if (!jSelection.ContainsKey(a.J1))
                    {
                        jSelection.Add(a.J1, null);
                        joints.Add(a.J1, null);
                    }
                    if (!jSelection.ContainsKey(a.J2))
                    {
                        jSelection.Add(a.J2, null);
                        joints.Add(a.J2, null);
                    }
                    if (!jSelection.ContainsKey(a.J3))
                    {
                        jSelection.Add(a.J3, null);
                        joints.Add(a.J3, null);
                    }
                    if (a.J4 != null && !jSelection.ContainsKey(a.J4))
                    {
                        jSelection.Add(a.J4, null);
                        joints.Add(a.J4, null);
                    }
                }
            }

            Microsoft.DirectX.Vector3 v, v2;
            uint n = (uint)services.GetSingle(Culture.Get("getArrayRepetition"));

            float dAngle = float.Parse(services.GetString(Culture.Get("getPolarArrayAngle")));
            dAngle *= (float)Math.PI / 180.0F;
            float angle = 0.0F;

            Controller.Snap.Magnet m = services.GetPoint(Culture.Get("getPolarRotationCenter"));
            if (m == null) return;
            v = m.SnapPosition;

            services.TrackingService = LineTrackingService.Instance;
            services.TrackingService.SetPoint(m.SnapPositionInt);

            m = services.GetPoint(Culture.Get("getPolarRotationCenter"));
            if (m == null) return;
            v2 = m.SnapPosition;
            if (v2.Equals(v))
            {
                Canguro.View.GraphicView view = Canguro.View.GraphicViewManager.Instance.ActiveView;
                Vector3 v1Tmp = new Vector3(0, 0, 0);
                Vector3 v2Tmp = new Vector3(0, 0, 1);
                view.Unproject(ref v1Tmp);
                view.Unproject(ref v2Tmp);
                v2 = v2 + v1Tmp - v2Tmp;
            }
            services.TrackingService = null;

            List<Joint> newJoints = new List<Joint>();
            List<LineElement> newLines = new List<LineElement>();
            List<AreaElement> newAreas = new List<AreaElement>();

            for (int i = 1; i <= n; i++)
            {
                angle += dAngle;

                Matrix trans1 = new Matrix();
                trans1.Translate(-v);
                Matrix rot = new Matrix();
                rot.RotateAxis(v2 - v, angle);
                Matrix trans2 = new Matrix();
                trans2.Translate(v);
                rot = trans1 * rot * trans2;

                foreach (Joint j in joints.Keys)
                {
                    Vector3 pos = new Vector3(j.X, j.Y, j.Z);
                    pos.TransformCoordinate(rot);

                    jList.Add(nJoint = new Joint(pos.X, pos.Y, pos.Z));
                    nJoint.Masses = j.Masses;
                    nJoint.DoF = j.DoF;
                    jSelection[j] = nJoint;
                    newJoints.Add(nJoint);
                }
                foreach (LineElement l in lines)
                {
                    lList.Add(nLine = new LineElement(l, jSelection[l.I], jSelection[l.J]));
                    newLines.Add(nLine);
                }
                foreach (AreaElement a in areas)
                {
                    aList.Add(nArea = new AreaElement(a, jSelection[a.J1], jSelection[a.J2], jSelection[a.J3], (a.J4 != null) ? jSelection[a.J4] : null));
                    newAreas.Add(nArea);
                }
            }
            JoinCmd.Join(services.Model, newJoints, newLines, newAreas);
        }