public ElementHighlighter3D() { meshGroup = new GroupModel3D(); material = new DiffuseMaterial { DiffuseColor = HighlightColor }; xrayEffect = new PostEffectMeshXRayGrid() { EffectName = "HighlighterXRayGrid", DimmingFactor = 0.5, BlendingFactor = 0.8, GridDensity = 4, GridColor = System.Windows.Media.Colors.Gray }; (xrayEffect.SceneNode as NodePostEffectXRayGrid).XRayDrawingPassName = DefaultPassNames.EffectMeshDiffuseXRayGridP3; Children.Add(meshGroup); Children.Add(xrayEffect); var binding = new Binding("Target.Transform") { RelativeSource = RelativeSource.Self }; BindingOperations.SetBinding(this, TransformProperty, binding); }
private void AddElement3D(MeshBuilder bldr, Element3D elm) { if (elm.Nodes.Length == 8) { //brick var p = new Func <Node, Point>(i => i.Location); var sides = new int[][] { new int[] { 1, 2, 6 }, new int[] { 1, 5, 6 }, new int[] { 2, 6, 3 }, new int[] { 7, 6, 3 }, new int[] { 4, 3, 7 }, new int[] { 4, 8, 7 }, new int[] { 1, 4, 8 }, new int[] { 1, 5, 8 }, new int[] { 5, 6, 7 }, new int[] { 5, 8, 7 }, new int[] { 1, 2, 3 }, new int[] { 1, 4, 3 }, }; foreach (var side in sides) { bldr.AddTriangle(p(elm.Nodes[side[0] - 1]), p(elm.Nodes[side[1] - 1]), p(elm.Nodes[side[2] - 1])); } } }
private void AddElementToModel3D(Element3D element, ref MeshGeometry3D myMeshGeometry3D, ref Int32Collection myTriangleIndicesCollection) { var items = CubeToPoint3DCollection(element.EHeight, element.EWidth, element.EDepth, element.Ex, element.Ey, element.Ez, element.Horizontal); foreach (Point3D point3D in items) { myMeshGeometry3D.Positions.Add(point3D); } var y = myMeshGeometry3D.Positions.Count - 8; myTriangleIndicesCollection.Add(y); myTriangleIndicesCollection.Add(y + 2); myTriangleIndicesCollection.Add(y + 1); myTriangleIndicesCollection.Add(y + 1); myTriangleIndicesCollection.Add(y + 2); myTriangleIndicesCollection.Add(y + 3); myTriangleIndicesCollection.Add(y); myTriangleIndicesCollection.Add(y + 4); myTriangleIndicesCollection.Add(y + 6); myTriangleIndicesCollection.Add(y); myTriangleIndicesCollection.Add(y + 6); myTriangleIndicesCollection.Add(y + 2); myTriangleIndicesCollection.Add(y + 1); myTriangleIndicesCollection.Add(y + 3); myTriangleIndicesCollection.Add(y + 7); myTriangleIndicesCollection.Add(y + 1); myTriangleIndicesCollection.Add(y + 7); myTriangleIndicesCollection.Add(y + 5); myTriangleIndicesCollection.Add(y + 4); myTriangleIndicesCollection.Add(y + 5); myTriangleIndicesCollection.Add(y + 6); myTriangleIndicesCollection.Add(y + 5); myTriangleIndicesCollection.Add(y + 7); myTriangleIndicesCollection.Add(y + 6); myTriangleIndicesCollection.Add(y + 7); myTriangleIndicesCollection.Add(y + 3); myTriangleIndicesCollection.Add(y + 2); myTriangleIndicesCollection.Add(y + 6); myTriangleIndicesCollection.Add(y + 7); myTriangleIndicesCollection.Add(y + 2); myTriangleIndicesCollection.Add(y); myTriangleIndicesCollection.Add(y + 1); myTriangleIndicesCollection.Add(y + 5); myTriangleIndicesCollection.Add(y); myTriangleIndicesCollection.Add(y + 5); myTriangleIndicesCollection.Add(y + 4); }
private void AddToViewport(Viewport3DX viewport, Element3D element) { //Dispatcher.BeginInvoke(new Func<Viewport3DX>(() => //{ viewport.Items.Add(element); //return viewport; //}), DispatcherPriority.Normal); }
private int CreateTexture(Bitmap bitmap) { var texture = 0; Element3D.CreateTexture(ref texture, bitmap); bitmap.Dispose(); return(texture); }
private void OnTargetChanged(Element3D target) { foreach (var element in meshGroup.Children) { element.Dispose(); } meshGroup.Children.Clear(); //(Parent as GroupElement3D)?.Children.Remove(this); if (target == null) { return; } var allMeshes = ((target as GroupElement3D)?.EnumerateDescendents() ?? Enumerable.Repeat(target, 1)).OfType <MeshGeometryModel3D>().ToList(); if (!allMeshes.Any()) { return; } foreach (var m in allMeshes) { var transform = m.Transform.Value; var ancestors = m.EnumerateAncestors() .TakeWhile(e => e != target) .ToList(); if (ancestors.Count > 0) { transform *= ancestors .Select(e => e.Transform.Value) .Aggregate((a, b) => a * b); } if (HighlightColor.A == byte.MinValue) { return; } meshGroup.Children.Add(new MeshGeometryModel3D { CullMode = SharpDX.Direct3D11.CullMode.Back, DepthBias = -100, Geometry = m.Geometry, Material = material, IsHitTestVisible = false, Transform = new Media3D.MatrixTransform3D(transform), PostEffects = "HighlighterXRayGrid" }); } //(target as GroupElement3D)?.Children.Add(this); }
public static RenderModel3D FromElement(Element3D element) { var permutations = new List <Permutation>(); permutations.Add(new Permutation(element, 0, nameof(Permutation))); var regions = new List <Region>(); regions.Add(new Region(0, nameof(Region), permutations)); return(new RenderModel3D(nameof(RenderModel3D), regions, Enumerable.Empty <InstanceGroup>(), true)); }
private Model3D CreateCabinet() { Logger.Info("Create Model3D Cabinet in MainViewModel"); GeometryModel3D myGeometryModel = new GeometryModel3D(); MeshGeometry3D myMeshGeometry3D = new MeshGeometry3D(); Int32Collection myTriangleIndicesCollection = new Int32Collection(); foreach (var element in _cabinet.CabinetElements) { Element3D element1 = GetElement3DFromElementModel(element); AddElementToModel3D(element1, ref myMeshGeometry3D, ref myTriangleIndicesCollection); } foreach (var element in _cabinet.HorizontalBarrier) { Element3D element1 = GetElement3DFromElementModel(element); AddElementToModel3D(element1, ref myMeshGeometry3D, ref myTriangleIndicesCollection); } foreach (var element in _cabinet.VerticalBarrier) { Element3D element1 = GetElement3DFromElementModel(element); AddElementToModel3D(element1, ref myMeshGeometry3D, ref myTriangleIndicesCollection); } foreach (var element in _cabinet.FrontList) { Element3D element1 = GetElement3DFromElementModel(element); AddElementToModel3D(element1, ref myMeshGeometry3D, ref myTriangleIndicesCollection); } //TODO add dodatkowe eleemnty myMeshGeometry3D.TriangleIndices = myTriangleIndicesCollection; myGeometryModel.Geometry = myMeshGeometry3D; SolidColorBrush solidColorBrush = new SolidColorBrush(Colors.Green); // Define material that will use the gradient. DiffuseMaterial myMaterial = new DiffuseMaterial(solidColorBrush); myGeometryModel.Material = myMaterial; Logger.Info("Create CabinetView in Model3DCabinet/MainViewModel"); GenerateCabinetView(); return(myGeometryModel); }
private void Element3DPresenter_ContentChanged(object sender, Element3D content) { if (currentContent != null) { (SceneNode as GroupNode).RemoveChildNode(currentContent.SceneNode); AttachChild(null); } if (Content is Element3D elem) { currentContent = elem; (SceneNode as GroupNode).AddChildNode(elem.SceneNode); AttachChild(elem); } }
public PrinterViewSceneGraph(GUIHost host, SettingsManager.GridUnit initialGridUnits, PrinterSizeProfile.CaseType initialCaseType) : base(123456) { RelativeX = 0.0f; RelativeY = 0.0f; RelativeWidth = 1f; RelativeHeight = 1f; ViewPointPos = new M3D.Model.Utils.Vector3(0.0f, 0.0f, 10f); ModelList = new List <ModelTransformPair>(); CameraLookAtPos = new M3D.Model.Utils.Vector3(0.0f, -10f, 0.0f); AddChildElement3D(new LightNode(0, 0, new Vector4(0.0f, 400f, 1000f, 1f), new Color4(0.2f, 0.2f, 0.2f, 1f), new Color4(1f, 1f, 1f, 1f), new Color4(1f, 1f, 1f, 1f))); AddChildElement3D(new LightNode(1, 1, new Vector4(0.0f, 20f, -400f, 1f), new Color4(0.0f, 0.0f, 0.0f, 1f), new Color4(1f, 1f, 1f, 1f), new Color4(0.3f, 0.3f, 0.3f, 1f))); OpenGLCoordinateSystem = new TransformationNode(0, origin) { Rotation = new M3D.Model.Utils.Vector3(-90f, 0.0f, 0.0f) }; AddChildElement3D(OpenGLCoordinateSystem); PrinterTiltTransform = new TransformationNode(0, OpenGLCoordinateSystem); OpenGLCoordinateSystem.AddChildElement(PrinterTiltTransform); PrinterTransformation = new TransformationNode(0, PrinterTiltTransform); PrinterTypeAdjustments = new TransformationNode(3011, PrinterTransformation); var num = 1.1f; PrinterTypeAdjustments.Scale = new M3D.Model.Utils.Vector3(num, num, 1f); PrinterTransformation.AddChildElement(PrinterTypeAdjustments); PrinterModel = new PrinterModelNode(initialCaseType); PrinterTypeAdjustments.AddChildElement(PrinterModel); ObjectToPrinterSpace = new TransformationNode(3005, PrinterTransformation) { Translation = new M3D.Model.Utils.Vector3(0.0f, 0.0f, 0.0f) }; PrinterTransformation.AddChildElement(ObjectToPrinterSpace); GridSizeAdjustments = new TransformationNode(3012, ObjectToPrinterSpace); ObjectToPrinterSpace.AddChildElement(GridSizeAdjustments); Grid = new GridObjectNode(3003, 100f, 100f); Grid.SetUnits(initialGridUnits); Grid.Visible = false; Grid.Emission = new Color4(1f, 1f, 1f, 1f); GridSizeAdjustments.AddChildElement(Grid); var texturedFloorNode = new TexturedFloorNode(3004); var bitmap = new Bitmap(Resources.shadowtexture); var texture = 0; Element3D.CreateTexture(ref texture, bitmap); bitmap.Dispose(); texturedFloorNode.Create(new M3D.Model.Utils.Vector3(0.0f, 0.0f, -76f), 450f, 240f, texture); OpenGLCoordinateSystem.AddChildElement(texturedFloorNode); PrinterTiltTransform.AddChildElement(PrinterTransformation); }
public PrinterLogoObjectNode(string texture_name, int ID, Element3D parent, Vector3 position, Vector3 size) : base(ID, parent) { var texture = 0; var bitmap = new Bitmap(texture_name); Element3D.CreateTexture(ref texture, bitmap); bitmap.Dispose(); plate = new FrontFacingPlaneNode(ID, this); logo = new FrontFacingPlaneNode(ID, this); plate.Create(position, size.X, size.Z, 0); plate.Emission = new Color4(0.0f, 0.0f, 0.0f, 0.0f); logo.Create(position, size.X - 1f, size.Z - 1f, texture); logo.Emission = new Color4(1f, 1f, 1f, 1f); }
/// <summary> /// Called when [target changed]. Use target boundingbox center as Manipulator center /// </summary> /// <param name="target">The target.</param> private void OnTargetChanged(Element3D target) { Debug.WriteLine("OnTargetChanged"); //if(target != null) //{ // target.SceneNode.OnTransformChanged -= SceneNode_OnTransformChanged; //} this.target = target; if (target == null) { ResetTransforms(); } else { //target.SceneNode.OnTransformChanged += SceneNode_OnTransformChanged; SceneNode_OnTransformChanged(target.SceneNode, new TransformArgs(target.SceneNode.ModelMatrix)); } }
/// <summary> /// Called when [target changed]. Use target boundingbox center as Manipulator center /// </summary> /// <param name="newTarget">The target.</param> private void OnTargetChanged(Element3D newTarget) { Debug.WriteLine("OnTargetChanged"); if (target != null) { target.SceneNode.TransformChanged -= SceneNode_TransformChanged; } target = newTarget; if (newTarget == null) { ResetTransforms(); } else { target.SceneNode.TransformChanged += SceneNode_TransformChanged; UpdateMatrixFromTarget(); } UpdateVisibleGeometry(); }
/// <summary> /// Finds the nearest point and its normal. /// </summary> /// <param name="viewport"> /// The viewport. /// </param> /// <param name="position"> /// The position. /// </param> /// <param name="point"> /// The point. /// </param> /// <param name="normal"> /// The normal. /// </param> /// <param name="model"> /// The model. /// </param> /// <param name="node"></param> /// <returns> /// The find nearest. /// </returns> public static bool FindNearest(this Viewport3DX viewport, Point position, out Vector3 point, out Vector3 normal, out Element3D model, out SceneNode node) { model = null; node = null; if (viewport.FindNearest(position.ToVector2(), out point, out normal, out var m)) { if (m is Element3D ele) { model = ele; node = ele.SceneNode; } else if (m is SceneNode nd) { node = nd; model = null; } return(true); } return(false); }
public ErrorCode ExportToFile(string filePath, Element3D root, string formatId) { SyncNamesWithElement3DAndSceneNode(root.SceneNode); return(ExportToFile(filePath, root.SceneNode, formatId)); }
public TransformManipulator3D() { var rotationYMatrix = Matrix.RotationZ((float)Math.PI / 2); var rotationZMatrix = Matrix.RotationY(-(float)Math.PI / 2); ctrlGroup = new GroupModel3D(); #region Translation Models translationX = new MeshGeometryModel3D() { Geometry = TranslationXGeometry, Material = DiffuseMaterials.Red, CullMode = CullMode.Back, PostEffects = "ManipulatorXRayGrid" }; translationY = new MeshGeometryModel3D() { Geometry = TranslationXGeometry, Material = DiffuseMaterials.Green, CullMode = CullMode.Back, PostEffects = "ManipulatorXRayGrid" }; translationZ = new MeshGeometryModel3D() { Geometry = TranslationXGeometry, Material = DiffuseMaterials.Blue, CullMode = CullMode.Back, PostEffects = "ManipulatorXRayGrid" }; #if !NETFX_CORE translationY.Transform = new Media3D.MatrixTransform3D(rotationYMatrix.ToMatrix3D()); translationZ.Transform = new Media3D.MatrixTransform3D(rotationZMatrix.ToMatrix3D()); translationX.Mouse3DDown += Translation_Mouse3DDown; translationY.Mouse3DDown += Translation_Mouse3DDown; translationZ.Mouse3DDown += Translation_Mouse3DDown; translationX.Mouse3DMove += Translation_Mouse3DMove; translationY.Mouse3DMove += Translation_Mouse3DMove; translationZ.Mouse3DMove += Translation_Mouse3DMove; translationX.Mouse3DUp += Manipulation_Mouse3DUp; translationY.Mouse3DUp += Manipulation_Mouse3DUp; translationZ.Mouse3DUp += Manipulation_Mouse3DUp; #else translationY.Transform3D = rotationYMatrix; translationZ.Transform3D = rotationZMatrix; translationX.OnMouse3DDown += Translation_Mouse3DDown; translationY.OnMouse3DDown += Translation_Mouse3DDown; translationZ.OnMouse3DDown += Translation_Mouse3DDown; translationX.OnMouse3DMove += Translation_Mouse3DMove; translationY.OnMouse3DMove += Translation_Mouse3DMove; translationZ.OnMouse3DMove += Translation_Mouse3DMove; translationX.OnMouse3DUp += Manipulation_Mouse3DUp; translationY.OnMouse3DUp += Manipulation_Mouse3DUp; translationZ.OnMouse3DUp += Manipulation_Mouse3DUp; #endif translationGroup = new GroupModel3D(); translationGroup.Children.Add(translationX); translationGroup.Children.Add(translationY); translationGroup.Children.Add(translationZ); ctrlGroup.Children.Add(translationGroup); #endregion #region Rotation Models rotationX = new MeshGeometryModel3D() { Geometry = RotationXGeometry, Material = DiffuseMaterials.Red, CullMode = CullMode.Back, PostEffects = "ManipulatorXRayGrid" }; rotationY = new MeshGeometryModel3D() { Geometry = RotationXGeometry, Material = DiffuseMaterials.Green, CullMode = CullMode.Back, PostEffects = "ManipulatorXRayGrid" }; rotationZ = new MeshGeometryModel3D() { Geometry = RotationXGeometry, Material = DiffuseMaterials.Blue, CullMode = CullMode.Back, PostEffects = "ManipulatorXRayGrid" }; #if !NETFX_CORE rotationY.Transform = new Media3D.MatrixTransform3D(rotationYMatrix.ToMatrix3D()); rotationZ.Transform = new Media3D.MatrixTransform3D(rotationZMatrix.ToMatrix3D()); rotationX.Mouse3DDown += Rotation_Mouse3DDown; rotationY.Mouse3DDown += Rotation_Mouse3DDown; rotationZ.Mouse3DDown += Rotation_Mouse3DDown; rotationX.Mouse3DMove += Rotation_Mouse3DMove; rotationY.Mouse3DMove += Rotation_Mouse3DMove; rotationZ.Mouse3DMove += Rotation_Mouse3DMove; rotationX.Mouse3DUp += Manipulation_Mouse3DUp; rotationY.Mouse3DUp += Manipulation_Mouse3DUp; rotationZ.Mouse3DUp += Manipulation_Mouse3DUp; #else rotationY.Transform3D = rotationYMatrix; rotationZ.Transform3D = rotationZMatrix; rotationX.OnMouse3DDown += Rotation_Mouse3DDown; rotationY.OnMouse3DDown += Rotation_Mouse3DDown; rotationZ.OnMouse3DDown += Rotation_Mouse3DDown; rotationX.OnMouse3DMove += Rotation_Mouse3DMove; rotationY.OnMouse3DMove += Rotation_Mouse3DMove; rotationZ.OnMouse3DMove += Rotation_Mouse3DMove; rotationX.OnMouse3DUp += Manipulation_Mouse3DUp; rotationY.OnMouse3DUp += Manipulation_Mouse3DUp; rotationZ.OnMouse3DUp += Manipulation_Mouse3DUp; #endif rotationGroup = new GroupModel3D(); rotationGroup.Children.Add(rotationX); rotationGroup.Children.Add(rotationY); rotationGroup.Children.Add(rotationZ); ctrlGroup.Children.Add(rotationGroup); #endregion #region Scaling Models scaleX = new MeshGeometryModel3D() { Geometry = ScalingGeometry, Material = DiffuseMaterials.Red, CullMode = CullMode.Back, PostEffects = "ManipulatorXRayGrid" }; scaleY = new MeshGeometryModel3D() { Geometry = ScalingGeometry, Material = DiffuseMaterials.Green, CullMode = CullMode.Back, PostEffects = "ManipulatorXRayGrid" }; scaleZ = new MeshGeometryModel3D() { Geometry = ScalingGeometry, Material = DiffuseMaterials.Blue, CullMode = CullMode.Back, PostEffects = "ManipulatorXRayGrid" }; #if !NETFX_CORE scaleY.Transform = new Media3D.MatrixTransform3D(rotationYMatrix.ToMatrix3D()); scaleZ.Transform = new Media3D.MatrixTransform3D(rotationZMatrix.ToMatrix3D()); scaleX.Mouse3DDown += Scaling_Mouse3DDown; scaleY.Mouse3DDown += Scaling_Mouse3DDown; scaleZ.Mouse3DDown += Scaling_Mouse3DDown; scaleX.Mouse3DMove += Scaling_Mouse3DMove; scaleY.Mouse3DMove += Scaling_Mouse3DMove; scaleZ.Mouse3DMove += Scaling_Mouse3DMove; scaleX.Mouse3DUp += Manipulation_Mouse3DUp; scaleY.Mouse3DUp += Manipulation_Mouse3DUp; scaleZ.Mouse3DUp += Manipulation_Mouse3DUp; #else scaleY.Transform3D = rotationYMatrix; scaleZ.Transform3D = rotationZMatrix; scaleX.OnMouse3DDown += Scaling_Mouse3DDown; scaleY.OnMouse3DDown += Scaling_Mouse3DDown; scaleZ.OnMouse3DDown += Scaling_Mouse3DDown; scaleX.OnMouse3DMove += Scaling_Mouse3DMove; scaleY.OnMouse3DMove += Scaling_Mouse3DMove; scaleZ.OnMouse3DMove += Scaling_Mouse3DMove; scaleX.OnMouse3DUp += Manipulation_Mouse3DUp; scaleY.OnMouse3DUp += Manipulation_Mouse3DUp; scaleZ.OnMouse3DUp += Manipulation_Mouse3DUp; #endif scaleGroup = new GroupModel3D(); scaleGroup.Children.Add(scaleX); scaleGroup.Children.Add(scaleY); scaleGroup.Children.Add(scaleZ); ctrlGroup.Children.Add(scaleGroup); #endregion Children.Add(ctrlGroup); xrayEffect = new PostEffectMeshXRayGrid() { EffectName = "ManipulatorXRayGrid", DimmingFactor = 0.5, BlendingFactor = 0.8, GridDensity = 4, GridColor = Media.Colors.Gray }; (xrayEffect.SceneNode as NodePostEffectXRayGrid).XRayDrawingPassName = DefaultPassNames.EffectMeshDiffuseXRayGridP3; Children.Add(xrayEffect); SceneNode.OnAttached += SceneNode_OnAttached; SceneNode.OnDetached += SceneNode_OnDetached; }
/// <summary> /// Traverses the Visual3D/Element3D tree and invokes the specified action on each Element3D of the specified type. /// </summary> /// <typeparam name="T"> /// The type filter. /// </typeparam> /// <param name="element"> /// The element. /// </param> /// <param name="function"> /// The action. /// </param> public static void Traverse <T>(this Element3D element, Func <T, bool> function) where T : Element3D { var sceneNode = new SceneNode[] { element.SceneNode }; Traverse(element, function); }
/// <summary> /// Traverses the Visual3D/Element3D tree and invokes the specified action on each Element3D of the specified type. /// </summary> /// <typeparam name="T"> /// The type filter. /// </typeparam> /// <param name="element"> /// The element. /// </param> /// <param name="action"> /// The action. /// </param> public static void Traverse <T>(this Element3D element, Action <T> action) where T : Element3D { var sceneNode = new SceneNode[] { element.SceneNode }; Traverse(element, action); }
public TransformManipulatorEx3D() { var rotationYMatrix = Matrix.RotationZ((float)Math.PI / 2); var rotationZMatrix = Matrix.RotationY(-(float)Math.PI / 2); var rotationYZMatrix = Matrix.RotationY(-(float)Math.PI / 2); var rotationXZMatrix = Matrix.RotationX((float)Math.PI / 2); ctrlGroup = new GroupModel3D(); #region Translation Models translationX = GetGeometryModel(TranslationXGeometry, DiffuseMaterials.Red); translationY = GetGeometryModel(TranslationXGeometry, DiffuseMaterials.Green); translationZ = GetGeometryModel(TranslationXGeometry, DiffuseMaterials.Blue); translationY.Transform = new Media3D.MatrixTransform3D(rotationYMatrix.ToMatrix3D()); translationZ.Transform = new Media3D.MatrixTransform3D(rotationZMatrix.ToMatrix3D()); translationX.Mouse3DDown += Translation_Mouse3DDown; translationY.Mouse3DDown += Translation_Mouse3DDown; translationZ.Mouse3DDown += Translation_Mouse3DDown; translationX.Mouse3DMove += Translation_Mouse3DMove; translationY.Mouse3DMove += Translation_Mouse3DMove; translationZ.Mouse3DMove += Translation_Mouse3DMove; translationX.Mouse3DUp += Manipulation_Mouse3DUp; translationY.Mouse3DUp += Manipulation_Mouse3DUp; translationZ.Mouse3DUp += Manipulation_Mouse3DUp; translationGroup = new GroupModel3D(); translationGroup.Children.Add(translationX); translationGroup.Children.Add(translationY); translationGroup.Children.Add(translationZ); ctrlGroup.Children.Add(translationGroup); #endregion #region Translation2D Models translationXY = GetGeometryModel(TranslationXYGeometry, DiffuseMaterials.Blue); translationYZ = GetGeometryModel(TranslationXYGeometry, DiffuseMaterials.Red); translationXZ = GetGeometryModel(TranslationXYGeometry, DiffuseMaterials.Green); translationYZ.Transform = new Media3D.MatrixTransform3D(rotationZMatrix.ToMatrix3D()); translationXZ.Transform = new Media3D.MatrixTransform3D(rotationXZMatrix.ToMatrix3D()); translationXY.Mouse3DDown += Translation_Mouse3DDown; translationYZ.Mouse3DDown += Translation_Mouse3DDown; translationXZ.Mouse3DDown += Translation_Mouse3DDown; translationXY.Mouse3DMove += Translation_Mouse3DMove; translationYZ.Mouse3DMove += Translation_Mouse3DMove; translationXZ.Mouse3DMove += Translation_Mouse3DMove; translationXY.Mouse3DUp += Manipulation_Mouse3DUp; translationYZ.Mouse3DUp += Manipulation_Mouse3DUp; translationXZ.Mouse3DUp += Manipulation_Mouse3DUp; translation2DGroup = new GroupModel3D(); translation2DGroup.Children.Add(translationXY); translation2DGroup.Children.Add(translationYZ); translation2DGroup.Children.Add(translationXZ); ctrlGroup.Children.Add(translation2DGroup); #endregion #region Rotation Models rotationX = GetGeometryModel(RotationXGeometry, DiffuseMaterials.Red); rotationY = GetGeometryModel(RotationXGeometry, DiffuseMaterials.Green); rotationZ = GetGeometryModel(RotationXGeometry, DiffuseMaterials.Blue); rotationY.Transform = new Media3D.MatrixTransform3D(rotationYMatrix.ToMatrix3D()); rotationZ.Transform = new Media3D.MatrixTransform3D(rotationZMatrix.ToMatrix3D()); rotationX.Mouse3DDown += Rotation_Mouse3DDown; rotationY.Mouse3DDown += Rotation_Mouse3DDown; rotationZ.Mouse3DDown += Rotation_Mouse3DDown; rotationX.Mouse3DMove += Rotation_Mouse3DMove; rotationY.Mouse3DMove += Rotation_Mouse3DMove; rotationZ.Mouse3DMove += Rotation_Mouse3DMove; rotationX.Mouse3DUp += Manipulation_Mouse3DUp; rotationY.Mouse3DUp += Manipulation_Mouse3DUp; rotationZ.Mouse3DUp += Manipulation_Mouse3DUp; rotationGroup = new GroupModel3D(); rotationGroup.Children.Add(rotationX); rotationGroup.Children.Add(rotationY); rotationGroup.Children.Add(rotationZ); ctrlGroup.Children.Add(rotationGroup); #endregion #region Scaling Models scaleX = GetGeometryModel(ScalingGeometry, DiffuseMaterials.Red); scaleY = GetGeometryModel(ScalingGeometry, DiffuseMaterials.Green); scaleZ = GetGeometryModel(ScalingGeometry, DiffuseMaterials.Blue); scaleY.Transform = new Media3D.MatrixTransform3D(rotationYMatrix.ToMatrix3D()); scaleZ.Transform = new Media3D.MatrixTransform3D(rotationZMatrix.ToMatrix3D()); scaleX.Mouse3DDown += Scaling_Mouse3DDown; scaleY.Mouse3DDown += Scaling_Mouse3DDown; scaleZ.Mouse3DDown += Scaling_Mouse3DDown; scaleX.Mouse3DMove += Scaling_Mouse3DMove; scaleY.Mouse3DMove += Scaling_Mouse3DMove; scaleZ.Mouse3DMove += Scaling_Mouse3DMove; scaleX.Mouse3DUp += Manipulation_Mouse3DUp; scaleY.Mouse3DUp += Manipulation_Mouse3DUp; scaleZ.Mouse3DUp += Manipulation_Mouse3DUp; scaleGroup = new GroupModel3D(); scaleGroup.Children.Add(scaleX); scaleGroup.Children.Add(scaleY); scaleGroup.Children.Add(scaleZ); ctrlGroup.Children.Add(scaleGroup); #endregion Children.Add(ctrlGroup); xrayEffect = new PostEffectMeshXRayGrid() { EffectName = xrayEffectName, DimmingFactor = 0.5, BlendingFactor = 0.8, GridDensity = 4, GridColor = Media.Colors.Gray }; (xrayEffect.SceneNode as NodePostEffectXRayGrid).XRayDrawingPassName = DefaultPassNames.EffectMeshDiffuseXRayGridP3; Children.Add(xrayEffect); SceneNode.Attached += SceneNode_OnAttached; SceneNode.Detached += SceneNode_OnDetached; }
public void DrawLine() { if (Input.GetMouseButtonDown(0)) { RaycastHit hit; Ray ray = camera.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit)) { Transform objectHit = hit.transform; if (objectHit.GetComponent <Element3D>()) { print(objectHit.name + " ( " + hit.point.x + " | " + hit.point.z + ")"); if (firstPoint == null && secondPoint == null) { print("1"); firstPoint = objectHit.GetComponent <Element3D>(); firstPoint.Select(); //line.SetPosition(0, firstPoint.transform.position); //line.SetPosition(1, firstPoint.transform.position); } else if (firstPoint != null && secondPoint == null) { print("2"); if (objectHit == firstPoint.transform) { firstPoint.Disselect(); firstPoint = null; } else { secondPoint = objectHit.GetComponent <Element3D>(); secondPoint.Select(); } } else if (firstPoint == null && secondPoint != null) { print("3"); if (objectHit == secondPoint.transform) { secondPoint.Disselect(); secondPoint = null; } else { firstPoint = objectHit.GetComponent <Element3D>(); firstPoint.Select(); } } else if (firstPoint != null && secondPoint != null) { print("4"); if (objectHit == secondPoint.transform) { secondPoint.Disselect(); secondPoint = null; } else if (objectHit == firstPoint.transform) { firstPoint.Disselect(); firstPoint = null; } } else { print("5"); if (firstPoint != null) { firstPoint.Disselect(); firstPoint = null; } if (secondPoint != null) { secondPoint.Disselect(); secondPoint = null; } firstPoint = objectHit.GetComponent <Element3D>(); } } } if (firstPoint != null && secondPoint != null) { line.SetPosition(0, firstPoint.transform.position); line.SetPosition(1, secondPoint.transform.position); } else { line.SetPosition(0, Vector3.zero); line.SetPosition(1, Vector3.zero); } } if (Input.GetMouseButtonDown(1)) { if (firstPoint != null) { firstPoint.Disselect(); firstPoint = null; } if (secondPoint != null) { secondPoint.Disselect(); secondPoint = null; } line.SetPosition(0, Vector3.zero); line.SetPosition(1, Vector3.zero); } }
internal Permutation(Element3D element, int sourceIndex, string name) { SourceIndex = sourceIndex; Element = element; Name = name; }
private void CreateBoundsGeometry(Element3D parent) { lock (exceedsBoundsSync) { if (PrinterBoundsConst.PrintableRegion == null || PrinterBoundsConst.PrintableRegion.bounds_list.Count < 1) { return; } StackedBoundingBox printableRegion = PrinterBoundsConst.PrintableRegion; if (ExceedsBoundsGeometry != null) { for (var index1 = 0; index1 < ExceedsBoundsGeometry.GetLength(0); ++index1) { for (var index2 = 0; index2 < ExceedsBoundsGeometry.GetLength(1); ++index2) { parent.RemoveChildElement(ExceedsBoundsGeometry[index1, index2]); } } } List <BoundingBox> boundsList = printableRegion.bounds_list; ExceedsBoundsGeometry = new CustomShape[boundsList.Count, 6]; var vertex_list = new List <VertexTNV>(); for (var index = 0; index < boundsList.Count; ++index) { var vector3_1 = new Model.Utils.Vector3(boundsList[index].min.x, boundsList[index].min.y, boundsList[index].min.z); var vector3_2 = new M3D.Model.Utils.Vector3(boundsList[index].max.x, boundsList[index].max.y, boundsList[index].max.z); ExceedsBoundsGeometry[index, 0] = new CustomShape(3006); vertex_list.Clear(); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_2.Y, vector3_2.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_2.Y, vector3_2.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_2.Y, vector3_1.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_2.Y, vector3_2.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_2.Y, vector3_1.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_2.Y, vector3_1.Z))); ExceedsBoundsGeometry[index, 0].Create(vertex_list, 0); BoundingBoxColoringHelper(ref ExceedsBoundsGeometry[index, 0]); parent.AddChildElement(ExceedsBoundsGeometry[index, 0]); ExceedsBoundsGeometry[index, 1] = new CustomShape(3007); vertex_list.Clear(); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, -1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_1.Y, vector3_2.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, -1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_1.Y, vector3_2.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, -1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_1.Y, vector3_1.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, -1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_1.Y, vector3_2.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, -1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_1.Y, vector3_1.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, -1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_1.Y, vector3_1.Z))); ExceedsBoundsGeometry[index, 1].Create(vertex_list, 0); BoundingBoxColoringHelper(ref ExceedsBoundsGeometry[index, 1]); parent.AddChildElement(ExceedsBoundsGeometry[index, 1]); ExceedsBoundsGeometry[index, 2] = new CustomShape(3008); vertex_list.Clear(); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_2.Y, vector3_2.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_1.Y, vector3_2.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_1.Y, vector3_1.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_2.Y, vector3_2.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_1.Y, vector3_1.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_2.Y, vector3_1.Z))); ExceedsBoundsGeometry[index, 2].Create(vertex_list, 0); BoundingBoxColoringHelper(ref ExceedsBoundsGeometry[index, 2]); parent.AddChildElement(ExceedsBoundsGeometry[index, 2]); ExceedsBoundsGeometry[index, 3] = new CustomShape(3009); vertex_list.Clear(); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(-1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_1.Y, vector3_2.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(-1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_2.Y, vector3_2.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(-1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_2.Y, vector3_1.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(-1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_1.Y, vector3_2.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(-1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_2.Y, vector3_1.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(-1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_1.Y, vector3_1.Z))); ExceedsBoundsGeometry[index, 3].Create(vertex_list, 0); BoundingBoxColoringHelper(ref ExceedsBoundsGeometry[index, 3]); parent.AddChildElement(ExceedsBoundsGeometry[index, 3]); if (index + 1 == boundsList.Count) { ExceedsBoundsGeometry[index, 4] = new CustomShape(3010); vertex_list.Clear(); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 0.0f, 1f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_1.Y, vector3_2.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 0.0f, 1f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_1.Y, vector3_2.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 0.0f, 1f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_2.Y, vector3_2.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 0.0f, 1f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_2.Y, vector3_2.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 0.0f, 1f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_2.Y, vector3_2.Z))); vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 0.0f, 1f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_1.Y, vector3_2.Z))); ExceedsBoundsGeometry[index, 4].Create(vertex_list, 0); BoundingBoxColoringHelper(ref ExceedsBoundsGeometry[index, 4]); parent.AddChildElement(ExceedsBoundsGeometry[index, 4]); } } } }
public ViewDistanceGroupNode(Element3D element) { this.element = element; }