|
|
|
@ -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);
|
|
|
|
|
//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)
|
|
|
|
|
{
|
|
|
|
|
en.OCS = ocs;
|
|
|
|
|
en.ApplyMatrix(ucsMtx);
|
|
|
|
|
en.ApplyMatrix(m);
|
|
|
|
|
en.ApplyMatrix(nowUCS);
|
|
|
|
|
}
|
|
|
|
|
if (jig)
|
|
|
|
|
{
|
|
|
|
|
en.OCS = ocs.clone().premultiply(m);
|
|
|
|
|
en.Update(UpdateDraw.Matrix);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m.setPosition(p.clone().sub(basePoint));
|
|
|
|
|
for (let [en, ocs] of entityOCSCache)
|
|
|
|
|
{
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|