public override void Run(RenderControl renderer)
        {
            var ellipse = SketchBuilder.MakeEllipse(GP.Origin(), 10, 5, GP.DX(), GP.DZ());

            renderer.ShowShape(ellipse, Vector3.Blue);

            ParametricCurve pc = new ParametricCurve(ellipse);

            var paramsList = pc.SplitByUniformLength(1, 0.01);

            uint itemCount = (uint)paramsList.Count;
            var  points    = new ParticleSceneNode(itemCount, Vector3.Green, 5.0f);
            var  lines     = new SegmentsSceneNode(itemCount, Vector3.Red, 2);

            Random random = new Random();

            for (int ii = 0; ii < paramsList.Count; ++ii)
            {
                var value = pc.D1(paramsList[ii]);
                var pos   = value.GetPoint();
                var dir   = value.GetVectors()[0];
                var end   = new GPnt(pos.XYZ().Added(dir.XYZ()));

                lines.SetPositions((uint)ii, Vector3.From(pos), Vector3.From(end));
                lines.SetColors((uint)ii, Vector3.Red, Vector3.From(random.NextDouble(), random.NextDouble(), random.NextDouble()));

                points.SetPosition((uint)ii, Vector3.From(pos));
            }

            renderer.ShowSceneNode(points);
            renderer.ShowSceneNode(lines);
        }
Пример #2
0
        public override void Animation(RenderControl render, float time)
        {
            mTheta += 0.5f;
            mRobot.SetVariable(1, mTheta * 2);
            mRobot.SetVariable(2, mTheta * 3);
            mRobot.SetVariable(4, mTheta * 6);
            mRobot.SetVariable(6, mTheta * 2);
            mRobot.SetVariable(7, mTheta * 6);
            mRobot.SetVariable(8, mTheta * 6);
            if (mD > 30 || mD < 10)
            {
                mSign *= -1;
            }
            mD += mSign * 0.2f;

            mRobot.UpdateFrames();

            Vector3 pt = new Vector3(0);

            pt = pt * mRobot.GetFinalTransform();
            mMotionTrail.SetPosition(mCount, pt);
            ++mCount;

            render.RequestDraw(EnumUpdateFlags.Scene);
        }
        public bool Play(RenderControl render, float time)
        {
            if (mCurrentIdx >= mPoints.Count)
            {
                mLineNode.SetVisible(false);

                return(false);
            }



            mTime += time;
            if (mTime < 100) //距离上次更新不到100ms,就返回
            {
                return(true);
            }
            mTime = 0;

            Vector3 target = mPoints[mCurrentIdx];

            mLineNode.SetTransform(MakeTransform(mStart, target));
            mLineNode.RequstUpdate();

            mMotionTrail.SetPosition((uint)mCurrentIdx, target);
            mMotionTrail.RequstUpdate();

            render.RequestDraw(EnumUpdateFlags.Scene);

            ++mCurrentIdx;

            return(true);
        }
        public override void Animation(RenderControl render, float time)
        {
            if (mLength > 50)
            {
                return;
            }

            mTheta += 0.02f;
            var rotation = Matrix4.makeRotationAxis(new Vector3(1, 0, 0), mTheta);

            mLength += 0.1f;

            var trf = Matrix4.makeTranslation(-mLength, 0, 0) * rotation;

            mWorkpiece.SetTransform(trf);
            mWorkpiece.RequstUpdate();

            Vector3 tailPostion = new Vector3(0, 0, 5);

            tailPostion.applyMatrix4(trf);
            mMotionTrail.SetPosition(mCount++, tailPostion);
            mMotionTrail.RequstUpdate();

            render.RequestDraw(EnumUpdateFlags.Scene);
        }
Пример #5
0
        public override void Animation(RenderControl render, float time)
        {
            if (mAnimation.Play(time))
            {
                var     trf         = mWorkpiece.GetTransform();
                Vector3 tailPostion = new Vector3(0, 0, 5);
                tailPostion.applyMatrix4(trf);
                mMotionTrail.SetPosition(mCount++, tailPostion);
                mMotionTrail.RequstUpdate();

                render.RequestDraw(EnumUpdateFlags.Scene);
            }
        }
        public override void Animation(RenderControl render, float time)
        {
            if (mRobotAnimation.Play(time))
            {
                Vector3 pt = new Vector3(0);
                pt = pt * mRobot.GetFinalTransform();
                mMotionTrail.SetPosition(mCount, pt);
                mMotionTrail.UpdateBoundingBox();
                ++mCount;

                //Blink blink effect
                BrepSceneNode.Cast(mRobot.GetLink((mCount - 1) % 7).GetVisualNode()).GetShape().SetFaceMaterial(mRobotMaterial);
                BrepSceneNode.Cast(mRobot.GetLink(mCount % 7).GetVisualNode()).GetShape().SetFaceMaterial(mMaterial);

                render.RequestDraw(EnumUpdateFlags.Scene);
            }
        }
        public override void Run(RenderControl render)
        {
            var fileName = GetResourcePath("models/YONGSHENGDA_9998.igs");
            var shape    = ShapeIO.Open(fileName);

            if (shape == null)
            {
                return;
            }

            var face  = shape.FindChild(EnumTopoShapeType.Topo_FACE, 12);
            var edges = face.GetChildren(EnumTopoShapeType.Topo_EDGE);

            var wire = SketchBuilder.MakeWire(edges);

            if (wire == null)
            {
                return;
            }



            var curve = new ParametricCurve();

            curve.Initialize(wire);
            var ulist = curve.SplitByUniformLength(1, 0.2);


            var node = new ParticleSceneNode((uint)ulist.Count, ColorTable.Red, 2);

            for (int ii = 0; ii < ulist.Count; ++ii)
            {
                node.SetPosition((uint)ii, Vector3.From(curve.Value(ulist[ii])));
            }
            node.UpdateBoundingBox();

            render.ShowShape(wire, ColorTable.GoldEnrod);
            render.ShowSceneNode(node);
        }
        public override void Animation(RenderControl render, float time)
        {
            if (this.State == 0)
            {
                return;
            }

            mTheta += 0.5f;
            mRobot.SetVariable(1, mTheta * 1);
            mRobot.SetVariable(2, mTheta * 2);
            mRobot.SetVariable(4, mTheta * 3);
            mRobot.SetVariable(6, mTheta * 4);
            mRobot.SetVariable(7, mTheta * 5);
            mRobot.SetVariable(8, mTheta * 6);
            if (mD > 30 || mD < 10)
            {
                mSign *= -1;
            }
            mD += mSign * 0.2f;

            mRobot.UpdateFrames();

            Vector3 pt = new Vector3(0);

            pt = pt * mRobot.GetFinalTransform();
            mMotionTrail.SetPosition(mCount, pt);
            mMotionTrail.UpdateBoundingBox();
            ++mCount;

            if (this.State == 1)
            {
                var position = pt - Vector3.UNIT_Y * 500;
                render.GetCamera().LookAt(position, pt, Vector3.UNIT_Z);
            }
            else if (this.State == 2)
            {
                var position = pt + Vector3.UNIT_Z * 500;
                render.GetCamera().LookAt(position, pt, Vector3.UNIT_Y);
            }
            else if (this.State == 3)
            {
                var camera  = render.GetCamera();
                var postion = new Vector3(0, -500, 0);

                var trf = Matrix4.makeRotationAxis(Vector3.UNIT_Z, mTheta * 3.1415926f / 180);
                postion.applyMatrix4(trf);

                camera.LookAt(postion, Vector3.Zero, Vector3.UNIT_Z);
            }

            if (this.State == 1 && mTheta > 360)
            {
                this.State = 2;
            }
            else if (this.State == 2 && mTheta > 720)
            {
                render.SetStandardView(EnumStandardView.Front);
                this.State = 3;
            }


            render.RequestDraw(EnumUpdateFlags.Scene);
        }