WebCAD-Lib-TS API 文档 - v1.0.0
    Preparing search index...

    Class PolylineEnt

    多段线类 表示CAD中的多段线实体,继承自实体基类。 多段线由一系列连接的线段和弧段组成,支持凸度值来表示弧段。

    import { PolylineEnt, BulgePoints, BulgePoint, Point2D, Engine } from '@aspect/webcad-lib-ts';

    // 创建多段线顶点
    const points = new BulgePoints();
    points.push(new BulgePoint(0, 0));
    points.push(new BulgePoint(100, 0));
    points.push(new BulgePoint(100, 100));

    // 创建多段线
    const pline = new PolylineEnt(points, true); // true表示闭合
    pline.setDefaults();

    // 添加到画布
    Engine.addEntities(pline);

    Hierarchy (View Summary)

    Index

    Constructors

    • 构造函数

      Parameters

      • points: BulgePoints | PointInput[] = ...

        凸度点集合或坐标数组

      • color: number = 256

        颜色索引,默认为256

      Returns PolylineEnt

      // 方式1:使用坐标数组(推荐,简洁)
      const pline = new PolylineEnt([[0, 0], [100, 0], [100, 100]]);

      // 方式2:使用 BulgePoints
      const bps = new BulgePoints();
      bps.add(new BulgePoint([0, 0]));
      bps.add(new BulgePoint([100, 0]));
      const pline = new PolylineEnt(bps);

    Properties

    type: string

    实体类型标识符(如"LINE"、"CIRCLE"等)

    objectId: string

    DWG对象ID(句柄)- 从DWG文件导入时的唯一标识符 这个值不应该在克隆时复制,新创建的实体应该为空字符串

    id: number

    实体索引ID - 从1开始递增的唯一索引 用于在WebCAD格式中标识实体

    _lineType: string
    _isAlive: boolean
    isDirty: boolean

    是否处于脏状态,供渲染器增量更新

    block?: any

    Accessors

    • get color(): number

      获取颜色索引

      Returns number

      颜色索引值(256表示"随图层"颜色)

    • set color(value: number): void

      设置颜色索引

      Parameters

      • value: number

        颜色索引值(256表示"随图层"颜色)

      Returns void

    • get layerId(): string

      获取图层ID

      Returns string

      图层ID字符串

    • set layerId(value: string): void

      设置图层ID

      Parameters

      • value: string

        图层ID字符串

      Returns void

    • get lineTypeScale(): number

      获取线型比例

      Returns number

      线型比例因子

    • set lineTypeScale(value: number): void

      设置线型比例

      Parameters

      • value: number

        线型比例因子

      Returns void

    • get lineWeight(): number

      获取线宽

      Returns number

      线宽值(-1=ByLayer, -2=ByBlock, >=0为具体值,单位为0.01mm)

    • set lineWeight(value: number): void

      设置线宽

      Parameters

      • value: number

        线宽值(-1=ByLayer, -2=ByBlock, >=0为具体值)

      Returns void

    • get transpMgr(): TransparencyManager

      获取透明度管理器

      Returns TransparencyManager

      透明度管理器实例

    • set transpMgr(value: TransparencyManager): void

      设置透明度管理器

      Parameters

      Returns void

    • get isAlive(): boolean

      获取实体存活状态

      Returns boolean

      是否存活(true表示有效,false表示已删除)

    • set isAlive(value: boolean): void

      设置实体存活状态

      Parameters

      • value: boolean

        是否存活

      Returns void

    • get xdataRaw(): Record<string, string>

      获取原始扩展数据(用于序列化) 格式: { "1001": "AppName", "1000": "JSON字符串" }

      Returns Record<string, string>

      原始xdata对象或undefined

    • set xdataRaw(value: Record<string, string>): void

      设置原始扩展数据(从数据库加载时使用)

      Parameters

      • value: Record<string, string>

        原始xdata对象

      Returns void

    • get extData(): Record<string, any>

      获取扩展数据(用户友好格式) 自动解析JSON字符串返回对象

      Returns Record<string, any>

      解析后的扩展数据对象,或undefined

      const data = entity.extData;
      console.log(data?.sensorVal); // 10
    • get extDataAppName(): string

      获取扩展数据的应用程序名(AppName)

      Returns string

      AppName字符串,或undefined

    • get doc(): any

      获取所属文档

      通过实体所在的块来获取文档对象。在CAD系统中, 实体总是属于某个块,而块又属于某个文档。

      Returns any

      文档对象,如果无法获取则返回undefined

    • get layer(): string

      获取图层名称

      根据实体的layerId从文档的图层集合中查找对应的图层名称。 如果找不到对应的图层,则返回默认图层"0"。

      Returns string

      图层名称,默认为"0"

    • set layer(layerName: string): void

      设置图层名称

      根据图层名称查找对应的图层ID并设置给实体。 如果找不到指定的图层,则使用默认图层ID("0")。

      注意:优先使用实体所属文档的图层列表,如果实体尚未添加到文档, 则使用 Engine.currentDoc 的图层列表。

      Parameters

      • layerName: string

        图层名称

      Returns void

    • get lineType(): string

      获取线型

      返回实体当前的线型设置。线型控制线条的显示样式 (如实线、虚线、点划线等)。

      Returns string

      线型名称

    • set lineType(lineTypeName: string): void

      设置线型

      设置实体的线型,支持标准CAD线型、常见别名和自定义线型。 输入的线型名称会被转换为大写进行匹配。

      支持的线型:

      • CONTINUOUS: 连续线(实线)
      • HIDDEN/DASHED: 虚线(虚线)
      • CENTER: 中心线
      • PHANTOM: 幻影线
      • DOT: 点线(映射为虚线)
      • 自定义线型:通过LinetypeManager管理的线型

      Parameters

      • lineTypeName: string

        线型名称

      Returns void

    • get globalWidth(): number

      获取全局线宽

      Returns number

      全局线宽值

    • set globalWidth(val: number): void

      设置全局线宽并标记修改

      Parameters

      • val: number

        新的全局线宽值

      Returns void

    • get isClosed(): boolean

      获取是否闭合

      Returns boolean

      是否闭合

    • set isClosed(val: boolean): void

      设置是否闭合并标记修改

      Parameters

      • val: boolean

      Returns void

    • get elevation(): number

      获取整体高程(2D多段线使用)

      Returns number

      整体高程值

    • set elevation(val: number): void

      设置整体高程并标记修改

      Parameters

      • val: number

        新的高程值

      Returns void

    • get bulgePoints(): BulgePoints

      获取凸度点集合

      Returns BulgePoints

    • set bulgePoints(val: BulgePoints): void

      设置凸度点集合并标记修改

      Parameters

      Returns void

    • get elevations(): number[]

      获取高程值数组(3D多段线使用)

      Returns number[]

      高程值数组,如果不是3D多段线则返回null

    • set elevations(val: number[]): void

      设置高程值数组

      Parameters

      • val: number[]

        高程值数组,设置为null则清除高程数据

      Returns void

    • get hasElevations(): boolean

      检查是否有高程数据(是否为3D多段线)

      Returns boolean

      是否有高程数据

    • get endPtIsClosed(): boolean

      检查终点是否与起点闭合 判断多段线的起点和终点是否重合(在容差范围内)

      Returns boolean

      是否闭合

    • get startPoint(): Point2D

      获取起点

      Returns Point2D

      多段线的起点坐标

    • get endPoint(): Point2D

      获取终点

      Returns Point2D

      多段线的终点坐标

    • get startBulgePoint(): BulgePoint

      获取起始凸度点

      Returns BulgePoint

      多段线的起始凸度点对象

    • get endBulgePoint(): BulgePoint

      获取结束凸度点

      Returns BulgePoint

      多段线的结束凸度点对象

    • get length(): number

      获取多段线总长度

      计算多段线所有段的总长度,包括直线段和圆弧段。

      Returns number

      多段线的总长度

    • get subEnts(): (ArcEnt | LineEnt)[]

      获取多段线的实体段集合

      将多段线的凸度点转换为具体的几何实体(直线或圆弧)。 这是多段线的核心方法,用于将抽象的凸度表示转换为具体的几何对象。

      算法逻辑:

      1. 根据是否闭合调整点的配对方式
      2. 对每一对相邻点,根据凸度值创建直线或圆弧
      3. 凸度为0:创建直线段
      4. 凸度非0:创建圆弧段

      Returns (ArcEnt | LineEnt)[]

      实体段数组,包含直线(ut)和圆弧(ct)

    • get subGeometries(): (GLine | GArc)[]

      获取多段线的轻量级几何体集合(用于几何计算和渲染)

      与 subEnts 不同,此方法返回轻量级几何对象(GLine、GArc), 不包含实体属性(颜色、图层等),减少内存占用和计算开销。 支持缓存,通过 Engine.ENABLE_GEOMETRY_CACHE 控制。

      Returns (GLine | GArc)[]

      轻量级几何体数组

    • get selfIntersect(): boolean

      检测多段线自相交

      检查多段线是否存在自相交(线段之间相交)。 这是一个重要的几何验证方法,用于检测多段线的有效性。

      算法逻辑:

      1. 临时处理闭合状态,避免起终点重合的干扰
      2. 对每个线段,检查它与其他非相邻线段的交点
      3. 只检查直线段之间的相交(简化处理)
      4. 恢复原始闭合状态

      Returns boolean

      如果存在自相交返回true

    • get hasBulge(): boolean

      检查是否包含凸度

      判断多段线是否包含非零的凸度值(即是否包含圆弧段)。

      Returns boolean

      如果包含圆弧段返回true

    • get areaIsClosed(): boolean

      检查面积计算时是否闭合

      判断多段线在面积计算时是否应该被视为闭合。 即使标记为开放,如果起终点重合也视为闭合。

      Returns boolean

      如果应该视为闭合返回true

    • get area(): number

      获取多段线面积

      计算多段线围成的面积。只有满足特定条件的多段线才能计算面积:

      1. 不包含圆弧段(hasBulge为false)
      2. 形成闭合区域(areaIsClosed为true)
      3. 没有自相交(selfIntersect为false)

      Returns number

      面积值,如果不满足条件返回-1

    • get doubleArea(): number

      获取双倍面积

      使用鞋带公式计算多边形的双倍面积。 这是面积计算的基础方法。

      Returns number

      双倍面积值

    • get isCCW(): boolean

      检查是否为逆时针方向

      根据双倍面积的符号判断多段线的绕向。 正值表示逆时针,负值表示顺时针。

      Returns boolean

      如果是逆时针方向返回true

    Methods

    • 设置扩展数据(用户友好格式) 自动将对象序列化为JSON字符串存储

      Parameters

      • appName: string

        应用程序名(用于在DWG中标识数据来源)

      • data: Record<string, any>

        要存储的数据对象(将被序列化为JSON)

      Returns void

      entity.setExtData("MY_SENSOR", {
      sensorVal: 10,
      deviceName: "温度传感器",
      isActive: true
      });
    • 清除扩展数据

      Returns void

    • 检查是否有扩展数据

      Returns boolean

      是否存在扩展数据

    • 从默认属性对象复制属性

      将指定的默认属性对象的所有相关属性复制到当前实体。 这通常用于创建新实体时应用默认设置。

      Parameters

      • defaultPropsObject: any

        默认属性对象,包含layer、colorIndex、lineType等属性

      Returns this

      当前实例(支持链式调用)

    • 设置为系统默认值

      从全局CAD系统设置中获取当前的默认属性值并应用到实体。 这些默认值包括当前图层、当前颜色、当前线型等。

      使用的全局变量:

      • Engine.currentDoc.CLAYER: 当前图层名称
      • Engine.CECOLOR: 当前实体颜色
      • Engine.CELTYPE: 当前实体线型
      • Engine.CELTSCALE: 当前实体线型比例

      Returns void

    • 从数据库默认属性对象设置属性

      从数据库查询结果或序列化数据中恢复实体属性。 这个方法处理数据库中可能存在的空值和默认值情况。

      Parameters

      • dbPropsObject: any

        数据库属性对象,包含layerId、colorIndex等属性

      Returns this

      当前实例(支持链式调用)

    • 将属性映射到数据库默认属性对象

      将当前实体的属性映射到数据库存储格式的对象中。 用于保存实体数据到数据库或序列化。

      Parameters

      • targetDbObject: any

        目标数据库属性对象

      Returns any

      映射后的属性对象

    • 释放实体占用的外部资源 子类如持有 PIXI 对象或大尺寸缓冲,应覆盖此方法清理

      Returns void

    • 获取指定顶点的高程值

      Parameters

      • index: number

        顶点索引(0-based)

      Returns number

      高程值,如果索引无效则返回0

    • 设置指定顶点的高程值

      Parameters

      • index: number

        顶点索引(0-based)

      • elevation: number

        高程值

      Returns void

    • 检查所有关键点是否在指定框内

      判断多段线的所有顶点是否都在指定的边界框内。 这是一个可见性检测方法,用于判断多段线是否完全在视图范围内。

      Parameters

      Returns boolean

      如果所有顶点都在框内返回true

    • 反转多段线方向

      将多段线的顶点顺序反转,同时反转所有凸度值的符号。 这个操作会改变多段线的绘制方向,但保持几何形状不变。

      Returns void

    • 添加一个顶点到多段线末尾 支持简化的数组写法 [x, y]

      Parameters

      • point: PointInput

        新顶点的坐标,支持 Point2D 或数组 [x, y]

      • bulge: number = 0

        从新顶点到下一个顶点的凸度,默认为0

      • Optionalelevation: number

        顶点高程值(可选),如果存在高程数组会同步添加

      Returns void

      const polyline = new PolylineEnt();
      polyline.addVertex([0, 0]);
      polyline.addVertex([100, 0]);
      polyline.addVertex([100, 100], 0.5); // 带凸度
    • 添加单个点(简化接口)

      Parameters

      • coord: [number, number]

        坐标数组 [x, y]

      • bulge: number = 0

        凸度值,默认为0

      Returns this

      this,支持链式调用

      pline.addPoint([100, 0]);
      pline.addPoint([100, 50], -0.5);
    • 批量添加点(追加到末尾)

      Parameters

      • points: ([number, number] | [[number, number], number])[]

        点数组,每项可以是 [x, y] 或 [[x, y], bulge]

      Returns this

      this,支持链式调用

      pline.addPoints([[0, 0], [100, 0], [[100, 50], -0.5]]);
      
    • 设置所有点(替换现有点)

      Parameters

      • points: ([number, number] | [[number, number], number])[]

        点数组,每项可以是 [x, y] 或 [[x, y], bulge]

      Returns this

      this,支持链式调用

      pline.setPoints([[0, 0], [100, 0], [[100, 50], -0.5], [50, 80], [0, 50]]);
      
    • 获取指定索引的点坐标

      Parameters

      • index: number

        点索引(0-based)

      Returns [number, number]

      [x, y] 坐标数组

      const [x, y] = pline.getPoint(0);
      
    • 获取指定索引的点坐标和凸度

      Parameters

      • index: number

        点索引(0-based)

      Returns [[number, number], number]

      [[x, y], bulge] 格式

      const [[x, y], bulge] = pline.getPointWithBulge(0);
      
    • 获取所有点坐标(不含凸度)

      Returns [number, number][]

      [x, y][] 坐标数组

      const points = pline.getPoints(); // [[0,0], [100,0], [100,50]]
      
    • 获取所有点(含凸度,与setPoints格式一致)

      Returns ([number, number] | [[number, number], number])[]

      点数组,凸度为0时返回[x,y],否则返回[[x,y], bulge]

      const points = pline.getPointsWithBulge();
      // [[0,0], [100,0], [[100,50], -0.5]]
    • 移除最后一个顶点

      Returns void

    • 设置闭合状态

      Parameters

      • closedFlag: boolean

        是否闭合

      Returns void

    • 镜像变换

      对多段线进行镜像变换,以指定的两点为镜像轴。 镜像操作会改变所有顶点位置和凸度值的符号。

      Parameters

      Returns void

    • 移动变换

      将多段线从一个位置移动到另一个位置。 移动所有顶点,保持相对位置不变。

      Parameters

      Returns void

    • 旋转变换

      围绕指定点旋转多段线。旋转所有顶点,凸度值保持不变。

      Parameters

      • rotationCenter: PointInput

        旋转中心点

      • rotationAngle: number

        旋转角度(弧度)

      Returns void

    • 缩放变换

      以指定点为中心对多段线进行缩放。 缩放会同时影响顶点位置和全局线宽。

      Parameters

      • scaleCenter: PointInput

        缩放中心点

      • scaleFactor: number

        缩放因子

      Returns void

    • 拉伸变形操作

      根据拉伸框和移动向量对多段线进行拉伸。 只有在拉伸框内的顶点会被移动。

      Parameters

      Returns void

    • 修复拉伸操作

      从备份数据恢复多段线的几何参数。

      Parameters

      • backupPolylineData: PolylineEnt

        备份的多段线数据

      Returns void

    • 清除几何缓存 在实体被修改时调用

      Returns void

    • 重写 setModified 以清除几何缓存

      Returns void

    • 计算边界框

      根据指定的坐标系计算多段线的最小边界矩形。 通过合并所有段的边界框来计算总边界框。

      Parameters

      • coordinateSystemType: CoordinateSystemType = CoordinateSystemType.WCS

        坐标系类型(M.WCS、M.UCS、M.DCS)

      Returns BoundingBox

      边界框对象

    • 获取实体段集合

      返回多段线的所有实体段。这是ents属性的访问方法。

      Returns (ArcEnt | LineEnt)[]

      实体段数组

    • 获取扩展实体段集合

      获取多段线的扩展实体集合,用于延伸操作。 将首尾两段替换为对应的延伸实体(圆或射线)。

      算法逻辑:

      1. 保留中间段不变
      2. 第一段:圆弧→圆,直线→反向射线
      3. 最后一段:圆弧→圆,直线→正向射线

      Returns (ArcEnt | LineEnt | RayEnt | CircleEnt)[]

      扩展实体段数组

    • 获取非零长度的实体段集合

      过滤掉长度为零的实体段(起点和终点重合的段)。 这用于避免在计算中包含退化的几何对象。

      Returns (ArcEnt | LineEnt)[]

      非零长度的实体段数组

    • 从前端按距离修剪多段线

      从多段线的起点开始,按指定距离修剪多段线。 算法遍历各段,累计长度直到达到指定距离,然后修剪相应的段。

      Parameters

      • trimDistance: number

        修剪距离

      Returns void

    • 从后端按距离修剪多段线

      从多段线的终点开始,按指定距离修剪多段线。 算法与trimFrontAtDist类似,但从后向前处理。

      Parameters

      • trimDistance: number

        修剪距离

      Returns void

    • 夹点编辑操作

      编辑多段线的顶点位置。根据夹点索引更新对应顶点的坐标。

      Parameters

      • newPoint: Point2D

        新的夹点位置

      • gripIndex: string

        夹点索引(字符串格式)

      Returns void

    • 中点夹点编辑操作

      编辑多段线段的中点位置。这是一个复杂的操作,需要根据段的类型 (直线或圆弧)采用不同的处理方式。

      Parameters

      • newMidPoint: Point2D

        新的中点位置

      • segmentIndexString: string

        段索引(字符串格式)

      Returns void

    • 撤销映射操作

      从撤销数据恢复多段线的所有参数。

      Parameters

      Returns void

    • 克隆多段线

      创建当前多段线的完整副本,包括所有顶点和属性。

      Returns PolylineEnt

      新的多段线实例

    • 转换为数据库格式

      将多段线对象转换为适合数据库存储的格式。

      Returns DbPline

      数据库格式的多段线对象

    • 从数据库格式恢复

      从数据库格式的对象恢复多段线的所有参数。 支持两种数据格式:新格式(dbBulgePoints)和旧格式(pointDataList)。

      Parameters

      • dbPolyline: DbPline

        数据库格式的多段线数据

      Returns void