网易首页 > 网易号 > 正文 申请入驻

(html集成cad)WEB端CAD绘制焊接符号的方法

0
分享至

前言

在工程制图和制造领域,焊接符号(Welding Symbols)是用于表示焊缝类型、尺寸、位置以及工艺要求的标准化图形语言。广泛应用于机械设计、钢结构、船舶制造、压力容器等行业中,帮助技术人员理解焊接意图。

本文将介绍焊接符号的基本结构、符号、含义,并根据焊接符号的特性通过网页CAD实现焊接符号类,实现绘制焊接符号的功能。

焊接符号特性分析

一、焊接符号的基本构成

焊接符号由以下几个基本部分组成:

1.参考线:焊接符号的核心部分,通常是一条水平线,所有其他符号都依附于这条线。参考线分为两部分,箭头上面就是上方区域,箭头下面就是下方区域,如下图:

2.箭头:箭头指向要焊接的位置,连接参考线和被焊件的具体部位。

3.基本焊接符号:表示焊缝的类型,如角焊缝、对接焊缝等,绘制在参考线的上方或下方。

4.尾部:可选部分,用于标注焊接方法、工艺编号或其他说明信息(如“GTAW”、“SMAW”等)。

5.补充符号:包括现场焊缝符号、周围焊缝符号、熔透深度符号等。

6.尺寸标注:表示焊缝的具体尺寸,如焊脚高度、坡口角度、根部间隙等。

二、焊接符号的附加元素

1.现场焊缝符号:一个小旗子标志,表示该焊缝需在现场施工时完成,而非在工厂内完成。

2.周围焊缝符号:一个圆圈,表示焊缝应围绕整个接合处进行。

3.熔透符号:表示焊接过程中需要完全熔透母材。

4.打底焊道符号:表示打底焊或衬垫焊。

三、焊接尺寸标注方法

焊接符号中常常包含尺寸信息,以指导焊工操作。以下是常见尺寸标注方式:

3.1.角焊缝尺寸标注

  • -焊脚尺寸(Leg Size):用数字标注在焊缝符号左侧。
  • -长度:标注在符号右侧。
  • -间距(Pitch):标注在长度之后,斜杠后加数字。例如:6/25表示每25mm间距有一个6mm的角焊缝。

3.2.对接焊缝尺寸标注

  • -坡口角度:标注在符号旁边。
  • -根部间隙:标注在角度下方。
  • -钝边厚度:标注在角度另一侧

实现 McDbTestWeldingSymbol 焊接符号自定义实体

1. 定义符号相关的枚举或接口

  • // 符号位置
    enum symbolPos {
    top = 1,
    down
    // 符号名
    enum symbolName {
    // 带垫板符号
    WithPadSymbol,
    // 周围焊接符
    SurroundingWeldSeamSymbol,
    // 现场符号
    OnSiteSymbol,
    // 三面焊缝符号
    ThreeSidedWeldSeamSymbol,
    // 尾部符号
    TailSymbol,
    // 交错断续焊接符号
    ZSymbol,
    // 卷边焊缝
    RolledEdge,
    // I型焊缝
    IWeldSeam,
    // V型焊缝
    VWeldSeam,
    // 单边V型焊缝
    SingleVWeldSeam,
    // 单边陡侧V型坡口堆焊
    SingleSteepVWeldSeam,
    // 倾斜焊缝
    InclinedWeldSeam,
    // 可移除衬垫
    RemovablePadding1,
    RemovablePadding2,
    // 持久衬垫
    DurableLiner,
    // 带顿边V型焊缝
    VFlangedEdgeSeam,
    // 带顿边U型焊缝
    UFlangedEdgeSeam,
    // 带顿边单边V型焊缝
    SingleVFlangedEdgeSeam,
    // 带顿边单边U型焊缝
    SingleUFlangedEdgeSeam,
    // 端接焊缝
    EndWeldSeam,
    // 堆焊接头
    SurfacingJoint,
    // 封底焊缝
    BottomSeamWeld,
    // 角焊缝
    FilletWeld,
    // 塞焊缝或槽焊缝
    GrooveWeldSeam,
    // 点焊缝
    SpotWeldSeam,
    // 折叠接口
    FoldingInterface,
    // 倾斜接口
    InclinedInterface,
    // 点焊缝(偏移中心)
    SpotWeldSeamOffset,
    // 缝焊缝
    SeamWeld,
    // 缝焊缝(偏离中心)
    SeamWeldOffset,
    // 陡侧V型坡口堆焊
    SteepVWeldSeam,
    // 喇叭形焊缝
    BellShapedWeldSeam,
    // 单边喇叭形焊缝
    SingleBellShapedWeldSeam,
    // 堆焊缝
    HeapWeldSeam,
    // 锁边焊缝
    SeamSeam,
    // 锁边坡口
    LockTheSlopeOpening,
    // 第一种平面符号
    FirstPlaneSymbol,
    // 第二种凹面符号
    SecondConcaveSymbol,
    // 第二种凸面符号
    SecondConvexeSymbol,
    // 第二种平面符号
    SecondPlaneSymbol,
    // 第三种平面符号
    ThirdPlaneSymbol,
    // 第一种凸面符号
    FirstConvexeSymbol,
    // 第一种凹面符号
    FirstConcaveSymbol,
    // 削平焊缝
    FlattenWeldSeam,
    // 趾部平滑过渡
    ToeAareaTranSmoothly,
    // 无
    none,
    // 符号类型设置
    interface symbolType {
    typeName: symbolName,
    position?: symbolPos,
    rotation?: number,
    info?: string
    // 符号标注设置
    interface symbolDim {
    position: symbolPos,
    content: string

2. 基本结构设置

  • // 焊接符号自定义实体
    export class McDbTestWeldingSymbol extends McDbCustomEntity {
    // 定义McDbTestWeldingSymbol内部的点对象
    // 标记定位点
    private position: McGePoint3d;
    // 标记转折点
    private turningPt: McGePoint3d;
    // 标记定点
    private fixedPoint: McGePoint3d;
    // 箭头长度
    private size: number = 4;
    // 基本符号
    private baseSymbok: symbolType[] = [];
    // 辅助符号
    private auxiliarySymbol: symbolType[] = [];
    // 特殊符号
    private specialSymbol: symbolType[] = [];
    // 补充符号
    private suppleSymbol: symbolType[] = [];
    // 左尺寸
    private leftDim: symbolDim[] = [];
    // 上尺寸
    private topDim: symbolDim[] = [];
    // 右尺寸
    private rightDim: symbolDim[] = [];
    // 虚线位置:0:无虚线, 1:下虚线,2:上虚线
    private dottedPos: number = 0;
    // 标注内字高
    private height: number = this.size * (7 / 8);
    // 焊接说明
    private weldingInfo: string = '';
    // 交错焊缝
    private interlacedWeldSeam: symbolDim[] = [];
    /** 包围盒最大点 包围盒最小点 */
    private minPt: McGePoint3d = new McGePoint3d();
    private maxPt: McGePoint3d = new McGePoint3d();

3. 构造函数和创建方法

  • // 构造函数
    constructor(imp?: any) {
    super(imp);
    // 创建函数
    public create(imp: any) {
    return new McDbTestWeldingSymbol(imp)
    // 获取类名
    public getTypeName(): string {
    return "McDbTestWeldingSymbol";

4. 数据持久化

  • // 读取自定义实体数据pt1、pt2
    public dwgInFields(filter: IMcDbDwgFiler): boolean {
    this.position = filter.readPoint("position").val;
    this.turningPt = filter.readPoint("turningPt").val;
    this.fixedPoint = filter.readPoint("fixedPoint").val;
    this.size = filter.readDouble("size").val;
    this.dottedPos = filter.readLong("dottedPos").val;
    this.minPt = filter.readPoint("minPt").val;
    this.maxPt = filter.readPoint("maxPt").val;
    const _baseSymbok = filter.readString('baseSymbok').val;
    this.baseSymbok = JSON.parse(_baseSymbok)
    const _AuxiliarySymbol = filter.readString('AuxiliarySymbol').val;
    this.auxiliarySymbol = JSON.parse(_AuxiliarySymbol)
    const _specialSymbol = filter.readString('specialSymbol').val;
    this.specialSymbol = JSON.parse(_specialSymbol)
    const _suppleSymbol = filter.readString('suppleSymbol').val;
    this.suppleSymbol = JSON.parse(_suppleSymbol)
    const _leftDim = filter.readString('leftDim').val;
    this.leftDim = JSON.parse(_leftDim);
    const _topDim = filter.readString('topDim').val;
    this.topDim = JSON.parse(_topDim);
    const _rightDim = filter.readString('rightDim').val;
    this.rightDim = JSON.parse(_rightDim);
    const _interlacedWeldSeam = filter.readString('interlacedWeldSeam').val;
    this.interlacedWeldSeam = JSON.parse(_interlacedWeldSeam);
    this.weldingInfo = filter.readString('weldingInfo').val;
    return true;
    // 写入自定义实体数据pt1、pt2
    public dwgOutFields(filter: IMcDbDwgFiler): boolean {
    filter.writePoint("turningPt", this.turningPt);
    filter.writePoint("position", this.position);
    filter.writePoint("fixedPoint", this.fixedPoint);
    filter.writeDouble("size", this.size);
    filter.writeLong("dottedPos", this.dottedPos);
    filter.writePoint("minPt", this.minPt);
    filter.writePoint("maxPt", this.maxPt);
    filter.writeString('baseSymbok', JSON.stringify(this.baseSymbok));
    filter.writeString('AuxiliarySymbol', JSON.stringify(this.auxiliarySymbol));
    filter.writeString('specialSymbol', JSON.stringify(this.specialSymbol));
    filter.writeString('suppleSymbol', JSON.stringify(this.suppleSymbol));
    filter.writeString('leftDim', JSON.stringify(this.leftDim));
    filter.writeString('topDim', JSON.stringify(this.topDim));
    filter.writeString('rightDim', JSON.stringify(this.rightDim));
    filter.writeString('interlacedWeldSeam', JSON.stringify(this.interlacedWeldSeam));
    filter.writeString('weldingInfo', this.weldingInfo);
    return true;

5. 设置标注夹点及夹点移动规则

  • // 移动自定义对象的夹点
    public moveGripPointsAt(iIndex: number, dXOffset: number, dYOffset: number, dZOffset: number) {
    this.assertWrite();
    if (iIndex === 0) {
    this.position.x += dXOffset;
    this.position.y += dYOffset;
    this.position.z += dZOffset;
    } else if (iIndex === 1) {
    this.turningPt.x += dXOffset;
    this.turningPt.y += dYOffset;
    this.turningPt.z += dZOffset;
    } else if (iIndex === 2) {
    this.fixedPoint.x += dXOffset;
    this.fixedPoint.y += dYOffset;
    this.fixedPoint.z += dZOffset;

    // 获取自定义对象的夹点
    public getGripPoints(): McGePoint3dArray {
    let ret = new McGePoint3dArray()
    ret.append(this.position);
    ret.append(this.turningPt);
    ret.append(this.fixedPoint);
    return ret;

6. 绘制标注实体

  • // 绘制实体
    public worldDraw(draw: MxCADWorldDraw): void {
    const allEntityArr = this.getAllEntity();
    allEntityArr.forEach((ent, index) => {
    if(index === allEntityArr.length-1) draw.setupForEntity(ent);
    draw.drawEntity(ent)

    此段代码太多,可以到其他网址查看

7. 暴露获取、设置实体内部数据的属性或方法

  • //设置或获取标记定位点
    public set weldingPosition(val: McGePoint3d) {
    this.position = this.fixedPoint = this.turningPoint = val.clone();
    public get weldingPosition(): McGePoint3d {
    return this.position;
    //设置或获取标记转折点
    public set turningPoint(val: McGePoint3d) {
    this.turningPt = this.fixedPoint = val.clone();
    public get turningPoint(): McGePoint3d {
    return this.turningPt;
    //设置或获取标记定点
    public set fixedPos(val: McGePoint3d) {
    this.fixedPoint = val.clone();
    public get fixedPos(): McGePoint3d {
    return this.fixedPoint;
    //设置或获取标记箭头尺寸
    public set dimSize(val: number) {
    this.size = val;
    this.height = this.size * (7 / 8)
    public get dimSize(): number {
    return this.size;
    //设置或获取虚线位置
    public set dottedLinePos(val: number) {
    this.dottedPos = val;
    public get dottedLinePos(): number {
    return this.dottedPos;
    //设置或获取焊接说明
    public set weldingSymbolInfo(val: string) {
    this.weldingInfo = val;
    public get weldingSymbolInfo(): string {
    return this.weldingInfo;
    private getBox(entityArr: McDbEntity[]) {
    let _minPt, _maxPt = null;
    entityArr.forEach(entity => {
    if (entity instanceof McDbMText) {
    const textStyleId = MxCpp.getCurrentMxCAD().getDatabase().getCurrentlyTextStyleId();
    entity.textStyleId = textStyleId;
    entity.reCompute();
    const { minPt, maxPt } = entity instanceof McDbMText ? MxCADUtility.getTextEntityBox(entity, false) : entity.getBoundingBox();
    if (!_minPt) _minPt = minPt.clone();
    if (!_maxPt) _maxPt = maxPt.clone();
    if (minPt.x < _minPt.x) _minPt.x = minPt.x;
    if (minPt.y < _minPt.y) _minPt.y = minPt.y;
    if (maxPt.x > _maxPt.x) _maxPt.x = maxPt.x;
    if (maxPt.y > _maxPt.y) _maxPt.y = maxPt.y;
    if (_minPt && _maxPt) {
    this.assertWrite();
    this.maxPt = _maxPt;
    this.minPt = _minPt;

    // 获取包围盒
    public getBoundingBox(): { minPt: McGePoint3d; maxPt: McGePoint3d; ret: boolean; } {
    const allEntityArr = this.getAllEntity();
    this.getBox(allEntityArr);
    return { minPt: this.minPt, maxPt: this.maxPt, ret: true }
    //获取或设置基本符号.
    public getBaseSymbok(): symbolType[] {
    return this.baseSymbok
    public setBaseSymbok(val: symbolType[]) {
    const res = val.filter(item => item.typeName !== symbolName.none);
    this.baseSymbok = res;
    //获取或设置辅助符号
    public getAuxiliarySymbol(): symbolType[] {
    return this.auxiliarySymbol
    public setAuxiliarySymbol(val: symbolType[]) {
    const res = val.filter(item => item.typeName !== symbolName.none);
    this.auxiliarySymbol = res;
    //获取或设置特殊符号
    public getSpecialSymbol(): symbolType[] {
    return this.specialSymbol
    public setSpecialSymbol(val: symbolType[]) {
    const res = val.filter(item => item.typeName !== symbolName.none);
    this.specialSymbol = res;
    //获取或设置补充符号
    public getSuppleSymbol(): symbolType[] {
    return this.suppleSymbol
    public setSuppleSymbol(val: symbolType[]) {
    const res = val.filter(item => item.typeName !== symbolName.none);
    this.suppleSymbol = res;
    //获取或设置左尺寸
    public getLeftDim(): symbolDim[] {
    return this.leftDim;
    public setLeftDim(val: symbolDim[]) {
    const res = val.filter(item => item.content !== '');
    this.leftDim = res;
    //获取或设置上尺寸
    public getTopDim(): symbolDim[] {
    return this.topDim;
    public setTopDim(val: symbolDim[]) {
    const res = val.filter(item => item.content !== '');
    this.topDim = res;
    //获取或设置右尺寸
    public getRightDim(): symbolDim[] {
    return this.rightDim;
    public setRightDim(val: symbolDim[]) {
    const res = val.filter(item => item.content !== '');
    this.rightDim = res;
    //获取或设置交错焊缝
    public getIntWeldSeam(): symbolDim[] {
    return this.interlacedWeldSeam
    public setIntWeldSeam(val: symbolDim[]) {
    const res = val.filter(item => item.content !== '');
    this.interlacedWeldSeam = res;
使用焊接符号标注

根据焊接符号标注于直线、圆弧或圆时标注将垂直于曲线的切线上的位置特点,我们可以通过识别标注点所在的实体类型获取该实体在标注点的切线方向和位置,并以此来确定标注的旋转角度和方向。下面为焊接符号标注的基础的用法,用户可在此基础上为焊接符号设置更多属性值,如补充符号、特殊符号、上下标注等:

  • let isArc = false;
    // 设置标记位置点
    const getPos = new MxCADUiPrPoint();
    getPos.setMessage('请设置定位点或直线或圆弧');
    const pos = await getPos.go();
    if (!pos) return;
    weldingSymbol.weldingPosition = pos;
    // 定义过滤器
    const filter = new MxCADResbuf()
    // 添加对象类型,选择集只选择文字类型的对象
    filter.AddMcDbEntityTypes("ARC,CIRCLE")
    let objId = MxCADUtility.findEntAtPoint(pos.x, pos.y,pos.z,-1,filter);
    if(objId.isValid()) isArc = true;
    // 设置标记转折点
    const getTurnPt = new MxCADUiPrPoint();
    getTurnPt.setMessage('请设置引线转折点');
    getTurnPt.setUserDraw((pt, pw) => {
    if(isArc){
    const arc = objId.getMcDbEntity() as McDbArc;
    const point = arc.getClosestPointTo(pt, true).val;
    weldingSymbol.weldingPosition = point;
    weldingSymbol.turningPoint = pt;
    pw.drawMcDbEntity(weldingSymbol);
    const turningPt = await getTurnPt.go();
    if (!turningPt) return;
    weldingSymbol.turningPoint = turningPt;
    // 设置标记定点
    const getFixedPt = new MxCADUiPrPoint();
    getFixedPt.setMessage('拖动确定定位点');
    getFixedPt.setUserDraw((pt, pw) => {
    const clone = weldingSymbol.clone() as McDbTestWeldingSymbol;
    clone.fixedPos = pt;
    pw.drawMcDbEntity(clone)
    const fixedPt = await getFixedPt.go();
    if (fixedPt) weldingSymbol.fixedPos = fixedPt;
    const mxcad = MxCpp.getCurrentMxCAD();
    mxcad.drawEntity(weldingSymbol);
效果演示

在上述介绍中,我们已经实现了焊接符号的自定义实体,通过该实体与我们的mxcad项目结合,我们就能够实现更完善的焊接符号标注功能。

基础效果演示:

根据上述内容可做扩展开发,根据焊接符号特性设置对应的弹框,其示例效果如下:

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
OPPO余某“底裤”被扒光!知情人曝更多 难怪敢嚣张恐被公司开除

OPPO余某“底裤”被扒光!知情人曝更多 难怪敢嚣张恐被公司开除

天天热点见闻
2026-05-12 04:54:10
沙特被曝3月曾对伊朗发动多次“报复性”空袭

沙特被曝3月曾对伊朗发动多次“报复性”空袭

界面新闻
2026-05-13 12:07:05
卢比奥也来了?特朗普访华,美国务卿跟着上了飞机,怎么回事?

卢比奥也来了?特朗普访华,美国务卿跟着上了飞机,怎么回事?

一个有灵魂的作者
2026-05-13 09:56:06
你见过多少赌博做局内幕?网友:全是精心套路,根本赢不了

你见过多少赌博做局内幕?网友:全是精心套路,根本赢不了

另子维爱读史
2026-05-13 07:43:50
惊悚!全国各地树上忽然集中出现大量诡异奇怪符号!真相是?

惊悚!全国各地树上忽然集中出现大量诡异奇怪符号!真相是?

魔都囡
2026-05-13 09:19:01
男子连续2晚嫖娼同一个女孩,邻居撞破并举报他俩,女孩承认收钱

男子连续2晚嫖娼同一个女孩,邻居撞破并举报他俩,女孩承认收钱

汉史趣闻
2026-05-12 14:52:03
特朗普访华团名单大换血!多了个不该少的人,少了个不该多的人

特朗普访华团名单大换血!多了个不该少的人,少了个不该多的人

赵探长TALK
2026-05-12 17:20:15
豆包收费了!大模型将告别免费时代?有何考量?

豆包收费了!大模型将告别免费时代?有何考量?

大象新闻
2026-05-13 10:26:14
中国驻美大使谢锋谈特朗普访华:希望中美元首北京会晤取得成功,为中美关系指明正确发展方向,希望美方彻底取消单边关税等限制措施

中国驻美大使谢锋谈特朗普访华:希望中美元首北京会晤取得成功,为中美关系指明正确发展方向,希望美方彻底取消单边关税等限制措施

大风新闻
2026-05-13 10:52:11
全球化工巨头,为何密集重仓中国?答案藏在一份发改委报告里

全球化工巨头,为何密集重仓中国?答案藏在一份发改委报告里

正解局
2026-05-09 14:27:05
新闻8点见丨外交部谈特朗普访华;北京“六环半”要来了

新闻8点见丨外交部谈特朗普访华;北京“六环半”要来了

新京报
2026-05-12 07:58:45
不能二次加热的6种食物!医生提醒:吃不完或倒掉,别乱节俭

不能二次加热的6种食物!医生提醒:吃不完或倒掉,别乱节俭

冷眼看世界728
2026-05-12 20:46:26
“十年烧烤无人问,一墙书法天下知!”女孩在父亲店写《将进酒》

“十年烧烤无人问,一墙书法天下知!”女孩在父亲店写《将进酒》

一丝不苟的法律人
2026-05-12 21:58:34
吴川多位亿万富豪聚餐!6位穿拖鞋,C位身价百亿,右二被誉现金王

吴川多位亿万富豪聚餐!6位穿拖鞋,C位身价百亿,右二被誉现金王

裕丰娱间说
2026-05-12 21:55:44
不少女网约车司机宣布退出女性友好计划,直言不想接女乘客

不少女网约车司机宣布退出女性友好计划,直言不想接女乘客

映射生活的身影
2026-05-12 20:56:00
女生没电脑每天去电竞馆学习十几小时获免单,店主:很难得,少一台机器没什么,只是一点电费而已,并不觉得亏

女生没电脑每天去电竞馆学习十几小时获免单,店主:很难得,少一台机器没什么,只是一点电费而已,并不觉得亏

大象新闻
2026-05-12 23:42:06
特朗普访华随行名单:夫人缺席,次子夫妇、鲁比奥随行,黄仁勋作为临时增加人员登上空军一号

特朗普访华随行名单:夫人缺席,次子夫妇、鲁比奥随行,黄仁勋作为临时增加人员登上空军一号

大风新闻
2026-05-13 11:24:16
奶奶骑台铃电动车接6岁孙子,NFC解锁后方向突然锁死两人摔伤;家属:不到一年发生七八次事故;台铃回应

奶奶骑台铃电动车接6岁孙子,NFC解锁后方向突然锁死两人摔伤;家属:不到一年发生七八次事故;台铃回应

大象新闻
2026-05-12 19:46:06
南京审计大学男子偷拍裙底事件:偷拍者为研究生,此前已公考上岸。

南京审计大学男子偷拍裙底事件:偷拍者为研究生,此前已公考上岸。

贴小君
2026-05-13 08:25:53
越南前女首富张美兰资产将被拍卖:两个爱马仕包起拍价超百万,曾请求当纪念品留给后代;3辆豪车中只有宝马能正常行驶

越南前女首富张美兰资产将被拍卖:两个爱马仕包起拍价超百万,曾请求当纪念品留给后代;3辆豪车中只有宝马能正常行驶

大象新闻
2026-05-12 23:46:06
2026-05-13 12:40:49
CAD梦想画图
CAD梦想画图
是一款极速轻量级的CAD软件
607文章数 123关注度
往期回顾 全部

头条要闻

特朗普访华随行名单:夫人缺席 次子夫妇、鲁比奥随行

头条要闻

特朗普访华随行名单:夫人缺席 次子夫妇、鲁比奥随行

体育要闻

14年半,74万,何冰娇没选那条更安稳的路

娱乐要闻

巩俐用中文宣布戛纳开幕,彰显国际地位

财经要闻

深圳夫妻囤芯片,身家飙涨320亿

科技要闻

谷歌剧透安卓重大升级 Gemini深度集成底层

汽车要闻

吉利银河“TT”申报图曝光 电动尾翼+激光雷达

态度原创

家居
房产
亲子
手机
军事航空

家居要闻

极简主义下的居住场域与空间

房产要闻

海口禁摩,3.3万名车主要慌了!

亲子要闻

闲置的“母婴用品”不要扔!竟然还有大用,帮你怒省几千元!

手机要闻

iQOO15T外观上手简评:Ultra级美学下放,质感与耐用兼备!

军事要闻

知情人士披露:美国或考虑恢复对伊朗军事行动

无障碍浏览 进入关怀版