网页CAD中对象捕捉使用和二开方法(BS架构集成使用CAD)

简介: 本文详解MxCAD中对象捕捉核心机制——OSMODE系统变量。它采用位码运算(2的幂次方编码),通过按位或/与实现多模式组合与解析,支持端点、中点、切点等14种捕捉类型,确保与AutoCAD逻辑一致,赋能精准绘图与智能交互。

前言

MxCAD的对象捕捉的规则与底层逻辑与 AutoCAD 保持了高度一致,它允许光标在绘图时自动吸附到现有几何对象的关键特征点上,如端点、中点、圆心等,从而彻底消除手动定位带来的误差。而控制这一功能的正是系统变量 OSMODE。下面我们逐步讲解对象捕捉的运行逻辑。

image-20260730144358995.png

一、OSMODE:对象捕捉的数字基因

用户通过界面勾选或快捷键开启的捕捉模式,本质上都是在修改OSMODE这个系统变量的值。OSMODE 并不是一个简单的开关,而是一个由多个捕捉状态组合而成的复合数值。每一个基础捕捉模式(如端点、中点、交点)都被分配了一个特定的数值,当用户同时启用多种捕捉时,系统会将这些数值进行叠加运算,最终生成一个唯一的OSMODE总值。这意味着,图纸上当前生效的所有捕捉规则,都被精确地编码在了这一个数字之中。

image-20260730145750465.png

在 MxCAD 的底层代码中,这些捕捉模式被统一定义,且与 AutoCAD 的规则保持完全一致。具体包含以下端点值:

// 对象捕捉模式规则枚举
enum SysVarLongSketchSettingsOsMode {
   
    /** 端点捕捉 */
    End = 1,
    /** 中点捕捉 */
    Mid = 2,
    /** 圆心点捕捉 */
    Cen = 4,
    /** 节点捕捉 */
    Node = 8,
    /** 象限点捕捉 */
    Quad = 16,
    /** 交点捕捉 */
    Int = 32,
    /** 插入点捕捉 */
    Ins = 64,
    /** 垂足点捕捉 */
    Perp = 128,
    /** 切点捕捉 */
    Tan = 256,
    /** 最近点捕捉 */
    Near = 512,
    /**外观交点捕捉*/
    App = 2048,
    /**延伸点捕捉*/
    Ext = 4096,
    /** 平行点捕捉 */
    Par = 8192,
    /**捕捉关闭 */
    Off = 16384,
}

二、位码运算:OSMODE 的底层逻辑

OSMODE 的值是基于“位码(Bitcode)”机制运算得出的,这要求每个捕捉模式的值必须是 2 的幂次方,以确保它们在二进制层面互不干扰。

1. 正向设置规则:

正向规则是指通过开启的捕捉端点模式,计算出最终的 OSMODE 值。当我们在 MxCAD 中组合捕捉功能时,实际上是在做加法或按位或运算。例如,若我们需要同时开启“端点(1)”、“中点(2)”和“圆心(4)”,系统会将这三个值相加(1 + 2 + 4 = 7),此时 OSMODE 的值即为 7。这种机制允许将任意数量的捕捉模式无缝融合在一个变量中。

在 TypeScript 中,我们可以这样实现正向计算:

/**
 * 根据选中的捕捉模式数组,计算最终的 OSMODE 总值
 * @param selectedModes 用户选中的捕捉模式枚举值数组
 * @returns 计算后的 OSMODE 数值
 */
export function calculateOsModeTotal(selectedModes: SysVarLongSketchSettingsOsMode[]): number {
   
    // 使用 reduce 进行累加,初始值设为 0 (代表没有任何捕捉开启)
    return selectedModes.reduce((total, currentMode) => {
   
        // 推荐使用按位或运算符 (|) 将当前模式合并到总数中
        // 例如: 0 | 1 = 1; 1 | 2 = 3; 3 | 4 = 7
        return total | currentMode;
    }, 0);
}

假设用户在界面上勾选了“端点”、“中点”和“圆心”,我们可以直接调用该方法得出需要设置给 MxCAD 的值:

// 1. 模拟用户选中的项
const userSelection = [
    SysVarLongSketchSettingsOsMode.End,   // 1
    SysVarLongSketchSettingsOsMode.Mid,   // 2
    SysVarLongSketchSettingsOsMode.Cen    // 4
];
// 2. 调用方法计算
const totalValue = calculateOsModeTotal(userSelection);
// 3. 输出结果
console.log(totalValue); 
// 控制台输出: 7 
// (二进制: 111,代表第1、2、3位都被激活了)

2. 反向推理规则

反向推理规则是指拿到 OSMODE 的值后,通过运算得到原始选择捕捉的端点。这依赖于“按位与(&)”运算。以 OSMODE = 7 为例,系统会依次用 7 与各个捕捉位码进行按位与操作:

  • 7 & 1 = 1(成立,说明开启了端点)
  • 7 & 2 = 2(成立,说明开启了中点)
  • 7 & 4 = 4(成立,说明开启了圆心)

在 TypeScript 中,我们可以这样实现反向推理:

/**
 * 解析 OSMODE 数值,返回当前开启的捕捉模式列表
 * @param osModeValue 获取到的 OSMODE 整数值 (例如: 7)
 */
export function getEnabledOsnapModes(osModeValue: number): SysVarLongSketchSettingsOsMode[] {
   
    const enabledModes: SysVarLongSketchSettingsOsMode[] = [];
    // 遍历枚举中的所有位码值
    Object.values(SysVarLongSketchSettingsOsMode)
        .filter((v) => typeof v === 'number') // 过滤掉反向映射的字符串
        .forEach((bitCode) => {
   
            // 核心逻辑:按位与运算
            // 如果 (总值 & 某一项) === 某一项,说明该位被置为1,即被开启
            if ((osModeValue & (bitCode as number)) === bitCode) {
   
                enabledModes.push(bitCode as SysVarLongSketchSettingsOsMode);
            }
        });
    return enabledModes;
}

当 MxCAD 加载图纸时,我们需要读取当前的 OSMODE 状态,并同步到前端的 UI 勾选框上:

// 1. 假设从 MxCAD 获取到的当前 OSMODE 值为 15253
const currentOsMode = 15253;
// 2. 调用方法解析出具体开启了哪些捕捉
const activeModes = getEnabledOsnapModes(currentOsMode);
// 3. 输出结果
console.log(activeModes); 
// 控制台输出: [1, 4, 16, 128, 256, 512, 2048, 4096, 8192]
// 代表当前开启了:端点、圆心、象限点、垂足、切点、最近点、外观交点、延伸点、平行点

三、MxCAD 实战:捕捉功能的代码落地

在 MxCAD 的实际项目开发中,开发者可以通过丰富的 API 接口对 OSMODE 进行灵活控制。结合前面提到的位运算逻辑,我们可以轻松实现捕捉状态的读取、UI 回填、动态设置以及持久化处理,形成一个完整的业务闭环。

1. 获取状态与 UI 回填

通过调用 MxCAD 的系统变量读取接口,可以实时获取当前的捕捉配置。使用 getSysVarLong("OSMODE") 拿到数值后,再利用封装好的反向推理工具将其解析为具体的捕捉模式列表,从而同步到前端 UI 界面的勾选框上。

import{
   MxCpp}from"mxcad";
// 1. 获取当前图纸的 OSMODE 值
const currentOsMode = MxCpp.getCurrentMxCAD().getSysVarLong("OSMODE");
console.log("当前捕捉总值:", currentOsMode);
// 2. 反向解析:根据总值获取当前开启了哪些捕捉
const activeModes = getEnabledOsnapModes(currentOsMode);
console.log("当前开启的捕捉模式:", activeModes);
// 3. UI 回填:将解析出的捕捉模式同步到前端界面的勾选框上
// 假设 uiState 是你的前端状态管理对象
activeModes.forEach((mode) => {
   
    uiState.setOsnapChecked(mode, true);
});

2. 动态设置与持久化存储

当用户在界面上修改了捕捉选项时,可以通过正向计算得出新的总值,并使用 setSysVarLong("OSMODE", value) 将配置注入 MxCAD 引擎。同时,在实际的工程业务中,如果希望 OSMODE 的值能做持久化处理,避免每次打开图纸都需要重新配置,可以将 OSMODE 单独存储(如存入本地缓存或后端数据库),方便后续的读取和恢复。

// 4. 动态设置:假设用户在前端勾选了“端点(1)”和“中点(2)”,计算得出总值为 3
const totalValue = calculateOsModeTotal([
    SysVarLongSketchSettingsOsMode.End, 
    SysVarLongSketchSettingsOsMode.Mid
]);
// 5. 将新的捕捉配置设置回 MxCAD 引擎
MxCpp.getCurrentMxCAD().setSysVarLong("OSMODE", totalValue);
// 6. 持久化存储:将 OSMODE 单独存储(以存入 LocalStorage 为例),方便后续读取和设置
local Storage.set Item("my_cad_osmode", totalValue.toString());

这种代码级的控制,使得 MxCAD 能够轻松实现诸如“一键切换捕捉模式”、“智能绘图辅助”以及“用户个性化配置记忆”等高级功能。

四、效果演示:精准吸附的视觉体验

当 OSMODE 被正确配置后,MxCAD 将展现出极佳的交互体验。

1.在绘制线段时,光标靠近已有线条的端点,会自动触发高亮标记并牢牢吸附,确保新线条完美衔接

image-20260730153951578.png

2.在绘制相切圆时,开启“切点(256)”捕捉,光标会沿着圆弧滑动并在切点位置精准锁定

image-20260730153734700.png

3.在任意取点时,开启“最近点(512)”捕捉,光标会像被磁铁吸附般牢牢贴合线条边缘,精准锁定距离光标最近的几何位置,避免误选空白区域或偏离目标对象。
image-20260731142436020.png

相关文章
|
2月前
|
SQL Serverless API
网页CAD的图形选择、编辑与夹点操作方法(CAD SDK for Browser)
本文深入解析MxCAD图形编辑核心技术:从选择集(点选/框选/属性过滤)到几何变换(矩阵驱动的移动、旋转、缩放),涵盖夹点交互配置与动态预览实战,揭示CAD底层数学逻辑,助力开发者构建专业级Web CAD编辑能力。(239字)
|
12月前
|
JavaScript 开发工具 数据库
(在线预览CAD图纸)网页CAD SDK集成的方法
基于mxcad创建的在线CAD项目,支持图纸预览、编辑与数据库操作,提供iframe和mxcad-app插件两种集成方式。本文重点介绍mxcad-app在vite/webpack中的集成方法,支持自定义容器、构建配置及二次开发,便于快速嵌入并扩展功能。
|
4月前
|
存储 JSON 前端开发
前端JS集成CAD插件浏览和批注DWG文件的方法
本文详解MxCAD与MxDraw的职能边界:MxDraw为轻量级渲染引擎,专注图纸浏览与非侵入式批注;MxCAD是基于WebAssembly的全功能CAD内核,支持深度编辑。以Vue3为例,手把手指导DWG转MXWEB、Canvas初始化、跨域配置、批注绘制与JSON存取,助你快速构建Web CAD审阅系统。(239字)
|
2月前
|
人工智能 监控 IDE
阿里云百炼新人免费额度解析:免费额度、适用范围、领取教程及常见注意事项
本文梳理了阿里云百炼平台新人专属免费额度的核心规则与使用指南。免费额度面向新用户自动发放,每模型通常为100万Token,有效期90天,仅适用于华北2(北京)地域模型的实时推理调用,不支持Batch、调优、部署等场景。文章详细解读了额度查询的三种方式、主账号与RAM子账号共享规则、不同模型额度相互独立等关键特性。重点介绍了“免费额度用完即停”功能的开启与关闭逻辑,以帮助用户避免意外扣费。同时,针对“额度耗尽后如何继续使用”、“如何查看消耗记录”、“为何会产生费用”等十余个常见问题提供了清晰的解答,旨在帮助用户全面理解并充分利用此项福利,实现零成本入门与体验。
|
2月前
|
人工智能
Qoder 科研提效专场,9月2日开讲!
本期科研提效专场邀请两位AI4S领域博士生,分享如何用Qoder加速科研:李瑀旸详解“Agent for Science”设计与验证全流程;王世琦演示用Qoder高效搜资料、理逻辑、优表达。真实案例拆解,零编程基础可上手。
172 0
|
2月前
|
人工智能 缓存 前端开发
AI 长篇小说创作管理开源软件:织叙工作台的设定数据与创作工作流设计
织叙工作台是面向长篇创作的开源 Web 平台,以结构化设定、章节编辑、剧情分析和可选向量记忆组织小说生产流程,支持 Docker Compose 与本地部署。
|
2月前
|
人工智能 开发者
阿里云Token Plan套餐39元起,搭配Qoder写代码或轻量服务器跑模型,组合购低至68元起
阿里云重磅推出Token Plan组合购活动:Token Plan套餐惊喜焕新,全面支持Qwen3.8-Max,算力拉满,【轻服+TokenPlan】组合套餐68元起!活动涵盖三大方向:Token Plan自选,云产品×TokenPlan灵活搭配,43.45元起;AI Coding,QoderCN×TokenPlan重磅焕新,98元起;Agent托管,无影云电脑×TokenPlan开箱即用,88元起。下面为大家详细解读本次活动的全部内容与价格明细。
|
2月前
|
机器学习/深度学习 缓存 人工智能
阿里云kimi-k3模型详解:模型能力、价格、上下文限制及使用注意事项参考
本文介绍了阿里云百炼平台提供的旗舰级大模型Kimi-K3。该模型由月之暗面研发,拥有2.8万亿参数,是全球首个开源的三万亿级模型,并创新性地采用了KDA混合线性注意力与注意力残差技术。它原生支持文本与图像输入,具备强制开启的深度思考模式,并提供高达100万tokens的上下文窗口。文章详细梳理了其五大区域(北京、新加坡、日本、德国、美国)的部署与功能矩阵,重点解读了其独有的动态加载工具DLT机制在优化智能体开发流程上的价值,以及适用于长程编程、超长文档分析、复杂推理等高阶场景的定位。同时,也明确了其定价策略与通过百炼平台进行OpenAI/DashScope协议兼容调用的方式。
|
2月前
|
人工智能 自然语言处理 测试技术
别瞎写提示词!10组AI测试指令心法,拿来就能用
本文揭秘测试工程师如何用精准提示词(Prompt)大幅提升AI产出质量:从生成泛泛而谈的通用用例,到挖出弱网、越权、并发死锁等高价值场景。附10组经实战验证的指令模板及4大心法,助你把AI变成懂业务、能挖Bug的高级测试助手。
|
2月前
|
人工智能 安全 API
阿里云通义千问大模型完整解析:全系列模型能力、核心优势、行业落地与选型定价全梳理
生成式人工智能技术持续迭代,大模型已经从概念阶段深度走进各类业务生产环节,不管是个人开发者搭建AI应用、中小团队做业务智能化改造,还是大型企业完成数字化转型升级,都需要选择适配自身业务的大模型底座。通义千问,代号Qwen,是阿里云完全自主研发的大模型家族,并非单一对话模型,而是一套覆盖文本、代码、图像、音频、视频、超长文档处理、智能体执行的完整模型产品矩阵,依托阿里云百炼大模型服务平台对外提供服务,支持在线调用API、模型微调、私有知识库搭建、智能体编排、私有化部署等多样化能力,是国内企业级调用规模位居前列的大模型体系。
1113 2