public UpArrow3D(View3DWidget view3DWidget) : base(null, view3DWidget.meshViewerWidget) { heightDisplay = new HeightValueDisplay(view3DWidget); heightDisplay.Visible = false; DrawOnTop = true; this.view3DWidget = view3DWidget; string arrowFile = Path.Combine("Icons", "3D Icons", "up_pointer.stl"); if (StaticData.Instance.FileExists(arrowFile)) { using (Stream staticDataStream = StaticData.Instance.OpenSteam(arrowFile)) { using (MemoryStream arrowStream = new MemoryStream()) { staticDataStream.CopyTo(arrowStream, 1 << 16); List <MeshGroup> loadedMeshGroups = MeshFileIo.Load(arrowStream, Path.GetExtension(arrowFile)); upArrow = loadedMeshGroups[0].Meshes[0]; CollisionVolume = PlatingHelper.CreateTraceDataForMesh(upArrow); //CollisionVolume = new CylinderShape(arrowBounds.XSize / 2, arrowBounds.ZSize, new SolidMaterial(RGBA_Floats.Red, .5, 0, .4)); //CollisionVolume = new CylinderShape(arrowBounds.XSize / 2 * 4, arrowBounds.ZSize * 4, new SolidMaterial(RGBA_Floats.Red, .5, 0, .4)); } } } }
public UpArrow3D(View3DWidget view3DWidget) : base(null, view3DWidget.meshViewerWidget) { heightDisplay = new HeightValueDisplay(view3DWidget); heightDisplay.Visible = false; DrawOnTop = true; this.view3DWidget = view3DWidget; string arrowFile = Path.Combine("Icons", "3D Icons", "up_pointer.stl"); if (StaticData.Instance.FileExists(arrowFile)) { using (Stream staticDataStream = StaticData.Instance.OpenSteam(arrowFile)) { using (MemoryStream arrowStream = new MemoryStream()) { staticDataStream.CopyTo(arrowStream, 1 << 16); List<MeshGroup> loadedMeshGroups = MeshFileIo.Load(arrowStream, Path.GetExtension(arrowFile)); upArrow = loadedMeshGroups[0].Meshes[0]; CollisionVolume = PlatingHelper.CreateTraceDataForMesh(upArrow); //CollisionVolume = new CylinderShape(arrowBounds.XSize / 2, arrowBounds.ZSize, new SolidMaterial(RGBA_Floats.Red, .5, 0, .4)); //CollisionVolume = new CylinderShape(arrowBounds.XSize / 2 * 4, arrowBounds.ZSize * 4, new SolidMaterial(RGBA_Floats.Red, .5, 0, .4)); } } } }
public View3DWidget(PrintItemWrapper printItemWrapper, Vector3 viewerVolume, Vector2 bedCenter, MeshViewerWidget.BedShape bedShape, WindowMode windowType, AutoRotate autoRotate, OpenMode openMode = OpenMode.Viewing) { this.openMode = openMode; this.windowType = windowType; allowAutoRotate = (autoRotate == AutoRotate.Enabled); autoRotating = allowAutoRotate; MeshGroupExtraData = new List<PlatingMeshGroupData>(); MeshGroupExtraData.Add(new PlatingMeshGroupData()); this.printItemWrapper = printItemWrapper; FlowLayoutWidget mainContainerTopToBottom = new FlowLayoutWidget(FlowDirection.TopToBottom); mainContainerTopToBottom.HAnchor = Agg.UI.HAnchor.Max_FitToChildren_ParentWidth; mainContainerTopToBottom.VAnchor = Agg.UI.VAnchor.Max_FitToChildren_ParentHeight; FlowLayoutWidget centerPartPreviewAndControls = new FlowLayoutWidget(FlowDirection.LeftToRight); centerPartPreviewAndControls.Name = "centerPartPreviewAndControls"; centerPartPreviewAndControls.AnchorAll(); GuiWidget viewArea = new GuiWidget(); viewArea.AnchorAll(); { meshViewerWidget = new MeshViewerWidget(viewerVolume, bedCenter, bedShape, "Press 'Add' to select an item.".Localize()); PutOemImageOnBed(); meshViewerWidget.AnchorAll(); } viewArea.AddChild(meshViewerWidget); centerPartPreviewAndControls.AddChild(viewArea); mainContainerTopToBottom.AddChild(centerPartPreviewAndControls); FlowLayoutWidget buttonBottomPanel = new FlowLayoutWidget(FlowDirection.LeftToRight); buttonBottomPanel.HAnchor = HAnchor.ParentLeftRight; buttonBottomPanel.Padding = new BorderDouble(3, 3); buttonBottomPanel.BackgroundColor = ActiveTheme.Instance.PrimaryBackgroundColor; buttonRightPanel = CreateRightButtonPanel(viewerVolume.y); buttonRightPanel.Name = "buttonRightPanel"; buttonRightPanel.Visible = false; CreateOptionsContent(); // add in the plater tools { FlowLayoutWidget editToolBar = new FlowLayoutWidget(); string progressFindPartsLabel = "Entering Editor".Localize(); string progressFindPartsLabelFull = "{0}:".FormatWith(progressFindPartsLabel); processingProgressControl = new ProgressControl(progressFindPartsLabelFull, ActiveTheme.Instance.PrimaryTextColor, ActiveTheme.Instance.PrimaryAccentColor); processingProgressControl.VAnchor = Agg.UI.VAnchor.ParentCenter; editToolBar.AddChild(processingProgressControl); editToolBar.VAnchor |= Agg.UI.VAnchor.ParentCenter; processingProgressControl.Visible = false; // If the window is embeded (in the center pannel) and there is no item loaded then don't show the add button enterEditButtonsContainer = new FlowLayoutWidget(); { Button addButton = textImageButtonFactory.Generate("Insert".Localize(), "icon_insert_32x32.png"); addButton.ToolTipText = "Insert an .stl, .amf or .zip file".Localize(); addButton.Margin = new BorderDouble(right: 0); enterEditButtonsContainer.AddChild(addButton); addButton.Click += (sender, e) => { UiThread.RunOnIdle(() => { DoAddFileAfterCreatingEditData = true; EnterEditAndCreateSelectionData(); }); }; if (printItemWrapper != null && printItemWrapper.PrintItem.ReadOnly) { addButton.Enabled = false; } Button enterEdittingButton = textImageButtonFactory.Generate("Edit".Localize(), "icon_edit_32x32.png"); enterEdittingButton.Margin = new BorderDouble(right: 4); enterEdittingButton.Click += (sender, e) => { EnterEditAndCreateSelectionData(); }; if (printItemWrapper != null && printItemWrapper.PrintItem.ReadOnly) { enterEdittingButton.Enabled = false; } Button exportButton = textImageButtonFactory.Generate("Export...".Localize()); if (printItemWrapper != null && (printItemWrapper.PrintItem.Protected || printItemWrapper.PrintItem.ReadOnly)) { exportButton.Enabled = false; } exportButton.Margin = new BorderDouble(right: 10); exportButton.Click += (sender, e) => { UiThread.RunOnIdle(() => { OpenExportWindow(); }); }; enterEditButtonsContainer.AddChild(enterEdittingButton); enterEditButtonsContainer.AddChild(exportButton); } editToolBar.AddChild(enterEditButtonsContainer); doEdittingButtonsContainer = new FlowLayoutWidget(); doEdittingButtonsContainer.Visible = false; { Button addButton = textImageButtonFactory.Generate("Insert".Localize(), "icon_insert_32x32.png"); addButton.Margin = new BorderDouble(right: 10); doEdittingButtonsContainer.AddChild(addButton); addButton.Click += (sender, e) => { UiThread.RunOnIdle(() => { FileDialog.OpenFileDialog( new OpenFileDialogParams(ApplicationSettings.OpenDesignFileParams, multiSelect: true), (openParams) => { LoadAndAddPartsToPlate(openParams.FileNames); }); }); }; GuiWidget separator = new GuiWidget(1, 2); separator.BackgroundColor = ActiveTheme.Instance.PrimaryTextColor; separator.Margin = new BorderDouble(4, 2); separator.VAnchor = VAnchor.ParentBottomTop; doEdittingButtonsContainer.AddChild(separator); Button ungroupButton = textImageButtonFactory.Generate("Ungroup".Localize()); doEdittingButtonsContainer.AddChild(ungroupButton); ungroupButton.Click += (sender, e) => { UngroupSelectedMeshGroup(); }; Button groupButton = textImageButtonFactory.Generate("Group".Localize()); doEdittingButtonsContainer.AddChild(groupButton); groupButton.Click += (sender, e) => { GroupSelectedMeshs(); }; Button alignButton = textImageButtonFactory.Generate("Align".Localize()); doEdittingButtonsContainer.AddChild(alignButton); alignButton.Click += (sender, e) => { AlignToSelectedMeshGroup(); }; Button arrangeButton = textImageButtonFactory.Generate("Arrange".Localize()); doEdittingButtonsContainer.AddChild(arrangeButton); arrangeButton.Click += (sender, e) => { AutoArrangePartsInBackground(); }; GuiWidget separatorTwo = new GuiWidget(1, 2); separatorTwo.BackgroundColor = ActiveTheme.Instance.PrimaryTextColor; separatorTwo.Margin = new BorderDouble(4, 2); separatorTwo.VAnchor = VAnchor.ParentBottomTop; doEdittingButtonsContainer.AddChild(separatorTwo); Button copyButton = textImageButtonFactory.Generate("Copy".Localize()); doEdittingButtonsContainer.AddChild(copyButton); copyButton.Click += (sender, e) => { MakeCopyOfGroup(); }; Button deleteButton = textImageButtonFactory.Generate("Remove".Localize()); doEdittingButtonsContainer.AddChild(deleteButton); deleteButton.Click += (sender, e) => { DeleteSelectedMesh(); }; GuiWidget separatorThree = new GuiWidget(1, 2); separatorThree.BackgroundColor = ActiveTheme.Instance.PrimaryTextColor; separatorThree.Margin = new BorderDouble(4, 1); separatorThree.VAnchor = VAnchor.ParentBottomTop; doEdittingButtonsContainer.AddChild(separatorThree); Button leaveEditModeButton = textImageButtonFactory.Generate("Cancel".Localize(), centerText: true); leaveEditModeButton.Click += (sender, e) => { UiThread.RunOnIdle(() => { if (saveButtons.Visible) { StyledMessageBox.ShowMessageBox(ExitEditingAndSaveIfRequired, "Would you like to save your changes before exiting the editor?", "Save Changes", StyledMessageBox.MessageType.YES_NO); } else { if (partHasBeenEdited) { ExitEditingAndSaveIfRequired(false); } else { SwitchStateToNotEditing(); } } }); }; doEdittingButtonsContainer.AddChild(leaveEditModeButton); // put in the save button AddSaveAndSaveAs(doEdittingButtonsContainer); } KeyDown += (sender, e) => { KeyEventArgs keyEvent = e as KeyEventArgs; if (keyEvent != null && !keyEvent.Handled) { if (keyEvent.KeyCode == Keys.Delete || keyEvent.KeyCode == Keys.Back) { DeleteSelectedMesh(); } if (keyEvent.KeyCode == Keys.Escape) { if (meshSelectInfo.downOnPart) { meshSelectInfo.downOnPart = false; ScaleRotateTranslate translated = SelectedMeshGroupTransform; translated.translation = transformOnMouseDown; SelectedMeshGroupTransform = translated; Invalidate(); } } } }; editToolBar.AddChild(doEdittingButtonsContainer); buttonBottomPanel.AddChild(editToolBar); } GuiWidget buttonRightPanelHolder = new GuiWidget(HAnchor.FitToChildren, VAnchor.ParentBottomTop); buttonRightPanelHolder.Name = "buttonRightPanelHolder"; centerPartPreviewAndControls.AddChild(buttonRightPanelHolder); buttonRightPanelHolder.AddChild(buttonRightPanel); viewControls3D = new ViewControls3D(meshViewerWidget); buttonRightPanelDisabledCover = new Cover(HAnchor.ParentLeftRight, VAnchor.ParentBottomTop); buttonRightPanelDisabledCover.BackgroundColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryBackgroundColor, 150); buttonRightPanelHolder.AddChild(buttonRightPanelDisabledCover); viewControls3D.PartSelectVisible = false; LockEditControls(); GuiWidget leftRightSpacer = new GuiWidget(); leftRightSpacer.HAnchor = HAnchor.ParentLeftRight; buttonBottomPanel.AddChild(leftRightSpacer); if (windowType == WindowMode.StandAlone) { Button closeButton = textImageButtonFactory.Generate("Close".Localize()); buttonBottomPanel.AddChild(closeButton); closeButton.Click += (sender, e) => { CloseOnIdle(); }; } mainContainerTopToBottom.AddChild(buttonBottomPanel); this.AddChild(mainContainerTopToBottom); this.AnchorAll(); meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation; AddChild(viewControls3D); AddHandlers(); UiThread.RunOnIdle(AutoSpin); if (printItemWrapper == null && windowType == WindowMode.Embeded) { enterEditButtonsContainer.Visible = false; } if (windowType == WindowMode.Embeded) { PrinterConnectionAndCommunication.Instance.CommunicationStateChanged.RegisterEvent(SetEditControlsBasedOnPrinterState, ref unregisterEvents); if (windowType == WindowMode.Embeded) { // make sure we lock the controls if we are printing or paused switch (PrinterConnectionAndCommunication.Instance.CommunicationState) { case PrinterConnectionAndCommunication.CommunicationStates.Printing: case PrinterConnectionAndCommunication.CommunicationStates.Paused: LockEditControls(); break; } } } ActiveTheme.Instance.ThemeChanged.RegisterEvent(ThemeChanged, ref unregisterEvents); upArrow = new UpArrow3D(this); heightDisplay = new HeightValueDisplay(this); heightDisplay.Visible = false; meshViewerWidget.interactionVolumes.Add(upArrow); // make sure the colors are set correctl ThemeChanged(this, null); saveButtons.VisibleChanged += (sender, e) => { partHasBeenEdited = true; }; }