From 14cd77de445104ce4cccff77472caee5969d5d94 Mon Sep 17 00:00:00 2001 From: ChenX Date: Fri, 29 May 2020 09:25:56 +0800 Subject: [PATCH] =?UTF-8?q?!1063=20=E4=BF=AE=E5=A4=8D:=E9=BB=8F=E8=B4=B4?= =?UTF-8?q?=E6=97=B6=E6=A7=BD=E4=BD=8D=E7=BD=AE=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Add-on/PasteClip.ts | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/Add-on/PasteClip.ts b/src/Add-on/PasteClip.ts index 98baf05b3..3ecc2ddff 100644 --- a/src/Add-on/PasteClip.ts +++ b/src/Add-on/PasteClip.ts @@ -1,15 +1,16 @@ -import { Vector3, Matrix4, Box3 } from "three"; +import { Box3, Matrix4, Vector3 } from "three"; import { app } from "../ApplicationServices/Application"; +import { arrayLast } from "../Common/ArrayExt"; +import { KeyWord } from "../Common/InputState"; import { inflate } from "../Common/SerializeMaterial"; +import { UpdateDraw } from "../Common/Status"; import { readClipboardText } from "../Common/Utils"; import { CADFiler } from "../DatabaseServices/CADFiler"; +import { Curve } from "../DatabaseServices/Entity/Curve"; import { Entity } from "../DatabaseServices/Entity/Entity"; import { JigUtils } from "../Editor/JigUtils"; import { PromptStatus } from "../Editor/PromptResult"; -import { arrayLast } from "../Common/ArrayExt"; -import { KeyWord } from "../Common/InputState"; import { AsVector3 } from "../Geometry/GeUtils"; -import { Curve } from "../DatabaseServices/Entity/Curve"; export class PasteClip { @@ -83,26 +84,30 @@ export class PasteClip let m = new Matrix4(); - const UpdateEntityPosition = (p: Vector3) => + const UpdateEntityPosition = (p: Vector3, jig = true) => { if (useUCS) { let baseP_UCS = AsVector3(basePoint).applyMatrix4(ucsMtx).setZ(0); let p_UCS = p.clone().applyMatrix4(nowUCSInv); p_UCS.sub(baseP_UCS); - m.setPosition(p_UCS); - for (let [en, ocs] of entityOCSCache) - { - en.OCS = ocs; - en.ApplyMatrix(ucsMtx); - en.ApplyMatrix(m); - en.ApplyMatrix(nowUCS); - } + //ucsMtx->m->nowUCS + m.identity() + .setPosition(p_UCS) + .multiply(ucsMtx) + .premultiply(nowUCS); } else + m.identity().setPosition(p.clone().sub(basePoint)); + + for (let [en, ocs] of entityOCSCache) { - m.setPosition(p.clone().sub(basePoint)); - for (let [en, ocs] of entityOCSCache) + if (jig) + { + en.OCS = ocs.clone().premultiply(m); + en.Update(UpdateDraw.Matrix); + } + else { en.OCS = ocs; en.ApplyMatrix(m); @@ -116,11 +121,11 @@ export class PasteClip let ptRes = await app.Editor.GetPoint({ KeyWordList: keywords, - Callback: UpdateEntityPosition + Callback: p => UpdateEntityPosition(p, true) }); if (ptRes.Status === PromptStatus.OK) { - UpdateEntityPosition(ptRes.Point); + UpdateEntityPosition(ptRes.Point, false); for (let [en] of entityOCSCache) app.Database.ModelSpace.Append(en); }