khidigis 发表于 2010-7-28 10:03:00

批量修改二维多段线的标高

执行scale命令改变了二维多段线的标高值,我需要把标高值改回去,每个被修改的标高值/scale命令输入的比例因子,就是原来的值,如何用lisp实现批量修改,在线等,急。谢谢各位

gufeng 发表于 2010-7-28 11:13:00

(defun c:Test (/ ACAD_ERR ERR_INFO)
;_所有的函数在这里写
(setq oldcmdecho (getvar "cmdecho"))
(setvar "cmdecho" 0)
(defun acad->app
(/ BG BGBS I INFO NEWBG OBJ OBJ_5 OBJ_NAME OBJ_TYPE OBJ_VAL)
(setq obj (ssget '((0 . "*POLYLINE"))))
(if obj
(progn
(while
(not
(setq
bgbs (getreal "\n输入改正数(正-原标高乘/负-原标高除):")
)
)
)
(setq i -1)
(setq info '()) ;_没有修改的园元句柄表
(repeat (sslength obj)
(vl-load-com)
(setq obj_name (ssname obj (setq i (1+ i)))) ;_图元名
(setq obj_val (vlax-ename->vla-object obj_name)) ;_Val对象
(setq obj_5 (vlax-get obj_val 'handle)) ;_图元句柄
(setq obj_type (strcase (vlax-get obj_val 'objectname))) ;_图元类型
(cond
((or (= obj_type "ACDBPOLYLINE")
(= obj_type "ACDB2DPOLYLINE")
) ;_二维多段线
(setq bg (vlax-get obj_val 'Elevation)) ;_原标高
(if (< bg 0);_原标高小于0不作修改
(setq info (cons obj_5 info))
(progn
(if (minusp bgbs)
(setq newbg (/ bg (abs bgbs))) ;_原标高/改正数
(setq newbg (* bg bgbs)) ;_原标高*改正数
)
(command "_change" obj_name "" "p" "e" newbg "")
)
)
)
((= obj_type "ACDB3DPOLYLINE") ;_三维多段线
(setq info (cons obj_5 info))
)
)
)
(if info
(progn
(princ
"\n标高小于0或是三维线,没有修改的图元句柄:\n"
)
(princ info)
)
)
)
)
)
;_以下为错误信息显示
(setq acad_err (vl-catch-all-apply
'(lambda ()
(acad->app)
)
)
)
(if (vl-catch-all-error-p acad_err) ;_如果返回的是错误对象
(progn
(setq err_info (vl-catch-all-error-message acad_err)) ;_截获错误信息
(setq err_info (strcat "\n错误提示:" err_info))
(setvar "cmdecho" oldcmdecho)
(vl-exit-with-error (princ err_info))
)
)
(setvar "cmdecho" oldcmdecho)
(princ)
)

khidigis 发表于 2010-7-30 11:19:00

<p>谢谢<font color="#61b713" face="Verdana"><strong>gufeng</strong><font color="#000000">提供的代码,发现我的问题有个错误:每个被修改的标高值/scale命令输入的比例因子,就是原来的值.</font></font></p>
<p>但scale命令的修改标高值不是那种计算关系,还和基点有关,还是谢谢<font color="#61b713" face="Verdana"><strong>gufeng</strong></font> ,批量修改标高的目的达到,现在就是不清楚标高值的改正数是多少。</p>

gzbccy 发表于 2010-11-3 12:46:00

不好意思,新手一个,加载后,不知道如何使用啊?

gzbccy 发表于 2010-11-5 16:52:00

已经会用了,谢谢大师

gzbccy 发表于 2012-3-18 10:28:03

gufeng 发表于 2010-7-28 11:13 static/image/common/back.gif


二维多段线是可以修改,要是样条曲线值也能修改就好了。

hejiazhao 发表于 2012-5-27 21:23:15

上面的那个程序不是很科学,如果大面积的SCALE标高的变化量是不一样的
页: [1]
查看完整版本: 批量修改二维多段线的标高