- 博客(230)
- 收藏
- 关注
原创 判断一条多段线是否自相交的编程逻辑
将多段线按坐标顺序分成很多条线段,并将线段两两组合判断是否存在跨立相交或节点相交或点线相交,两两相交的线段不得相邻,不得重复组合。如L2线段,不得与L1和L3线段组合判断,同时L2L5组合与L5L2组合等效,避免重复判断。不存在跨立相交时,需判断是否共线或点在线上,若都不满足,则表示该线段间不存在相交,(不跨立相交情况下)满足共线或点在线上,则表示存在相交。4、判断完全部线段组合后,得出结论,有一对线段存在相交,则该多段线存在自相交;反之,所有线段对之间均不存在相交情况,则多段线不存在自相交情况。
2025-11-24 21:02:08
52
原创 objectarx2023开发记录---删除多段线上坐标相同的点
排列结束后,则相同坐标的点将会排在一起,此时调用std::unique()函数进行重复值后移,仅保留一个重复值,再使用erase()函数将末尾多余值删除,就可以实现删除重复点的目的了。--------用于保留重复值中的唯一值,其余将自动移至末尾,将返回移动后起始位置的序号,可配合删除函数使用,实现删除重复值。---------用于vector容器的排序,可升序和降序,使用见代码。--------删除指定元素,写需删除的起点序号和终点序号。------用于计算两点间距离。
2025-11-24 20:48:04
54
原创 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
109
原创 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
54
原创 objectarx2023开发记录----创建单行文字
背景,需要在CAD中写入某些内容,此时,需要创建单行文字,设置为宋体,指定文字高度和位置,以及旋转角度等。
2025-11-24 17:16:56
93
原创 objectarx2023开发记录,判断点位于线段的左右侧
解决方法:使用向量叉乘方法,分别计算AB向量和AC向量(C点为线外需判断的点),然后将AB向量乘以AC向量,若叉乘结果大于0,则在前进方向的左侧,否则,在前进方向的右侧。问题背景:已知一条线段,有一个线段外的点,如何判断其位于多段线前进方向的左侧或右侧。叉乘:x1*y2-x2*y1.
2025-11-24 17:02:17
32
原创 objectarx2023开发记录---绘制多段线(添加至块表)
4、使用上述代码的前提是,先创建对应的多段线类型的指针,创建并添加顶点后,添加至块表,则显示到图形数据库中。1、获取图形数据库的块表。2、获取块表的记录信息。
2025-11-24 16:56:43
25
原创 objectarx2023开发记录,获取垂直方向(向量处理)
1、需要使用向量来处理上述问题,主要思路是先获取AB的向量,然后将其进行垂直处理,得到与之垂直的方向向量,再将方向向量单一化,获得该方向的单位向量。单位向量乘以距离,结合B点坐标可得到C点坐标。问题背景:有一条线段AB,求与AB垂直,且距离B点100米的点C坐标。其中AB与BC垂直。
2025-11-24 16:52:15
49
原创 objectarx2023开发记录,获取多段线顶点坐标
根据ID,已某种方式,打开对象,使用acdbOpenObject函数,获取实体。从实体中获取多段线AcDbPolyline::cast(pEnt);acedSSName函数,获取其名称,以及对应序号的实体返回值。使用完多段线指针,需使用close()关闭。否则多段线将无法执行操作。获取时,需要判断是否获取成功,返回RTNORM参数,则表示返回成功。需要使用acedSSGet函数。其中-b表示取消框选,只能点选。返回RTCAN表示用户按下ESC键。:S则表示选择单个实体。
2025-11-24 16:42:25
27
原创 objectarx2023开发记录(八)---对称处理
通过在图上标记边长序号,让用户输入对称两条边的序号,由此计算两条对称边的均值,然后执行之前的代码,即可。背景,上次实现的绘制直角+偶数边的多边形,无法实现对称边边长一致,为了改进这一功能,现在添加对称处理。
2025-11-20 14:05:44
127
原创 objectarx2023开发记录(七)----改进记录(六)
背景:记录(五)中使用的方法是质心-极角法判断顺时针或逆时针。这介绍一种更简便、更通用的方法。质心-极角法,在面对不规则的凹凸多边形时,容易出现质心偏离,从而导致排序错误,得到错误的图形。本次使用有向面积法判断目前的图形是顺时针或逆时针排序的,若本身是顺时针排序,则直接更改起点位置即可;若是逆时针排序,则将其遍历后,反向排序即可得到顺时针排序,然后再更改其首点位置即可。
2025-11-19 19:59:58
162
原创 objectarx开发记录(六)---实现西北角+顺时针排序多段线顶点
将所有顶点坐标的X和Y值分别求和,然后平均,得几何中心点的坐标。先找到横坐标最左边的横坐标值(即最小的横坐标值),后找到纵坐标最大的纵坐标值,以此作为该多段线外接矩形的左上角点,然后逐一计算多边形各顶点坐标到该外接矩形左上角点的距离,距离最近,即为多边形的西北角点。结合步骤三过程中,得到的起点坐标(西北角点),将起点及起点之后的数组,先输出排序,然后将起点之前的数组,放在上面排序的后面,进行排序处理。背景:为了保证绘制出的图形不随着起点位置的变化而变化,需要先把起点定为西北角,并按顺时针排序。
2025-11-19 14:00:37
117
原创 objectarx2023开发记录(五)---直角+偶数多边形绘制
一、背景:根据任务,需要在已有地形的基础之上,绘制边长为偶数结尾的(保留2位小数)直角多边形。(6)批处理多段线的中间节点,要求根据方向数值和原始边长值,计算下一条边的末点边长;(4)计算从起始边开始的,沿直线前进方向左侧或右侧的下一个点的方向,得到方向数值;(2)获取已有的地形数据,删除每条直线上首尾节点外的其他多余点;(9)处理末位边长,使其与起始边保持垂直,并计算最后的节点坐标;(5)处理第一条边,使其在方向不变的情况下,边长为偶数;(3)先计算原始各边的边长;(11)完成图形绘制。
2025-11-19 08:11:55
154
原创 objectarx开发记录(四)----点选+单选+多段线
(2)设置结果列表,resbuf格式的,将类型设置为0,即选择实体;将数值设置为名称,并输入多段线名称LWPOLYLINE;下一个链接内容写成NULL。(3)将resbuf对象放入第四个参数过滤器的位置,第一个参数里设置模式,即可实现单选+点选+多段线的选择。在CAD中,选择集使用acdeSSGet()函数实现。设置一定参数,即可实现单选+点选+多段线模式。背景:希望可以选择一条多段线,并且是点选,而不是框选。(1)通过-b和:S模式结合,实现点选和单选。
2025-11-18 19:24:49
151
原创 objectarx2023开发记录(三)---isKindOf()函数
背景:由于使用acedSSGet()函数自主选择得到的选择集,包含除多段线以外的实体,在进行多段线处理时,容易造成CAD软件崩溃等问题,需要辨别出多段线类型,再进行处理。(2)然后调用isKindOf()函数,判断是否为多段线,若是进行多段线顶点坐标提取。使用isKindOf()函数前,必须保证实体已经打开。isKindOf()函数,用于辨别实体的类型,参数填写多段线类型即可实现多段线的提取。只输出两个多段线的坐标,圆弧、圆的实体被剔除不显示。(1)先通过AcDbEntity实体指针对象,打开实体。
2025-11-14 13:25:04
157
原创 objectarx2023开发记录(二)--用户交互
(1)acedSSGet()函数,用于获取选择集实体。(5)acdbOpenObject()函数,用于打开实体,获取多段线指针。(10)最后,使用完实体指针和ads_name对象后,记得关闭和释放资源。(2)acedSSLength()函数,用于获取选择集所含的实体数。(9)getPointAt()函数,获取多段线单个顶点的坐标值。(3)acedSSName()函数。用于获取实体的名称。(7)numVerts()函数,获取多段线顶点数量信息。(8)通过顶点数,遍历每个顶点,获取其坐标。
2025-11-13 21:44:39
183
原创 objectarx2023开发记录(一)
找到上图函数,将代码添加在函数内。该函数,由前缀标识AB、命令组名字MyGroup、命令名字MyCommand组成。arxEntryPoint.cpp是程序的主入口,相当于main()函数。(4)创建实体对象,将该对象加入到特定的块表记录中。可修改其命令名称为DL,标识画线的意思。(3)获得一个存储实体的块表记录;(1)确定创建对象的图形数据库;(2)获得这个图形数据库的块表;下图中,要修改此处为命令名称。我们的代码就是写在这里面。至此,简单的画线项目完成。内容:创建一条直线。
2025-11-13 09:49:05
124
原创 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
143
原创 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
1346
1
原创 大地测量知识点
二级逼近--以旋转椭球体(规则数学表面)替代大地体,作为地球形状的数学近似,解决大地水准面无法直接用于计算的问题;参考椭球体是经过局部定位和定向的旋转椭球体,通过调整椭球参数(长半轴、扁率)及位置,使其与特定区域的大地水准面(即大地体表面)实现最佳拟合,从而作为测量计算的基准面。参考框架:基准的物理实现与应用载体,通过地面控制网、连续运行参考站(CORS)等基础设施,将抽象的基准参数转化为实际可用的空间坐标系统;作用:作为海拔高程起算面,为地形测量、工程建设和地图绘制提供统一基准。
2025-03-22 01:01:49
753
原创 CASS11如何关闭输入命令提示框
在命令行中输入INPUTSEARCHOPTIONFLAGS,根据提示,再输入0值,空格,即可完成设置。1、调整系统变量INPUTSEARCHOPTIONFLAGS为0值即可。
2025-02-22 10:54:33
663
原创 CASS多个宗地连续编号
2、 如果自动生成的界址点不是从西北角开始编号的,需要调整宗地内界址点顺序。调整界址点顺序的时候,选择手工指定,顺时针。3、调整界址点顺序后,点击重排界址点号。选择手工选择按生成顺序重排,选中所有需要重排的界址点,设置起止点号。哪个宗地需要调整就按照以上步骤进行操作即可。
2025-02-20 08:12:21
2092
原创 CASS中使图形与线段平行
3、指定基点:(选择点A),指定旋转角度:(输入R),指定参照角或[复制(C)/参照(R)]:(选择点A),指定参照角,指定第二点:(选择点B),指定新角度或、[点P]:(输入P),指定第一点(选择点C),指定第二点:(选择点D)。需使AB边与线段CD平行。
2025-02-17 15:58:35
731
原创 CASS7.0无法双击文字进行编辑解决方法
3、再在命令栏输入 DBLCLKEDIT ,然后点击“空格键”1、在命令栏输入 PICKFIRST ,然后点击“空格键”4、在新的命令栏输入 on ,然后点“空格键”2、在新的命令栏输入 1 ,然后点“空格键”
2025-01-22 08:25:41
727
原创 arcgis的合并、相交、融合、裁剪、联合、标识操作的区别和使用
需要输入两个面要素,最终得到的是两个输入面要素相交部分的结果面要素。合并能将两个单独存放的两个要素类的内容,汇集到一个要素类里面。裁剪需要输入两个面要素,最后裁剪的结果是裁剪要素覆盖的范围。融合能将一个要素类内的所有元素融合成一个整体。联合是将输出两个要素类的并集。
2025-01-08 22:13:50
5300
原创 平面坐标转大地坐标(arcgisPro中进行)
说明:此法与之前的笑脸工具方法转换的坐标,差别在秒级,分级单位基本一致,精度客观。5、 设置大地坐标显示格式。3、打开坐标转换工具。
2025-01-07 14:44:33
974
原创 平面坐标(XY)转大地坐标(经纬度)
由于我国大比例尺地形,均采用高斯克吕格3度带投影,所以这里选择高斯三度带投影,中央子午线根据带转换坐标计算,一般为中央子午线L=N*3.这里的N为带号。而N=当地经度/3.(N有余数时,N为商的整数部分+1)。3、设置源坐标类型为平面坐标,目标坐标类型为大地坐标,并选择其格式为度分秒或者度等,椭球均选择CGCS2000。(这里要转的数据就是CGCS2000的平面坐标至大地坐标)根据自己需求选择椭球。若是需要批量转换,点击文件转换按钮,按照指示准备好数据,并完成转换。然后输入XY坐标,点击转换坐标按钮即可。
2025-01-07 14:19:09
16911
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅