Example #1
0
        public void AddJoint(System.Drawing.Point pt)
        {
            var ptf = ParentViewport.GetLocationRate(true, new System.Drawing.PointF(pt.X, pt.Y));
            var br  = m_BlendedTransInfo.RateLocation;

            AddJoint(ptf.X - br.X, ptf.Y - br.Y);
        }
 public override void OnViewportSizeChanged()
 {
     base.OnViewportSizeChanged();
     m_CurViewOffset      = ParentViewport.GetRateLocation(false, m_BaseTrans.RateLocation);
     m_CurScaledImageSize = ParentViewport.GetRateSize(false, m_BaseTrans.RateSize);
     Scale(m_CurScaleProportion.X, m_CurScaleProportion.Y, m_fZoomScale);
 }
Example #3
0
        public void SetPosition(BodyOperationPart part, System.Drawing.Point pPosOrBodyOffset)
        {
            System.Drawing.PointF p = pPosOrBodyOffset;
            p = ParentViewport.GetLocationRate(IsBasedOnBackImageElement, pPosOrBodyOffset, part == BodyOperationPart.Body);
            if (part != BodyOperationPart.Body)
            {
                p.X -= m_BaseTrans.Xr;
                p.Y -= m_BaseTrans.Yr;
            }
            switch (part)
            {
            case BodyOperationPart.CornerLU:
                m_CornerVectorR[0].X = p.X; m_CornerVectorR[0].Y = p.Y; break;

            case BodyOperationPart.CornerRU:
                m_CornerVectorR[1].X = p.X; m_CornerVectorR[1].Y = p.Y; break;

            case BodyOperationPart.CornerRD:
                m_CornerVectorR[2].X = p.X; m_CornerVectorR[2].Y = p.Y; break;

            case BodyOperationPart.CornerLD:
                m_CornerVectorR[3].X = p.X; m_CornerVectorR[3].Y = p.Y; break;

            case BodyOperationPart.Body:
            {
                m_BaseTrans.Xr = p.X;
                m_BaseTrans.Yr = p.Y;
            } break;
            }
        }
Example #4
0
        public override BodyOperationPart GetPointBodyOprPart(System.Drawing.Point pt)
        {
            System.Drawing.PointF pos = pt;
            pos = ParentViewport.GetLocationRate(IsBasedOnBackImageElement, pos);
            float radius = 8.0F / ParentViewport.ViewportPtr.Width;

            if (IsInnerEditingMode)
            {
                for (int i = 0; i < 4; ++i)
                {
                    var p = new System.Drawing.PointF(m_Vectors[i].Position.X, m_Vectors[i].Position.Y);
                    p = ParentViewport.GetLocationRate(IsBasedOnBackImageElement, p);
                    double dx   = p.X - pos.X;
                    double dy   = p.Y - pos.Y;
                    double dist = System.Math.Sqrt(dx * dx + dy * dy);
                    if (dist <= radius)
                    {
                        return(VectorBodyOptParts[i]);
                    }
                }
            }
            if (BoundRectRate.Contains(pos))
            {
                return(BodyOperationPart.Body);
            }
            return(BodyOperationPart.Nothing);
        }
 public override void OnBeforeBlendedTransforms()
 {
     if (IsPreviewElement)
     {
         base.OnBeforeBlendedTransforms();
     }
     else
     {
         m_BaseTrans.RateLocation = ParentViewport.GetLocationRate(false, m_CurViewOffset);
         m_BaseTrans.RateSize     = ParentViewport.GetSizeRate(false, m_CurScaledImageSize);
     }
 }
Example #6
0
        //private List<VertexPositionColor> m_TempBufferCurve = new List<VertexPositionColor>();
        public override void Update(float elapsedTime, ref float curViewportTime)
        {
            base.Update(elapsedTime, ref curViewportTime);

            m_Vectors.Clear();
            m_TempBufferVecs.Clear();
            var pr = m_BlendedTransInfo.RateLocation;

            foreach (var seg in m_Segments)
            {
                var vrs = seg.GetBuffer(seg != m_Segments[0]);
                for (int i = 0; i < vrs.Length; ++i)
                {
                    var   v = ParentViewport.GetRateLocation(true, new System.Drawing.PointF(pr.X + vrs[i].X, pr.Y + vrs[i].Y));
                    Color clr;
                    if (!IsInnerEditingMode || i < 6)
                    {
                        clr = new Color(BlendColor.R, BlendColor.G, BlendColor.B, BlendColor.A);
                    }
                    else
                    {
                        clr = Color.Red;
                    }
                    Vector2 uv;
                    if (i < 6)
                    {
                        uv = new Vector2(UVIndices[i, 0], UVIndices[i, 1]);
                    }
                    else if (IsInnerEditingMode)
                    {
                        uv = new Vector2(0.5F, 0.5F);
                    }
                    else
                    {
                        uv = new Vector2(ProjectDoc.Instance.Option.WaterbagJointColorUV.X, ProjectDoc.Instance.Option.WaterbagJointColorUV.Y);
                    }
                    var vec = new VertexPositionColorTexture(new Vector3(v.X, v.Y, 0), clr, uv);
                    m_Vectors.Add(vec);
                }
                m_TempBufferVecs.Add(vrs);
            }

            //m_TempBufferCurve.Clear();
            //int curveSegs = 100;
            //for (int i = 0; i < curveSegs; ++i)
            //{
            //    if (m_TempBufferCurve.Count > 1)
            //        m_TempBufferCurve.Add(m_TempBufferCurve[m_TempBufferCurve.Count - 1]);
            //    var pos = m_Curve.GetPosition(i / (float)curveSegs);
            //    var posAbs = ParentViewport.GetRateLocation(true, new System.Drawing.PointF(pr.X + pos.X, pr.Y + pos.Y));
            //    m_TempBufferCurve.Add(new VertexPositionColor(new Vector3(posAbs.X, posAbs.Y, 0), Color.OrangeRed));
            //}
        }
        public override void LoadFromXmlElement(System.Xml.XmlElement node)
        {
            base.LoadFromXmlElement(node);
            float fZoomScale;

            if (!float.TryParse(node.GetAttribute("ZoomScale"), out fZoomScale))
            {
                fZoomScale = 1;
            }
            m_CurViewOffset      = ParentViewport.GetRateLocation(false, m_BaseTrans.RateLocation);
            m_CurScaledImageSize = ParentViewport.GetRateSize(false, m_BaseTrans.RateSize);
            CurZoomScale         = fZoomScale;
        }
Example #8
0
        public void MoveJoint(int index, System.Drawing.Point offset)
        {
            var ptf = ParentViewport.GetLocationRate(true, new System.Drawing.PointF(offset.X, offset.Y), true);

            if (index >= 0 && index < m_Joints.Count)
            {
                var rp = m_Joints[index].RatePos;
                rp.X += ptf.X;
                rp.Y += ptf.Y;
                m_Joints[index].RatePos = rp;
                m_Curve.SetPosition(index, new Vector3(rp.X, rp.Y, 0));
            }
        }
Example #9
0
        public override void Update(float elapsedTime, ref float curViewportTime)
        {
            base.Update(elapsedTime, ref curViewportTime);
            elapsedTime *= SpeedRate;
            Color clr  = new Color(BlendColor.R, BlendColor.G, BlendColor.B, (byte)(m_BlendedTransInfo.Alpha * 255.0F));
            var   pos  = ParentViewport.GetRateLocation(IsBasedOnBackImageElement, m_BlendedTransInfo.RateLocation);
            var   size = ParentViewport.GetRateSize(IsBasedOnBackImageElement, m_BlendedTransInfo.RateSize);

            pos.X -= size.Width * Barycenter.X;
            pos.Y -= size.Height * Barycenter.Y;
            m_Vectors[0].Color             = clr;
            m_Vectors[0].Position          = new Vector3(pos.X, pos.Y, 0);
            m_Vectors[1].Color             = clr;
            m_Vectors[1].Position          = new Vector3(pos.X + size.Width, pos.Y, 0);
            m_Vectors[2].Color             = clr;
            m_Vectors[2].Position          = new Vector3(pos.X + size.Width, pos.Y + size.Height, 0);
            m_Vectors[3].Color             = clr;
            m_Vectors[3].Position          = new Vector3(pos.X, pos.Y + size.Height, 0);
            m_Vectors[0].TextureCoordinate = new Vector2(0, 0);
            m_Vectors[1].TextureCoordinate = new Vector2(1, 0);
            m_Vectors[2].TextureCoordinate = new Vector2(1, 1);
            m_Vectors[3].TextureCoordinate = new Vector2(0, 1);
            UpdateTextureCoordinates();
            if (m_BlendedTransInfo.Angle != 0)
            {
                float angle = m_BlendedTransInfo.Angle / 180.0F * (float)Math.PI;
                for (int i = 0; i < 4; ++i)
                {
                    var bbl = BlendedBaryLocation;
                    var cen = new Vector3(bbl.X, bbl.Y, 0);
                    var mat = Matrix.CreateTranslation(cen * -1)
                              * Matrix.CreateRotationZ(angle)
                              * Matrix.CreateTranslation(cen);
                    m_Vectors[i].Position = Vector3.Transform(m_Vectors[i].Position, mat);
                }
            }

            if (Resource != null)
            {
                if (DsVideo == null)
                {
                    DsVideo = new DSVideoPlayer(Resource.FullFilePath, ProjectDoc.Instance.HostGame.GraphicsDevice);
                }
                if (DsVideo.CurrentState == VideoState.Stopped)
                {
                    DsVideo.Play();
                }
                DsVideo.Update();
            }
        }
Example #10
0
 public override void Update(float elapsedTime, ref float curViewportTime)
 {
     base.Update(elapsedTime, ref curViewportTime);
     for (int i = 0; i < 4; ++i)
     {
         var pr     = m_BlendedTransInfo.RateLocation;
         var offset = ParentViewport.GetRateLocation(IsBasedOnBackImageElement,
                                                     new System.Drawing.PointF(pr.X + m_CornerVectorR[i].X, pr.Y + m_CornerVectorR[i].Y));
         m_Vectors[i].Position = new Vector3(offset.X, offset.Y, 0);
         m_Vectors[i].Color    = Color.White;
         var p = ParentViewport.GetLocationRate(true, new System.Drawing.PointF(m_Vectors[i].Position.X, m_Vectors[i].Position.Y));
         m_Vectors[i].TextureCoordinate = new Vector2(p.X, p.Y);
         m_LnVectors[i].Position        = m_Vectors[i].Position;
         m_LnVectors[i].Color           = Color.Yellow;
     }
     m_LnVectors[4].Position = m_Vectors[0].Position;
     m_LnVectors[4].Color    = Color.Yellow;
 }
        public override void Update(float elapsedTime, ref float curViewportTime)
        {
            base.Update(elapsedTime, ref curViewportTime);
            elapsedTime *= SpeedRate;
            Color clr  = new Color(BlendColor.R, BlendColor.G, BlendColor.B, (byte)(m_BlendedTransInfo.Alpha * 255.0F));
            var   pos  = ParentViewport.GetRateLocation(IsBasedOnBackImageElement, m_BlendedTransInfo.RateLocation);
            var   size = ParentViewport.GetRateSize(IsBasedOnBackImageElement, m_BlendedTransInfo.RateSize);

            pos.X -= size.Width * Barycenter.X;
            pos.Y -= size.Height * Barycenter.Y;
            m_Vectors[0].Color             = clr;
            m_Vectors[0].Position          = new Vector3(pos.X, pos.Y, 0);
            m_Vectors[1].Color             = clr;
            m_Vectors[1].Position          = new Vector3(pos.X + size.Width, pos.Y, 0);
            m_Vectors[2].Color             = clr;
            m_Vectors[2].Position          = new Vector3(pos.X + size.Width, pos.Y + size.Height, 0);
            m_Vectors[3].Color             = clr;
            m_Vectors[3].Position          = new Vector3(pos.X, pos.Y + size.Height, 0);
            m_Vectors[0].TextureCoordinate = new Vector2(0, 0);
            m_Vectors[1].TextureCoordinate = new Vector2(1, 0);
            m_Vectors[2].TextureCoordinate = new Vector2(1, 1);
            m_Vectors[3].TextureCoordinate = new Vector2(0, 1);
            UpdateTextureCoordinates();
            if (m_BlendedTransInfo.Angle != 0)
            {
                float angle = m_BlendedTransInfo.Angle / 180.0F * (float)Math.PI;
                for (int i = 0; i < 4; ++i)
                {
                    var bbl = BlendedBaryLocation;
                    var cen = new Vector3(bbl.X, bbl.Y, 0);
                    var mat = Matrix.CreateTranslation(cen * -1)
                              * Matrix.CreateRotationZ(angle)
                              * Matrix.CreateTranslation(cen);
                    m_Vectors[i].Position = Vector3.Transform(m_Vectors[i].Position, mat);
                }
            }
        }
Example #12
0
        private void BuildRibbon()
        {
            m_Vectors.Clear();
            List <Vector3> nodes = new List <Vector3>();
            int            count = (int)(m_Curve.MaxDistance / DetailPrecision);

            for (int i = 0; i <= count; ++i)
            {
                nodes.Add(m_Curve.GetPosition(i / (float)count));
            }
            if (nodes.Count <= 1)
            {
                return;
            }
            List <Vector3> poses = new List <Vector3>();
            float          rw    = ParentViewport.GetLengthRate(true, Width);

            for (int i = 0; i < nodes.Count; ++i)
            {
                Vector3 p1 = nodes[i];
                Vector3 p2;
                if (i == nodes.Count - 1)
                {
                    p2 = nodes[i - 1];
                }
                else
                {
                    p2 = nodes[i + 1];
                }
                Vector3 dir1 = p2 - p1;
                dir1.Normalize();
                Vector3 sp1, sp2;
                if (i == 0)
                {
                    sp1 = Vector3.Cross(dir1, Vector3.UnitZ) * rw;
                    sp2 = sp1 * -1;
                }
                else if (i == nodes.Count - 1)
                {
                    sp2 = Vector3.Cross(dir1, Vector3.UnitZ) * rw;
                    sp1 = sp2 * -1;
                }
                else
                {
                    Vector3 p0   = nodes[i - 1];
                    Vector3 dir0 = p1 - p0;
                    dir0.Normalize();
                    sp1 = dir1 - dir0;
                    if (sp1.Length() == 0)
                    {
                        sp1 = Vector3.Cross(dir0, Vector3.UnitZ) * rw;
                    }
                    else
                    {
                        sp1.Normalize();
                        sp1 *= rw;
                    }
                    sp2 = sp1 * -1;
                    if (Vector3.Cross(dir0, sp1).Z > 0)
                    {
                        var sp = sp1;
                        sp1 = sp2;
                        sp2 = sp;
                    }
                }
                poses.Add(p1 + sp1);
                poses.Add(p1 + sp2);
            }
            for (int i = 0; i < poses.Count - 2; i += 2)
            {
                for (int j = 0; j < sm_Indices.Length; ++j)
                {
                    var pos    = poses[i + sm_Indices[j]];
                    var posAbs = ParentViewport.GetRateLocation(true, new System.Drawing.PointF(pos.X, pos.Y));
                    m_Vectors.Add(new VertexPositionColor(new Vector3(posAbs.X, posAbs.Y, 0), FillColor));
                }
            }
        }