|
|
@ -1,6 +1,8 @@
|
|
|
|
import { BufferGeometry, Line as TLine, MathUtils, Matrix3, Mesh, Object3D, Vector3 } from "three";
|
|
|
|
import { BufferGeometry, Line as TLine, MathUtils, Matrix3, Mesh, Object3D, Vector3 } from "three";
|
|
|
|
|
|
|
|
import { Line2 } from "three/examples/jsm/lines/Line2";
|
|
|
|
import { AddEntityDrawObject } from "../../Common/AddEntityDrawObject";
|
|
|
|
import { AddEntityDrawObject } from "../../Common/AddEntityDrawObject";
|
|
|
|
import { arrayRemoveDuplicateBySort, arraySortByNumber } from "../../Common/ArrayExt";
|
|
|
|
import { arrayRemoveDuplicateBySort, arraySortByNumber } from "../../Common/ArrayExt";
|
|
|
|
|
|
|
|
import { ColorMaterial } from "../../Common/ColorPalette";
|
|
|
|
import { FixedNotZero, FixIndex } from "../../Common/Utils";
|
|
|
|
import { FixedNotZero, FixIndex } from "../../Common/Utils";
|
|
|
|
import { ObjectSnapMode } from "../../Editor/ObjectSnapMode";
|
|
|
|
import { ObjectSnapMode } from "../../Editor/ObjectSnapMode";
|
|
|
|
import { userConfig } from "../../Editor/UserConfig";
|
|
|
|
import { userConfig } from "../../Editor/UserConfig";
|
|
|
@ -138,10 +140,9 @@ export class LineAngularDimension extends Entity
|
|
|
|
ent.m_Arc.CopyFrom(this.m_Arc);
|
|
|
|
ent.m_Arc.CopyFrom(this.m_Arc);
|
|
|
|
for (let [type, obj] of ent._CacheDrawObject)
|
|
|
|
for (let [type, obj] of ent._CacheDrawObject)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
let [arrow1, arrow2, li1, li2, line, textObj] = obj.children;
|
|
|
|
for (let o of obj.children)
|
|
|
|
(<TLine>li1).geometry = (<TLine>li1).geometry.clone();
|
|
|
|
if (o instanceof TLine)
|
|
|
|
(<TLine>li2).geometry = (<TLine>li2).geometry.clone();
|
|
|
|
o.geometry = o.geometry.clone();
|
|
|
|
(<TLine>line).geometry = (<TLine>line).geometry.clone();
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return ent;
|
|
|
|
return ent;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -177,18 +178,31 @@ export class LineAngularDimension extends Entity
|
|
|
|
|
|
|
|
|
|
|
|
let colorMaterial = GetDimLineMaterial(this, renderType);
|
|
|
|
let colorMaterial = GetDimLineMaterial(this, renderType);
|
|
|
|
|
|
|
|
|
|
|
|
let line = this.m_Arc.GetDrawObjectFromRenderType();
|
|
|
|
let line = this.m_Arc.GetDrawObjectFromRenderType(renderType);
|
|
|
|
|
|
|
|
|
|
|
|
let arrow1 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);
|
|
|
|
let arrow1 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);
|
|
|
|
let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);
|
|
|
|
let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);
|
|
|
|
let arrowSize = 10;
|
|
|
|
let arrowSize = 10;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let l: TLine | Line2, l2: TLine | Line2;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (renderType === RenderType.WireframePrint)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
l = new Line2(undefined, ColorMaterial.PrintLineMatrial);
|
|
|
|
|
|
|
|
l2 = new Line2(undefined, ColorMaterial.PrintLineMatrial);
|
|
|
|
|
|
|
|
arrowSize *= userConfig.lineWidth * 0.5;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
l = new TLine(BufferGeometryUtils.CreateFromPts([new Vector3(), new Vector3()]), colorMaterial);
|
|
|
|
|
|
|
|
l2 = new TLine(BufferGeometryUtils.CreateFromPts([new Vector3(), new Vector3()]), colorMaterial);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
arrow1.scale.set(arrowSize, arrowSize, arrowSize);
|
|
|
|
arrow1.scale.set(arrowSize, arrowSize, arrowSize);
|
|
|
|
arrow2.scale.set(arrowSize, arrowSize, arrowSize);
|
|
|
|
arrow2.scale.set(arrowSize, arrowSize, arrowSize);
|
|
|
|
|
|
|
|
|
|
|
|
let l = new TLine(BufferGeometryUtils.CreateFromPts([new Vector3(), new Vector3()]), colorMaterial);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let obj = new Object3D();
|
|
|
|
let obj = new Object3D();
|
|
|
|
obj.add(arrow1, arrow2, l, l.clone(), line);
|
|
|
|
obj.add(arrow1, arrow2, l, l2, line);
|
|
|
|
AddEntityDrawObject(obj, this._Text, renderType);
|
|
|
|
AddEntityDrawObject(obj, this._Text, renderType);
|
|
|
|
this.UpdateDrawObject(renderType, obj);
|
|
|
|
this.UpdateDrawObject(renderType, obj);
|
|
|
|
return obj;
|
|
|
|
return obj;
|
|
|
@ -203,24 +217,41 @@ export class LineAngularDimension extends Entity
|
|
|
|
if (intPar2 >= 1)
|
|
|
|
if (intPar2 >= 1)
|
|
|
|
l2.Reverse();
|
|
|
|
l2.Reverse();
|
|
|
|
|
|
|
|
|
|
|
|
const updateLine = (l: Line, li: TLine, refPt: Vector3, refPt2?: Vector3) =>
|
|
|
|
const updateLine = (l: Line, li: TLine | Line2, refPt: Vector3, refPt2?: Vector3) =>
|
|
|
|
{
|
|
|
|
{
|
|
|
|
let par = l.GetParamAtPoint(refPt);
|
|
|
|
let par = l.GetParamAtPoint(refPt);
|
|
|
|
let refPar = l.GetParamAtPoint(intPt);
|
|
|
|
let refPar = l.GetParamAtPoint(intPt);
|
|
|
|
if (par > 1)
|
|
|
|
if (par > 1)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
li.visible = true;
|
|
|
|
li.visible = true;
|
|
|
|
|
|
|
|
if (li instanceof TLine)
|
|
|
|
|
|
|
|
{
|
|
|
|
let geo = li.geometry as BufferGeometry;
|
|
|
|
let geo = li.geometry as BufferGeometry;
|
|
|
|
geo.copy(BufferGeometryUtils.CreateFromPts([l.EndPoint, refPt]));
|
|
|
|
geo.copy(BufferGeometryUtils.CreateFromPts([l.EndPoint, refPt]));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let geo = li.geometry;
|
|
|
|
|
|
|
|
geo.setPositions([...l.EndPoint.toArray(), ...refPt.toArray()]);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
else if (par < 0)
|
|
|
|
else if (par < 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
li.visible = true;
|
|
|
|
li.visible = true;
|
|
|
|
|
|
|
|
if (li instanceof TLine)
|
|
|
|
|
|
|
|
{
|
|
|
|
let geo = li.geometry as BufferGeometry;
|
|
|
|
let geo = li.geometry as BufferGeometry;
|
|
|
|
|
|
|
|
|
|
|
|
geo.copy(
|
|
|
|
geo.copy(
|
|
|
|
BufferGeometryUtils.CreateFromPts([par < refPar ? intPt : l.StartPoint, refPt])
|
|
|
|
BufferGeometryUtils.CreateFromPts([par < refPar ? intPt : l.StartPoint, refPt])
|
|
|
|
);
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
let geo = li.geometry;
|
|
|
|
|
|
|
|
let p = par < refPar ? intPt : l.StartPoint;
|
|
|
|
|
|
|
|
geo.setPositions([...p.toArray(), ...refPt.toArray()]);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (isNaN(par) && refPt2)
|
|
|
|
else if (isNaN(par) && refPt2)
|
|
|
|