CAD转CAD注意事项

原文发布时间:2012-05-03

作者:李宁

QQ:1335778918 (me)

        刚处理一批数据,在visualizer里面查看结果好好的,数目也正确,可到输出结果一看,乱七八糟,牛头不对马嘴,郁闷了一阵子之后,开始找原因。
      是这样:cad中的绿地只是简单的用一系列绿地符号表示,绿地的边界由各种线状地物构成,包括房屋边界线,道路边界线等。此次欲将绿地边界线提取出来,思路自然是将各类边界线构面,然后用绿化符号去跟这些面做空间运算,存在叠置的面就被当做绿地边界线了,理论上就是这样的(会存在错误,原因为原始数据的问题,后面会提到)。
     于是,我想当然的就动手了。一个areabuilder,一个pointonareoverlayer,再加上几个tester,结果出炉,输出到shape文件中的结果完全正确,输出到dwg中的却存在问题。找原因吧。
      错误:输出的面变成了乱七八糟的符号。由于cad中符号是个图块,曾经和面做过overlayer运算,而且输入时候也暴露了 autocad_blockname属性,而我的输出面中有遗留的一个属性(由dgn转dwg时候设置的),刚好是 autocad_blockname,首先我就想到是不是这个原因导致的,是不是fme自动把输入输出的这两个属性连接起来了呢?所以用了一个属性移除,在输出前移除autocad_blockname,再在输出中删掉这个属性。运行,结果变了,可还是不正确。我没有去考证(是不是fme自动把输入输出的这两个属性连接起来了呢)这个猜想是否正确,别拍砖,改天再研究这玩意。

      接着找原因。既然在visualizer中是正确的,为什么输出又不对呢。查找了所有输出,发现个数正确,就是表现方式不对。有点纠结,开visualizer,选择一个看属性,惊天发现:autocad_entity属性居然是 autocad_insert,就是你了小子,马上把输出的autocad_entity手动赋值为antocad_line,重新运行,打开结果一看,OK,正确了。

        总结:cad转cad的时候,做了叠置等各类空间运算后,由于都是cad数据,可能某些相同的属性会彼此被冲掉,而被另外一方的相同属性替代,这样可能导致输出结果不正确。例如上面的边界线本身是线状地物,但它的这个属性变为insert之后,你让一条线输出后变为一个insert(图块),不就乱套了吗?

    同理,dgn转dgn应该也会存在相同的问题,记录于此,以后少走弯路。

        先不要急,又发现一问题,上面的结果看起来正确了,实际上是错误的——整个绿地面或线被缩小了一倍。
      刚听到这消息,我差点崩溃,这到底是肿么了?
      一般来说,线面直接转线面,肯定不会出这个问题,肯定又是图块搞的鬼。打开图块的属性类表,看到一比较眼熟的属性:autocad_scale,赶快把它暴露出来,运行调试,发现此值为0.5,刚好和缩小一倍相等,于是将该属性复制为1。看结果,此属性对了,但是图形还是不对,再看结果属性:autocad_xscale,autocad_yscale,两个的值均为0.5。就是这家伙了,手动设置为1,结果正确。原因是在cad的输入里面,reader默认是不显示autocad_xscale、autocad_yscale两个属性的,得手动暴露一下,否则,图块和面一空间运算,就把图块的这两个属性冲掉了面的对应两个属性的值,所以。。。你懂的。

猜你喜欢

转载自blog.csdn.net/fmechina/article/details/80705015
CAD