!1405 优化:标注打印线条大小

pull/1405/MERGE
ZoeLeeFZ 4 years ago committed by ChenX
parent ce232a0367
commit bfe48c2517

@ -279,7 +279,7 @@ export class ColorMaterial
{ {
if (this._LineMaterialMap.has(color)) if (this._LineMaterialMap.has(color))
return this._LineMaterialMap.get(color); return this._LineMaterialMap.get(color);
let mat = new LineBasicMaterial({ color: this.GetColor(color) }); let mat = new LineBasicMaterial({ color: this.GetColor(color), side: DoubleSide });
this._LineMaterialMap.set(color, mat); this._LineMaterialMap.set(color, mat);
return mat; return mat;
} }
@ -384,7 +384,8 @@ export class ColorMaterial
color: 0x000000, color: 0x000000,
linewidth: LINE_WIDTH, linewidth: LINE_WIDTH,
dashed: false, dashed: false,
resolution: new Vector2(1000, 1000) resolution: new Vector2(1000, 1000),
side: DoubleSide,
}); });
static GrayTransparentMeshMaterial = new MeshBasicMaterial({ static GrayTransparentMeshMaterial = new MeshBasicMaterial({
color: 0xcccccc, color: 0xcccccc,

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

@ -1,4 +1,6 @@
import { Box3, BufferGeometry, Line as TLine, Material, Matrix3, Matrix4, Mesh, Object3D, Vector2, Vector3 } from "three"; import { Box3, BufferGeometry, Line as TLine, Material, Matrix3, Matrix4, Mesh, Object3D, Vector2, Vector3 } from "three";
import { Line2 } from "three/examples/jsm/lines/Line2";
import { LineGeometry } from "three/examples/jsm/lines/LineGeometry";
import { AddEntityDrawObject } from "../../Common/AddEntityDrawObject"; import { AddEntityDrawObject } from "../../Common/AddEntityDrawObject";
import { ColorMaterial } from "../../Common/ColorPalette"; import { ColorMaterial } from "../../Common/ColorPalette";
import { safeEval } from "../../Common/eval"; import { safeEval } from "../../Common/eval";
@ -318,7 +320,14 @@ export class AlignedDimension extends Entity
{ {
let obj = new Object3D(); let obj = new Object3D();
let colorMaterial = GetDimLineMaterial(this, renderType); let colorMaterial = GetDimLineMaterial(this, renderType);
let line = new TLine( let line: TLine | Line2;
if (renderType === RenderType.WireframePrint)
{
const geo = new LineGeometry();
line = new Line2(geo, ColorMaterial.PrintLineMatrial);
}
else
line = new TLine(
BufferGeometryUtils.CreateFromPts([this.m_FootP1, this.m_FootP2, this.m_ArmP1, this.m_ArmP2]), BufferGeometryUtils.CreateFromPts([this.m_FootP1, this.m_FootP2, this.m_ArmP1, this.m_ArmP2]),
colorMaterial colorMaterial
); );
@ -337,9 +346,20 @@ export class AlignedDimension extends Entity
{ {
obj.remove(...obj.children.splice(3)); obj.remove(...obj.children.splice(3));
let [line, arrow1, arrow2] = obj.children; let [line, arrow1, arrow2] = obj.children;
let arrowSize = 10;
if (renderType === RenderType.WireframePrint)
{
arrowSize *= userConfig.lineWidth * 0.5;
const geometry = (<Line2>line).geometry;
let nums: number[] = [];
for (let p of [this.m_FootP1, this.m_ArmP1, this.m_ArmP2, this.m_FootP2])
nums.push(p.x, p.y, p.z);
geometry.setPositions(nums);
}
else
BufferGeometryUtils.UpdatePts((<TLine>line).geometry as BufferGeometry, [this.m_FootP1, this.m_ArmP1, this.m_ArmP2, this.m_FootP2]); BufferGeometryUtils.UpdatePts((<TLine>line).geometry as BufferGeometry, [this.m_FootP1, this.m_ArmP1, this.m_ArmP2, this.m_FootP2]);
let arrowSize = 10;
arrow1.scale.set(arrowSize, arrowSize, arrowSize); arrow1.scale.set(arrowSize, arrowSize, arrowSize);
arrow2.scale.set(arrowSize, arrowSize, arrowSize); arrow2.scale.set(arrowSize, arrowSize, arrowSize);
@ -476,6 +496,8 @@ export class AlignedDimension extends Entity
UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material) UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material)
{ {
if (renderType === RenderType.WireframePrint)
return;
this.WriteAllObjectRecord(); this.WriteAllObjectRecord();
let colorMat = GetDimLineMaterial(this, renderType); let colorMat = GetDimLineMaterial(this, renderType);
this._LeadOutLine.material = colorMat; this._LeadOutLine.material = colorMat;

@ -1,8 +1,10 @@
import { BufferGeometry, Line as TLine, Material, Mesh, Object3D, Vector3 } from "three"; import { BufferGeometry, Line as TLine, Material, Mesh, Object3D, Vector3 } from "three";
import { Line2 } from "three/examples/jsm/lines/Line2";
import { AddEntityDrawObject } from "../../Common/AddEntityDrawObject"; import { AddEntityDrawObject } from "../../Common/AddEntityDrawObject";
import { ColorMaterial } from "../../Common/ColorPalette"; import { ColorMaterial } from "../../Common/ColorPalette";
import { DisposeThreeObj } from "../../Common/Dispose"; import { DisposeThreeObj } from "../../Common/Dispose";
import { FixedNotZero } from "../../Common/Utils"; import { FixedNotZero } from "../../Common/Utils";
import { userConfig } from "../../Editor/UserConfig";
import { BufferGeometryUtils } from "../../Geometry/BufferGeometryUtils"; import { BufferGeometryUtils } from "../../Geometry/BufferGeometryUtils";
import { angle, midPoint } from "../../Geometry/GeUtils"; import { angle, midPoint } from "../../Geometry/GeUtils";
import { RenderType } from "../../GraphicsSystem/RenderType"; import { RenderType } from "../../GraphicsSystem/RenderType";
@ -25,7 +27,13 @@ export class DiameterDimension extends RadiusDimension
let colorMaterial = GetDimLineMaterial(this, renderType); let colorMaterial = GetDimLineMaterial(this, renderType);
let vec = this.center.clone().sub(this.startPt).normalize().multiplyScalar(-LINE_EXTEND_VAL); let vec = this.center.clone().sub(this.startPt).normalize().multiplyScalar(-LINE_EXTEND_VAL);
let line = new TLine(
let line: TLine | Line2;
if (renderType === RenderType.WireframePrint)
line = new Line2(undefined, ColorMaterial.PrintLineMatrial);
else
line = new TLine(
BufferGeometryUtils.CreateFromPts([this.startPt.clone().add(vec), this.center, this.endPt]), BufferGeometryUtils.CreateFromPts([this.startPt.clone().add(vec), this.center, this.endPt]),
colorMaterial colorMaterial
); );
@ -46,9 +54,19 @@ export class DiameterDimension extends RadiusDimension
let vec = this.center.clone().sub(this.startPt).normalize().multiplyScalar(-LINE_EXTEND_VAL); let vec = this.center.clone().sub(this.startPt).normalize().multiplyScalar(-LINE_EXTEND_VAL);
BufferGeometryUtils.UpdatePts((<THREE.Line>line).geometry as BufferGeometry, [this.startPt.clone().add(vec), this.center, this.endPt]);
let arrowSize = 10; let arrowSize = 10;
let sp = this.startPt.clone().add(vec);
if (renderType === RenderType.WireframePrint)
{
arrowSize *= userConfig.lineWidth * 0.5;
let geo = (line as Line2).geometry;
geo.setPositions([...sp.toArray(), ...this.center.toArray(), ...this.endPt.toArray()]);
}
else
BufferGeometryUtils.UpdatePts((<THREE.Line>line).geometry as BufferGeometry, [sp, this.center, this.endPt]);
arrow.scale.set(arrowSize, arrowSize, arrowSize); arrow.scale.set(arrowSize, arrowSize, arrowSize);
arrow2.scale.set(arrowSize, arrowSize, arrowSize); arrow2.scale.set(arrowSize, arrowSize, arrowSize);

@ -1,4 +1,5 @@
import { BufferGeometry, Line as TLine, Material, Matrix3, Mesh, Object3D, Vector3 } from "three"; import { BufferGeometry, Line as TLine, Material, 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 { ColorMaterial } from "../../Common/ColorPalette"; import { ColorMaterial } from "../../Common/ColorPalette";
import { DisposeThreeObj } from "../../Common/Dispose"; import { DisposeThreeObj } from "../../Common/Dispose";
@ -78,9 +79,9 @@ export class RadiusDimension extends Entity
ent._Text.CopyFrom(this._Text); ent._Text.CopyFrom(this._Text);
for (let [type, obj] of ent._CacheDrawObject) for (let [type, obj] of ent._CacheDrawObject)
{ {
let [line] = obj.children; for (let o of obj.children)
let l = line as THREE.Line; if (o instanceof TLine)
l.geometry = l.geometry.clone(); o.geometry = o.geometry.clone();
} }
return ent; return ent;
} }
@ -92,7 +93,12 @@ export class RadiusDimension extends Entity
let colorMaterial = GetDimLineMaterial(this, renderType); let colorMaterial = GetDimLineMaterial(this, renderType);
let line = new TLine( let line: TLine | Line2;
if (renderType === RenderType.WireframePrint)
line = new Line2(undefined, ColorMaterial.PrintLineMatrial);
else
line = new TLine(
BufferGeometryUtils.CreateFromPts([this.startPt, this.center, this.endPt]), BufferGeometryUtils.CreateFromPts([this.startPt, this.center, this.endPt]),
colorMaterial colorMaterial
); );
@ -110,9 +116,18 @@ export class RadiusDimension extends Entity
UpdateDrawObject(renderType: RenderType, obj: Object3D) UpdateDrawObject(renderType: RenderType, obj: Object3D)
{ {
let [line, arrow, textObj] = obj.children; let [line, arrow, textObj] = obj.children;
BufferGeometryUtils.UpdatePts((<THREE.Line>line).geometry as BufferGeometry, [this.startPt, this.center, this.endPt]);
let arrowSize = 10; let arrowSize = 10;
if (renderType === RenderType.WireframePrint)
{
arrowSize *= userConfig.lineWidth * 0.5;
let geo = (line as Line2).geometry;
geo.setPositions([...this.startPt.toArray(), ...this.center.toArray(), ...this.endPt.toArray()]);
}
else
BufferGeometryUtils.UpdatePts((<THREE.Line>line).geometry as BufferGeometry, [this.startPt, this.center, this.endPt]);
arrow.scale.set(arrowSize, arrowSize, arrowSize); arrow.scale.set(arrowSize, arrowSize, arrowSize);
let armV = this.endPt.clone().sub(this.center); let armV = this.endPt.clone().sub(this.center);
@ -132,6 +147,8 @@ export class RadiusDimension extends Entity
UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material) UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material)
{ {
if (renderType === RenderType.WireframePrint)
return;
let [line, arrow, textObj] = obj.children as [TLine, Mesh, Object3D]; let [line, arrow, textObj] = obj.children as [TLine, Mesh, Object3D];
let lineMaterial = GetDimLineMaterial(this, renderType); let lineMaterial = GetDimLineMaterial(this, renderType);

@ -610,9 +610,12 @@ export class Arc extends Curve
} }
//更新Geometry //更新Geometry
private UpdateGeometry(geo: BufferGeometry) private UpdateGeometry(geo: BufferGeometry | LineGeometry)
{ {
let pts = this.Shape.getPoints(60).map(AsVector3); let pts = this.Shape.getPoints(60).map(AsVector3);
if (geo instanceof LineGeometry)
geo.setPositions(pts.reduce((arr: number[], p) => { return [...arr, ...p.toArray()]; }, []));
else
BufferGeometryUtils.UpdatePts(geo, pts); BufferGeometryUtils.UpdatePts(geo, pts);
} }

Loading…
Cancel
Save