diff --git a/src/Add-on/Renderer.tsx b/src/Add-on/Renderer.tsx
new file mode 100644
index 000000000..d92b1ffd1
--- /dev/null
+++ b/src/Add-on/Renderer.tsx
@@ -0,0 +1,17 @@
+import { app } from "../ApplicationServices/Application";
+import { Command } from "../Editor/CommandMachine";
+import { CameraType } from "../GraphicsSystem/CameraUpdate";
+
+export class CMD_Renderer implements Command
+{
+ async exec()
+ {
+ if (app.WebRtcRenderer.webRtcPlayerObj)
+ app.WebRtcRenderer.EndRenderer();
+ else if (app.WebRtcRenderer.IsLink)
+ {
+ app.Viewer.CameraCtrl.CameraType = CameraType.PerspectiveCamera;
+ app.WebRtcRenderer.StartRenderer();
+ }
+ }
+}
diff --git a/src/Add-on/SwitchVisualStyles.ts b/src/Add-on/SwitchVisualStyles.ts
index 74ebccdc1..08c06207d 100644
--- a/src/Add-on/SwitchVisualStyles.ts
+++ b/src/Add-on/SwitchVisualStyles.ts
@@ -28,6 +28,7 @@ export class ChangeRenderType implements Command
async exec()
{
+ app.WebRtcRenderer.EndRenderer();
if (userConfig.isOpenCabinet) return; //开启门板、抽屉时 切换视图样式失效
if (this._type === RenderType.PlaceFace)
{
diff --git a/src/Common/CommandNames.ts b/src/Common/CommandNames.ts
index 19bd2c6ee..de4ac3b77 100644
--- a/src/Common/CommandNames.ts
+++ b/src/Common/CommandNames.ts
@@ -256,6 +256,7 @@ export enum CommandNames
FanMian = "FANMIAN", //排版面 反面
SuiYiMian = "SUIYIMIAN", //排版面 随意
BackgroundSwitching = "BACKGROUNDSWITCHING",//背景切换
+ Renderer = "RENDERER",//渲染
ShowHSPanel = "SHOWHIDESELECT",
BatchModifyPanel = "BATCHMODIFYPANEL",
EditorboardTemplate = "EDITORBOARDTEMPLATE",
diff --git a/src/Editor/CommandRegister.ts b/src/Editor/CommandRegister.ts
index 3197e6454..ed2adfc30 100644
--- a/src/Editor/CommandRegister.ts
+++ b/src/Editor/CommandRegister.ts
@@ -156,6 +156,7 @@ import { PasteClip } from "../Add-on/PasteClip";
import { Pedit } from "../Add-on/Pedit";
import { Command_PLTest } from "../Add-on/polytest";
import { Print } from "../Add-on/Print";
+import { CMD_Renderer } from "../Add-on/Renderer";
import { Command_RenderModulesState } from "../Add-on/RenderModulesState";
import { ReOpen } from "../Add-on/ReOpen";
import { Command_ResetCustomCommand } from "../Add-on/ResetCustomCommand";
@@ -530,6 +531,7 @@ export function registerCommand()
commandMachine.RegisterCommand(CommandNames.CheckEdge, new ChangeRenderType(RenderType.Edge));
commandMachine.RegisterCommand(CommandNames.CheckPlaceFace, new ChangeRenderType(RenderType.PlaceFace));
commandMachine.RegisterCommand(CommandNames.BackgroundSwitching, new BackgroundSwitching());
+ commandMachine.RegisterCommand(CommandNames.Renderer, new CMD_Renderer());
//导入导出配置
commandMachine.RegisterCommand(CommandNames.DownloadConfig, new DownLoadDConfig());
diff --git a/src/GraphicsSystem/WebRtcRenderer.ts b/src/GraphicsSystem/WebRtcRenderer.ts
index 0556590b8..bcf01ed28 100644
--- a/src/GraphicsSystem/WebRtcRenderer.ts
+++ b/src/GraphicsSystem/WebRtcRenderer.ts
@@ -6,7 +6,7 @@ import { WebRtcPlayer } from "./WebRtcPlayer";
//webrtc渲染器连接工具
export class WebRtcRenderer
{
- ws = new WebSocketClientServer("ws://localhost:13421");
+ private ws = new WebSocketClientServer("ws://localhost:13421");
webRtcPlayerObj: WebRtcPlayer;
rm1: any;
rm2: any;
@@ -15,6 +15,8 @@ export class WebRtcRenderer
this.InitWebSocket();
}
+ get IsLink() { return this.ws.IsLink; }
+
private InitWebSocket()
{
this.ws = new WebSocketClientServer("ws://localhost:13421");
@@ -23,6 +25,8 @@ export class WebRtcRenderer
this.rm1 = end(this.ws, this.ws.OnLinkEvent, (isLink: boolean) =>
{
+ this.OnLinkEvent(isLink);
+
if (isLink)
{
}
@@ -60,6 +64,7 @@ export class WebRtcRenderer
}
});
}
+ OnLinkEvent(isLink: boolean) { }
StartRenderer()
{
@@ -132,19 +137,20 @@ export class WebRtcRenderer
EndRenderer()
{
- this.ws.Close().then(() =>
- {
- this.rm1();
- this.rm2();
-
- if (this.webRtcPlayerObj)
+ if (this.webRtcPlayerObj)
+ this.ws.Close().then(() =>
{
- this.webRtcPlayerObj.video.remove();
- this.webRtcPlayerObj.close();
- this.webRtcPlayerObj = undefined;
- }
+ this.rm1();
+ this.rm2();
- this.InitWebSocket();
- });
+ if (this.webRtcPlayerObj)
+ {
+ this.webRtcPlayerObj.video.remove();
+ this.webRtcPlayerObj.close();
+ this.webRtcPlayerObj = undefined;
+ }
+
+ this.InitWebSocket();
+ });
}
}
diff --git a/src/UI/Components/CameraControlButton/CameraControlBtn.tsx b/src/UI/Components/CameraControlButton/CameraControlBtn.tsx
index 132261d09..2bc934fc0 100644
--- a/src/UI/Components/CameraControlButton/CameraControlBtn.tsx
+++ b/src/UI/Components/CameraControlButton/CameraControlBtn.tsx
@@ -1,12 +1,11 @@
import { Button, Menu, MenuDivider, MenuItem, Popover } from "@blueprintjs/core";
import { observable } from "mobx";
-import { inject, observer } from "mobx-react";
+import { observer } from "mobx-react";
import * as React from "react";
import { OrthographicCamera, Vector3 } from "three";
import { begin, end } from "xaop";
import { app } from "../../../ApplicationServices/Application";
import { CommandNames } from "../../../Common/CommandNames";
-import { Singleton } from "../../../Common/Singleton";
import { commandMachine } from "../../../Editor/CommandMachine";
import { equalv3 } from "../../../Geometry/GeUtils";
import { DownPanelStore } from "../../Store/DownPanelStore";
@@ -54,15 +53,30 @@ let viewData: IViewData[] = [
name: "西南等轴测",
},
];
-export class CameraControlBtnStore extends Singleton
+export class CameraControlBtnStore
{
@observable m_isMenuShow: number = -1;
@observable m_ViewMenuTitle: 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) =>
{
switch (true)
@@ -117,9 +131,8 @@ export class CameraControlBtnStore extends Singleton
return this.m_ViewMenuTitle;
}
}
-@inject("store")
@observer
-export class CameraControlBtn extends React.Component<{ store: CameraControlBtnStore; }, {}>
+export class CameraControlBtn extends React.Component<{}, {}>
{
public state = {
isOpenToolbar: false,
@@ -127,7 +140,7 @@ export class CameraControlBtn extends React.Component<{ store: CameraControlBtnS
};
render()
{
- const { m_isMenuShow, m_ViewMenuTitle } = this.props.store;
+ let store = CameraControlBtnStore.GetInstance();
const btnStyle: React.CSSProperties = {
fontSize: "11px",
textAlign: "center",
@@ -162,7 +175,7 @@ export class CameraControlBtn extends React.Component<{ store: CameraControlBtnS
{
this.RenderViewMenu()
@@ -180,6 +193,15 @@ export class CameraControlBtn extends React.Component<{ store: CameraControlBtnS
/>
)
}
+ {
+ store._CanUseRenderer &&
+