ObjecARX实现对圆图极坐标展开获得方图
本文并不包含基本的图形数据库的基本操作,为应有的必备内容。转换的圆图实际上应该是由多种元素(如直线,多段线等)组合而成的符号图像,难点在于展开的坐标合理映射。作者水平有限,欢迎指教。
由于原图是圆,可以想到使用极坐标展开方式,变换图像几何坐标。
极坐标变换的关键在于,根据极坐标变换前的图像(我们称为“方图”)确定极坐标变换后的图像(我们称为“圆图”)上每个实体关键点的坐标值。也即是找到“圆图”和“方图”间几何坐标的对应关系。

如图所示,实现极坐标变换的关键即在于找到圆图上任一点P的角度和半径,在方图上对应的点p(m,n),然后通过插值算法实现圆图上所有实体关键点的赋值。
方图上,其行列数分别为M、N,实际上这两个参数改变的是图形的长度缩放和角度变换问题,方图上的每一列对应为圆图上的每条半径,即特定的半径都能映射到特定的列数,半径方向存在着一个长度缩放因子常规情况下为delta_r = M/R,但在要求1:1图纸中,可直接设置为常量1,保持长度不变,圆周方向被分为N等分,即角度因子为delta_t = 2π/N,该因子实际作用是将被压缩的横坐标放大展开。
圆图上,图像坐标(i,j)和世界坐标(x,y)有着如下变换关系:x = j - R, y = R - i;而在AutoCAD中大多数图纸都是从世界坐标原点开始起稿,所以求P点的角度和半径成为极坐标变换中的首要之事。
那么,图中P点半径长度为r = sqrt(x2 + y2),角度theta = arctan(y/x);
圆图上点P的半径在方图上对应的纵坐标为m=r/delta_r;
圆图上点P的角度在方图上对应的横坐标为n = thata/delta_t。
由于ObjectARX不同于一般的图像视觉处理软件,在使用该方法时,图形数据库可修改是采用图形坐标(i,j)还是世界坐标(x,y)。本技术采用长度同等,角度转正调整的参数设定,相比于图形坐标,世界坐标有两个优点,一、不需要对同一个坐标进行两次不同类型的变换,设定角度跟半径时可以更好的代入数学公式计算中,二、不需要预处理,数值处理更加简便,坐标偏移后成图效果好。
代码看起来很长,实际上是多种图形处理的重复,实际懂的点的转换即可实现。
写在文末:一直想用毕设的东西做个视频,比如以比翼琪霏为素材,弄一个乱糟糟的圆dwg然后输出后为一个完整的方图jpg,给人一种焕然一新解谜的感觉,但七八月弄了好久,效果并不理想。始终想分享一点objectarx的资料到网上,决定把其中这部分内容分享出来