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)); }
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 });
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); }
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); }
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); }
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); }
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; }
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)); }
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); }
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); }
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)); }
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"); }
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); }
/// <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; }
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); }
public void Arrange(Win2DRenderable renderable, ICanvasResourceCreator resourceCreator) { ClearResources(); var renderNode = renderable as Win2DRenderNode; if (renderNode != null) { hullGeometry = GeometryBuilder.ComputeHullGeometry(resourceCreator, renderable.Scene, renderNode); } }
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); }
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); }
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()); }
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())); }
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); }
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); }
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; } }
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)); }
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)); }
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); }