找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2008|回复: 8

[求助] [求助]:想求一个自动封口的用PL画墙柱轮廓的LISP

[复制链接]
发表于 2005-1-31 23:46:11 | 显示全部楼层 |阅读模式

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

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

×
本人LISP刚进门,本想编一个沿建筑外形画墙柱外轮廓的LISP代码,只是有几个问题实在是水平有限解决不了,第一、如果在画完PL线后还原到原来的图层。第二,如何在围了一圈回到起始后用鼠标右键结束命令时让PL线自动闭合,而不是有个小缺口,谢谢大家
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-2-1 12:40:17 | 显示全部楼层
我也是个Lisp的新手,楼主的问题我也想知道答案,期待高手指点。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-2-1 15:45:27 | 显示全部楼层
(defun c:hh (/ lay colo lt old_lay obj w)
  (setq lay "你想画的图层")
  (setq colo 1)                                ;"你想设的图层颜色" 1--红
  (setq lt "你想用的线性")
  (setq w  10) ;"你想s设的线宽")
  (setq old_lay (getvar "clayer"))        ;保存当前层
                                  ;设置或新建你自己的图层  
  (if (/= (getvar "clayer") lay)
    (command "_.-layer"        "m" lay        "s" lay        "c" colo "" "l"        lt "" "")
  )
  (setq pt0 (getpoint "\n画闭合线\n第一点:"))
  (command "pline" pt0 "w" w w)
  (command pt0)
  (while pt0
    (setq pt0 (getpoint pt0 "\n下一点"))
    (command pt0)
  )

  (setq obj (entlast))                        ;保存你刚画的线
  (command "pedit" obj "c" "")                ;闭*合*它
  (setvar "clayer" old_lay)
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2005-2-2 11:26:10 | 显示全部楼层
这个是cad和自身lisp兼容性的问题,错在组码90上
由pline用命令画的其90组码为4
由lisp调用pline画的其90组码为5
而且不能修改! --至少我没有办法.
请另外的好心人帮你吧.
本来多画第一点第到第二点,可以达到无缺口的效果
---可,太哪个龌龊.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-2-2 12:52:34 | 显示全部楼层
直接利用PLINE命令的闭合选项就可以达到无缺口的效果,更新后的程序如下:

[php]
(defun c:hh (/ lay colo lt old_lay obj w)
;;;  (setq lay "0")
;;;  (setq colo 1)                                ;"你想设的图层颜色" 1--红
;;;  (setq lt "你想用的线性")
  (setq w 50)                                ;"你想s设的线宽")
  (setq old_lay (getvar "clayer"))        ;保存当前层
;;;设置或新建你自己的图层
;;;  (if (/= (getvar "clayer") lay)
;;;    (command "_.-layer"        "m" lay        "s" lay        "c" colo "" "l"        lt "" "") ;_ 结束command
;;;  ) ;_ 结束if
  (setq pt0 (getpoint "\n画闭合线\n第一点:"))
  (command "pline" pt0 "w" w w)
  ;;;(command pt0)
  (while pt0
    (setq pt0 (getpoint pt0 "\n下一点"))
    (if        pt0
      (command pt0)
      (command "c")
    ) ;_ 结束if
  ) ;_ 结束while
;;; (setq obj (entlast))                        ;保存你刚画的线
;;; (command "pedit" obj "c" "")                ;闭*合*它
  (setvar "clayer" old_lay)
  (princ)
) ;_ 结束defun
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-2-2 16:45:05 | 显示全部楼层
啊 !!
学艺不精,差点点误人啊
最初我写的是
(while pt0
    (setq pt0 (getpoint pt0 "\n下一点"))
    (if    pt0
      (command pt0)
    ) ;_ 结束if
  ) ;_ 结束while
(command  c )    ---掉了引号,没有报错,也不能不能画上最后一段
所以才用了pedit
1楼提出有缺口后,我老在检查为什么没封好,发现了pline自身能封,用命令状态画的能封
然后查了系统变量,试了不少也没找到
最后查组码,发现了区别.
试图改组码,失败,,,,,
最后,放弃,,,,,,,,,,,,,,,,,
看来,还得多学习啊!谢谢 蜘蛛 :)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-2 23:08:26 | 显示全部楼层
完美的答案,多谢两位大虾的指教!
这是我完成后的结果,按照墙的外轮廓画封闭的外框,然后自动填充后置
(defun c:qi()
             (setq odlay (getvar "clayer"))
             (setvar "osmode" 32)
             (if (not (tblsearch "layer" "wall"))           
             (command "-layer" "new" "wall" "c" "2" "wall" ""))
             (command "-layer" "s" "wall" "")
             (setq w 25)
             (setq pt0 (getpoint "\n画闭合线\n第一点:"))
             (command "pline" pt0 "w" w w)
             (while pt0
             (setq pt0 (getpoint pt0 "\n下一点"))
             (if    pt0
             (command pt0)
             (command "c")
             )
             )
            (if (not (tblsearch "layer" "hatch"))
             (command "-layer" "new" "hatch" "color" "22" "hatch" ""))
             (command "-layer"  "s" "hatch" "")
             (setq a (entlast))
             (setq b (ssadd))
            (command "-Bhatch" "P" "solid" "S" a "" "A" "A" "Y" "" "")
             (while (entnext a)
             (setq a (entnext a))
             (setq b (ssadd a b))
              )
           (command "draworder" b "" "b" )  
            (command "-layer" "s" odlay "")
             )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-2-3 01:03:14 | 显示全部楼层

  1. ;can "undo"
  2. (defun c:tt ()
  3.   (setq w 50)
  4.   (vl-cmdf ".pline" (getpoint "\nfirst point:") "w" w "")
  5.   (while (/= 0 (getvar "cmdactive")) (vl-cmdf pause))
  6.   (vl-cmdf "pedit" "l" "cl" "")
  7. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 21:17 , Processed in 0.293015 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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