public override void Run(RenderControl render)
        {
            // add a plane
            var mMaterial1 = MeshPhongMaterial.Create("phong.texture");

            mMaterial1.SetFaceSide(EnumFaceSide.DoubleSide);
            var texture = ImageTexture2D.Create(GetResourcePath("textures/bricks2.jpg"));

            mMaterial1.SetColorMap(texture);

            var plane     = GeometryBuilder.CreatePlane(500, 500);
            var planeNode = new PrimitiveSceneNode(plane, mMaterial1);

            planeNode.SetTransform(Matrix4.makeTranslation(new Vector3(0, 0, -2.5f)));
            planeNode.SetPickable(false);

            render.ShowSceneNode(planeNode);



            mDevice = new PrimitiveSceneNode(GeometryBuilder.CreateSphere(5), null);
            render.ShowSceneNode(mDevice);

            mCome = new RigidAnimation();
            mCome.Add(new MoveAnimationClip(mDevice, mWorkingPosition, 0, 5));

            mGo = new RigidAnimation();
            mGo.Add(new MoveAnimationClip(mDevice, new Vector3(-200, -200, 0), 0, 5));
        }
Exemplo n.º 2
0
        public override void OnDraw(GeometryBuilder dc)
        {
            dc.Clear();
            dc.Color = McDbEntity.ByObject;
            _blockRef[0].DbEntity.Erase();
            _blockRef[1].DbEntity.Erase();

            _blockRef[0].InsertPoint = _pnt1;
            _blockRef[0].DbEntity.AddToCurrentDocument();


            double inbetween = Math.Round(_pnt1.DistanceTo(_pnt2) / (Count + 1), 4);

            for (int i = 1; i <= Count; i++)
            {
                double distance = inbetween * i;

                _blockRef[i + 1].DbEntity.Erase();

                _blockRef[i + 1].InsertPoint = new Point3d(_pnt1.X + distance, _pnt1.Y, 0).Rotate(_pnt1, _pnt1.AngleTo(_pnt2));
                _blockRef[i + 1].DbEntity.AddToCurrentDocument();
            }

            _blockRef[1].InsertPoint = _pnt2;
            _blockRef[1].DbEntity.AddToCurrentDocument();

            dc.Color = System.Drawing.Color.Cyan;
            dc.DrawLeader(_pnt2, _pnt1, Arrows.Arrow, 5);
        }
        public override void OnDraw(GeometryBuilder dc)
        {
            dc.Clear();

            // Define the basic points for drawing
            Point3d pnt1 = new Point3d(0, 0, 0);
            Point3d pnt2 = new Point3d(pnt1.X + (984 * _scale), pnt1.Y, 0);
            Point3d pnt3 = new Point3d(pnt2.X + 0, pnt1.Y + (50 * _scale), 0);
            Point3d pnt4 = new Point3d(pnt1.X, pnt3.Y, 0);

            // Set the color to ByObject value
            dc.Color = McDbEntity.ByObject;
            Vector3d hvec = new Vector3d(0, 0, _h * _scale);

            // Draw the upper and lower sides
            dc.DrawPolyline(new Point3d[] { pnt1, pnt2, pnt3, pnt4, pnt1 });
            dc.DrawPolyline(new Point3d[] { pnt1.Add(hvec),
                                            pnt2.Add(hvec), pnt3.Add(hvec), pnt4.Add(hvec), pnt1.Add(hvec) });

            // Draw the edges
            dc.DrawLine(pnt1, pnt1.Add(hvec));
            dc.DrawLine(pnt2, pnt2.Add(hvec));
            dc.DrawLine(pnt3, pnt3.Add(hvec));
            dc.DrawLine(pnt4, pnt4.Add(hvec));

            // Drawing a Door Handle
            dc.DrawLine(pnt2.Add(new Vector3d(-190 * _scale, -0, _h * 0.45 * _scale)),
                        pnt2.Add(new Vector3d(-100 * _scale, 0, _h * 0.45 * _scale)));

            dc.DrawLine(pnt3.Add(new Vector3d(-190 * _scale, 0, _h * 0.45 * _scale)),
                        pnt3.Add(new Vector3d(-100 * _scale, 0, _h * 0.45 * _scale)));
        }
        internal IEnumerable <DiagramObject> CreateDiagramObjects(Diagram diagram)
        {
            List <DiagramObject> result = new List <DiagramObject>();

            List <Coordinate> pnts = new List <Coordinate>();

            pnts.Add(new Coordinate(GeometryBuilder.Convert(FromPort.PortStartX), GeometryBuilder.Convert(FromPort.PortStartY)));
            pnts.Add(new Coordinate(GeometryBuilder.Convert(FromPort.PortEndX), GeometryBuilder.Convert(FromPort.PortEndY)));
            pnts.Add(new Coordinate(GeometryBuilder.Convert(ToPort.PortEndX), GeometryBuilder.Convert(ToPort.PortEndY)));
            pnts.Add(new Coordinate(GeometryBuilder.Convert(ToPort.PortStartX), GeometryBuilder.Convert(ToPort.PortStartY)));
            pnts.Add(new Coordinate(GeometryBuilder.Convert(FromPort.PortStartX), GeometryBuilder.Convert(FromPort.PortStartY)));

            var ring = new LinearRing(pnts.ToArray());

            var poly = new Polygon(ring);

            result.Add(new DiagramObject(diagram)
            {
                Style            = Style is null ? "Cable" : Style,
                Label            = this.Label,
                Geometry         = poly,
                IdentifiedObject = _refClass == null ? null : new IdentifiedObjectReference()
                {
                    RefId = _refId, RefClass = _refClass
                },
                DrawingOrder = DrawingOrder
            });
Exemplo n.º 5
0
        public override void OnDraw(GeometryBuilder dc)
        {
            dc.Clear();
            dc.Color = McDbEntity.ByObject;

            dc.DrawPolyline(new ConShape(poly.Points.FirstPoint, poly.Points.LastPoint, Thickness, Length, Margin, Count).Shape);
        }
        public void Create(RenderControl render)
        {
            // 随便构造些点
            float offset = 10.0f;

            for (int ii = 0; ii < 10; ++ii)
            {
                for (int jj = 0; jj < ii; ++jj)
                {
                    mPoints.Add(new Vector3(jj * offset, 100, ii * offset));
                }
            }


            mMotionTrail = new ParticleSceneNode((uint)mPoints.Count, ColorTable.Green, 3.0f);

            mCurrentIdx = 0;

            render.ShowSceneNode(mMotionTrail);

            var lineMaterial = BasicMaterial.Create("myline");

            lineMaterial.SetColor(ColorTable.Hex(0xFF0000));
            var line = GeometryBuilder.CreateLine(Vector3.Zero, new Vector3(1, 0, 0));

            mLineNode = new PrimitiveSceneNode(line, lineMaterial);
            mLineNode.SetTransform(MakeTransform(mStart, mPoints[0]));
            mLineNode.RequstUpdate();
            render.ShowSceneNode(mLineNode);
        }
Exemplo n.º 7
0
        public override void OnDraw(GeometryBuilder dc)
        {
            dc.Clear();
            dc.Color = McDbEntity.ByObject;//color will be taken from object properties and object will be redrawn after color change
            //dc.DrawPolyline(new Point3d[] { _pnt, _pnt1, _pnt2, _pnt3, _pnt });
            //dc.DrawPolyline(poly.GetTrimmedOffset(Height)[0]);

            BendingShape shape1 = new BendingShape(_pnt, _pnt1, Height, Thickness, Gap);
            BendingShape shape2 = new BendingShape(_pnt1, _pnt2, Height, Thickness);
            BendingShape shape3 = new BendingShape(_pnt2, _pnt3, Height, Thickness, Gap);
            BendingShape shape4 = new BendingShape(_pnt3, _pnt, Height, Thickness);

            Polyline3d poly = new Polyline3d(new List <Point3d> (shape1.Shape));

            poly.AddPoliline(new Polyline3d(new List <Point3d>(shape2.Shape)));
            poly.AddPoliline(new Polyline3d(new List <Point3d>(shape3.Shape)));
            poly.AddPoliline(new Polyline3d(new List <Point3d>(shape4.Shape)));
            poly.SetClosed(true);

            //CircArc3d test = new CircArc3d(_pnt1, new Vector3d(), new Vector3d(), 0.25, ((180 + _pnt.AngleTo(_pnt1)) * Math.PI / 180), (_pnt.AngleTo(_pnt1) * Math.PI / 180));
            //dc.DrawArc(test);

            //dc.DrawArc(_pnt1, 0.25, ((180+_pnt1.AngleTo(_pnt2)) * Math.PI/180), (_pnt1.AngleTo(_pnt2) * Math.PI/180));

            Polyline3d.VertexDataOfPolyline polyVertecies = poly.Vertices;
            for (int i = 0; i < polyVertecies.Count; i++)
            {
                polyVertecies.MakeFilletAtVertex(i + 1, Radius);
            }
            dc.DrawPolyline(poly);
        }
Exemplo n.º 8
0
        public override void Run(RenderControl render)
        {
            var arc    = SketchBuilder.MakeArcOfCircle(new GCirc(GP.XOY(), 10), 0, Math.PI);
            var points = new GPntList
            {
                new GPnt(0, 0, 0),
                new GPnt(2, 5, 0),
                new GPnt(15, 15, 0)
            };
            var line = SketchBuilder.MakeBSpline(points);

            var extrema = new ExtremaCurveCurve();

            extrema.Initialize(arc, line);
            int count = extrema.GetPointCount();

            for (int ii = 0; ii < count; ++ii)
            {
                var point = extrema.GetPoint1(ii);
                var node  = new PrimitiveSceneNode(GeometryBuilder.AtomSphere(), EnumPrimitiveType.TRIANGLES, null);
                node.SetTransform(Matrix4.makeTranslation(Vector3.From(point)));
                render.ShowSceneNode(node);
            }

            render.ShowShape(arc, Vector3.Red);
            render.ShowShape(line, Vector3.Green);
        }
Exemplo n.º 9
0
        SceneNode CreateAnnotation(Vector3 start, Vector3 end, Vector3 offset, String text)
        {
            var line = GeometryBuilder.CreateLine(start + offset, end + offset);

            var mesh     = FontManager.Instance().CreateMesh(text);
            var textNode = new PrimitiveSceneNode(mesh, null);

            float scale = 0.015f;

            textNode.SetTransform(Matrix4.makeRotationAxis(Vector3.UNIT_X, 3.14159f * 0.5f) * Matrix4.makeScale(scale, scale, 1));
            textNode.ComputeBoundingBox(Matrix4.Identity);
            float halfW = textNode.GetWorldBBox().getHalfSize().x;
            var   dist  = end.distanceTo(start);
            float ratio = (dist * 0.5f - halfW) / dist;

            textNode.SetTransform(Matrix4.makeTranslation((start + end) * ratio + offset) * textNode.GetTransform());


            var line2 = GeometryBuilder.CreateLine(start, start + offset + new Vector3(0, 0, -2));
            var line3 = GeometryBuilder.CreateLine(end, end + offset + new Vector3(0, 0, -2));

            GroupSceneNode group = new GroupSceneNode();

            group.AddNode(new PrimitiveSceneNode(line, null));
            group.AddNode(new PrimitiveSceneNode(line2, null));
            group.AddNode(new PrimitiveSceneNode(line3, null));
            group.AddNode(textNode);

            return(group);
        }
Exemplo n.º 10
0
        private void NewForm3D_Load(object sender, EventArgs e)
        {
            var box      = GeometryBuilder.CreateBox(100, 200, 300);
            var material = MeshPhongMaterial.Create("simple");

            material.SetColor(ColorTable.Red);
            var node = new PrimitiveSceneNode(box, material);

            mRenderView.ShowSceneNode(node);

            mRenderView.SetStandardView(EnumStandardView.DefaultView);
            mRenderView.ZoomAll();

            // 转发给事件处理
            mRenderView.SetAfterRenderingCallback(() => {
                if (UpdateTagEvent != null)
                {
                    UpdateTagEvent();
                }
            });

            // 创建两个自定义标注
            var mTagCtl = new MyTagControl(mRenderView, new Vector3(200, 300, 400), Vector3.Zero);

            UpdateTagEvent += mTagCtl.UpdateLayout;

            var mTagCtl2 = new MyTagControl(mRenderView, new Vector3(-100, -200, 100), Vector3.Zero);

            UpdateTagEvent += mTagCtl2.UpdateLayout;
        }
Exemplo n.º 11
0
        public static SingleGameObject Create(IEntityManager manager, BoundingBox box, Vector4 color)
        {
            var tag = new ElementTag("Physics Object" + Guid.NewGuid());

            //var box = new BoundingBox(new Vector3(-5,10,-5), new Vector3(5,20,5));

            box = box.Transform(Matrix4x4.CreateTranslation(new Vector3(64, 100, 32) - box.GetCenter()));

            var geobox = GeometryBuilder.BuildGeoBox(box);

            manager.CreateEntity(tag)
            .AddComponents(new IGraphicComponent[] {
                new SimpleGeometryComponent {
                    Positions = geobox.Positions.ToImmutableArray(),
                    Indices   = geobox.Indices.ToImmutableArray(),
                    Normals   = geobox.Positions.CalculateNormals(geobox.Indices).ToImmutableArray(),
                    Color     = color
                },
                new D3DTriangleColoredVertexRenderComponent(),
                TransformComponent.Create(Matrix4x4.Identity),
                PhysicalComponentFactory.CreateAABB(),
                // PhysicalComponentFactory.CreateMesh(),
            });

            return(new PhysicsObjectTest(tag));
        }
Exemplo n.º 12
0
        private DiagramObject CreateSide(Diagram diagram, BlockSideEnum side, double x, double y, double containerWidth, double containerHeight)
        {
            Geometry lineGeometry = null;

            if (side == BlockSideEnum.West)
            {
                lineGeometry = GeometryBuilder.StraightLine(x, y, x, y + containerHeight);
            }
            else if (side == BlockSideEnum.North)
            {
                lineGeometry = GeometryBuilder.StraightLine(x, y + containerHeight, x + containerWidth, y + containerHeight);
            }
            else if (side == BlockSideEnum.East)
            {
                lineGeometry = GeometryBuilder.StraightLine(x + containerWidth, y, x + containerWidth, y + containerHeight);
            }
            else if (side == BlockSideEnum.South)
            {
                lineGeometry = GeometryBuilder.StraightLine(x, y, x + containerWidth, y);
            }

            var containerSide = new DiagramObject(diagram)
            {
                Style        = "NodeContainerSide" + side.ToString(),
                Geometry     = lineGeometry,
                DrawingOrder = 700
            };

            containerSide.SetReference(_nodeContainerViewModel.NodeContainer.Id, "NodeContainer");

            return(containerSide);
        }
        public override void Run(RenderControl render)
        {
            // Create material
            var mMaterial1 = MeshPhongMaterial.Create("phong.texture");

            mMaterial1.SetFaceSide(EnumFaceSide.DoubleSide);
            var texture = ImageTexture2D.Create(GetResourcePath("textures/bricks2.jpg"));

            mMaterial1.SetColorMap(texture);

            var plane     = GeometryBuilder.CreatePlane(500, 500);
            var planeNode = new PrimitiveSceneNode(plane, mMaterial1);

            planeNode.SetTransform(Matrix4.makeTranslation(new Vector3(0, 0, -100)));
            render.ShowSceneNode(planeNode);

            var box     = GeometryBuilder.CreateBox(100, 100, 200);
            var boxNode = new PrimitiveSceneNode(box, mMaterial1);

            render.ShowSceneNode(boxNode);

            var sphere     = GeometryBuilder.CreateSphere(50, 32, 32);
            var sphereNode = new PrimitiveSceneNode(sphere, mMaterial1);

            sphereNode.SetTransform(Matrix4.makeTranslation(new Vector3(0, 0, 150)));

            render.ShowSceneNode(sphereNode);
        }
Exemplo n.º 14
0
        public static MeshGeometry AssimpToLdd(Scene scene, Mesh mesh)
        {
            bool hasUVs = mesh.HasTextureCoords(0);

            var builder       = new GeometryBuilder();
            var meshNode      = Assimp.AssimpHelper.GetMeshNode(scene, mesh);
            var meshTransform = Assimp.AssimpHelper.GetFinalTransform(meshNode).ToLDD();

            for (int i = 0; i < mesh.VertexCount; i++)
            {
                builder.AddVertex(new Vertex()
                {
                    Position = meshTransform.TransformPosition(mesh.Vertices[i].ToLDD()),
                    Normal   = meshTransform.TransformNormal(mesh.Normals[i].ToLDD()),
                    TexCoord = hasUVs ? mesh.TextureCoordinateChannels[0][i].ToLDD().Xy : Simple3D.Vector2.Empty
                }, false);
            }

            for (int i = 0; i < mesh.FaceCount; i++)
            {
                if (mesh.Faces[i].IndexCount != 3)
                {
                    continue;
                }

                builder.AddTriangle(mesh.Faces[i].Indices[0], mesh.Faces[i].Indices[1], mesh.Faces[i].Indices[2]);
            }

            var geometry = builder.GetGeometry();

            geometry.SimplifyVertices();
            return(geometry);
        }
Exemplo n.º 15
0
        public GameObject DrawCylinder(string key, CylinderDetails cyl)
        {
            var geo = GeometryBuilder.BuildCylinder(cyl.Start, cyl.Axis, cyl.Radius, cyl.Length);

            var en = EntityBuilders.BuildColored(Context, ElementTag.New(key), geo, cyl.Color, SharpDX.Direct3D11.CullMode.None);

            return(new SingleVisualObject(en.Tag, key));
        }
Exemplo n.º 16
0
        public void BuildSphere_Test()
        {
            var   center = Vector3.Zero;
            float radius = 2;
            var   geo    = GeometryBuilder.BuildSphere(center, radius);

            ObjExports.ExportMesh(geo.Positions.ToArray(), geo.Indices.ToArray(),
                                  @"D:\debug\sphere.obj");
        }
Exemplo n.º 17
0
 public override void OnDraw(GeometryBuilder dc)
 {
     dc.Clear();
     dc.Color = McDbEntity.ByObject;
     dc.DrawCircle(_basePnt, _radius);
     dc.DrawCircle(_basePnt, _radius / 2.0);
     dc.TextHeight = 31;
     dc.DrawMText(_basePnt, Vector3d.XAxis, _predText, HorizTextAlign.Center, VertTextAlign.Center, _radius / 2.05);
 }
Exemplo n.º 18
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="args"></param>
        /// <returns></returns>
        static int Main(string[] args)
        {
            #region Objects
            //Create all the things
            Console.Write("Creating Objects... ");

            ComplexCube cube = new ComplexCube();
            cube.SetScale("1/10");

            SimpleDot3 dot = new SimpleDot3(4);

            System3 sys = new System3(
                new double[, ] {
                { 1, 0, -1 },
                { 0, 0, 0 },
                { 0, 0, 0 }
            },
                dot);

            sys.SetColor(new double[] { 0, 1, 1, 1 });

            //Pen3 pen = new Pen3(GeometryBuilder.Circle(60));
            Pen3 pen = new Pen3(GeometryBuilder.GraphPolar(new ExpressionD("sin(2*i)*2"), 0, 360, 2));
            pen.SetAttributes(new Dictionary <string, string> {
                { "speed", "2" }
            });
            //sin(time+dist/3)/2
            pen.SetAttributes(new Dictionary <string, string> {
                { "scale", ".05" },
                { "rcolor", "sin(time + dist/length)" },
                { "bcolor", "sin(time + dist/length + 2/3*pi)" },
                { "gcolor", "sin(time + dist/length + 4/3*pi)" }
            });
            Scene scene = new Scene();
            scene.Add(pen);
            scene.Add(cube);
            //scene.Add(sys);

            Console.WriteLine("Done.");
            #endregion

            //Create game universe
            Console.Write("Creating Universe... ");
            Universe u = new Universe();
            u.AddScene(scene);
            u.SetActiveScene(0);
            u.Begin();
            Console.WriteLine("Done.");

            while (true)
            {
                Console.ReadLine();
            }
            //return 0;
        }
Exemplo n.º 19
0
        public static ElementTag BuildArrow(IEntityManager manager, ArrowData data)
        {
            var geo = GeometryBuilder.BuildArrow(data);

            return(manager
                   .CreateEntity(data.tag)
                   .AddComponent(geo)
                   .AddComponent(D3DTriangleColoredVertexRenderComponent.AsStrip())
                   .AddComponent(new TransformComponent())
                   .Tag);
        }
Exemplo n.º 20
0
        public void Arrange(Win2DRenderable renderable, ICanvasResourceCreator resourceCreator)
        {
            ClearResources();

            var renderNode = renderable as Win2DRenderNode;

            if (renderNode != null)
            {
                hullGeometry = GeometryBuilder.ComputeHullGeometry(resourceCreator, renderable.Scene, renderNode);
            }
        }
Exemplo n.º 21
0
        private DiagramObject CreateTypeLabel(Diagram diagram, double x, double y)
        {
            var labelDiagramObject = new DiagramObject(diagram)
            {
                Style        = "NodeContainerLabel",
                Label        = _nodeContainerViewModel.GetNodeContainerTypeLabel(),
                Geometry     = GeometryBuilder.Point(x, y),
                DrawingOrder = 1000
            };

            return(labelDiagramObject);
        }
Exemplo n.º 22
0
        private DiagramObject CreateSpanEquipmentTypeLabel(Diagram diagram, double x, double y)
        {
            var labelDiagramObject = new DiagramObject(diagram)
            {
                Style        = "SpanEquipmentLabel",
                Label        = _spanEquipmentViewModel.GetConduitEquipmentLabel(),
                Geometry     = GeometryBuilder.Point(x, y),
                DrawingOrder = 1000
            };

            return(labelDiagramObject);
        }
Exemplo n.º 23
0
        public static OrbitsRotationGameObject Create(IEntityManager manager)
        {
            var geo = GeometryBuilder.BuildRotationOrbits(100, Vector3.Zero);
            var tag = manager
                      .CreateEntity(new ElementTag("OrbitsRotationGameObject"))
                      .AddComponent(geo)
                      .AddComponent(D3DLineVertexRenderComponent.AsLineStrip())
                      .AddComponent(new TransformComponent())
                      .Tag;

            return(new OrbitsRotationGameObject());
        }
Exemplo n.º 24
0
        public override void DrawBox(ElementTag tag, BoundingBox box, IEntityManager emanager)
        {
            var points = GeometryBuilder.BuildBox(box);
            var color  = V4Colors.NextColor(random);

            if (tag.IsEmpty)
            {
                Thread.Sleep(10);
                tag = new ElementTag(DateTime.Now.Ticks.ToString());
            }
            debug.Add(PolylineGameObject.Create(emanager, new ElementTag("OctreeBox_" + tag.ToString()), points, points.Select(x => color).ToArray()));
        }
Exemplo n.º 25
0
        public static MeshGeometry AssimpToLdd(Scene scene, Mesh mesh)
        {
            bool hasUVs = mesh.HasTextureCoords(0);

            var builder       = new GeometryBuilder();
            var meshNode      = Assimp.AssimpHelper.GetMeshNode(scene, mesh);
            var meshTransform = Assimp.AssimpHelper.GetFinalTransform(meshNode).ToLDD();


            for (int i = 0; i < mesh.VertexCount; i++)
            {
                builder.AddVertex(new Vertex()
                {
                    Position = meshTransform.TransformPosition(mesh.Vertices[i].ToLDD()),
                    Normal   = meshTransform.TransformNormal(mesh.Normals[i].ToLDD()),
                    TexCoord = hasUVs ? mesh.TextureCoordinateChannels[0][i].ToLDD().Xy : Simple3D.Vector2.Empty
                }, false);
            }

            for (int i = 0; i < mesh.FaceCount; i++)
            {
                if (mesh.Faces[i].IndexCount != 3)
                {
                    continue;
                }

                builder.AddTriangle(mesh.Faces[i].Indices[0], mesh.Faces[i].Indices[1], mesh.Faces[i].Indices[2]);
            }

            if (mesh.HasBones)
            {
                var boneNames = scene.Meshes.SelectMany(x => x.Bones).Select(x => x.Name).Distinct().ToList();
                var boneNodes = Assimp.AssimpHelper.GetNodeHierarchy(scene.RootNode)
                                .Where(x => boneNames.Contains(x.Name)) /*.OrderBy(x => x.GetLevel())*/.ToList();

                boneNames = boneNodes.Select(x => x.Name).ToList();//names in order

                for (int i = 0; i < mesh.BoneCount; i++)
                {
                    int boneIndex = boneNames.IndexOf(mesh.Bones[i].Name);
                    foreach (var vw in mesh.Bones[i].VertexWeights)
                    {
                        builder.Vertices[vw.VertexID].BoneWeights.Add(new BoneWeight(boneIndex, vw.Weight));
                    }
                }
            }

            var geometry = builder.GetGeometry();

            geometry.SimplifyVertices();
            return(geometry);
        }
Exemplo n.º 26
0
        public static GeometryBuilder ToGeometryBuilder(this Va3cGeometry g)
        {
            var gb       = new GeometryBuilder();
            var vertices = g.data.vertices.ToIArray()
                           .SelectTriplets(ToVertex);

            // https://github.com/mrdoob/three.js/wiki/JSON-Model-format-3
            // https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4
            // https://stackoverflow.com/questions/35386518/parsing-three-js-json-mesh-format-normals-errors
            // https://stackoverflow.com/questions/28023734/threejs-json-loader-mixed-faces-and-vertices

            var f = 0;

            var obscure = removeFourthValue(g.data.faces.ToArray());

            while (f < obscure.Length)
            {
                //var bits = g.data.faces[f++];

                //var isTriangle = (bits & 1) == 0;
                //var isQuad = (bits & 1) != 0;
                //var hasMaterial = (bits & 2) != 0;
                //var hasUV = (bits & 4) != 0;
                //var hasVertexUv = (bits & 8) != 0;
                //var hasNormal = (bits & 16) != 0;
                //var hasVertexNormal = (bits & 32) != 0;
                //var hasColor = (bits & 64) != 0;
                //var hasVertexColor = (bits & 128) != 0;

                //Debug.Assert(bits == 0);

                for (var i = 0; i < 3; ++i)
                {
                    gb.Indices.Add(obscure[f++]);
                }
            }

            gb.Vertices.AddRange(vertices.ToArray());
            gb.UVs.AddRange(Vector2.Zero.Repeat(vertices.Count).ToArray());

            var nfaces = gb.Indices.Count / 3;

            for (var i = 0; i < nfaces; ++i)
            {
                gb.MaterialIds.Add(-1);
                gb.FaceGroupIds.Add(-1);
            }
            return(gb);
        }
Exemplo n.º 27
0
        public ComplexCube()
        {
            ConvertGeometry(GeometryBuilder.Cube());
            originalGeo = MatrixD.OfArray(GeometryBuilder.Cube());

            vertecies = new PointMatrix(originalGeo.ToArray());
            geometry  = vertecies.ToColumnWiseArray();
            colors    = new double[geometry.Length];
            for (int i = 0; i < colors.Length; i += 3)
            {
                colors[i]     = 1;
                colors[i + 1] = 0;
                colors[i + 2] = 1;
            }
        }
Exemplo n.º 28
0
        public static ArrowGameObject Build(IEntityManager manager, ArrowData data)
        {
            var geo = GeometryBuilder.BuildArrow(data);

            geo.Color = data.color;
            var en = manager
                     .CreateEntity(data.tag)
                     .AddComponents(
                geo,
                D3DTriangleColoredVertexRenderComponent.AsStrip(),
                new TransformComponent()
                );

            return(new ArrowGameObject(en.Tag));
        }
Exemplo n.º 29
0
        public static VisualSphereObject SphereGeo(IContextState context, ElementTag tag, Data data)
        {
            var geo = GeometryBuilder.BuildSphere(data.Center, data.Radius);

            var geoId = context.GetGeometryPool()
                        .AddGeometry(geo);

            var en = context.GetEntityManager()
                     .CreateEntity(tag)
                     .AddComponent(RenderableComponent.AsTriangleColored(SharpDX.Direct3D.PrimitiveTopology.TriangleStrip))
                     .AddComponent(TransformComponent.Identity())
                     .AddComponent(MaterialColorComponent.Create(data.Color))
                     .AddComponent(geoId)
            ;

            return(new VisualSphereObject(en.Tag));
        }
Exemplo n.º 30
0
        public override void OnDraw(GeometryBuilder dc)
        {
            dc.Clear();

            // Define the basic points for drawing
            Point3d pnt1 = _pnt1;
            Point3d pnt2 = new Point3d(_pnt2.X, pnt1.Y, 0);
            Point3d pnt3 = new Point3d(pnt2.X, pnt1.Y + 150, 0);
            Point3d pnt4 = new Point3d(pnt1.X, pnt3.Y, 0);

            // Set the color to ByObject value
            dc.Color = McDbEntity.ByObject;
            Vector3d hvec = new Vector3d(0, 0, _h);

            // Draw the upper and lower sides
            dc.DrawPolyline(new Point3d[] { pnt1, pnt2, pnt3, pnt4, _pnt1 });
            dc.DrawPolyline(new Point3d[] { _pnt1.Add(hvec),
                                            pnt2.Add(hvec), pnt3.Add(hvec), pnt4.Add(hvec), pnt1.Add(hvec) });

            // Draw the edges
            dc.DrawLine(pnt1, pnt1.Add(hvec));
            dc.DrawLine(pnt2, pnt2.Add(hvec));
            dc.DrawLine(pnt3, pnt3.Add(hvec));
            dc.DrawLine(pnt4, pnt4.Add(hvec));

            // Create contours for the front and rear sides and hatch them
            // In this demo, we hatch only two sides, you can tailor the others yourself
            List <Polyline3d> c1 = new List <Polyline3d>();

            c1.Add(new Polyline3d(
                       new List <Point3d>()
            {
                pnt1, pnt1.Add(hvec), pnt2.Add(hvec), pnt2, pnt1,
            }));
            dc.DrawGeometry(new Hatch(c1, "BRICK", 0, 20, false, HatchStyle.Normal, PatternType.PreDefined, 30), 1);

            List <Polyline3d> c2 = new List <Polyline3d>();

            c2.Add(new Polyline3d(
                       new List <Point3d>()
            {
                pnt4, pnt4.Add(hvec), pnt3.Add(hvec), pnt3, pnt4,
            }));
            dc.DrawGeometry(new Hatch(c2, "BRICK", 0, 20, false, HatchStyle.Normal, PatternType.PreDefined, 30), 1);
        }