import { Box3, Matrix4, Vector3 } from "three"; import { Contour } from "../DatabaseServices/Contour"; import { Arc } from "../DatabaseServices/Entity/Arc"; import { Circle } from "../DatabaseServices/Entity/Circle"; import { Curve } from "../DatabaseServices/Entity/Curve"; import { Line } from "../DatabaseServices/Entity/Line"; import { Polyline } from "../DatabaseServices/Entity/Polyline"; interface IOffsetResult { index: number; curve: Curve; /**偏移距离(仅在局部偏移时提供) */ dist?: number; sp?: Vector3; ep?: Vector3; preCurve?: Curve; nextCurve?: Curve; paddingCurve?: Curve[]; } export declare class CurveTreeNode { curve: Curve; children: this[]; box: Box3; used: boolean; Create(curve: Curve, box?: Box3): this; constructor(curve: Curve, box?: Box3); TrimBy(contour: Contour, box: Box3): void; get Nodes(): this[]; } export declare enum PolylineJoinType { Square = 0, Round = 1 } export declare class OffsetPolyline { _Polyline: Polyline; _OffsetDist: number; _ToolPath: boolean; private _OffsetDistSq; private _JoinType; private _KeepCollinearLine; _CacheOCS: Matrix4; _Vertexs: Vector3[]; _SubCurves: Curve[]; _Circles: Circle[]; _SubOffsetedCurves: IOffsetResult[]; _CurveTreeNodes: CurveTreeNode[]; _CurveTrimedTreeNodes: CurveTreeNode[]; _TrimPolylineContours: Contour[]; _TrimCircleContours: Circle[]; _TrimArcContours: Contour[]; _RetCurves: Polyline[]; _IsClose: boolean; _OffsetDistSign: number; _IsTopoOffset: boolean; _AllowConverToCircle: boolean; /** * * @param _Polyline * @param _OffsetDist * @param [_ToolPath=false] 走刀模式(在这个模式下,我们会进行圆弧过渡(或者直线过渡)避免尖角过大) * @param [_OffsetDistSq=(_OffsetDist ** 2) * 2.1] 允许的最大尖角长度 默认值差不多是矩形的尖角大一点 * @param [_JoinType=PolylineJoinType.Round] 尖角的处理方式,默认是圆弧过渡,可以切换成直线过渡 * @param [_KeepCollinearLine=false] 保留共线部分(在向外偏移时,生产程序希望偏移后的结果仍然是一个封闭的曲线,将这个改成true能实现这个目的) */ constructor(_Polyline: Polyline, _OffsetDist: number, _ToolPath?: boolean, _OffsetDistSq?: number, //对直角走刀不进行圆弧过度 _JoinType?: PolylineJoinType, //仅在走刀路径时生效 _KeepCollinearLine?: boolean); Do(): Polyline[]; InitSubCurves(): this; protected GeneralCirclesAndVertexs(): void; protected OffsetSubCurves(): void; LinkSubCurves(): void; /** * 判断两曲线是否尖角化 * 在 * 1.直线和圆弧,圆弧和圆弧 * 2.有交点,无真交点时 * 必须在正确的方向做出延伸动作,所以必须在尖角的情况下延伸,偏移的结果就像一个谷字去掉一个口的结果,上面的人就是偏移后的结果. * 如果是谷,则允许连接 #I7WKKG */ private IsSharpCorner; protected GeneralTrimContours(): void; protected TrimByContours(): void; private FilterInvalidCurve; private JoinCollinear; private LinkResultPolyline; private RepairResultPolylineClosemark; CheckPointDir(pt: Vector3): boolean; /** * 点在线上 或者在线内(外) * @param pt * @returns 0在线上 1 -1 */ GetPointAtCurveDir(pt: Vector3): number; protected CreateArc(center: Vector3, startP: Vector3, endP?: Vector3): Arc; protected CreateSquare(center: Vector3, curveNow: IOffsetResult, curveNext: IOffsetResult, entTypeCode: number): Line; } /** * @returns 1:全line 2:全arc 3:line and arc */ export declare function EntityEncode2(c1: Curve, c2: Curve): number; export declare function CurveIsFine(curve: Curve): boolean; export {}; //# sourceMappingURL=OffsetPolyline.d.ts.map