!1063 修复:黏贴时槽位置错误

pull/1063/MERGE
ChenX 4 years ago
parent ace2c429b8
commit 14cd77de44

@ -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);
}

Loading…
Cancel
Save