objectarx2023开发记录,获取多段线顶点坐标

ObjectARX参数化自定义实体开发:从静态图形到智能设计 参数化设计是一种将设计要素抽象为可变参数,并通过程序逻辑驱动模型自动更新的核心方法。其原理在于将几何形状、属性与参数变量绑定,当参数改变时,系统能自动重新计算并生成新的几何形态。这种技术的核心价值在于实现了设计的自动化、标准化与复用性,极大地提升了设计效率和准确性。在工程实践中,参数化广泛应用于建筑信息模型(BIM)、机械零件库、自动化测试脚本(如JMeter、Postman的参数化测试)以及仿真分析(如Ansys的参数化建模)等场景。本文聚焦于CAD二次开发领域,深入探讨如何在AutoCAD平台上,利用O 阅读详情

1、获取已有对象

需要使用acedSSGet函数。其中-b表示取消框选,只能点选

:S则表示选择单个实体。

		ads_name ss;

		resbuf rb;
		rb.restype = 0;
		rb.resval.rstring = _T("LWPOLYLINE");
		rb.rbnext = NULL;

		int rt = acedSSGet(_T("-b:S"), NULL, NULL, &rb, ss);

获取时,需要判断是否获取成功,返回RTNORM参数,则表示返回成功。

返回RTCAN表示用户按下ESC键。

2、处理获取的对象

acedSSName函数,获取其名称,以及对应序号的实体返回值。如下:

			ads_name entres;
			acedSSName(ss, 0, entres);

获取实体id,使用acdbGetObjectId函数,如下:

			AcDbObjectId ssId;
			acdbGetObjectId(ssId, entres);

根据ID,已某种方式,打开对象,使用acdbOpenObject函数,获取实体。如下:

			AcDbEntity* pEnt;
			acdbOpenObject(pEnt, ssId, AcDb::kForRead);

判断实体是否为指定对象,使用isKindOf函数,这里判断是否为多段线,如下:

if (pEnt->isKindOf(AcDbPolyline::desc()))
{
    
}

从实体中获取多段线AcDbPolyline::cast(pEnt);如下:

				AcDbPolyline* pPolyline;
				pPolyline = AcDbPolyline::cast(pEnt);

遍历多段线,获取每个顶点的坐标,使用getPointAt函数,如下:

				num = pPolyline->numVerts();
				//acutPrintf(TEXT("num:%d\n"), num);

				for (int j = 0; j < num; j++)
				{
					AcGePoint2d pt;
					if (pPolyline->getPointAt(j, pt) == eOk)
					{
						*pA = pt;
						pA += 1;
						//acutPrintf(TEXT("XY:%g,%g\n"), pt.x, pt.y);
					}
				}
				pPolyline->close();

使用完多段线指针,需使用close()关闭。否则多段线将无法执行操作。

3、使用的函数总结:

acedSSGet();---获取对象
acedSSName();---获得的对象名称
acdbGetObjectId();----获取对象的ID
acdbOpenObject();-----打开获取的对象
isKindOf();------判断实体的类型
desc();-------实体类型获取函数
cast();-------从实体中获取多段线
numVerts();-----多段线指针的,获取顶点数量函数
getPointAt();-----获取多段线顶点坐标的函数
close();------指针关闭函数,使用完需关掉
acedSSFree();----关闭选择集的函数,释放资源

4、整体代码如下:

	//*************************获取坐标函数**********************************
	static void GetPolylineCoordinates(AcGePoint2d* pA, int& num)
	{
		ads_name ss;

		resbuf rb;
		rb.restype = 0;
		rb.resval.rstring = _T("LWPOLYLINE");
		rb.rbnext = NULL;

		int rt = acedSSGet(_T("-b:S"), NULL, NULL, &rb, ss);
		if (rt == RTNORM)
		{
			acutPrintf(TEXT("已选1个\n"));
			ads_name entres;
			acedSSName(ss, 0, entres);

			AcDbObjectId ssId;
			acdbGetObjectId(ssId, entres);

			AcDbEntity* pEnt;
			acdbOpenObject(pEnt, ssId, AcDb::kForRead);

			if (pEnt->isKindOf(AcDbPolyline::desc()))
			{
				AcDbPolyline* pPolyline;
				pPolyline = AcDbPolyline::cast(pEnt);
				num = pPolyline->numVerts();
				//acutPrintf(TEXT("num:%d\n"), num);

				for (int j = 0; j < num; j++)
				{
					AcGePoint2d pt;
					if (pPolyline->getPointAt(j, pt) == eOk)
					{
						*pA = pt;
						pA += 1;
						//acutPrintf(TEXT("XY:%g,%g\n"), pt.x, pt.y);
					}
				}
				pPolyline->close();
			}
			pEnt->close();
			acedSSFree(entres);
		}
		else if (rt == RTCAN)
		{
			acutPrintf(TEXT("取消\n"));
		}
		else if (rt == RTREJ)
		{
			acutPrintf(TEXT("输入无效\n"));
		}
		else
		{
			acutPrintf(TEXT("输入失效2\n"));
		}
		acedSSFree(ss);


	}

CAD实战资源地图:安装、兼容、交付全链路解决方案 CAD(计算机辅助设计)作为工程制图核心工具,其本质是跨版本、跨平台、跨协作环境的系统性工作流。理解CAD运行原理需从底层依赖(如VC++运行库、.NET Framework)、文件兼容机制(DWG版本映射、字体嵌入规则)和技术价值(保障图纸可打开、可编辑、可交付)出发。在实际工程场景中,常见问题如‘vcruntime140_1.dll报错’‘字体显示为问号’‘图片发送后丢失’,均源于环境校准缺失与交付链路断裂。本文聚焦CAD安装部署、版本兼容性治理、图纸交付闭环三大刚性需求,提供经72小时实测验证的资源策 阅读详情

相关推荐

CAD多段线顶点坐标

CAD多段线顶点坐标提取。采用LISP语言编写。

C#ObjectArx Cad获取指定实体

/// <summary> /// 根据ObjectId转换成Entity实体 /// </summary> /// <param name="id"></param> /// <returns></returns> private static Entity GetEntity(ObjectId id) { ...

西柚2015地信小白GISer 1406

GetKindsLinesPts用于获取CAD实体点位objectarx开发

选择CAD实体,将实体的点位信息输出到一个文本文件中。对于刚接触ObjectARX编程的童鞋还是很有用的,可以清楚的了解CAD中部分类型实体的数据结构。VS2005+ObjectARX2007,个人编写。注释很详细,便于理解。

ObjectARX常用函数

       工作过程中经常遇到有些函数想不起来,然后去查,很多函数已经查过但还是会忘,这里把这些函数整理起来,方便以后使用。 //得到当前数据库最后添加的实体(ads_name) acdbEntLast //得到某一实体之后添加的实体(ads_name) acdbEntNext //从ads_name到ID acdbGetObjectId //从ID到ads_name acdbGetAdsName //得到用户提供给 AutoCAD 任一输入设备的下一个输入

滴水穿石的博客 1846

景区导览系统|景区展馆智能导览|小程序导览|电子导览手绘地图制作

AI 数字导游就像一位随时陪伴在游客身边的专属导游,能够根据游客的提问,迅速、准确地提供详细的景点介绍、历史文化知识讲解,甚至能根据游客的兴趣爱好和实时位置,为其智能规划个性化的游览路线。在手绘地图中可以显示景区中的景点信息、景点和景点之间的路径,也可以显示景区的关键地点信息:景区全景、植物景观、河流、道路、地形面貌、卫生间等公共设施~无论是景区还是展馆,道可云AI智能导览系统都能通过丰富的功能、先进的技术,为游客打造便捷、智能、个性化的游览体验,成为文旅行业数字化转型的得力助手。

道可云 1140

四、SVN客户端tortoiseSVN的基本功能介绍

档案浏览器(Repo-browser) 鼠标右键–>tortoiseSVN->版本库浏览器 输入版本库URL地址,进入如菜单界面 版本库浏览器支持SVN及http两种最常用的通信协议 SVN服务器访问方式 方法 模式 访问方法 File:// 直接版本库访问(本地磁盘) http:// 通过配置subversion的WEB服务器的WEBDAV协议 http...

也许是我送你哦 1011

AutoLISP取得多段线顶点坐标

AutoLISP利用repeat循环取得多段线顶点坐标,代码如下。 (defun c:plpoint ()     (setq i 0)     (setq pline (car (entsel)))     (setq ent (entget pline))     (setq pts nil)     (repeat (length en...

weixin_34228617的博客 5498

elmos 524系列芯片笔记

芯片的工作工作原理:集成芯片Elmos524.03有发射回路和接收回路,手册有关的内部原理图,大致如下: 芯片会产生固有频率的电压信号,信号通过引脚DRV1、2输出给外部压电陶瓷片,产生固定频率的机械波,也就是所谓的超声波,超声波遇到障碍物时会反射,反射信号经过AINS、D引脚进入芯片,在芯片内部先后经过GAIN放大,滤波然后进入比较器,滤波后的信号(signal)同预先设定的阈值(threshold)比较产生信号输出。此信号最终会连接MCU处理器,需要重点关注。 基于这个内部的工作原

qq_38230916的博客 2483

DWG多段线(投影坐标)输出顶点经纬度坐标列表

DWG图里的线段(投影坐标)输出经纬度坐标列表一般通用方法是:输出投影坐标,然后用坐标转换程序转成经纬度坐标,还有一种办法: (1)将DWG图线段导入到ArcMap (2)将线段要素转成点要素 (3)点要素属性表添加L,B字段,点击Calculate Geometry   (4)属性表导出 Coversion Tools/Excel/Table To Excel 更多资讯...

Xiaok的专栏 2340

步科触摸屏编程

1.首先官网上下载kinco软件,然后再安装驱动,安装的方式是需要两个文件。把两个文件放到driver文件夹下面,然后设备管理器右键更新,手选driver文件夹,自动安装即可。 步科触摸屏驱动文件下载地址 2.按照步科触摸屏使用手册一步一步来建立工程 Kinco HMIware使用手册下载地址 登录界面 涉及到的是页面切换,用的是login window,然后只留下等级输入那个

MAYBE的博客 2万+

海外跨境电商商城源码-进出口电商平台网站-多语言多商户平台

我们的海外跨境电商系统源码还包括各种功能模块,如用户管理、商品管理、订单管理等。支付管理:与主流支付平台(如Stripe、PayPal等)的集成,支持多种支付方式;订单管理:创建订单、支付订单、取消订单等操作,以及订单状态查询和历史记录;购物车管理:添加商品到购物车、查看购物车、修改购物车中的商品数量等操作;商品管理:商品信息录入、编辑、删除等操作,以及商品分类和搜索功能。客服管理:在线咨询、投诉处理等功能,提供更好的用户服务。用户管理:注册、登录、忘记密码、个人资料。# 检查电子邮件地址是否有效。

柏诣科技的博客 2657

objectarx2023开发记录(二)--用户交互

(1)acedSSGet()函数,用于获取选择集实体。(5)acdbOpenObject()函数,用于打开实体,获取多段线指针。(10)最后,使用完实体指针和ads_name对象后,记得关闭和释放资源。(2)acedSSLength()函数,用于获取选择集所含的实体数。(9)getPointAt()函数,获取多段线单个顶点的坐标值。(3)acedSSName()函数。用于获取实体的名称。(7)numVerts()函数,获取多段线顶点数量信息。(8)通过顶点数,遍历每个顶点,获取其坐标。

Learning_Well的博客 282

音频格式之AAC:(2)AAC封装格式ADIF,ADTS,LATM,extradata及AAC ES存储格式

本文主要1-3部分介绍AAC封装格式ADIF,ADTS和LATM,同时因为从mp4等封装容器有extradata模式,故也第4部分介绍extradata模式。最后第5部分介绍AAC压缩数据存储方式。

littlezls的博客 4936

objectarx2023开发记录---删除多段线上坐标相同的点

排列结束后,则相同坐标的点将会排在一起,此时调用std::unique()函数进行重复值后移,仅保留一个重复值,再使用erase()函数将末尾多余值删除,就可以实现删除重复点的目的了。--------用于保留重复值中的唯一值,其余将自动移至末尾,将返回移动后起始位置的序号,可配合删除函数使用,实现删除重复值。---------用于vector容器的排序,可升序和降序,使用见代码。--------删除指定元素,写需删除的起点序号和终点序号。------用于计算两点间距离。

Learning_Well的博客 232

RAD Studio 12安装全攻略:从下载到破解InterBase的完整流程(附KeyPatch使用技巧)

本文提供RAD Studio 12的完整安装指南,包括系统要求、安装步骤及InterBase数据库的高效配置方法。详细介绍了如何使用KeyPatch工具进行许可证处理,并分享了IDE优化和开发技巧,帮助开发者快速上手这一强大的跨平台开发工具。

q6r7s8t9的博客 946

基于YOLOv11的农作物病虫害检测系统设计与实现

我们使用公开的IP102病虫害数据集作为基础,该数据集包含102种病虫害类别,覆盖水稻、小麦、玉米等多种主要农作物。图像数量:75,222张类别数:102图像分辨率:从640×480到4000×3000不等标注格式:PASCAL VOC格式此外,我们还收集了部分田间实际拍摄的图像以增强模型泛化能力。

YOLO 594

objectarx2023开发记录(三)---isKindOf()函数

背景:由于使用acedSSGet()函数自主选择得到的选择集,包含除多段线以外的实体,在进行多段线处理时,容易造成CAD软件崩溃等问题,需要辨别出多段线类型,再进行处理。(2)然后调用isKindOf()函数,判断是否为多段线,若是进行多段线顶点坐标提取。使用isKindOf()函数前,必须保证实体已经打开。isKindOf()函数,用于辨别实体的类型,参数填写多段线类型即可实现多段线的提取。只输出两个多段线的坐标,圆弧、圆的实体被剔除不显示。(1)先通过AcDbEntity实体指针对象,打开实体。

Learning_Well的博客 233

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

objectarx2023开发记录(五)---直角+偶数多边形绘制

一、背景:根据任务,需要在已有地形的基础之上,绘制边长为偶数结尾的(保留2位小数)直角多边形。(6)批处理多段线的中间节点,要求根据方向数值和原始边长值,计算下一条边的末点边长;(4)计算从起始边开始的,沿直线前进方向左侧或右侧的下一个点的方向,得到方向数值;(2)获取已有的地形数据,删除每条直线上首尾节点外的其他多余点;(9)处理末位边长,使其与起始边保持垂直,并计算最后的节点坐标;(5)处理第一条边,使其在方向不变的情况下,边长为偶数;(3)先计算原始各边的边长;(11)完成图形绘制。

Learning_Well的博客 214

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

objectarx2023开发记录(七)----改进记录(六)

背景:记录(五)中使用的方法是质心-极角法判断顺时针或逆时针。这介绍一种更简便、更通用的方法。质心-极角法,在面对不规则的凹凸多边形时,容易出现质心偏离,从而导致排序错误,得到错误的图形。本次使用有向面积法判断目前的图形是顺时针或逆时针排序的,若本身是顺时针排序,则直接更改起点位置即可;若是逆时针排序,则将其遍历后,反向排序即可得到顺时针排序,然后再更改其首点位置即可。

Learning_Well的博客 216

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

objectarx2023开发记录---边长修正(含边长标注和自由移动)

注意:由于方向不变,某一条边的长度变化,这必然导致图形发生变化,故此,该功能只设计为垂直多边形可用,其末位点和首点之间的线段也属于垂直关系闭合。故此,其他用途图形不适应。该功能可保持多段线各条边方向不动的情况下,调整多段线的某一条边或某多条边为指定长度,用于修正图形。根据提示,点选边,输入边指定长度,空格,即可得到修正后的图形。

Learning_Well的博客 289

objectarx2023开发记录(八)---对称处理

通过在图上标记边长序号,让用户输入对称两条边的序号,由此计算两条对称边的均值,然后执行之前的代码,即可。背景,上次实现的绘制直角+偶数边的多边形,无法实现对称边边长一致,为了改进这一功能,现在添加对称处理。

Learning_Well的博客 191

objectarx2023开发记录---判断点是否位于某线段上

解决思路:现有线段AB,求点C是否位于线段AB上。先分别计算AB、AC的向量,使AB*AC(向量操作),叉乘结果为0(ABC三点共线),则表明在直线AB上。需要进一步判断C是否落在AB线段上,排除落在延长线上的情况。代码添加了与首尾端点重合的情况,考虑到的是容差问题,当C与A或B重合时,坐标XY不一定在double类型上表现为完全相等,因此需要添加符合容差范围内相等即可的判断代码,即后面两个if语句的作用。由于CAD的计算精度问题,需要设置一个容差值EPS,在容差范围内则复合要求。

Learning_Well的博客 324

ObjectARX入门指南:从零构建AutoCAD高性能C++插件

CAD二次开发是工业软件、机械设计与BIM等领域实现自动化与定制化的核心技术。其原理在于通过应用程序编程接口(API)与CAD软件内核进行深度交互,从而扩展原生功能、提升设计效率。在技术选型上,基于C++的ObjectARX因其直接访问AutoCAD数据库、提供极致性能与底层控制能力,成为开发高性能专业插件的硬核选择。该技术尤其适用于需要处理复杂图形实体、实现实时交互或构建行业专用工具的场景。本文将以AutoCAD二次开发为例,结合ObjectARX与Visual Studio,详解开发环境配置、核心数据库

weixin_34221036的博客 371

VC++ MFC集成DWGdirect与TDNET实现DWG图纸读取与编辑开发指南

在工业软件和CAD二次开发领域,DWG作为AutoCAD的私有二进制格式,其解析与处理是核心技术挑战。DWGdirect作为开源且无需AutoCAD环境的开发库,提供了读写DWG文件的核心能力,通过其API可以访问图纸中的实体、图层等信息。这一技术为开发独立图纸查看器、批量处理工具及数据提取系统奠定了基础,尤其在VC++等传统桌面开发环境中价值显著。TDNET作为对DWGdirect的二次封装,通常以ActiveX控件形式提供,极大简化了在MFC等框架中的集成难度,使开发者能通过拖放控件和清晰接口快速实现图

weixin_30906185的博客 344

CAD批量BO与标注自动化:从原理到工程落地的完整指南

在CAD设计与工程制图领域,自动化批处理是提升效率、保证规范性的核心技术。其原理在于通过脚本或程序,将重复性手动操作(如边界创建、尺寸标注)转化为可复用的标准化流程。这项技术的核心价值在于解决大规模图纸处理中的效率瓶颈与人为误差,广泛应用于建筑、机械、电气等行业的深化设计、工程量计算与生产图纸输出。本文聚焦于CAD批量BO(边界创建)与标注这一具体场景,深入探讨了基于AutoLISP等脚本语言实现稳定自动化流程的关键步骤,涵盖了环境配置、单图测试、批量架构与错误处理等工程实践要点,并针对文件规范、内存管理等

weixin_33843947的博客 448
上一篇: objectarx开发记录---绘制直角偶数多边形(有边长注记)
下一篇: objectarx2023开发记录,获取垂直方向(向量处理)
create_right
博客等级 码龄7年 489粉丝 236原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值