找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1125|回复: 11

[LISP程序]:改变PL 厚度到鼠标点取的高度位置(请梦断江南给完善完善)

[复制链接]
发表于 2002-7-28 14:56:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我不会编怎么复杂的程序,是别人编的,R12里好用R14不行

请梦断江南给改一改

;;by xdcad.com ------ mf7000 ;改pl线条厚度 thickness
(DEFUN c:cgt ()
(setq ss (ssget))
(if ss
(progn
(princ "\ndelta Z/X/Y/Input/: ")
(initget "Z X Y Input" )
(setq thk (getpoint))
(cond
( (or (= "Z" thk) (= "X" thk) (= "Y" thk))
(cond ( (= "Z" thk) (setq cgt-n 2))
( (= "Y" thk) (setq cgt-n 1))
( (= "X" thk) (setq cgt-n 0))
);end cond
(initget 7)
(setq lpt (getpoint"\nLower point: "))
(initget 7)
(setq upt (getpoint lpt "\nUpper point: ") ;参照点是3维点
       thk (- (nth cgt-n upt) (nth cgt-n lpt))
)
);case1
( (= thk "Input")
  (initget 1)
  (setq thk (getdist "\nThickness: "))
) ;case2
( (null thk)
  (initget 1)
  (setq thk (getdist "\nZ_coords of upper_pt: ")
       upz (caddr upt)
      ent1 (ssname ss 0)
       lpz (cadddr (assoc 10 (entget ent1))))
  (if (= nil lpz)(setq lpz 0))
  (setq thk (- thk lpz) )
) ;case3
(1
  (initget 7)
  (setq upz (caddr upt)
       ent1 (ssname ss 0)
        lpz (cadddr (assoc 10 (entget ent1))))
  (if (= nil lpz)(setq lpz 0))
  (setq thk (- (caddr thk) lpz))
) ;case4
) ;end cond
(if thk (COMMAND "CHPROP" ss "" "T" thk ""))
)
)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-7-28 15:02:21 | 显示全部楼层

  1.   [FONT=courier new]
  2. ;;by xdcad.com ------ mf7000 ;改pl线条厚度 thickness
  3. (DEFUN c:cgt ( / ss thk lpt upt thk upz lpz ent1)
  4. (setq ss (ssget))
  5. (if ss
  6. (progn
  7. (princ "\ndelta Z/X/Y/Input/: ")
  8. (initget "Z X Y Input" )
  9. (setq thk (getpoint))
  10. (cond
  11. ( (or (= "Z" thk) (= "X" thk) (= "Y" thk))
  12. (cond ( (= "Z" thk) (setq cgt-n 2))
  13. ( (= "Y" thk) (setq cgt-n 1))
  14. ( (= "X" thk) (setq cgt-n 0))
  15. );end cond
  16. (initget 7)
  17. (setq lpt (getpoint"\nLower point: "))
  18. (initget 7)
  19. (setq upt (getpoint lpt "\nUpper point: ") ;参照点是3维点
  20.        thk (- (nth cgt-n upt) (nth cgt-n lpt))
  21. )
  22. );case1
  23. ( (= thk "Input")
  24.   (initget 1)
  25.   (setq thk (getdist "\nThickness: "))
  26. ) ;case2
  27. ( (null thk)
  28.   (initget 1)
  29.   (setq thk (getdist "\nZ_coords of upper_pt: ")
  30.        upz (caddr upt)
  31.       ent1 (ssname ss 0)
  32.        lpz (cadddr (assoc 10 (entget ent1))))
  33.   (if (= nil lpz)(setq lpz 0))
  34.   (setq thk (- thk lpz) )
  35. ) ;case3
  36. (1
  37.   (initget 7)
  38.   (setq upz (caddr upt)
  39.        ent1 (ssname ss 0)
  40.         lpz (cadddr (assoc 10 (entget ent1))))
  41.   (if (= nil lpz)(setq lpz 0))
  42.   (setq thk (- (caddr thk) lpz))
  43. ) ;case4
  44. ) ;end cond
  45. (if thk (COMMAND "CHPROP" ss "" "T" thk ""))
  46. )
  47. )
  48. )

  49.   [/FONT]


下载地址:http://www.fspdi.com/forum/pic/cgt3.swf

<embed src=http://www.fspdi.com/forum/pic/cgt3.swf quality=high width=640 height=480 loop=true type="application/x-shockwave-flash">
</embed>
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-7-28 15:07:16 | 显示全部楼层
就在这里接着说吧
好烈害呀!!
可是我要直接点取要变到的高度,不是点两点的距离
而且两个物体的ELEV不同
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-7-28 15:14:07 | 显示全部楼层
你的原程序 (参考 http://www.xdcad.net/forum/showt ... =49258#post49258)
问题在于:
r14以上版本,在z坐标为0 的平面作多义线时,多义线的实体数据中顶点不包括 z 值
(但是用list列出是含有z=0的信息的)你可以用一个查看实体数据的程序试试看。
在 r14以上版本, pline线条的顶点 坐标可以没有 z 值也被认为是合法的。如:
(10 30606.5 35275.8)
(40 . 0.0)
(41 . 0.0)
(42 . 0.0)
(10 12321.8 31021.9)
....
所以:

你在程序中要加一个判断
....
lpz (cadddr (assoc 10 (entget ent1))))
(if (= nil lpz)(setq lpz 0))
(setq thk (- thk lpz) )
....
我改了后就正常了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-7-28 15:28:57 | 显示全部楼层
"问题在于:
r14以上版本,在z坐标为0 的平面作多义线时,多义线的实体数据中顶点不包括 z 值
(但是用list列出是含有z=0的信息的)你可以用一个查看实体数据的程序试试看。
在 r14以上版本, pline线条的顶点 坐标可以没有 z 值也被认为是合法的"

对于这个问题应该怎么改
LPZ 的值应该是被修改物体的ELEV     不能为0,否则改变的厚度就是THK-0  而不是THK-LPZ

怎样把点坐标(X,Y,Z)的Z值提取出来并赋予THK
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-7-28 17:00:32 | 显示全部楼层
局部修改一下,可以做到
(1
  (initget 7)
  (setq upz (caddr upt)
       ent1 (ssname ss 0)
        lpz (cdr (assoc 38 (entget ent1))))
  (if (= nil lpz)(setq lpz 0))
  (setq thk (- (caddr thk) lpz))
) ;case4
) ;end cond
...
但是要使选择集中每个实体都拉伸到指定点高度需要另外修改,如果选择集实体的z位置不同的话。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-7-28 17:28:01 | 显示全部楼层
好使了,谢谢。
梦断江南是个大好人!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-7-28 17:31:44 | 显示全部楼层
最初由 mf7000 发布
[B]"问题在于:
r14以上版本,在z坐标为0 的平面作多义线时,多义线的实体数据中顶点不包括 z 值
(但是用list列出是含有z=0的信息的)你可以用一个查看实体数据的程序试试看。
在 r14以上版本, pline线条的顶点... [/B]


在R14以上版本,POLYLINE是“二维”对象,在实体数据定义中不包括Z,而Z值(准确的说是elevation)反映在组码38上。所以,上面江南通过组码38得到了Z值。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-7-28 18:07:08 | 显示全部楼层
38 码是多义线的z值(平面高度值)
39码是拉伸厚度(thickness)

以后凡是引用别人的程序,必须在贴出来的时候注明-------注意!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-7-28 18:10:45 | 显示全部楼层
最初由 梦断江南 发布
[B]38 码是多义线的z值(平面高度值)
39码是拉伸厚度(thickness)

以后凡是引用别人的程序,必须在贴出来的时候注明-------注意! [/B]


同意江南的观点,大家以后贴代码、问题的时候,要详细的描述问题的现象,比如程序的作用、自己在用它对什么实体操作的时候出现错误,出错的提示信息贴论坛或者有截图说明,把截图贴到论坛,这样才方便大家讨论和及时解决问题。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-1-8 08:54:43 | 显示全部楼层
同意楼上的观点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-2-16 12:39:16 | 显示全部楼层
高手自有高招,把写得楚点,能多许多解决的方法
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-22 04:10 , Processed in 0.282572 second(s), 55 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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