public CameraModel3D() { var b1 = new MeshBuilder(); b1.AddBox(new Vector3(), 1f, 1f, 1.2f, BoxFaces.All); var body = new MeshGeometryModel3D() { CullMode = CullMode.Back }; body.Geometry = b1.ToMeshGeometry3D(); body.Material = PhongMaterials.Gray; body.SceneNode.OnSetRenderTechnique = (h) => { return(h.EffectsManager[DefaultRenderTechniqueNames.Diffuse]); }; this.Children.Add(body); b1 = new MeshBuilder(); b1.AddCone(new Vector3(0, 0, -1.2f), new Vector3(0, 0f, 0), 0.4f, true, 12); var lens = new MeshGeometryModel3D() { CullMode = CullMode.Back }; lens.Geometry = b1.ToMeshGeometry3D(); lens.Material = PhongMaterials.Yellow; lens.SceneNode.OnSetRenderTechnique = (h) => { return(h.EffectsManager[DefaultRenderTechniqueNames.Diffuse]); }; this.Children.Add(lens); var builder = new LineBuilder(); builder.AddLine(Vector3.Zero, new Vector3(2, 0, 0)); builder.AddLine(Vector3.Zero, new Vector3(0, 2, 0)); builder.AddLine(Vector3.Zero, new Vector3(0, 0, -2)); var mesh = builder.ToLineGeometry3D(); var arrowMeshModel = new LineGeometryModel3D(); arrowMeshModel.Geometry = mesh; arrowMeshModel.Color = System.Windows.Media.Colors.White; arrowMeshModel.IsHitTestVisible = false; int segment = mesh.Positions.Count / 3; var colors = new Core.Color4Collection(Enumerable.Repeat <Color4>(Color.Black, mesh.Positions.Count)); int i = 0; for (; i < segment; ++i) { colors[i] = Color.Red; } for (; i < segment * 2; ++i) { colors[i] = Color.Green; } for (; i < segment * 3; ++i) { colors[i] = Color.Blue; } mesh.Colors = colors; this.Children.Add(arrowMeshModel); SceneNode.OnTransformChanged += SceneNode_OnTransformChanged; }
public LineGeometryModel3D GetGrid() { var lineBilder = new LineBuilder(); for (int x = -1000; x < 1000; x += 100) { lineBilder.AddLine(new Vector3(x, 0, -1000), new Vector3(x, 0, 1000)); } for (int z = -1000; z < 1000; z += 100) { lineBilder.AddLine(new Vector3(-1000, 0, z), new Vector3(1000, 0, z)); } LineGeometryModel3D m = new LineGeometryModel3D(); m.Geometry = lineBilder.ToLineGeometry3D(); m.Color = Color.Black; m.Transform = new TranslateTransform3D(new Vector3D(0, 0, 0)); m.Attach(Viewport.RenderHost); return m; }
void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) { switch (connectionId) { case 1: this.view1 = ((HelixToolkit.Wpf.SharpDX.Viewport3DX)(target)); return; case 2: this.grid = ((HelixToolkit.Wpf.SharpDX.LineGeometryModel3D)(target)); return; case 3: this.arrows = ((HelixToolkit.Wpf.SharpDX.LineGeometryModel3D)(target)); return; case 4: this.points = ((HelixToolkit.Wpf.SharpDX.PointGeometryModel3D)(target)); return; } this._contentLoaded = true; }
private void AggregateRenderPackages(PackageAggregationParams parameters) { //Clear the geometry values before adding the package. VisualizationManager_WorkspaceOpenedClosedHandled(); foreach (var rp in parameters.Packages) { //Node ID gets updated with a ":" everytime this function is called. //For example, if the same point node is called multiple times (CBN), the ID has a ":" //and this makes the dictionary to have multiple entries for the same node. var baseId = rp.Description; if (baseId.IndexOf(":", StringComparison.Ordinal) > 0) { baseId = baseId.Split(':')[0]; } var id = baseId; var p = rp.Points; if (p.Positions.Any()) { id = baseId + ":points"; PointGeometryModel3D pointGeometry3D; if (model3DDictionary.ContainsKey(id)) { pointGeometry3D = model3DDictionary[id] as PointGeometryModel3D; } else { pointGeometry3D = new PointGeometryModel3D { Geometry = HelixRenderPackage.InitPointGeometry(), Transform = Model1Transform, Color = SharpDX.Color.White, Figure = PointGeometryModel3D.PointFigure.Ellipse, Size = DefaultPointSize, IsHitTestVisible = true, IsSelected = rp.IsSelected }; model3DDictionary.Add(id, pointGeometry3D); } var points = pointGeometry3D.Geometry as PointGeometry3D; var startIdx = points.Positions.Count; points.Positions.AddRange(p.Positions); points.Colors.AddRange(p.Colors.Any() ? p.Colors : Enumerable.Repeat(defaultPointColor, points.Positions.Count)); points.Indices.AddRange(p.Indices.Select(i => i + startIdx)); if (rp.DisplayLabels) { var pt = p.Positions[0]; parameters.Text.TextInfo.Add(new TextInfo(HelixRenderPackage.CleanTag(rp.Description), new Vector3(pt.X + 0.025f, pt.Y + 0.025f, pt.Z + 0.025f))); Text = parameters.Text; } pointGeometry3D.Geometry = points; pointGeometry3D.Name = baseId; pointGeometry3D.MouseDown3D += meshGeometry3D_MouseDown3D; } var l = rp.Lines; if (l.Positions.Any()) { id = baseId + ":lines"; LineGeometryModel3D lineGeometry3D; if (model3DDictionary.ContainsKey(id)) { lineGeometry3D = model3DDictionary[id] as LineGeometryModel3D; } else { lineGeometry3D = new LineGeometryModel3D() { Geometry = HelixRenderPackage.InitLineGeometry(), Transform = Model1Transform, Color = SharpDX.Color.White, Thickness = 0.5, IsHitTestVisible = true, IsSelected = rp.IsSelected }; model3DDictionary.Add(id, lineGeometry3D); } var lineSet = lineGeometry3D.Geometry as LineGeometry3D; var startIdx = lineSet.Positions.Count; lineSet.Positions.AddRange(l.Positions); lineSet.Colors.AddRange(l.Colors.Any() ? l.Colors : Enumerable.Repeat(defaultLineColor, l.Positions.Count)); lineSet.Indices.AddRange(l.Indices.Any() ? l.Indices.Select(i => i + startIdx) : Enumerable.Range(startIdx, startIdx + l.Positions.Count)); if (rp.DisplayLabels) { var pt = lineSet.Positions[startIdx]; parameters.Text.TextInfo.Add(new TextInfo(HelixRenderPackage.CleanTag(rp.Description), new Vector3(pt.X + 0.025f, pt.Y + 0.025f, pt.Z + 0.025f))); Text = parameters.Text; } lineGeometry3D.Geometry = lineSet; lineGeometry3D.Name = baseId; lineGeometry3D.MouseDown3D += meshGeometry3D_MouseDown3D; } var m = rp.Mesh; if (!m.Positions.Any()) continue; id = ((rp.RequiresPerVertexColoration || rp.Colors != null) ? rp.Description : baseId) + ":mesh"; DynamoGeometryModel3D meshGeometry3D; if (model3DDictionary.ContainsKey(id)) { meshGeometry3D = model3DDictionary[id] as DynamoGeometryModel3D; } else { meshGeometry3D = new DynamoGeometryModel3D() { Transform = Model1Transform, Material = WhiteMaterial, IsHitTestVisible = true, RequiresPerVertexColoration = rp.RequiresPerVertexColoration, IsSelected = rp.IsSelected, }; if (rp.Colors != null) { var pf = PixelFormats.Bgra32; var stride = (rp.ColorsStride / 4 * pf.BitsPerPixel + 7) / 8; try { var diffMap = BitmapSource.Create(rp.ColorsStride/4, rp.Colors.Count()/rp.ColorsStride, 96.0, 96.0, pf, null, rp.Colors.ToArray(), stride); var diffMat = new PhongMaterial { Name = "White", AmbientColor = PhongMaterials.ToColor(0.1, 0.1, 0.1, 1.0), DiffuseColor = materialColor, SpecularColor = PhongMaterials.ToColor(0.0225, 0.0225, 0.0225, 1.0), EmissiveColor = PhongMaterials.ToColor(0.0, 0.0, 0.0, 1.0), SpecularShininess = 12.8f, DiffuseMap = diffMap }; meshGeometry3D.Material = diffMat; } catch (Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); } } ((MaterialGeometryModel3D) meshGeometry3D).SelectionColor = selectionColor; model3DDictionary.Add(id, meshGeometry3D); } var mesh = meshGeometry3D.Geometry == null ? HelixRenderPackage.InitMeshGeometry() : meshGeometry3D.Geometry as MeshGeometry3D; var idxCount = mesh.Positions.Count; mesh.Positions.AddRange(m.Positions); mesh.Colors.AddRange(m.Colors); mesh.Normals.AddRange(m.Normals); mesh.TextureCoordinates.AddRange(m.TextureCoordinates); mesh.Indices.AddRange(m.Indices.Select(i => i + idxCount)); if (mesh.Colors.Any(c => c.Alpha < 1.0)) { meshGeometry3D.HasTransparency = true; } if (rp.DisplayLabels) { var pt = mesh.Positions[idxCount]; parameters.Text.TextInfo.Add(new TextInfo(HelixRenderPackage.CleanTag(rp.Description), new Vector3(pt.X + 0.025f, pt.Y + 0.025f, pt.Z + 0.025f))); Text = parameters.Text; } meshGeometry3D.Geometry = mesh; meshGeometry3D.Name = baseId; meshGeometry3D.MouseDown3D += meshGeometry3D_MouseDown3D; } Attach(); }
/// <summary> /// Initialize the Helix with these values. These values should be attached before the /// visualization starts. Deleting them and attaching them does not make any effect on helix. /// So they are initialized before the process starts. /// </summary> private void InitializeHelix() { directionalLight = new DirectionalLight3D { Color = directionalLightColor, Direction = directionalLightDirection }; if (model3DDictionary != null && !model3DDictionary.ContainsKey("DirectionalLight")) { model3DDictionary.Add("DirectionalLight", directionalLight); } LineGeometryModel3D gridModel3D = new LineGeometryModel3D { Geometry = Grid, Transform = Model1Transform, Color = SharpDX.Color.White, Thickness = 0.3, IsHitTestVisible = false }; if (model3DDictionary != null && !model3DDictionary.ContainsKey("Grid")) { model3DDictionary.Add("Grid", gridModel3D); } LineGeometryModel3D axesModel3D = new LineGeometryModel3D { Geometry = Axes, Transform = Model1Transform, Color = SharpDX.Color.White, Thickness = 0.3, IsHitTestVisible = false }; if (model3DDictionary != null && !model3DDictionary.ContainsKey("Axes")) { model3DDictionary.Add("Axes", axesModel3D); } }
public CameraModel3D() { var b1 = new MeshBuilder(); b1.AddBox(new Vector3(), 1f, 1f, 1.2f, BoxFaces.All); var body = new MeshGeometryModel3D() { CullMode = CullMode.Back }; body.Geometry = b1.ToMeshGeometry3D(); body.Material = new DiffuseMaterial() { DiffuseColor = Color.Gray }; this.Children.Add(body); b1 = new MeshBuilder(); b1.AddCone(new Vector3(0, 0, -1.2f), new Vector3(0, 0f, 0), 0.4f, true, 12); var lens = new MeshGeometryModel3D() { CullMode = CullMode.Back }; lens.Geometry = b1.ToMeshGeometry3D(); lens.Material = new DiffuseMaterial() { DiffuseColor = Color.Yellow }; this.Children.Add(lens); var builder = new LineBuilder(); builder.AddLine(Vector3.Zero, new Vector3(2, 0, 0)); builder.AddLine(Vector3.Zero, new Vector3(0, 2, 0)); builder.AddLine(Vector3.Zero, new Vector3(0, 0, -2)); var mesh = builder.ToLineGeometry3D(); var arrowMeshModel = new LineGeometryModel3D { Geometry = mesh, Color = System.Windows.Media.Colors.White, IsHitTestVisible = false }; int segment = mesh.Positions.Count / 3; var colors = new Color4Collection(Enumerable.Repeat <Color4>(Color.Black, mesh.Positions.Count)); int i = 0; for (; i < segment; ++i) { colors[i] = Color.Red; } for (; i < segment * 2; ++i) { colors[i] = Color.Green; } for (; i < segment * 3; ++i) { colors[i] = Color.Blue; } mesh.Colors = colors; this.Children.Add(arrowMeshModel); SceneNode.TransformChanged += SceneNode_OnTransformChanged; }
public void SetupGrid() { // floor plane grid var lineGeom = new LineGeometryModel3D { Geometry = LineBuilder.GenerateGrid(), Color = Color.Black, Transform = new TranslateTransform3D(-5, -4, -5) }; view1.Items.Add(lineGeom); }
private void CreateWireFrameModels(IFCItem item, Vector3D center) { while (item != null) { if (item.ifcID != IntPtr.Zero && item.noVerticesForWireFrame != 0 && item.noPrimitivesForWireFrame != 0) { var points = new Vector3Collection(); Vector3Collection positions; if (item.verticesForWireFrame != null) { for (int i = 0; i < item.noVerticesForWireFrame; i++) { points.Add(new Vector3((float)(item.verticesForWireFrame[3 * i + 0] - center.X), (float)(item.verticesForWireFrame[3 * i + 1] - center.Y), (float)(item.verticesForWireFrame[3 * i + 2] - center.Z))); } } if (item.indicesForWireFrameLineParts != null) { positions = new Vector3Collection(); for (int i = 0; i < item.noPrimitivesForWireFrame; i++) { var idx = item.indicesForWireFrameLineParts[2 * i + 0]; positions.Add(points[idx]); idx = item.indicesForWireFrameLineParts[2 * i + 1]; positions.Add(points[idx]); } } else { positions = points; } var lineBuilder = new LineBuilder(); lineBuilder.Add(false,positions.ToArray()); LineGeometryModel3D line = new LineGeometryModel3D(); line.Geometry = lineBuilder.ToLineGeometry3D(); line.Color = new SharpDX.Color(0,0,0,0); item.Wireframe = line; model.Add(line as Element3D); } CreateFaceModels(item.child, center); item = item.next; } }
/// <summary> /// The on children changed. /// </summary> protected virtual void OnChildrenChanged() { this.translateXL.Length = 0.5; this.translateYL.Length = 0.5; this.translateZL.Length = 0.5; this.translateXR.Length = 0.5; this.translateYR.Length = 0.5; this.translateZR.Length = 0.5; this.Children.Clear(); if (this.CanTranslateX) { this.Children.Add(this.translateXL); this.Children.Add(this.translateXR); } if (this.CanTranslateY) { this.Children.Add(this.translateYL); this.Children.Add(this.translateYR); } if (this.CanTranslateZ) { this.Children.Add(this.translateZL); this.Children.Add(this.translateZR); } { var g = new LineBuilder(); g.AddLine(new Vector3(0, 0, 0), new Vector3(1, 0, 0)); g.AddLine(new Vector3(1, 0, 0), new Vector3(1, 1, 0)); g.AddLine(new Vector3(1, 1, 0), new Vector3(0, 1, 0)); g.AddLine(new Vector3(0, 1, 0), new Vector3(0, 0, 0)); this.selectionBounds = new LineGeometryModel3D() { Thickness = 3, Smoothness = 2, Color = Color.Red, IsThrowingShadow = false, Geometry = g.ToLineGeometry3D(), }; this.Children.Add(this.selectionBounds); } }
private void CreateWireFrameModels(IFCItem item, Vector3 center) { while (item != null) { if (item.ifcID != IntPtr.Zero && item.noVerticesForWireFrame != 0 && item.noPrimitivesForWireFrame != 0) { var geo = new LineGeometry3D(); geo.Positions=new Vector3Collection(); geo.Indices=new IntCollection(); var points = new Vector3Collection(); if (item.verticesForWireFrame != null) { for (int i = 0; i < item.noVerticesForWireFrame; i++) { points.Add(new Vector3((item.verticesForWireFrame[3 * i + 0] - center.X), (item.verticesForWireFrame[3 * i + 1] - center.Y), (item.verticesForWireFrame[3 * i + 2] - center.Z))); geo.Positions.Add(new Vector3((item.verticesForWireFrame[3 * i + 0] - center.X), (item.verticesForWireFrame[3 * i + 1] - center.Y), (item.verticesForWireFrame[3 * i + 2] - center.Z))); } } if (item.indicesForWireFrameLineParts != null) { for (int i = 0; i < item.noPrimitivesForWireFrame; i++) { var idx = item.indicesForWireFrameLineParts[2 * i + 0]; geo.Indices.Add(idx); idx = item.indicesForWireFrameLineParts[2 * i + 1]; geo.Indices.Add(idx); } } else { for (int i = 0, count = points.Count; i < count; i++) { geo.Indices.Add(i); geo.Indices.Add((i + 1) % count); } } LineGeometryModel3D line = new LineGeometryModel3D(); line.Geometry = geo; line.Color = _defaultLineColor; line.Thickness = 0.5; item.Wireframe = line; line.Tag = item.ifcType + ":" + item.ifcID; model.Add(line); } CreateFaceModels(item.child, center); item = item.next; } }
/// <summary> /// Initialize the Helix with these values. These values should be attached before the /// visualization starts. Deleting them and attaching them does not make any effect on helix. /// So they are initialized before the process starts. /// </summary> private void InitializeHelix() { if (Model3DDictionary == null) { throw new Exception("Helix could not be initialized."); } directionalLight = new DirectionalLight3D { Color = directionalLightColor, Direction = directionalLightDirection, Name = DefaultLightName }; if (!Model3DDictionary.ContainsKey(DefaultLightName)) { Model3DDictionary.Add(DefaultLightName, directionalLight); } var gridModel3D = new LineGeometryModel3D { Geometry = Grid, Transform = Model1Transform, Color = Color.White, Thickness = 0.3, IsHitTestVisible = false, Name = DefaultGridName }; if (!Model3DDictionary.ContainsKey(DefaultGridName)) { Model3DDictionary.Add(DefaultGridName, gridModel3D); } var axesModel3D = new LineGeometryModel3D { Geometry = Axes, Transform = Model1Transform, Color = Color.White, Thickness = 0.3, IsHitTestVisible = false, Name = DefaultAxesName }; if (!Model3DDictionary.ContainsKey(DefaultAxesName)) { Model3DDictionary.Add(DefaultAxesName, axesModel3D); } AttachAllGeometryModel3DToRenderHost(); }
private LineGeometryModel3D CreateLineGeometryModel3D(HelixRenderPackage rp) { var lineGeometry3D = new LineGeometryModel3D() { Geometry = HelixRenderPackage.InitLineGeometry(), Transform = Model1Transform, Color = Color.White, Thickness = 0.5, IsHitTestVisible = true, IsSelected = rp.IsSelected }; return lineGeometry3D; }
void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) { switch (connectionId) { case 1: this.view1 = ((HelixToolkit.Wpf.SharpDX.Viewport3DX)(target)); return; case 2: this.bodyline = ((HelixToolkit.Wpf.SharpDX.LineGeometryModel3D)(target)); return; case 3: this.leg1 = ((HelixToolkit.Wpf.SharpDX.LineGeometryModel3D)(target)); return; case 4: this.leg2 = ((HelixToolkit.Wpf.SharpDX.LineGeometryModel3D)(target)); return; case 5: this.leg3 = ((HelixToolkit.Wpf.SharpDX.LineGeometryModel3D)(target)); return; case 6: this.leg4 = ((HelixToolkit.Wpf.SharpDX.LineGeometryModel3D)(target)); return; case 7: this.leg5 = ((HelixToolkit.Wpf.SharpDX.LineGeometryModel3D)(target)); return; case 8: this.leg6 = ((HelixToolkit.Wpf.SharpDX.LineGeometryModel3D)(target)); return; case 9: this.grid = ((HelixToolkit.Wpf.SharpDX.LineGeometryModel3D)(target)); return; case 10: this.rotateY = ((HelixToolkit.Wpf.SharpDX.UIRotateManipulator3D)(target)); return; case 11: this.groupBox = ((System.Windows.Controls.GroupBox)(target)); return; case 12: this.btForward = ((System.Windows.Controls.Button)(target)); #line 80 "..\..\MainWindow.xaml" this.btForward.Click += new System.Windows.RoutedEventHandler(this.btForward_Click); #line default #line hidden return; case 13: this.btBack = ((System.Windows.Controls.Button)(target)); #line 81 "..\..\MainWindow.xaml" this.btBack.Click += new System.Windows.RoutedEventHandler(this.btBack_Click); #line default #line hidden return; case 14: this.btLeft = ((System.Windows.Controls.Button)(target)); #line 82 "..\..\MainWindow.xaml" this.btLeft.Click += new System.Windows.RoutedEventHandler(this.btLeft_Click); #line default #line hidden return; case 15: this.btRight = ((System.Windows.Controls.Button)(target)); #line 83 "..\..\MainWindow.xaml" this.btRight.Click += new System.Windows.RoutedEventHandler(this.btRight_Click); #line default #line hidden return; case 16: this.btBodyUp = ((System.Windows.Controls.Button)(target)); #line 84 "..\..\MainWindow.xaml" this.btBodyUp.Click += new System.Windows.RoutedEventHandler(this.btBodyUp_Click); #line default #line hidden return; case 17: this.btBodyDown = ((System.Windows.Controls.Button)(target)); #line 85 "..\..\MainWindow.xaml" this.btBodyDown.Click += new System.Windows.RoutedEventHandler(this.btBodyDown_Click); #line default #line hidden return; case 18: this.btEndWalk = ((System.Windows.Controls.Button)(target)); #line 86 "..\..\MainWindow.xaml" this.btEndWalk.Click += new System.Windows.RoutedEventHandler(this.btEndWalk_Click); #line default #line hidden return; case 19: this.button7 = ((System.Windows.Controls.Button)(target)); return; case 20: this.button8 = ((System.Windows.Controls.Button)(target)); #line 88 "..\..\MainWindow.xaml" this.button8.Click += new System.Windows.RoutedEventHandler(this.button8_Click); #line default #line hidden return; case 21: this.shadingPanel = ((System.Windows.Controls.Expander)(target)); return; case 22: this.comboPortName = ((System.Windows.Controls.ComboBox)(target)); return; case 23: this.btConnect = ((System.Windows.Controls.Button)(target)); #line 98 "..\..\MainWindow.xaml" this.btConnect.Click += new System.Windows.RoutedEventHandler(this.btConnect_Click); #line default #line hidden return; } this._contentLoaded = true; }