|
|
|
@ -13,6 +13,7 @@ import { Point } from "../../DatabaseServices/Entity/Point";
|
|
|
|
|
import { Polyline } from "../../DatabaseServices/Entity/Polyline";
|
|
|
|
|
import { SmartPolylineSimply2Polyline } from "../../DatabaseServices/SplineConver2Polyline";
|
|
|
|
|
import { Text, TextAligen } from "../../DatabaseServices/Text/Text";
|
|
|
|
|
import { userConfig } from "../../Editor/UserConfig";
|
|
|
|
|
import { angle, AsVector2, AsVector3, equaln, equalv3, ZAxis } from "../../Geometry/GeUtils";
|
|
|
|
|
import { Vec3 } from "../../Geometry/IVec3";
|
|
|
|
|
import { Orbit } from "../../Geometry/Orbit";
|
|
|
|
@ -286,30 +287,33 @@ export function Conver2WebCADEntity(en: IEntity, doc: IDxf, ents: Entity[]): voi
|
|
|
|
|
}
|
|
|
|
|
else if (en.type === "INSERT")
|
|
|
|
|
{
|
|
|
|
|
let blkRef = en as IInsertEntity;
|
|
|
|
|
let mtx = blkRef.extrusionDirection ? GetMatrix4(en) : new Matrix4;
|
|
|
|
|
if (!userConfig.dxfImportBlock)
|
|
|
|
|
{
|
|
|
|
|
let blkRef = en as IInsertEntity;
|
|
|
|
|
let mtx = blkRef.extrusionDirection ? GetMatrix4(en) : new Matrix4;
|
|
|
|
|
|
|
|
|
|
if (blkRef.position)//先移动 在变换
|
|
|
|
|
mtx.multiply(new Matrix4().setPosition(blkRef.position.x, blkRef.position.y, blkRef.position.z));
|
|
|
|
|
if (blkRef.position)//先移动 在变换
|
|
|
|
|
mtx.multiply(new Matrix4().setPosition(blkRef.position.x, blkRef.position.y, blkRef.position.z));
|
|
|
|
|
|
|
|
|
|
if (blkRef.rotation)
|
|
|
|
|
mtx.multiply(new Matrix4().makeRotationZ(MathUtils.DEG2RAD * blkRef.rotation));
|
|
|
|
|
if (blkRef.rotation)
|
|
|
|
|
mtx.multiply(new Matrix4().makeRotationZ(MathUtils.DEG2RAD * blkRef.rotation));
|
|
|
|
|
|
|
|
|
|
let scaleMtx: Matrix4;
|
|
|
|
|
if (blkRef.xScale || blkRef.yScale || blkRef.zScale) //值可能为undefined
|
|
|
|
|
scaleMtx = new Matrix4().makeScale(blkRef.xScale ?? 1, blkRef.yScale ?? blkRef.xScale ?? 1, blkRef.zScale ?? blkRef.xScale ?? 1);
|
|
|
|
|
let scaleMtx: Matrix4;
|
|
|
|
|
if (blkRef.xScale || blkRef.yScale || blkRef.zScale) //值可能为undefined
|
|
|
|
|
scaleMtx = new Matrix4().makeScale(blkRef.xScale ?? 1, blkRef.yScale ?? blkRef.xScale ?? 1, blkRef.zScale ?? blkRef.xScale ?? 1);
|
|
|
|
|
|
|
|
|
|
let blk = doc.blocks[blkRef.name];
|
|
|
|
|
if (blk && blk.entities)
|
|
|
|
|
{
|
|
|
|
|
mtx.premultiply(new Matrix4().setPosition(-blk.position.x, -blk.position.y, -blk.position.z));
|
|
|
|
|
let i = ents.length;
|
|
|
|
|
for (let e of blk.entities)
|
|
|
|
|
Conver2WebCADEntity(e, doc, ents);
|
|
|
|
|
for (; i < ents.length; i++)
|
|
|
|
|
let blk = doc.blocks[blkRef.name];
|
|
|
|
|
if (blk && blk.entities)
|
|
|
|
|
{
|
|
|
|
|
if (scaleMtx) ents[i].ApplyMatrix(scaleMtx);//先缩放
|
|
|
|
|
ents[i].ApplyMatrix(mtx);
|
|
|
|
|
mtx.premultiply(new Matrix4().setPosition(-blk.position.x, -blk.position.y, -blk.position.z));
|
|
|
|
|
let i = ents.length;
|
|
|
|
|
for (let e of blk.entities)
|
|
|
|
|
Conver2WebCADEntity(e, doc, ents);
|
|
|
|
|
for (; i < ents.length; i++)
|
|
|
|
|
{
|
|
|
|
|
if (scaleMtx) ents[i].ApplyMatrix(scaleMtx);//先缩放
|
|
|
|
|
ents[i].ApplyMatrix(mtx);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|