From 1792a69705957002451e052b476b4867e75c442d Mon Sep 17 00:00:00 2001 From: ChenX Date: Wed, 2 Nov 2022 10:01:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=E7=9B=B8=E6=9C=BA=E8=A7=86?= =?UTF-8?q?=E8=A7=92=E7=BC=A9=E7=95=A5=E5=9B=BE=E6=B2=A1=E6=9C=89=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CameraSnapshoot/CameraSnapshootRecord.ts | 35 ++++++++++++++----- .../CameraSnapshootRecordUtil.ts | 16 ++++----- src/GraphicsSystem/CameraUpdate.ts | 29 ++++++++++++--- .../CameraState/CameraSnapshootPanel.tsx | 10 ++++-- 4 files changed, 64 insertions(+), 26 deletions(-) diff --git a/src/DatabaseServices/CameraSnapshoot/CameraSnapshootRecord.ts b/src/DatabaseServices/CameraSnapshoot/CameraSnapshootRecord.ts index 109f38df9..4e9d64c5c 100644 --- a/src/DatabaseServices/CameraSnapshoot/CameraSnapshootRecord.ts +++ b/src/DatabaseServices/CameraSnapshoot/CameraSnapshootRecord.ts @@ -1,3 +1,5 @@ +import { Matrix4 } from "three"; +import { CameraUpdate } from "../../GraphicsSystem/CameraUpdate"; import { RenderType } from "../../GraphicsSystem/RenderType"; import { Factory } from "../CADFactory"; import { CADFiler } from "../CADFiler"; @@ -7,12 +9,9 @@ import { CADObject } from "../CADObject"; export class CameraSnapshootRecord extends CADObject { Name: string = ""; - _CameraData = new CADFiler; - - get RenderType(): RenderType - { - return this._CameraData.Data[7]; - } + CameraData = new CameraUpdate; + UCS: Matrix4 = new Matrix4; + RenderType: RenderType = RenderType.Wireframe; //#region -------------------------File------------------------- @@ -20,14 +19,32 @@ export class CameraSnapshootRecord extends CADObject ReadFile(file: CADFiler) { let ver = file.Read(); - this._CameraData.Data = file.Read(); + if (ver === 1) + { + let datas: any[] = file.Read(); + let f = new CADFiler(datas); + f.Read();//old ver + this.CameraData.ReadFile(f); + this.UCS.elements = f.Read(); + this.RenderType = f.Read(); + } + else + { + this.CameraData.ReadFile(file); + for (let i = 0; i < 16; i++) + this.UCS.elements[i] = file.Read(); + this.RenderType = file.Read(); + } this.Name = file.Read(); } //对象将自身数据写入到文件. WriteFile(file: CADFiler) { - file.Write(1); - file.Write(this._CameraData.Data); + file.Write(2); + this.CameraData.WriteFile(file); + for (let e of this.UCS.elements) + file.Write(e); + file.Write(this.RenderType); file.Write(this.Name); } //#endregion diff --git a/src/DatabaseServices/CameraSnapshoot/CameraSnapshootRecordUtil.ts b/src/DatabaseServices/CameraSnapshoot/CameraSnapshootRecordUtil.ts index a5283bdbf..3757765a6 100644 --- a/src/DatabaseServices/CameraSnapshoot/CameraSnapshootRecordUtil.ts +++ b/src/DatabaseServices/CameraSnapshoot/CameraSnapshootRecordUtil.ts @@ -6,21 +6,17 @@ import { CameraSnapshootRecord } from "./CameraSnapshootRecord"; export function SaveCameraSnapshootRecord(record: CameraSnapshootRecord, name: string = new Date().toLocaleString("chinese", { hour12: false })) { record.WriteAllObjectRecord(); - record._CameraData.Clear(); - record._CameraData.Write(1); - app.Viewer.CameraCtrl.WriteFile(record._CameraData); - record._CameraData.Write(app.Editor.UCSMatrix.toArray()); - record._CameraData.Write(HostApplicationServices._renderType); + record.CameraData.CopyFrom(app.Viewer.CameraCtrl); + record.UCS = app.Editor.UCSMatrix; + record.RenderType = HostApplicationServices._renderType; record.Name = name; } export function RestoreCameraSnapshootRecord(record: CameraSnapshootRecord) { - record._CameraData.Reset(); - let ver = record._CameraData.Read(); - app.Viewer.CameraCtrl.ReadFile(record._CameraData); - app.Editor.UCSMatrix.fromArray(record._CameraData.Read()); + app.Viewer.CameraCtrl.CopyFrom(record.CameraData); + app.Editor.UCSMatrix = record.UCS; app.Editor.UCSMatrix = app.Editor.UCSMatrix; - userConfig.RenderType = record._CameraData.Read(); + userConfig.RenderType = record.RenderType; app.Viewer.UpdateRender(); } diff --git a/src/GraphicsSystem/CameraUpdate.ts b/src/GraphicsSystem/CameraUpdate.ts index dcf570f45..2b2e8911e 100644 --- a/src/GraphicsSystem/CameraUpdate.ts +++ b/src/GraphicsSystem/CameraUpdate.ts @@ -310,8 +310,17 @@ export class CameraUpdate { let ver = file.Read(); this._ViewHeight = file.Read(); - this._Target.fromArray(file.Read()); - this._Direction.fromArray(file.Read()); + + if (ver < 4) + { + this._Target.fromArray(file.Read()); + this._Direction.fromArray(file.Read()); + } + else + { + this._Target.set(file.Read(), file.Read(), file.Read()); + this._Direction.set(file.Read(), file.Read(), file.Read()); + } this._Orbit.SetFromDirection(this._Direction); this.UpdateUp(); @@ -326,11 +335,21 @@ export class CameraUpdate //对象将自身数据写入到文件. WriteFile(file: CADFiler) { - file.Write(3); + file.Write(4); file.Write(this._ViewHeight); - file.Write(this._Target.toArray()); - file.Write(this._Direction.toArray()); + file.WriteVec3(this._Target); + file.WriteVec3(this._Direction); file.Write(this.CameraType); file.Write(this.Fov); } + + CopyFrom(camer: CameraUpdate) + { + let f = new CADFiler; + camer.WriteFile(f); + + f.Reset(); + + this.ReadFile(f); + } } diff --git a/src/UI/Components/CameraControlButton/CameraState/CameraSnapshootPanel.tsx b/src/UI/Components/CameraControlButton/CameraState/CameraSnapshootPanel.tsx index f48fbe2db..1370b41d9 100644 --- a/src/UI/Components/CameraControlButton/CameraState/CameraSnapshootPanel.tsx +++ b/src/UI/Components/CameraControlButton/CameraState/CameraSnapshootPanel.tsx @@ -3,12 +3,13 @@ import { action, observable } from 'mobx'; import { observer } from 'mobx-react'; import React, { Component } from 'react'; import { end } from 'xaop'; +import { CADFiler } from '../../../../api'; import { app } from '../../../../ApplicationServices/Application'; +import { equalArray } from '../../../../Common/ArrayExt'; import { GetCurrentViewPreViewImage } from '../../../../Common/SerializeMaterial'; import { CameraSnapshootRecord } from '../../../../DatabaseServices/CameraSnapshoot/CameraSnapshootRecord'; import { RestoreCameraSnapshootRecord, SaveCameraSnapshootRecord } from '../../../../DatabaseServices/CameraSnapshoot/CameraSnapshootRecordUtil'; import { userConfig } from '../../../../Editor/UserConfig'; -import { equaln } from '../../../../Geometry/GeUtils'; import { RenderType } from '../../../../GraphicsSystem/RenderType'; import { AppToaster } from '../../Toaster'; import { CameraSettingIcon } from './CameraState'; @@ -105,9 +106,14 @@ export default class CameraSnapshootPanel extends Component<{}, {}> const total = (arr: number[]) => (arr.reduce((prev, curr) => prev + curr)); let record = new CameraSnapshootRecord(); SaveCameraSnapshootRecord(record); + + let f = new CADFiler; + record.CameraData.WriteFile(f); for (let r of app.Database.CameraSnapshoots) { - if (equaln(total(r._CameraData.Data.flat()), total(record._CameraData.Data.flat()))) + let f2 = new CADFiler; + r.CameraData.WriteFile(f2); + if (equalArray(f.Data, f2.Data)) { AppToaster.show({ message: "该相机视角已保存",