|
|
@ -1,12 +1,11 @@
|
|
|
|
import { Button, Menu, MenuDivider, MenuItem, Popover } from "@blueprintjs/core";
|
|
|
|
import { Button, Menu, MenuDivider, MenuItem, Popover } from "@blueprintjs/core";
|
|
|
|
import { observable } from "mobx";
|
|
|
|
import { observable } from "mobx";
|
|
|
|
import { inject, observer } from "mobx-react";
|
|
|
|
import { observer } from "mobx-react";
|
|
|
|
import * as React from "react";
|
|
|
|
import * as React from "react";
|
|
|
|
import { OrthographicCamera, Vector3 } from "three";
|
|
|
|
import { OrthographicCamera, Vector3 } from "three";
|
|
|
|
import { begin, end } from "xaop";
|
|
|
|
import { begin, end } from "xaop";
|
|
|
|
import { app } from "../../../ApplicationServices/Application";
|
|
|
|
import { app } from "../../../ApplicationServices/Application";
|
|
|
|
import { CommandNames } from "../../../Common/CommandNames";
|
|
|
|
import { CommandNames } from "../../../Common/CommandNames";
|
|
|
|
import { Singleton } from "../../../Common/Singleton";
|
|
|
|
|
|
|
|
import { commandMachine } from "../../../Editor/CommandMachine";
|
|
|
|
import { commandMachine } from "../../../Editor/CommandMachine";
|
|
|
|
import { equalv3 } from "../../../Geometry/GeUtils";
|
|
|
|
import { equalv3 } from "../../../Geometry/GeUtils";
|
|
|
|
import { DownPanelStore } from "../../Store/DownPanelStore";
|
|
|
|
import { DownPanelStore } from "../../Store/DownPanelStore";
|
|
|
@ -54,15 +53,30 @@ let viewData: IViewData[] = [
|
|
|
|
name: "西南等轴测",
|
|
|
|
name: "西南等轴测",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
];
|
|
|
|
];
|
|
|
|
export class CameraControlBtnStore extends Singleton
|
|
|
|
export class CameraControlBtnStore
|
|
|
|
{
|
|
|
|
{
|
|
|
|
@observable m_isMenuShow: number = -1;
|
|
|
|
@observable m_isMenuShow: number = -1;
|
|
|
|
@observable m_ViewMenuTitle: string = "西南等轴测";
|
|
|
|
@observable m_ViewMenuTitle: string = "西南等轴测";
|
|
|
|
@observable m_CameraType: string = "平行";
|
|
|
|
@observable m_CameraType: string = "平行";
|
|
|
|
|
|
|
|
|
|
|
|
constructor()
|
|
|
|
@observable _CanUseRenderer = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static _SingleInstance: CameraControlBtnStore;
|
|
|
|
|
|
|
|
static GetInstance(): CameraControlBtnStore
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (this._SingleInstance) return this._SingleInstance;
|
|
|
|
|
|
|
|
this._SingleInstance = new CameraControlBtnStore;
|
|
|
|
|
|
|
|
return this._SingleInstance;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private constructor()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
super();
|
|
|
|
this._CanUseRenderer = app.WebRtcRenderer.IsLink;
|
|
|
|
|
|
|
|
end(app.WebRtcRenderer, app.WebRtcRenderer.OnLinkEvent, (isOk: boolean) =>
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
this._CanUseRenderer = isOk;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
begin(app.Viewer.CameraCtrl, app.Viewer.CameraCtrl.LookAtEvent, (dir: Vector3) =>
|
|
|
|
begin(app.Viewer.CameraCtrl, app.Viewer.CameraCtrl.LookAtEvent, (dir: Vector3) =>
|
|
|
|
{
|
|
|
|
{
|
|
|
|
switch (true)
|
|
|
|
switch (true)
|
|
|
@ -117,9 +131,8 @@ export class CameraControlBtnStore extends Singleton
|
|
|
|
return this.m_ViewMenuTitle;
|
|
|
|
return this.m_ViewMenuTitle;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@inject("store")
|
|
|
|
|
|
|
|
@observer
|
|
|
|
@observer
|
|
|
|
export class CameraControlBtn extends React.Component<{ store: CameraControlBtnStore; }, {}>
|
|
|
|
export class CameraControlBtn extends React.Component<{}, {}>
|
|
|
|
{
|
|
|
|
{
|
|
|
|
public state = {
|
|
|
|
public state = {
|
|
|
|
isOpenToolbar: false,
|
|
|
|
isOpenToolbar: false,
|
|
|
@ -127,7 +140,7 @@ export class CameraControlBtn extends React.Component<{ store: CameraControlBtnS
|
|
|
|
};
|
|
|
|
};
|
|
|
|
render()
|
|
|
|
render()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
const { m_isMenuShow, m_ViewMenuTitle } = this.props.store;
|
|
|
|
let store = CameraControlBtnStore.GetInstance();
|
|
|
|
const btnStyle: React.CSSProperties = {
|
|
|
|
const btnStyle: React.CSSProperties = {
|
|
|
|
fontSize: "11px",
|
|
|
|
fontSize: "11px",
|
|
|
|
textAlign: "center",
|
|
|
|
textAlign: "center",
|
|
|
@ -162,7 +175,7 @@ export class CameraControlBtn extends React.Component<{ store: CameraControlBtnS
|
|
|
|
<Button
|
|
|
|
<Button
|
|
|
|
style={btnStyle}
|
|
|
|
style={btnStyle}
|
|
|
|
minimal={true}
|
|
|
|
minimal={true}
|
|
|
|
text={`[${m_ViewMenuTitle}]`}
|
|
|
|
text={`[${store.m_ViewMenuTitle}]`}
|
|
|
|
/>
|
|
|
|
/>
|
|
|
|
{
|
|
|
|
{
|
|
|
|
this.RenderViewMenu()
|
|
|
|
this.RenderViewMenu()
|
|
|
@ -180,6 +193,15 @@ export class CameraControlBtn extends React.Component<{ store: CameraControlBtnS
|
|
|
|
/>
|
|
|
|
/>
|
|
|
|
)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
store._CanUseRenderer &&
|
|
|
|
|
|
|
|
<Button
|
|
|
|
|
|
|
|
minimal
|
|
|
|
|
|
|
|
style={btnStyle}
|
|
|
|
|
|
|
|
text="<渲染>"
|
|
|
|
|
|
|
|
onClick={() => commandMachine.ExecCommand(CommandNames.Renderer)}
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
}
|
|
|
|
{
|
|
|
|
{
|
|
|
|
!(DownPanelStore.GetInstance() as DownPanelStore).isLayout && VisualStyleData2.map(
|
|
|
|
!(DownPanelStore.GetInstance() as DownPanelStore).isLayout && VisualStyleData2.map(
|
|
|
|
(data) =>
|
|
|
|
(data) =>
|
|
|
@ -253,7 +275,7 @@ export class CameraControlBtn extends React.Component<{ store: CameraControlBtnS
|
|
|
|
|
|
|
|
|
|
|
|
RenderViewMenu = () =>
|
|
|
|
RenderViewMenu = () =>
|
|
|
|
{
|
|
|
|
{
|
|
|
|
let { m_ViewMenuTitle, m_CameraType } = this.props.store;
|
|
|
|
let store = CameraControlBtnStore.GetInstance();
|
|
|
|
return (
|
|
|
|
return (
|
|
|
|
<Menu
|
|
|
|
<Menu
|
|
|
|
className="viewMenu-fixed"
|
|
|
|
className="viewMenu-fixed"
|
|
|
@ -266,10 +288,10 @@ export class CameraControlBtn extends React.Component<{ store: CameraControlBtnS
|
|
|
|
<MenuItem
|
|
|
|
<MenuItem
|
|
|
|
text={data.name}
|
|
|
|
text={data.name}
|
|
|
|
key={data.name}
|
|
|
|
key={data.name}
|
|
|
|
icon={data.name === m_ViewMenuTitle ? "tick" : "blank"}
|
|
|
|
icon={data.name === store.m_ViewMenuTitle ? "tick" : "blank"}
|
|
|
|
onClick={() =>
|
|
|
|
onClick={() =>
|
|
|
|
{
|
|
|
|
{
|
|
|
|
m_ViewMenuTitle = data.name;
|
|
|
|
store.m_ViewMenuTitle = data.name;
|
|
|
|
commandMachine.ExecCommand(data.command);
|
|
|
|
commandMachine.ExecCommand(data.command);
|
|
|
|
}}
|
|
|
|
}}
|
|
|
|
/>
|
|
|
|
/>
|
|
|
@ -278,19 +300,19 @@ export class CameraControlBtn extends React.Component<{ store: CameraControlBtnS
|
|
|
|
<MenuDivider />
|
|
|
|
<MenuDivider />
|
|
|
|
<MenuItem
|
|
|
|
<MenuItem
|
|
|
|
text={"正交"}
|
|
|
|
text={"正交"}
|
|
|
|
icon={m_CameraType === "正交" ? "tick" : "blank"}
|
|
|
|
icon={store.m_CameraType === "正交" ? "tick" : "blank"}
|
|
|
|
onClick={() =>
|
|
|
|
onClick={() =>
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (m_CameraType !== "正交")
|
|
|
|
if (store.m_CameraType !== "正交")
|
|
|
|
app.Viewer.CameraCtrl.SwitchCamera();
|
|
|
|
app.Viewer.CameraCtrl.SwitchCamera();
|
|
|
|
}}
|
|
|
|
}}
|
|
|
|
/>
|
|
|
|
/>
|
|
|
|
<MenuItem
|
|
|
|
<MenuItem
|
|
|
|
text={"透视"}
|
|
|
|
text={"透视"}
|
|
|
|
icon={m_CameraType === "透视" ? "tick" : "blank"}
|
|
|
|
icon={store.m_CameraType === "透视" ? "tick" : "blank"}
|
|
|
|
onClick={() =>
|
|
|
|
onClick={() =>
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (m_CameraType !== "透视")
|
|
|
|
if (store.m_CameraType !== "透视")
|
|
|
|
app.Viewer.CameraCtrl.SwitchCamera();
|
|
|
|
app.Viewer.CameraCtrl.SwitchCamera();
|
|
|
|
}}
|
|
|
|
}}
|
|
|
|
/>
|
|
|
|
/>
|
|
|
|