找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1436|回复: 12

[LISP程序]:高手来帮忙,

[复制链接]
发表于 2005-12-25 11:19:02 | 显示全部楼层 |阅读模式

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

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

×
这个是我弄的划窗户的,目的是选择窗户中心2点,划4根平行的线,我不想用图块,那个高手帮忙
菜鸟作品,不要笑话哈,(晕死,第一次弄个还出错了,以前的东西大部分是抄袭的),哪个大哥改好了最好加上动态显示哈,
(defun c:hs ()
  (SETQ pt1 (GETPOINT "\n请选择窗户第1个点:"))
  (SETQ pt2 (GETPOINT "\n请选择窗户第2个点:"))
  (SETQ A2 (ANGLE PT2 PT1)
        A1 (+ a2 (/ pi 2))
  )
  (setq pt1x (car pt1))
  (setq pt1y (cadr pt1))
  (setq pt2x (car pt2))
  (setq pt2y (cadr pt2))
  (setq ct1x (* 30(cos (+ a2 (/ pi 2))))
        ct1y (* 30(sin (+ a2 (/ pi 2))))
        ct2x (* 120(cos (+ a2 (/ pi 2))))
        ct2y (* 120(sin (+ a2 (/ pi 2))))
        )
  (setq pt3x (+ pt1x ct1x)
        pt3y (+ pt1x ct1y)
        pt4x (+ pt2x ct1x)
        pt4y (+ pt2x ct1y)
        pt5x (+ pt1x ct2x)
        pt5y (+ pt1x ct2y)
        pt6x (+ pt2x ct2x)
        pt6y (+ pt2x ct2y)
        pt7x (- pt1x ct1x)
        pt7y (- pt1x ct1y)
        pt8x (- pt2x ct1x)
        pt8y (- pt2x ct1y)
        pt9x (- pt1x ct2x)
        pt9y (- pt1x ct2y)
        pt10x (- pt2x ct2x)
        pt10y (- pt2x ct2y)
        )
  (SETQ Pt3 (LIST pt3x pt3y)
        Pt4 (LIST pt4x pt4y)
        Pt5 (LIST pt5x pt5y)
        Pt6 (LIST pt6x pt6y)
        Pt7 (LIST pt7x pt7y)
        Pt8 (LIST pt8x pt8y)
        Pt9 (LIST pt9x pt9y)
        P10 (LIST pt10x pt10y)
  )
  (COMMAND "line" PT3 PT4 "")
  (COMMAND "line" PT5 PT6 "")
  (COMMAND "line" PT7 PT8 "")
  (COMMAND "line" PT9 P10 "")
  (princ)
  )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 8157个

财富等级: 富甲天下

发表于 2005-12-25 11:50:31 | 显示全部楼层
程式可以执行
但没交效果图可供比对
是以无从验证
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 8157个

财富等级: 富甲天下

发表于 2005-12-25 15:06:11 | 显示全部楼层
(defun c:hs ()
  (setvar "Osmode" 0)
  (setq <90 (/ Pi 2)
        pt1 (GETPOINT "\n请选择窗户第1个点:")
        pt2 (GETPOINT "\n请选择窗户第2个点:")
  )
  (COMMAND "line" PT1 PT2 "")
  (command "chprop" (entlast) "" "c" 1 "")
  
  (setq A2 (ANGLE PT2 PT1)
        A3 (+ a2 <90)
        A4 (- a2 <90)
       pt3 (polar pt1 a3 30)
       pt4 (polar pt2 a3 30)
       pt5 (polar pt1 a3 120)
       pt6 (polar pt2 a3 120)
       pt7 (polar pt1 a4 30)
       pt8 (polar pt2 a4 30)
       pt9 (polar pt1 a4 120)
       p10 (polar pt2 a4 120)
  )
   
  (COMMAND "line" PT3 PT4 "")
  (COMMAND "line" PT5 PT6 "")
  (COMMAND "line" PT7 PT8 "")
  (COMMAND "line" PT9 P10 "")
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-26 12:25:26 | 显示全部楼层
还要麻烦一下大虾
这个是我改后的代码,能不能麻烦大哥改一下,我想在输入第一点的时候如果输入s就进入比例设置,否则选了点后就直接     按S进行比例设置/<开始请选择窗户第1个点>:")
我这个要先设置比例,然后选择点,就=每次都要多按一个键
(DEFUN C:HS ()
  (SETQ ODERR *ERROR*)                       ; 保存原来的*ERROR*
  (SETQ *ERROR* CCY_ERR)               ; 将*ERROR*用自己的错误处理函数替代
  (COMMAND "_.undo" "_begin")
  (CMDLA0)
  (IF (= SCAB NIL)
    (SETQ SCAB 1.0)
  )
  (SETQ SC (GETREAL (STRCAT "\nScale <" (RTOS SCAB 2 0) ">:")))
  (IF (= SC NIL)
    (SETQ SC SCAB)
  )
  (SETQ SCAB SC)
  (SETQ C1 (* 0.3 SC))
  (SETQ C2 (* 1.2 SC))
  (SETVAR "Osmode" 191)
  (SETVAR "orthomode" 1)
  (SETQ <90 (/ PI 2)
        PT1 (GETPOINT "\n请选择窗户第1个点:")
        PT2 (GETPOINT PT1 "\n请选择窗户第2个点:")
  )                                       ; 中心线红色
                                       ; (COMMAND "LINE" PT1 PT2 "")
                                       ; (COMMAND "CHPROP" (ENTLAST) "" "C"
                                       ; 1 "")
  (PROGN
    (IF (= (TBLSEARCH "layer" "window") NIL)
      (PROGN
        (PRINC "\n window 图层不存在,正在创建...")
        (COMMAND "layer" "m" "window" "c" "blue" "window" "" "")
      )
      (SETVAR "clayer" "window")
    )
    (SETQ A2 (ANGLE PT2 PT1)
          A3 (+ A2 <90)
          A4 (- A2 <90)
          PT3 (POLAR PT1 A3 C1)
          PT4 (POLAR PT2 A3 C1)
          PT5 (POLAR PT1 A3 C2)
          PT6 (POLAR PT2 A3 C2)
          PT7 (POLAR PT1 A4 C1)
          PT8 (POLAR PT2 A4 C1)
          PT9 (POLAR PT1 A4 C2)
          P10 (POLAR PT2 A4 C2)
    )
    (SETVAR "Osmode" 0)
    (COMMAND "line" PT3 PT4 "")
    (COMMAND "line" PT5 PT6 "")
    (COMMAND "line" PT7 PT8 "")
    (COMMAND "line" PT9 P10 "")
  )
  (CMDLA1)
  (command "_.undo" "end")
  (SETQ *ERROR* ODERR)
  (PRINC)
)
(DEFUN CMDLA0 ()
  (SETQ CMD (GETVAR "CMDECHO"))
  (SETQ OOM (GETVAR "orthomode"))
  (SETQ OSM (GETVAR "osmode"))
  (SETQ HLT (GETVAR "highlight"))
  (SETQ RMODE (GETVAR "regenmode"))
  (SETQ ODLTP (GETVAR "celtype"))      ; 记录当前线型设置
  (SETQ ODCLR (GETVAR "cecolor"))      ; 记录当前颜色设置
  (SETQ ODLAY (GETVAR "clayer"))       ; 记录当前层
  (SETQ ODSTY (GETVAR "textstyle"))    ; 记录当前文本样式
  (SETQ ODTSZ (GETVAR "textsize"))     ; 记录当前文本高度
  (SETQ ODZIN (GETVAR "dimzin"))       ; 记录主单位值消零处理方式
  (SETVAR "regenmode" 0)
  (SETVAR "CMDECHO" 0)
  (PRINC)
)
(DEFUN CMDLA1 ()
  (SETVAR "CMDECHO" CMD)
  (SETVAR "orthomode" OOM)
  (SETVAR "osmode" OSM)
  (SETVAR "highlight" HLT)
  (SETVAR "regenmode" RMODE)
  (setvar "celtype" odltp)
  (setvar "cecolor" odclr)
  (setvar "textstyle" odsty)
  (setvar "textsize" odtsz)
  (command "layer" "s" odlay "")
  (setvar "dimzin" odzin) ;;恢复主单位值消零处理方式
  (PRINC)
)
(DEFUN CCY_ERR (MSG)
  (PRINC (STRCAT "\n错误:" MSG "\n"))  ; 打印错误原因
  (CMDLA1)                               ; 调用函数cmdla1恢复程序开始前的设置
  (SETQ *ERROR* ODERR)                       ; 恢复原来的*ERROR*
  (PRINC)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8157个

财富等级: 富甲天下

发表于 2005-12-26 13:42:23 | 显示全部楼层
请参阅 InitGet

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

使用道具 举报

发表于 2005-12-26 17:55:03 | 显示全部楼层
根本就没必要算坐标:
(setq p1 (getpoint "\np1:")
      p2 (getpoint "\np2:"))
(command "_mline" "j" "z" "s" 20 p1 p2 ""
         "_mline" "j" "z" "s" 50 p1 p2 "")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-26 23:19:22 | 显示全部楼层
我是初学者,不太熟悉
我编好了为什么执行起来错误呢
(DEFUN C:HS (/ SC SCAB)
  (SETVAR "Osmode" 191)
  (SETVAR "orthomode" 1)
  (IF (= SCAB NIL)
    (SETQ SCAB 1.0)
  )
  (INITGET "S")
  (SETQ PT1 (GETPOINT "\n S_比例/<请输入窗户第一点>:"))
  (SETVAR "osmode" 0)                       ; 设置对象捕捉式无
  (COND
    ((= PT1 "S")
      (SETQ SC (GETREAL (STRCAT "\n 请输入比例因子<" (RTOS ODSCAL) ">:")))
      (IF (= SC NIL)
        (SETQ SC SCAB)
      )                                       ; 如果用户直接回车,则使用默认的比例
      (SETQ SCAB SC)
    )
    (T
      (SETVAR "osmode" 191)
      (SETQ <90 (/ PI 2)
            PT2 (GETPOINT PT1 "\n请选择窗户第2个点:")
            (IF (= PT2 NIL)
              EXIT
            )
      )
    )

    (PROGN
      (SETQ C1 (* 0.3 SC))
      (SETQ C2 (* 1.2 SC))
      (IF (= (TBLSEARCH "layer" "window") NIL)
        (PROGN
          (PRINC "\n window 图层不存在,正在创建...")
          (COMMAND "layer" "m" "window" "c" "blue" "window" "" "")
        )
        (SETVAR "clayer" "window")
      )
      (SETQ A2 (ANGLE PT2 PT1)
            A3 (+ A2 <90)
            A4 (- A2 <90)
            PT3 (POLAR PT1 A3 C1)
            PT4 (POLAR PT2 A3 C1)
            PT5 (POLAR PT1 A3 C2)
            PT6 (POLAR PT2 A3 C2)
            PT7 (POLAR PT1 A4 C1)
            PT8 (POLAR PT2 A4 C1)
            PT9 (POLAR PT1 A4 C2)
            P10 (POLAR PT2 A4 C2)
      )
    )
    (SETVAR "Osmode" 0)
    (COMMAND "line" PT3 PT4 "")
    (COMMAND "line" PT5 PT6 "")
    (COMMAND "line" PT7 PT8 "")
    (COMMAND "line" PT9 P10 "")

  )

)
为了方便大家看,我把头尾以及出错去掉了,可是还是不行,能不能帮忙改好一下啊,谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-12-27 00:35:40 | 显示全部楼层
[检查文字 <未命名 0> 正在加载...]
.
; 错误: SETQ 中参数太少: (SETQ <90 (/ PI 2) PT2 ... )
; 检查完成.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-27 12:09:08 | 显示全部楼层
说真的,我非常感谢你的帮助,不过上面这个东西,能不能麻烦你改好一下啊,我最擅长的是写游戏脚本(我写了个脚本连挂一个星期没停1分钟,传奇私服),对lisp只能稍微看懂一点,我最擅长的是拷贝和抄袭,因为我还有好多收集的lisp程序需要这样处理一下,所以希望eachy斑竹您的指导,只改这个好么???再次谢谢您了,现在xyp1964不知道去哪里了,不做斑竹了啊!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-28 16:24:31 | 显示全部楼层
看看这样合不合你要求
(defun c:hs ( / pt1 pt2 jl1 jl2)
  (setvar "osmode" 545)
  (setq pt1 (getpoint "\n起点:")
        pt2 (getpoint "\n终点:"))
  (setq 比例 (输入 1 "" "\n请输入比例" 比例))
  (setq jl1 (* 0.3 比例)
        jl2 (* 1.2 比例))
  (if (tblsearch "layer" "windows")  
    (command "_layer" "t" "windows" "on" "windows" "s" "windows" "c" 5 "" "")
    (command "_layer" "m" "windows" "s" "windows" "c" 5 "" "")
  );if
  (setvar "osmode" 0)
  (command "_mline" "j" "z" "s" jl1 pt1 pt2 ""
           "_mline" "j" "z" "s" jl2 pt1 pt2 "")
(princ)
)
(defun 输入 (bit kwd msg def / inp)
  (if def
    (setq msg (strcat "\n" msg "<" (rtos def 2) ">: ")
          bit (* 2 (fix (/ bit 2)))
    )
    (setq msg (strcat "\n" msg ": "))
  )
  (initget bit kwd)
  (setq inp (getreal msg))
  (if inp
    inp
    def
  )
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-28 18:45:18 | 显示全部楼层
谢谢这个好心人,其实我5楼的程序和您的是一样道理的,而且我5楼的程序还蛮好的,我只是想
改一下,我想在输入第一点的时候如果输入s就进入比例设置,否则选了点后就直接 按S进行比例设置/<开始请选择窗户第1个点>:")
我这个要先设置比例,然后选择点,就=每次都要多按一个键
你的也是要多按一次键
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-30 14:54:03 | 显示全部楼层
  1. [FONT=courier new](load "xyp_lib.vlx")  ;版本 V.20051205 (1781)
  2. ;|下载和加载通用函数(可在签名栏直接下载后放到搜索路径下)
  3. 利用以下任何一种方式(首选第一种)即可加载和运行通用函数内的所有子程序:
  4. ★1·在acad.lsp中增加(load"xyp_lib.vlx")
  5. ■2·在每个程序内增加(load"xyp_lib.vlx")
  6. ■3·在command下,输入(load"xyp_lib.vlx")
  7. ■4·在菜单.mnl中增加(load"xyp_lib.vlx")
  8. ■5·将xyp_lib.vlx文件直接拽到cad屏幕
  9. [COLOR=red] ★通用函数下载地址:[/COLOR]
  10. [url]http://www.xdcad.net/forum/attachment.php?s=&postid=1606661[/url]
  11. |;

  12. (DEFUN C:HS ()
  13.   (CMDLASC0)
  14.   (SETVAR "Osmode" 191)
  15.   (mkla "WINDOW" 4)
  16.   (SETQ        C1 (* 300 SC)
  17.         C2 (* 120 SC)
  18.   )
  19.   (while (setq PT1 (GETPOINT "\n请选择窗户第1个点<退出>: "))
  20.     (if        (setq PT2 (GETPOINT PT1 "\n请选择窗户第2个点<退出>: "))
  21.       (progn
  22.         (setq A2  (ANGLE PT2 PT1)
  23.               A3  (+ A2 (/ PI 2.0))
  24.               A4  (- A2 (/ PI 2.0))
  25.               PT3 (POLAR PT1 A3 C1)
  26.               PT4 (POLAR PT2 A3 C1)
  27.               PT5 (POLAR PT1 A3 C2)
  28.               PT6 (POLAR PT2 A3 C2)
  29.               PT7 (POLAR PT1 A4 C1)
  30.               PT8 (POLAR PT2 A4 C1)
  31.               PT9 (POLAR PT1 A4 C2)
  32.               P10 (POLAR PT2 A4 C2)
  33.         )
  34.         (SETVAR "Osmode" 0)
  35.         (COMMAND "line" PT3 PT4 "")
  36.         (COMMAND "line" PT5 PT6 "")
  37.         (COMMAND "line" PT7 PT8 "")
  38.         (COMMAND "line" PT9 P10 "")
  39.       )
  40.     )
  41.   )
  42.   (CMDLA1)
  43. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-29 00:03 , Processed in 0.203707 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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