明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4263|回复: 6

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

[复制链接]
发表于 2010-7-28 10:03:00 | 显示全部楼层 |阅读模式
执行scale命令改变了二维多段线的标高值,我需要把标高值改回去,每个被修改的标高值/scale命令输入的比例因子,就是原来的值,如何用lisp实现批量修改,在线等,急。谢谢各位
发表于 2010-7-28 11:13:00 | 显示全部楼层
  1. (defun c:Test (/ ACAD_ERR ERR_INFO)
  2. ;_所有的函数在这里写
  3. (setq oldcmdecho (getvar "cmdecho"))
  4. (setvar "cmdecho" 0)
  5. (defun acad->app
  6. (/ BG BGBS I INFO NEWBG OBJ OBJ_5 OBJ_NAME OBJ_TYPE OBJ_VAL)
  7. (setq obj (ssget '((0 . "*POLYLINE"))))
  8. (if obj
  9. (progn
  10. (while
  11. (not
  12. (setq
  13. bgbs (getreal "\n输入改正数(正-原标高乘/负-原标高除):")
  14. )
  15. )
  16. )
  17. (setq i -1)
  18. (setq info '()) ;_没有修改的园元句柄表
  19. (repeat (sslength obj)
  20. (vl-load-com)
  21. (setq obj_name (ssname obj (setq i (1+ i)))) ;_图元名
  22. (setq obj_val (vlax-ename->vla-object obj_name)) ;_Val对象
  23. (setq obj_5 (vlax-get obj_val 'handle)) ;_图元句柄
  24. (setq obj_type (strcase (vlax-get obj_val 'objectname))) ;_图元类型
  25. (cond
  26. ((or (= obj_type "ACDBPOLYLINE")
  27. (= obj_type "ACDB2DPOLYLINE")
  28. ) ;_二维多段线
  29. (setq bg (vlax-get obj_val 'Elevation)) ;_原标高
  30. (if (< bg 0);_原标高小于0不作修改
  31. (setq info (cons obj_5 info))
  32. (progn
  33. (if (minusp bgbs)
  34. (setq newbg (/ bg (abs bgbs))) ;_原标高/改正数
  35. (setq newbg (* bg bgbs)) ;_原标高*改正数
  36. )
  37. (command "_change" obj_name "" "p" "e" newbg "")
  38. )
  39. )
  40. )
  41. ((= obj_type "ACDB3DPOLYLINE") ;_三维多段线
  42. (setq info (cons obj_5 info))
  43. )
  44. )
  45. )
  46. (if info
  47. (progn
  48. (princ
  49. "\n标高小于0或是三维线,没有修改的图元句柄:\n"
  50. )
  51. (princ info)
  52. )
  53. )
  54. )
  55. )
  56. )
  57. ;_以下为错误信息显示
  58. (setq acad_err (vl-catch-all-apply
  59. '(lambda ()
  60. (acad->app)
  61. )
  62. )
  63. )
  64. (if (vl-catch-all-error-p acad_err) ;_如果返回的是错误对象
  65. (progn
  66. (setq err_info (vl-catch-all-error-message acad_err)) ;_截获错误信息
  67. (setq err_info (strcat "\n错误提示:" err_info))
  68. (setvar "cmdecho" oldcmdecho)
  69. (vl-exit-with-error (princ err_info))
  70. )
  71. )
  72. (setvar "cmdecho" oldcmdecho)
  73. (princ)
  74. )
 楼主| 发表于 2010-7-30 11:19:00 | 显示全部楼层

谢谢gufeng提供的代码,发现我的问题有个错误:每个被修改的标高值/scale命令输入的比例因子,就是原来的值.

但scale命令的修改标高值不是那种计算关系,还和基点有关,还是谢谢gufeng ,批量修改标高的目的达到,现在就是不清楚标高值的改正数是多少。

发表于 2010-11-3 12:46:00 | 显示全部楼层
不好意思,新手一个,加载后,不知道如何使用啊?
发表于 2010-11-5 16:52:00 | 显示全部楼层
已经会用了,谢谢大师
发表于 2012-3-18 10:28:03 | 显示全部楼层
gufeng 发表于 2010-7-28 11:13

二维多段线是可以修改,要是样条曲线值也能修改就好了。
发表于 2012-5-27 21:23:15 | 显示全部楼层
上面的那个程序不是很科学,如果大面积的SCALE标高的变化量是不一样的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-9-25 11:03 , Processed in 0.164314 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表