- 博客(234)
- 收藏
- 关注
原创 objectarx2023开发记录---获取用户点击的坐标
asPnt2d函数用与AcGePoint2d和ads_point类型的转换。1、用户在CAD中点击某一点,获取其坐标,进行后续处理。需要进行必要的类型转换。
2025-11-25 08:11:43
81
原创 objectarx2023开发记录---面积注记
计算插入点思路,求得多边形最小外接矩形,获取其左下角和右上角的坐标点,将其平均后,得到面积标记插入点的位置。表示添加多行文字的下划线,\\L标识下划线起始位置,\\l标识下划线结束位置。CString类型存储double或int类型数据时,使用Format函数。2、创建多行文字,标注面积;3、计算面积注记插入点;1、求解多边形的面积;
2025-11-25 08:07:24
38
原创 objectarx2023开发记录---边长注记
然后,使用atan2函数获取线段的极角值,并确保当边长极角大于90度和小于270度时,将文字标注旋转角加上180度,相加后保持在360度之内,超出则减去360度。首先,为满足标记在多边形内部,需要先计算多边形的排序为顺时针还是逆时针,若为顺时针,则沿着前进方向的右侧标记,若为逆时针,沿着前进方向的左侧标记边长文字。文字插入点位置为边长中点,沿边长前进方向0.2米处的点,将其按顺逆时针旋转90度后得到插入点位置。:需要根据一条已知线段,标记其边长,要求标记位置为多边形内部,标记内容为边长长度,使用宋体标记。
2025-11-25 07:58:52
45
原创 判断一条多段线是否自相交的编程逻辑
将多段线按坐标顺序分成很多条线段,并将线段两两组合判断是否存在跨立相交或节点相交或点线相交,两两相交的线段不得相邻,不得重复组合。如L2线段,不得与L1和L3线段组合判断,同时L2L5组合与L5L2组合等效,避免重复判断。不存在跨立相交时,需判断是否共线或点在线上,若都不满足,则表示该线段间不存在相交,(不跨立相交情况下)满足共线或点在线上,则表示存在相交。4、判断完全部线段组合后,得出结论,有一对线段存在相交,则该多段线存在自相交;反之,所有线段对之间均不存在相交情况,则多段线不存在自相交情况。
2025-11-24 21:02:08
97
原创 objectarx2023开发记录---删除多段线上坐标相同的点
排列结束后,则相同坐标的点将会排在一起,此时调用std::unique()函数进行重复值后移,仅保留一个重复值,再使用erase()函数将末尾多余值删除,就可以实现删除重复点的目的了。--------用于保留重复值中的唯一值,其余将自动移至末尾,将返回移动后起始位置的序号,可配合删除函数使用,实现删除重复值。---------用于vector容器的排序,可升序和降序,使用见代码。--------删除指定元素,写需删除的起点序号和终点序号。------用于计算两点间距离。
2025-11-24 20:48:04
63
原创 objectarx2023开发记录---跨立实验
跨立实验:判断两条线段是否互相跨越,即AB的端点分别处于CD的两侧,CD的端点也处于AB的两侧,其交点仅位于线上,不位于ABCD四个端点之上。常用于判断线段相交或自相交。将AB与AC,AB与AD,CA与CD,CB与CD的叉乘的结果,按AB与CD分类再相乘,比较其结果是否均小于0,同时满足小于0时,存在跨立相交。否则,不存在跨立相交。这里介绍求取线段交点的函数:intersectWith函数,用法如上。函数将返回其交点,若不存在跨立相交,交点坐标将为0值。
2025-11-24 20:38:12
117
原创 objectarx2023开发记录---判断点是否位于某线段上
解决思路:现有线段AB,求点C是否位于线段AB上。先分别计算AB、AC的向量,使AB*AC(向量操作),叉乘结果为0(ABC三点共线),则表明在直线AB上。需要进一步判断C是否落在AB线段上,排除落在延长线上的情况。代码添加了与首尾端点重合的情况,考虑到的是容差问题,当C与A或B重合时,坐标XY不一定在double类型上表现为完全相等,因此需要添加符合容差范围内相等即可的判断代码,即后面两个if语句的作用。由于CAD的计算精度问题,需要设置一个容差值EPS,在容差范围内则复合要求。
2025-11-24 20:28:25
102
原创 objectarx2023开发记录----创建单行文字
背景,需要在CAD中写入某些内容,此时,需要创建单行文字,设置为宋体,指定文字高度和位置,以及旋转角度等。
2025-11-24 17:16:56
126
原创 objectarx2023开发记录,判断点位于线段的左右侧
解决方法:使用向量叉乘方法,分别计算AB向量和AC向量(C点为线外需判断的点),然后将AB向量乘以AC向量,若叉乘结果大于0,则在前进方向的左侧,否则,在前进方向的右侧。问题背景:已知一条线段,有一个线段外的点,如何判断其位于多段线前进方向的左侧或右侧。叉乘:x1*y2-x2*y1.
2025-11-24 17:02:17
108
原创 objectarx2023开发记录---绘制多段线(添加至块表)
4、使用上述代码的前提是,先创建对应的多段线类型的指针,创建并添加顶点后,添加至块表,则显示到图形数据库中。1、获取图形数据库的块表。2、获取块表的记录信息。
2025-11-24 16:56:43
60
原创 objectarx2023开发记录,获取垂直方向(向量处理)
1、需要使用向量来处理上述问题,主要思路是先获取AB的向量,然后将其进行垂直处理,得到与之垂直的方向向量,再将方向向量单一化,获得该方向的单位向量。单位向量乘以距离,结合B点坐标可得到C点坐标。问题背景:有一条线段AB,求与AB垂直,且距离B点100米的点C坐标。其中AB与BC垂直。
2025-11-24 16:52:15
57
原创 objectarx2023开发记录,获取多段线顶点坐标
根据ID,已某种方式,打开对象,使用acdbOpenObject函数,获取实体。从实体中获取多段线AcDbPolyline::cast(pEnt);acedSSName函数,获取其名称,以及对应序号的实体返回值。使用完多段线指针,需使用close()关闭。否则多段线将无法执行操作。获取时,需要判断是否获取成功,返回RTNORM参数,则表示返回成功。需要使用acedSSGet函数。其中-b表示取消框选,只能点选。返回RTCAN表示用户按下ESC键。:S则表示选择单个实体。
2025-11-24 16:42:25
64
原创 objectarx2023开发记录(八)---对称处理
通过在图上标记边长序号,让用户输入对称两条边的序号,由此计算两条对称边的均值,然后执行之前的代码,即可。背景,上次实现的绘制直角+偶数边的多边形,无法实现对称边边长一致,为了改进这一功能,现在添加对称处理。
2025-11-20 14:05:44
131
原创 objectarx2023开发记录(七)----改进记录(六)
背景:记录(五)中使用的方法是质心-极角法判断顺时针或逆时针。这介绍一种更简便、更通用的方法。质心-极角法,在面对不规则的凹凸多边形时,容易出现质心偏离,从而导致排序错误,得到错误的图形。本次使用有向面积法判断目前的图形是顺时针或逆时针排序的,若本身是顺时针排序,则直接更改起点位置即可;若是逆时针排序,则将其遍历后,反向排序即可得到顺时针排序,然后再更改其首点位置即可。
2025-11-19 19:59:58
163
原创 objectarx开发记录(六)---实现西北角+顺时针排序多段线顶点
将所有顶点坐标的X和Y值分别求和,然后平均,得几何中心点的坐标。先找到横坐标最左边的横坐标值(即最小的横坐标值),后找到纵坐标最大的纵坐标值,以此作为该多段线外接矩形的左上角点,然后逐一计算多边形各顶点坐标到该外接矩形左上角点的距离,距离最近,即为多边形的西北角点。结合步骤三过程中,得到的起点坐标(西北角点),将起点及起点之后的数组,先输出排序,然后将起点之前的数组,放在上面排序的后面,进行排序处理。背景:为了保证绘制出的图形不随着起点位置的变化而变化,需要先把起点定为西北角,并按顺时针排序。
2025-11-19 14:00:37
121
原创 objectarx2023开发记录(五)---直角+偶数多边形绘制
一、背景:根据任务,需要在已有地形的基础之上,绘制边长为偶数结尾的(保留2位小数)直角多边形。(6)批处理多段线的中间节点,要求根据方向数值和原始边长值,计算下一条边的末点边长;(4)计算从起始边开始的,沿直线前进方向左侧或右侧的下一个点的方向,得到方向数值;(2)获取已有的地形数据,删除每条直线上首尾节点外的其他多余点;(9)处理末位边长,使其与起始边保持垂直,并计算最后的节点坐标;(5)处理第一条边,使其在方向不变的情况下,边长为偶数;(3)先计算原始各边的边长;(11)完成图形绘制。
2025-11-19 08:11:55
155
原创 objectarx开发记录(四)----点选+单选+多段线
(2)设置结果列表,resbuf格式的,将类型设置为0,即选择实体;将数值设置为名称,并输入多段线名称LWPOLYLINE;下一个链接内容写成NULL。(3)将resbuf对象放入第四个参数过滤器的位置,第一个参数里设置模式,即可实现单选+点选+多段线的选择。在CAD中,选择集使用acdeSSGet()函数实现。设置一定参数,即可实现单选+点选+多段线模式。背景:希望可以选择一条多段线,并且是点选,而不是框选。(1)通过-b和:S模式结合,实现点选和单选。
2025-11-18 19:24:49
153
原创 objectarx2023开发记录(三)---isKindOf()函数
背景:由于使用acedSSGet()函数自主选择得到的选择集,包含除多段线以外的实体,在进行多段线处理时,容易造成CAD软件崩溃等问题,需要辨别出多段线类型,再进行处理。(2)然后调用isKindOf()函数,判断是否为多段线,若是进行多段线顶点坐标提取。使用isKindOf()函数前,必须保证实体已经打开。isKindOf()函数,用于辨别实体的类型,参数填写多段线类型即可实现多段线的提取。只输出两个多段线的坐标,圆弧、圆的实体被剔除不显示。(1)先通过AcDbEntity实体指针对象,打开实体。
2025-11-14 13:25:04
158
原创 objectarx2023开发记录(二)--用户交互
(1)acedSSGet()函数,用于获取选择集实体。(5)acdbOpenObject()函数,用于打开实体,获取多段线指针。(10)最后,使用完实体指针和ads_name对象后,记得关闭和释放资源。(2)acedSSLength()函数,用于获取选择集所含的实体数。(9)getPointAt()函数,获取多段线单个顶点的坐标值。(3)acedSSName()函数。用于获取实体的名称。(7)numVerts()函数,获取多段线顶点数量信息。(8)通过顶点数,遍历每个顶点,获取其坐标。
2025-11-13 21:44:39
186
原创 objectarx2023开发记录(一)
找到上图函数,将代码添加在函数内。该函数,由前缀标识AB、命令组名字MyGroup、命令名字MyCommand组成。arxEntryPoint.cpp是程序的主入口,相当于main()函数。(4)创建实体对象,将该对象加入到特定的块表记录中。可修改其命令名称为DL,标识画线的意思。(3)获得一个存储实体的块表记录;(1)确定创建对象的图形数据库;(2)获得这个图形数据库的块表;下图中,要修改此处为命令名称。我们的代码就是写在这里面。至此,简单的画线项目完成。内容:创建一条直线。
2025-11-13 09:49:05
125
原创 VS2019+objectarx2023+CAD2023开发环境搭建
随后,以管理员身份运行objectarx向导程序,如果不是以管理员身份运行,后面无法创建项目。安装向导时,选择解压后SDK的路径,以及安装CAD2023时的路劲,一直点击下一步直至完成即可。上图中,位于中间的.exe文件,就是SDK文件,需要双击运行解压,解压后记录其解译位置。解压SDK后,以管理员身份运行objectarx向导(即图中第一个文件夹内的文件)。4、安装好上述软件之后,打开VS2019,搜索arx,就可以创建项目了。5、创建时,选择第一个arx/DBX即可创建项目,开始编程。
2025-11-13 08:56:56
117
原创 CAD中检查两个闭合多段线是否相交
1、使用region命令,将需要检查的两个多段线转成面域。保留下来的就是相交的部分,将面域分解,就能得到多段线。
2025-11-11 13:32:01
146
原创 arcgis空间分析理论研究
计算地表倾斜度(坡度)和方向(坡向),用于太阳辐射评估、水土保持规划等。包括地形起伏度(局部高程极差)、地表粗糙度(地形复杂程度)、地表曲率(凹凸形态)等量化参数。使用栅格插值(如克里金法)或TIN(不规则三角网)生成高精度地形表面。结合地形阴影、纹理贴图及建筑模型(如轮廓拉伸)创建逼真三维场景。arcgis的空间分析功能有(1)地形与地表分析;(2)距离与成本分析;(6)适宜性与选址分析;主要内容包括:高程分析、坡度与坡向分析、表面模型构建、三维场景渲染、水文特征提取等。
2025-04-26 10:14:06
535
原创 CAD导入arcgis中保持面积不变的方法
5、结论:可以看见,转换前后面积一致不变。所以,如果希望导出成shp数据的面积与CAD文件一致,必须使用DWG文件中的面要素进行转换。
2025-04-12 19:28:47
1348
1
原创 大地测量知识点
二级逼近--以旋转椭球体(规则数学表面)替代大地体,作为地球形状的数学近似,解决大地水准面无法直接用于计算的问题;参考椭球体是经过局部定位和定向的旋转椭球体,通过调整椭球参数(长半轴、扁率)及位置,使其与特定区域的大地水准面(即大地体表面)实现最佳拟合,从而作为测量计算的基准面。参考框架:基准的物理实现与应用载体,通过地面控制网、连续运行参考站(CORS)等基础设施,将抽象的基准参数转化为实际可用的空间坐标系统;作用:作为海拔高程起算面,为地形测量、工程建设和地图绘制提供统一基准。
2025-03-22 01:01:49
754
原创 CASS11如何关闭输入命令提示框
在命令行中输入INPUTSEARCHOPTIONFLAGS,根据提示,再输入0值,空格,即可完成设置。1、调整系统变量INPUTSEARCHOPTIONFLAGS为0值即可。
2025-02-22 10:54:33
665
原创 CASS多个宗地连续编号
2、 如果自动生成的界址点不是从西北角开始编号的,需要调整宗地内界址点顺序。调整界址点顺序的时候,选择手工指定,顺时针。3、调整界址点顺序后,点击重排界址点号。选择手工选择按生成顺序重排,选中所有需要重排的界址点,设置起止点号。哪个宗地需要调整就按照以上步骤进行操作即可。
2025-02-20 08:12:21
2104
原创 CASS中使图形与线段平行
3、指定基点:(选择点A),指定旋转角度:(输入R),指定参照角或[复制(C)/参照(R)]:(选择点A),指定参照角,指定第二点:(选择点B),指定新角度或、[点P]:(输入P),指定第一点(选择点C),指定第二点:(选择点D)。需使AB边与线段CD平行。
2025-02-17 15:58:35
736
原创 CASS7.0无法双击文字进行编辑解决方法
3、再在命令栏输入 DBLCLKEDIT ,然后点击“空格键”1、在命令栏输入 PICKFIRST ,然后点击“空格键”4、在新的命令栏输入 on ,然后点“空格键”2、在新的命令栏输入 1 ,然后点“空格键”
2025-01-22 08:25:41
729
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅