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

(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.

相关推荐
热点推荐
拒绝加入日本国籍,宁可为中国而战,她才是张本家最该学习的榜样

拒绝加入日本国籍,宁可为中国而战,她才是张本家最该学习的榜样

叹知
2026-10-03 05:51:10
上海33岁男老师泰国失联!知情人曝更多细节,细思极恐,母亲崩溃

上海33岁男老师泰国失联!知情人曝更多细节,细思极恐,母亲崩溃

悦君兮君不知
2026-10-02 23:36:26
抖省省,不省了

抖省省,不省了

风声声
2026-10-02 12:23:22
弄巧成拙了!网传义乌一饭店:客人白酒啤酒饮料连菜都自带,14个人只花430元,包厢还弄得满地垃圾

弄巧成拙了!网传义乌一饭店:客人白酒啤酒饮料连菜都自带,14个人只花430元,包厢还弄得满地垃圾

王老师你还好吗
2026-09-28 01:39:54
仅21岁广西姑娘凌晨去世,男友三次改婚期,最后聊天记录看哭全网

仅21岁广西姑娘凌晨去世,男友三次改婚期,最后聊天记录看哭全网

青杉依旧啊啊
2026-10-02 16:04:23
电商女装开始用上2.4米超长防拆带 剪断即无法退货

电商女装开始用上2.4米超长防拆带 剪断即无法退货

闪电新闻
2026-10-02 08:47:18
当众拒唱国歌不认中国籍,把两个孩子全送出国,如今报应终于来了

当众拒唱国歌不认中国籍,把两个孩子全送出国,如今报应终于来了

鹤羽说个事
2026-09-02 16:51:59
一根卖15欧元的USB-C线,拆开后里面藏了块能跑视频的屏幕

一根卖15欧元的USB-C线,拆开后里面藏了块能跑视频的屏幕

宅家小欢喜
2026-10-02 20:31:53
刘欢去世没几天,香港演员佘诗曼传出噩耗,给所有演员提了个醒

刘欢去世没几天,香港演员佘诗曼传出噩耗,给所有演员提了个醒

星河不入我
2026-10-02 20:47:04
国务院公布两项任命四项免职,申长雨去职后安排如何?

国务院公布两项任命四项免职,申长雨去职后安排如何?

叮当当科技
2026-10-03 09:44:08
刚走完长征路的毛主席:瘦骨嶙峋,一脸愁容,衣服破烂,让人心疼

刚走完长征路的毛主席:瘦骨嶙峋,一脸愁容,衣服破烂,让人心疼

小豫讲故事
2026-10-01 06:00:18
情绪激动,金玟哉在热身赛被换下后在场边和莫雷诺激烈交流

情绪激动,金玟哉在热身赛被换下后在场边和莫雷诺激烈交流

懂球帝
2026-10-03 12:14:30
泽连斯基:朝鲜将向俄罗斯增派10000名士兵,至多或达5万人,普京下令扩军!俄罗斯武装部队总人数扩编至244万余人

泽连斯基:朝鲜将向俄罗斯增派10000名士兵,至多或达5万人,普京下令扩军!俄罗斯武装部队总人数扩编至244万余人

每日经济新闻
2026-09-30 18:09:34
曼城正式上诉!阿联酋政府警告英首相:曼城出事 我就撤资数十亿镑

曼城正式上诉!阿联酋政府警告英首相:曼城出事 我就撤资数十亿镑

风过乡
2026-10-03 07:31:35
法媒:松岛辉空下周一登顶世界第一,王楚钦跌至第四,国乒男单21世纪首度跌出前三

法媒:松岛辉空下周一登顶世界第一,王楚钦跌至第四,国乒男单21世纪首度跌出前三

好乒乓
2026-10-03 15:11:00
名古屋亚运会男足铜牌战,上半场结束,中国队1比1平乌兹别克斯坦队

名古屋亚运会男足铜牌战,上半场结束,中国队1比1平乌兹别克斯坦队

台州交通广播
2026-10-03 15:13:20
46岁高圆圆素颜穿塑料凉拖逛超市,被路人当成买菜大姐

46岁高圆圆素颜穿塑料凉拖逛超市,被路人当成买菜大姐

东方不败然多多
2026-10-01 20:30:13
克林顿:我一生有两件事感到很抱歉,一中国加入WTO,二我做错了

克林顿:我一生有两件事感到很抱歉,一中国加入WTO,二我做错了

随遇而安之心
2026-10-01 03:06:11
1962年李克农病逝,他永远不知,儿子李伦后来有多牛

1962年李克农病逝,他永远不知,儿子李伦后来有多牛

谭麤爱搞笑
2026-10-02 18:31:49
刘涛往长城上一站,网友说的“国泰民安脸”终于有画面了

刘涛往长城上一站,网友说的“国泰民安脸”终于有画面了

阿废冷眼观察所
2026-10-02 18:34:54
2026-10-03 16:12:49
CAD梦想画图
CAD梦想画图
是一款极速轻量级的CAD软件
613文章数 123关注度
往期回顾 全部

头条要闻

新华社评“中国男足0:5惨败”:令人震惊 作风松懈

头条要闻

新华社评“中国男足0:5惨败”:令人震惊 作风松懈

体育要闻

这个讨论了一夏天的问题,马刺有答案了吗

娱乐要闻

假期快乐!贾乃亮晒和甜馨国庆出游照

财经要闻

4亿台电视挂墙落灰 为何没人愿意开了?

科技要闻

英伟达盘中创历史新高,市值逼近6万亿美元

汽车要闻

方程豹9月热销破4万 首款皮卡鲨鱼将于四季度上市

态度原创

时尚
健康
艺术
本地
房产

Chemena Kamali写给Chloé的又一封情书

刷酸祛痘,为什么有人翻车?

艺术要闻

徐立斌 风景写生作品选二

本地新闻

中秋逛白塔寺,体验国医妙荟雅集

房产要闻

保利大爆发,冲到榜一!海南楼市前三季度,热销榜出炉!

无障碍浏览 进入关怀版