diff --git a/src/Editor/LightsMenu.tsx b/src/Editor/LightsMenu.tsx
new file mode 100644
index 000000000..7ab534e54
--- /dev/null
+++ b/src/Editor/LightsMenu.tsx
@@ -0,0 +1,81 @@
+
+import { Button, Menu, MenuItem, Popover } from "@blueprintjs/core";
+import { observer } from "mobx-react";
+import * as React from "react";
+import { DownPanelStore, LightDataModeType } from "../UI/Store/DownPanelStore";
+
+/**
+ * 底部状态栏的灯光助手按钮.
+ */
+@observer
+export class LightsMenu extends React.Component<{}>
+{
+ public state = {
+ isOpenMenu: false,
+ };
+ render()
+ {
+ return (
+
+
+ {this.RenderMenu()}
+
+ );
+ }
+ RenderMenu = () =>
+ {
+ const downStore = DownPanelStore.GetInstance() as DownPanelStore;
+ return (
+
+ );
+ };
+ private close = () =>
+ {
+ let store = DownPanelStore.GetInstance() as DownPanelStore;
+ store.Upload();
+ };
+}
diff --git a/src/Editor/UserConfig.ts b/src/Editor/UserConfig.ts
index 0511d900f..b58f15eb2 100644
--- a/src/Editor/UserConfig.ts
+++ b/src/Editor/UserConfig.ts
@@ -120,6 +120,8 @@ export class UserConfig implements IConfigStore
showShareModule: boolean = false;
@observable openHistoryList = true;
isOpenCabinet: boolean = false; //是否时开启门板、抽屉动作
+ @observable lightHelper: boolean = false; //是否显示灯光助手
+
constructor()
{
this.Init();
diff --git a/src/UI/Components/Panel.tsx b/src/UI/Components/Panel.tsx
index 11242e387..b007bae6c 100644
--- a/src/UI/Components/Panel.tsx
+++ b/src/UI/Components/Panel.tsx
@@ -7,12 +7,17 @@ import { SignUrl } from '../../Common/HostUrl';
import { Log } from '../../Common/Log';
import { Post, RequestStatus } from '../../Common/Request';
import { Entity } from '../../DatabaseServices/Entity/Entity';
-import { commandMachine } from '../../Editor/CommandMachine';
+import { DirectionalLight } from '../../DatabaseServices/Lights/DirectionalLight';
+import { Light } from '../../DatabaseServices/Lights/Light';
+import { RectAreaLight } from '../../DatabaseServices/Lights/RectAreaLight';
+import { SpotLight } from '../../DatabaseServices/Lights/SpotLight';
+import { commandMachine, CommandWrap } from '../../Editor/CommandMachine';
import { CommandState } from '../../Editor/CommandState';
+import { LightsMenu } from '../../Editor/LightsMenu';
import { SnapMenuFixed } from '../../Editor/SnapMenuFixed';
import { TempEditor } from '../../Editor/TempEditor';
import { userConfig } from '../../Editor/UserConfig';
-import { DownPanelStore } from '../Store/DownPanelStore';
+import { DownPanelStore, LightDataModeType } from '../Store/DownPanelStore';
import { RightPanelStore } from '../Store/RightPanelStore/RightPanelStore';
import { TopPanelStore } from '../Store/TopPanelStore';
import { userConfigStore } from '../Store/UserConfigStore';
@@ -250,12 +255,45 @@ export class DownPanel extends React.Component<{ store?: DownPanelStore; }, {}>
await userConfigStore.SaveConfig(BoardModalType.UserConfig, userConfig);
return;
}
+ if (key === "lightHelper")
+ {
+ userConfig.lightHelper = !userConfig.lightHelper;
+ const downStore = DownPanelStore.GetInstance() as DownPanelStore;
+ let Lights: string[] = [];
+
+ for (let light of downStore.lightsData)
+ {
+ if (light.enable && light.mode !== LightDataModeType.A)
+ Lights.push(light.mode);
+ }
+ if (Lights.length > 0)
+ CommandWrap(() =>
+ {
+ for (let light of app.Database.Lights.Entitys)
+ {
+ if (Lights.includes(this.GetLightType(light)))
+ (light as Light).ShowHelper = userConfig.lightHelper;
+ }
+ }, userConfig.lightHelper ? "显示灯光助手" : "隐藏灯光助手");
+ e.currentTarget.blur();
+ return;
+ }
+
this.props.store[key] = e.currentTarget.checked;
if (!app.Viewer.isLayout)
userConfig.switchBackground = true;
e.currentTarget.blur();
this.props.store.Upload();
};
+ private GetLightType(ent: Entity)
+ {
+ if (ent instanceof SpotLight)
+ return LightDataModeType.S;
+ else if (ent instanceof RectAreaLight)
+ return LightDataModeType.R;
+ else if (ent instanceof DirectionalLight)
+ return LightDataModeType.D;
+ }
componentDidMount()
{
this.rStore.lightStore.ShowShadowObject(true);
@@ -390,6 +428,15 @@ export class DownPanel extends React.Component<{ store?: DownPanelStore; }, {}>
e.currentTarget.blur();
}}
/>
+
+
+
);
}
diff --git a/src/UI/Store/DownPanelStore.ts b/src/UI/Store/DownPanelStore.ts
index e6a13642b..8498112b4 100644
--- a/src/UI/Store/DownPanelStore.ts
+++ b/src/UI/Store/DownPanelStore.ts
@@ -36,6 +36,21 @@ export interface ISnapData
enable: boolean;
}
+export interface LightsData
+{
+ mode: LightDataModeType;
+ name: string;
+ enable: boolean;
+}
+
+export enum LightDataModeType
+{
+ A = "AllLight",
+ S = "SpotLight",
+ R = "RectAreaLight",
+ D = "DirectionalLight"
+}
+
/**
* 底部状态栏.
*/
@@ -109,6 +124,29 @@ export class DownPanelStore
enable: true
},
];
+ @observable lightsData: LightsData[] = [
+ {
+ mode: LightDataModeType.A,
+ name: "全部",
+ enable: true
+ },
+ {
+ mode: LightDataModeType.S,
+ name: "射灯",
+ enable: true
+ },
+ {
+ mode: LightDataModeType.R,
+ name: "矩形灯",
+ enable: true
+ },
+ {
+ mode: LightDataModeType.D,
+ name: "太阳光",
+ enable: true
+ },
+ ];
+
private timeId;
private constructor()
{
@@ -154,6 +192,7 @@ export class DownPanelStore
isF11Checked: this.isF11Checked,
snapData: this.snapData.map(d => d.enable),
fontName: this.fontName,
+ lightsData: this.lightsData.map(l => l.enable),
};
}
async Upload()
@@ -220,6 +259,11 @@ export class DownPanelStore
{
this.snapData[i].enable = config.snapData[i];
}
+ if (config.lightsData)
+ for (let i = 0; i < config.lightsData.length; i++)
+ {
+ this.lightsData[i].enable = config.lightsData[i];
+ }
this.SetSnapMode();
this.showType = !this.isLeftToolBarShow ? this.showType ^ ToolBarType.lefttoolbar : this.showType | ToolBarType.lefttoolbar;
}