shalei021647
发表于 2011-11-16 19:44:50
刚到屋,经测试,还是不行啊,每张图的左角点都是(75,85)左右。我觉得是不是与这个批量处理的软件有关系啊,因为我在单张图里面用你写的这个代码,确实能到原点。而批处理起来就不行了。郁闷
shalei021647
发表于 2011-11-16 19:53:09
本帖最后由 shalei021647 于 2011-11-16 20:26 编辑
xiaxiang 发表于 2011-11-16 11:24 static/image/common/back.gif
经非严谨测试,如下代码似乎可行。请再测试
我现在改成这样的代码了:
(setvar "cmdecho" 0);;暂时在命令函数运行时关闭回显提示和输入
(command "ucs" "w");;把当前坐标系设为世界
(setq dimscaley (getvar"dimscale") dimlfacy (getvar"dimlfac"));;获取原图当前使用的标注样式的全局比例因子和测量单位比例因子
(setvar "dimscale" 1);;把当前标注样式的全局比例改为1
(setvar "dimlfac" 1);;把当前标注样式的测量单位比例因子改为1
(command "-purge" "a" "" "n")
(command "zoom" "e")
(command "base" (list (car (getvar"extmin")) (cadr (getvar "extmin")) 0.0000))
(command "move" "all" "" (list (car (getvar"extmin")) (cadr (getvar "extmin")) 0.0000) (list 0.0000 0.0000 0.0000))
(setvar "dimscale" dimscaley);;恢复原标注样式的全局比例
(setvar "dimlfac" dimlfacy);;恢复原标注样式的测量单位比例因子
(command "zoom" "e")
(setvar "cmdecho" 1)
可是还是不太行,主要就是这两张图纸(我上面传的压缩包里面第二张和第三张),也就是这两个图,。在用上面的代码批处理的时候,除了这两张图都能成功的将左角点移到原点。而这两张,无论是我单独打开这两个文件用命令处理,还是批处理,都不能将左角点归到原点去。图框外面也没有啥东西啊,郁闷的很。
又经过半天的测试,突然发现,这两个图纸我先把里面的所有的图移动一下位置,然后,再用命令就能把左角点移动到原点了,费解啊
刚才又发现,这个先移动的位置必须是从原点方向往正x和正y方向移动后,再用命令才好使。真的很费解,难道是图形界限的问题?
xianaihua
发表于 2011-11-17 00:38:04
shalei021647 发表于 2011-11-16 19:53 static/image/common/back.gif
我现在改成这样的代码了:
试一下我的程序
shalei021647
发表于 2011-11-17 01:13:24
本帖最后由 shalei021647 于 2011-11-17 01:25 编辑
xiaxiang 发表于 2011-11-16 11:24 static/image/common/back.gif
经非严谨测试,如下代码似乎可行。请再测试
今天终于把问题解决了,代码如下:
(setvar "cmdecho" 0);;暂时在命令函数运行时关闭回显提示和输入我估计是坐标系变换的问题。晕死了。经测试用这个代码再加上那个批处理程序,可以批量成功的把左下角点移动当前坐标系的零点了。唉。痛苦啊。
把附件上传上来供大家分享,由于不懂lisp,七拼八拼的,可能代码有些臃肿,望见谅。另外非常感谢夏香大侠的热心帮助。
这个附件要配合那个cad批打程序使用,最好是1.2版的,1.0版的俺没有测试。
这个是在单独dwg文件中使用的,加载后,命令为move00 如果单独使用也没有啥意思,主要是用来测试效果用的。
最好总结一下,似乎那个cad批打程序使用的时候,cad一定不要是打开状态,如果是打开状态,批处理完了的话,肯定会出错。就是达不到想要的效果,我也不明白是咋回事,如果cad是在关闭状态下启动这个批打软件的话,就没问题。
shalei021647
发表于 2011-11-17 01:29:58
xianaihua 发表于 2011-11-17 00:38 static/image/common/back.gif
试一下我的程序
多谢帮助,第一次测试,只把左下角点移动到了X轴上,也就是说y是零,但x不是零,第二次测试,cad出现错误提示。卡死了,最后只能强行关闭。
xianaihua
发表于 2011-11-17 07:32:59
本帖最后由 xianaihua 于 2011-11-17 07:52 编辑
shalei021647 发表于 2011-11-17 01:29 http://bbs.mjtd.com/static/image/common/back.gif
多谢帮助,第一次测试,只把左下角点移动到了X轴上,也就是说y是零,但x不是零,第二次测试,cad出现错误 ...
?,我在我的机子上用没问题!
注意:因为在程序使用了ObjectDBX,也就是说,在不打开图的情况下,处理你的图纸,所以,你在使用的时候,必须将所有要处理的图纸关闭,否则会出错。
还有,如果你的图形中,图框的四个边线没有将图形中所有对象包含,在移动中会出现移动位置不合适。因为本程序是通过判断图形中所有对象的最大边界框来确定图框左下角坐标的,如果在图框的左边、下面,含有任何实体对象,就会导致取得的最大边框坐标出错。
xiaxiang
发表于 2011-11-17 08:47:10
恭喜!能解决问题就好!这个确实很头疼,我研究了两天,一张图纸都没画!所以你得给我加100分作为补偿
shalei021647
发表于 2011-11-17 09:37:41
xianaihua 发表于 2011-11-17 07:32 static/image/common/back.gif
?,我在我的机子上用没问题!
注意:因为在程序使用了ObjectDBX,也就是说,在不打开图的情况下,处理 ...
兄台能否帮忙测试一下我上传的图纸,因为我一个图中有三个图框在一排,边框最底边是在一水平线上。
shalei021647
发表于 2011-11-17 09:38:26
xiaxiang 发表于 2011-11-17 08:47 static/image/common/back.gif
恭喜!能解决问题就好!这个确实很头疼,我研究了两天,一张图纸都没画!所以你得给我加100分作为补偿
呵呵,非常感谢,我也是近两天两夜没干别的事了,现在眼睛都是红通通的
wudapeng
发表于 2011-11-17 17:05:07
用vba打开文件,调用lisp程序运行,vba关闭文件
vba批量处理文件比较简单,两者结合
lisp好像是在打开文件后才加载程序,文件关闭后程序就结束了,下一个文件就没法自动处理了