From 15b40ce73704e578a2adb57342086ac6dd67f141 Mon Sep 17 00:00:00 2001 From: ChenX Date: Mon, 18 Feb 2019 10:37:52 +0800 Subject: [PATCH] =?UTF-8?q?!250=20=E9=80=89=E9=A1=B9=E9=9D=A2=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Add-on/Command_Option.ts | 13 ++ src/Editor/CommandRegister.ts | 4 +- src/Editor/InitRightMenu.ts | 1 + src/Editor/MouseControls.ts | 15 +- src/UI/Components/Modal/ModalStyle/Modal.less | 1 + .../Modal/ModalStyle/OptionModal.less | 21 +++ .../Modal/OptionModal/DisplayPanel.tsx | 69 +++++++++ .../Modal/OptionModal/OptionModal.tsx | 138 ++++++++++++++++++ 8 files changed, 258 insertions(+), 4 deletions(-) create mode 100644 src/Add-on/Command_Option.ts create mode 100644 src/UI/Components/Modal/ModalStyle/OptionModal.less create mode 100644 src/UI/Components/Modal/OptionModal/DisplayPanel.tsx create mode 100644 src/UI/Components/Modal/OptionModal/OptionModal.tsx diff --git a/src/Add-on/Command_Option.ts b/src/Add-on/Command_Option.ts new file mode 100644 index 000000000..9d513dea2 --- /dev/null +++ b/src/Add-on/Command_Option.ts @@ -0,0 +1,13 @@ +import { Command } from "../Editor/CommandMachine"; +import { OptionModalStore, OptionModal } from "../UI/Components/Modal/OptionModal/OptionModal"; +import { app } from "../ApplicationServices/Application"; +import { ModalPosition } from "../UI/Components/Modal/ModalsManage"; + +export class Command_Options implements Command +{ + async exec() + { + let OptionStore = OptionModalStore.GetInstance() as OptionModalStore; + app.m_Editor.m_ModalManage.RenderModal(OptionModal, ModalPosition.Center, { store: OptionStore }); + } +} diff --git a/src/Editor/CommandRegister.ts b/src/Editor/CommandRegister.ts index 5aaaac545..f28c03569 100644 --- a/src/Editor/CommandRegister.ts +++ b/src/Editor/CommandRegister.ts @@ -102,7 +102,7 @@ import { DrawDrawrer } from '../Add-on/DrawBoard/DrawDrawer'; import { CommandFilletBoard } from '../Add-on/FilletBoard'; import { ReferenceCutting } from '../Add-on/BoardCutting/ReferenceCutting'; import { RotateLayerBoard } from '../Add-on/RotateLayerBoard'; - +import { Command_Options } from '../Add-on/Command_Option'; export function registerCommand() { @@ -276,6 +276,8 @@ export function registerCommand() //命令面板 commandMachine.RegisterCommand("comanp", new Command_CommandPanel()); + //选项 + commandMachine.RegisterCommand("config", new Command_Options()) // commandMachine.RegisterCommand("st", new SaveTarget()) // commandMachine.RegisterCommand("rt", new RevTarget()) diff --git a/src/Editor/InitRightMenu.ts b/src/Editor/InitRightMenu.ts index 1c812d757..e656064da 100644 --- a/src/Editor/InitRightMenu.ts +++ b/src/Editor/InitRightMenu.ts @@ -74,6 +74,7 @@ export async function InitRightMenu(type?: RightMenuType, kwlist?: KeyWord[], ne RightMenu.push(...[ { key: "U", msg: `放弃`, disable: command === "" }, { key: "Z", msg: `重做`, disable: command === "" }, + { key: "O", msg: `选项` }, ]); } return RightMenu; diff --git a/src/Editor/MouseControls.ts b/src/Editor/MouseControls.ts index fb43e6f7f..62256930b 100644 --- a/src/Editor/MouseControls.ts +++ b/src/Editor/MouseControls.ts @@ -1,7 +1,6 @@ import { Vector3 } from 'three'; import { app } from '../ApplicationServices/Application'; import { InputState } from '../Common/InputState'; -import { Singleton } from '../Common/Singleton'; import { Viewer } from '../GraphicsSystem/Viewer'; import { DbClickManager } from './DbClick/DbClick'; import { Editor } from './Editor'; @@ -59,18 +58,28 @@ export class MouseControls this.m_Ed.m_SelectCtrl.Cancel(); break; case "C"://复制 - if (res.Parent === "最近的输入") commandMachine.ExecCommand(res.StringResult); else if (res.Parent === "剪贴板") res.StringResult = "COPYCLIP"; + case "O"://旋转 or 选项 + if (app.m_Editor.m_SelectCtrl.SelectSet.SelectEntityList.length === 0) + { + if (!CommandState.CommandIng) + { + document.getElementById('modal').focus(); + commandMachine.ExecCommand("CONFIG"); + } + arrayRemoveOnce(historyCmdList, "CONFIG"); + historyCmdList.push("CONFIG"); + break; + } case "Z"://重做 case "U"://放弃 case "B"://带基点复制 case "P"://粘贴 case "DEL"://删除 case "M"://移动 - case "O"://旋转 default: let cmd: string = RightMenuCmdKW[res.StringResult] ? RightMenuCmdKW[res.StringResult] : res.StringResult; if (commandMachine.isCommandExist(cmd)) diff --git a/src/UI/Components/Modal/ModalStyle/Modal.less b/src/UI/Components/Modal/ModalStyle/Modal.less index a0cdc8256..f63316351 100644 --- a/src/UI/Components/Modal/ModalStyle/Modal.less +++ b/src/UI/Components/Modal/ModalStyle/Modal.less @@ -131,6 +131,7 @@ @import (less) "EntityModal.less"; @import (less) "CommandModal.less"; @import (less) "SnapModal.less"; +@import (less) "OptionModal.less"; @import (less) "../../RightPanel/RightPanel.less"; @import (less) "./DoorModal.less"; @import (less) "./ReferenceCuttingModal.less"; diff --git a/src/UI/Components/Modal/ModalStyle/OptionModal.less b/src/UI/Components/Modal/ModalStyle/OptionModal.less new file mode 100644 index 000000000..f04d39f81 --- /dev/null +++ b/src/UI/Components/Modal/ModalStyle/OptionModal.less @@ -0,0 +1,21 @@ +#optionModal +{ + width: 350px; + height: 430px; +} +#optionModal .bp3-dialog-body +{ + padding: 10px; + &>.bp3-card + { + padding: 10px; + } + &>.bp3-tabs .bp3-tab-panel + { + margin: 0; + } +} +#optionModal .bp3-dialog-footer +{ + justify-content: flex-end; +} diff --git a/src/UI/Components/Modal/OptionModal/DisplayPanel.tsx b/src/UI/Components/Modal/OptionModal/DisplayPanel.tsx new file mode 100644 index 000000000..e2175ebdb --- /dev/null +++ b/src/UI/Components/Modal/OptionModal/DisplayPanel.tsx @@ -0,0 +1,69 @@ +import React = require("react"); +import { Card, H5, Popover, Classes, Button } from "@blueprintjs/core"; +import { app } from "../../../../ApplicationServices/Application"; +import { Color } from "three"; +import { SketchPicker } from "react-color"; +import { observable } from "mobx"; +import { observer, inject } from "mobx-react"; +import { OptionModalStore } from "./OptionModal"; + +enum DisplayPanelShow +{ + BgColorPicker = 1, +} +@inject("OptionStore") +@observer +export class DisplayPanel extends React.Component<{ OptionStore: OptionModalStore }, {}> +{ + m_InputEl = HTMLInputElement; + @observable private m_isShow: DisplayPanelShow = -1; + handleChangeColor = (color) => + { + console.log(color.hex) + this.props.OptionStore.m_Option.bgcolor = color.hex; + app.m_Viewer.m_Render.setClearColor(new Color(color.hex), 1); + app.m_Editor.UpdateScreen(); + } + RenderBgColorPicker = () => + { + return ( +
+ +
+ ) + } + render() + { + return ( + +
背景色
+ + +