OooCcc 发表于 2020-9-2 17:23:51

将图形中的所有对象z轴坐标归零

本帖最后由 OooCcc 于 2020-9-6 10:25 编辑

日常绘图中有时会遇到莫名不能合并pl线,不能倒角,填充选择不到封闭图形区域。
这些问题很可能是有部分对象在z轴上不是0

这个程序是本人写的一个实用代码。用于将图形中的所有对象(包括模型空间与图纸空间内的对象、图块内的所有对象等)的z轴或者厚度都设置为0.
本脚本目前无法解决的问题如下:
1、将3D线段转换为2Dpline线后不能归零
2、将2Dpline线进行3D旋转后无法归零
3、将2D圆弧或者圆进行3D旋转后无法归零



OooCcc 发表于 2020-9-3 20:50:43

本帖最后由 OooCcc 于 2020-9-3 21:32 编辑

870447782孤星 发表于 2020-9-3 18:35
好的,谢谢,我发的这个GIF是可以解决么?目前的水平看不懂反应器写的这个东西
另外,不太懂你的gif要解决的是啥问题。。。
刚才又看了下,知道你说的是什么了。。。。

首先绘制有不同z坐标点的线段,然后转换为pl线后会产生z轴不归零的问题。。。。

我研究下先。。。。。。。。。。

找到原因了:这是应为pline线只能是二维的,所以将三维的线转换为二维的pline的时候,cad自动将ucs坐标系转换到了与线的2个z轴对应的坐标系,然后转换为pline线。。。这样就导致了pline的二维点坐标还是两两出现的,是正确的的。

由于pline线只能是二维的,所以pline线的坐标点都是两两出现的,也就是pline线的coordinates属性内的数据只有x和y的坐标,而没有z坐标。
这就导致了不能简单地用改变z轴的方法将其归0。。。。

目前只有个简单粗暴的方法。。。就是把这种pline线炸开了归0。。。。

至于如何将pline线正确归0,只想到了一个不成熟的方法:就是将该段pline线复制后炸开,取其相对于当前坐标系正确的三维点坐标,取其的x和y坐标点替换pline的coordinates内的坐标数据。

OooCcc 发表于 2020-9-3 16:52:54

870447782孤星 发表于 2020-9-3 15:44
是这样的,我在单位试了一下,厚度确实没了,可能昨晚家里的cad的问题。那么能改成不去掉厚度么?我们的 ...

可以啊~
你去把下面这段代码删掉就好了:
    ;;Elevation属性
    (setq _objs "AcDbHatch AcDbLightWeightPolyline AcDbPolyline")
    (if (vl-string-search _objname _objs)
      (vla-put-elevation b 0)
    )

OooCcc 发表于 2020-9-3 08:57:36

本帖最后由 OooCcc 于 2020-9-3 09:27 编辑

870447782孤星 发表于 2020-9-3 00:01
已经下载,测试了一下好像多段线的厚度并不能归0,还有几个问题想请教大佬:1.多段线的端点本身就是二维点 ...
2d多段线好像只有个高程,所以只需要改Elevation属性就能归零了。关于多段线厚度不能归0,我这里测试了下,貌似没这问题呀。。。

999999 发表于 2020-9-2 17:55:13

优秀呀,,下载试一下,因为之前用的Z轴归零的话,是不归零的图形都在一个面上,,,遇到不在一个面上不归零的图形就不有办法,,谢谢楼主的分享

OooCcc 发表于 2020-9-2 19:15:30

999999 发表于 2020-9-2 17:55
优秀呀,,下载试一下,因为之前用的Z轴归零的话,是不归零的图形都在一个面上,,,遇到不在一个面上不归 ...

希望对你有用~呵呵,我也是网上教程用了一堆没法彻底归零,而且还麻烦,所以抽空写了这个~~

870447782孤星 发表于 2020-9-3 00:01:57

已经下载,测试了一下好像多段线的厚度并不能归0,还有几个问题想请教大佬:1.多段线的端点本身就是二维点了吧?2.3d点转成2d点怎么去判断Z轴呢?不是应该去判定坐标的Z轴再去归0么?初学者,请多赐教

baitang36 发表于 2020-9-3 12:23:43

下载试一下

870447782孤星 发表于 2020-9-3 15:44:55

OooCcc 发表于 2020-9-3 08:57
2d多段线好像只有个高程,所以只需要改Elevation属性就能归零了。关于多段线厚度不能归0,我这里测试了下 ...

是这样的,我在单位试了一下,厚度确实没了,可能昨晚家里的cad的问题。那么能改成不去掉厚度么?我们的画图是采用厚度去判定风管的尺寸,还有我做了个测试,是线段设置了Z轴再转为多段线之后的运行的结果,产生了Z轴不归0,已经线段位置改变的情况

870447782孤星 发表于 2020-9-3 18:35:49

OooCcc 发表于 2020-9-3 16:52
可以啊~
你去把下面这段代码删掉就好了:
    ;;Elevation属性


好的,谢谢,我发的这个GIF是可以解决么?目前的水平看不懂反应器写的这个东西

OooCcc 发表于 2020-9-3 20:48:34

870447782孤星 发表于 2020-9-3 18:35
好的,谢谢,我发的这个GIF是可以解决么?目前的水平看不懂反应器写的这个东西

不好意思,说错了。关于厚度是应该删掉
    ;;Thickness属性
    ;;对象的厚度属性
这个下面的代码段
页: [1] 2 3
查看完整版本: 将图形中的所有对象z轴坐标归零