feat(All):Initial
This commit is contained in:
@@ -0,0 +1,166 @@
|
||||
import DxfArrayScanner, { IGroup } from '../DxfArrayScanner';
|
||||
import * as helpers from '../ParseHelpers';
|
||||
import IGeometry, { IEntity, IPoint } from './geomtry';
|
||||
|
||||
export interface IAttribEntity extends IEntity {
|
||||
scale: number;
|
||||
textStyle: 'STANDARD' | string;
|
||||
text: string;
|
||||
tag: string;
|
||||
prompt: string;
|
||||
startPoint: IPoint;
|
||||
endPoint: IPoint;
|
||||
thickness: number;
|
||||
textHeight: number;
|
||||
rotation: number;
|
||||
lineSpacingFactor: number;
|
||||
fillBoxScale: number;
|
||||
annotationHeight: number;
|
||||
obliqueAngle: number;
|
||||
invisible: boolean;
|
||||
constant: boolean;
|
||||
verificationRequired: boolean;
|
||||
preset: boolean;
|
||||
horizontalJustification: number;
|
||||
verticalJustification: number;
|
||||
backgroundFillColor: string;
|
||||
attachmentPoint: number;
|
||||
lineSpacing: number;
|
||||
backgroundFillSetting: string;
|
||||
extrusionDirection: IPoint;
|
||||
lockPositionFlag: number;
|
||||
hardPointerId: number;
|
||||
}
|
||||
|
||||
export default class Attrib implements IGeometry{
|
||||
public ForEntityName = 'ATTRIB' as const;
|
||||
|
||||
public parseEntity(scanner: DxfArrayScanner, curr: IGroup) {
|
||||
const entity = {
|
||||
type: curr.value,
|
||||
scale: 1,
|
||||
textStyle: 'STANDARD',
|
||||
} as IAttribEntity;
|
||||
curr = scanner.next();
|
||||
while (!scanner.isEOF()) {
|
||||
// 0 为图元类型 (MTEXT),不写入,此处当作 Attrib解析
|
||||
if (curr.code === 0) {
|
||||
break;
|
||||
}
|
||||
switch (curr.code) {
|
||||
case 1:
|
||||
// 字符串本身
|
||||
entity.text = curr.value as string;
|
||||
break;
|
||||
case 2:
|
||||
// 属性标签(字符串;不能包含空格)
|
||||
entity.tag = curr.value as string;
|
||||
break;
|
||||
case 3:
|
||||
// 附加文字(始终在长度为 250 个字符的数据块中)(可选)
|
||||
entity.prompt = curr.value as string;
|
||||
break;
|
||||
case 7:
|
||||
// DXF:X 值;APP:三维矢量文字样式名(如果未提供,则为 STANDARD)(可选)
|
||||
entity.textStyle = curr.value as string;
|
||||
break;
|
||||
case 10: // 文字起点(在 OCS 中)
|
||||
entity.startPoint = helpers.parsePoint(scanner);
|
||||
break;
|
||||
case 11: //X 轴方向矢量(在 WCS 中)
|
||||
entity.endPoint = helpers.parsePoint(scanner);
|
||||
break;
|
||||
case 39:
|
||||
// 厚度(可选;默认值 = 0)
|
||||
entity.thickness = curr.value as number;
|
||||
break;
|
||||
case 40:
|
||||
// 文字高度
|
||||
entity.textHeight = curr.value as number;
|
||||
break;
|
||||
case 41:
|
||||
// X 相对缩放比例(宽度)(可选;默认值 = 1)。使用拟合类型的文字时,该值也将进行调整。
|
||||
entity.scale = curr.value as number;
|
||||
break;
|
||||
case 44:
|
||||
// 多行文字的行距比例(可选):
|
||||
// 要应用的行距的默认百分比(五分之三)。
|
||||
// 有效值的范围从 0.25 到 4.00
|
||||
entity.lineSpacingFactor = curr.value as number;
|
||||
break;
|
||||
case 45:
|
||||
// 填充框大小(可选):
|
||||
// 确定文字周围的边框大小。
|
||||
entity.fillBoxScale = curr.value as number;
|
||||
break;
|
||||
case 46:
|
||||
// 定义注释高度
|
||||
entity.annotationHeight = curr.value as number;
|
||||
break;
|
||||
case 50:
|
||||
//文字旋转角度(可选;默认值 = 0)
|
||||
entity.rotation = curr.value as number;
|
||||
break;
|
||||
case 51:
|
||||
// 倾斜角(可选;默认值 = 0)
|
||||
entity.obliqueAngle = curr.value as number;
|
||||
break;
|
||||
case 63:
|
||||
//背景填充颜色(可选):
|
||||
// 组码 90 为 1 时要用于背景填充的颜色。
|
||||
entity.backgroundFillColor = curr.value as string
|
||||
break;
|
||||
case 70:
|
||||
entity.invisible = !!((curr.value as number) & 0x01);
|
||||
entity.constant = !!((curr.value as number) & 0x02);
|
||||
entity.verificationRequired = !!((curr.value as number) & 0x04);
|
||||
entity.preset = !!((curr.value as number) & 0x08);
|
||||
break;
|
||||
case 71:
|
||||
//附着点:
|
||||
// 1 = 左上;2 = 中上;3 = 右上
|
||||
// 4 = 左中;5 = 正中;6 = 右中
|
||||
// 7 = 左下;8 = 中下;9 = 右下
|
||||
entity.attachmentPoint = curr.value as number;
|
||||
break;
|
||||
case 72:
|
||||
// 文字水平对正类型(可选;默认值 = 0)
|
||||
entity.horizontalJustification = curr.value as number;
|
||||
break;
|
||||
case 73:
|
||||
// 字段长度(可选;默认值 = 0)(当前未使用)
|
||||
entity.lineSpacing = curr.value as number;
|
||||
break;
|
||||
case 74:
|
||||
// 垂直文字对正类型(可选;默认值 = 0)
|
||||
entity.verticalJustification = curr.value as number;
|
||||
break;
|
||||
case 90:
|
||||
// 背景填充设置:
|
||||
// 0 = 背景填充关闭
|
||||
// 1 = 使用背景填充颜色
|
||||
// 2 = 使用图形窗口颜色作为背景填充颜色
|
||||
entity.backgroundFillSetting = curr.value as string;
|
||||
break;
|
||||
case 210:
|
||||
// 拉伸方向。仅当图元的拉伸方向与 WCS 的 Z 轴不平行时才出现(可选;默认值 = 0, 0, 1)
|
||||
entity.extrusionDirection = helpers.parsePoint(scanner);
|
||||
break;
|
||||
case 280:
|
||||
// 锁定位置标志。锁定块参照中属性的位置
|
||||
entity.lockPositionFlag = curr.value as number;
|
||||
break;
|
||||
case 340:
|
||||
// 次要属性或属性定义的硬指针 ID
|
||||
entity.hardPointerId = curr.value as number;
|
||||
break;
|
||||
default:
|
||||
helpers.checkCommonEntityProperties(entity, curr, scanner);
|
||||
break;
|
||||
}
|
||||
curr = scanner.next();
|
||||
}
|
||||
|
||||
return entity;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user