明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1056|回复: 3

【求助】请问各位大神,这个画楼梯的程序画出来为什么不对劲?

[复制链接]
发表于 2018-10-29 15:26 | 显示全部楼层 |阅读模式
本帖最后由 Marckie 于 2018-10-29 15:28 编辑

大家好,这个程序是《AutoCAD程序设计魔法书》第7章的课后练习题,习题要求如下图所示:

,但是我的代码写出来后,实际效果十分不稳定,会出现下图两种情况:

代码如下:

;画楼梯,可选择楼梯方向******************************************************
(defun c:tt(/ pa pb pc p1 p2 p3 ww hh lw lh n side ldirect)
        ;;;;输入楼梯左下角点、楼梯总宽度、楼梯总高度和楼梯阶数
        (setq pa (getpoint "\n 请选择楼梯左下角点:"))
        (setq ww (getdist pa "\n 请输入楼梯总宽度w:"))
        (setq hh (getdist pa "\n 请输入楼梯总高度h:"))
        (setq n (getint "\n 请输入楼梯阶数(整数):"))
        ;选择楼梯方向
        ;(initget "L l R r");;;指定输入范围
        (setq side (getstring "\n 请输入楼梯方向:(左/L)(右/R)"))
        (setq side (strcase side));;全变成大写
        (cond
                ((= side "L") (setq ldirect pi))
                ((= side "R") (setq ldirect 0))
        )
        ;画出楼梯右下角墙壁线
        (setq pb (polar pa ldirect ww))
        (setq pc (polar pb (* pi 0.5) hh))
        (command "pLINE" pa pb pc "")
        ;;赋值
        (setq lw (/ ww n))
        (setq lh (/ hh n))
        (princ "\n 一阶楼梯宽") (princ lw)
        (princ "\n 一阶楼梯高") (princ lh)
        ;;进入循环前的准备
        (setq p1 pa)
        (command "PLINE")   ;;;;进入循环前先执行多段线命令,可将楼梯变为多段线
        ;;进入循环
        (repeat n
                (setq p2 (polar p1 (* pi 0.5) lh))
                (setq p3 (polar p2 ldirect lw))
                (command  p1 p2 p3)
                (setq p1 p3)
        )
        (command "")
        (princ "\n 画楼梯任务完成")
        (prin1)
)
(prompt "\n 画楼梯程序(可选择楼梯方向),命令:tt")
(prin1)


请问各位大神为什么会出现上图中这种不规则阶梯的情况呢?求解答!!!!!

本帖子中包含更多资源

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

x
发表于 2018-10-30 12:56 | 显示全部楼层
使用command的时候是需要关闭或取消捕捉,你也可以换一种方式,在commmand提示需要点的时候前面加_non 临时取消捕捉,另外如果是 (setvar "osmode" 0);关闭捕捉 这种方式,就需要命令完成后恢复该变量的值。
个人建议不要设置为0,最好是将捕捉值+-16384来实现F3键的操作。这才是关闭和开启对象捕捉的关键,而不是设置为0,也可以说,设置0算是一个错误的方式,建议不要用。。
提供秋枫大神的捕捉开关函数参考。
  1. (defun qf-disable-osmode()
  2.     (setvar "osmode" (logior (getvar "osmode") 16384)) ; turn it off: 16384=0x4000
  3. )
  4. (defun qf-enable-osmode()
  5.     (setvar "osmode" (logand (getvar "osmode") 49151)) ; turn it on: 49151=0xBFFF
  6. )

代码采用command _non临时取消捕捉方式参考。
  1. ;画楼梯,可选择楼梯方向******************************************************
  2. (defun c:tt(/ pa pb pc p1 p2 p3 ww hh lw lh n side ldirect)
  3.         ;;;;输入楼梯左下角点、楼梯总宽度、楼梯总高度和楼梯阶数
  4.         (setq pa (getpoint "\n 请选择楼梯左下角点:"))
  5.         (setq ww (getdist pa "\n 请输入楼梯总宽度w:"))
  6.         (setq hh (getdist pa "\n 请输入楼梯总高度h:"))
  7.         (setq n (getint "\n 请输入楼梯阶数(整数):"))
  8.         ;选择楼梯方向
  9.         ;(initget "L l R r");;;指定输入范围
  10.         (setq side (getstring "\n 请输入楼梯方向:(左/L)(右/R)"))
  11.         (setq side (strcase side));;全变成大写
  12.         (cond
  13.                 ((= side "L") (setq ldirect pi))
  14.                 ((= side "R") (setq ldirect 0))
  15.         )
  16.         ;画出楼梯右下角墙壁线
  17.         (setq pb (polar pa ldirect ww))
  18.         (setq pc (polar pb (* pi 0.5) hh))
  19.         (command "pLINE" "_non" pa "_non" pb "_non" pc "")
  20.         ;;赋值
  21.         (setq lw (/ ww n))
  22.         (setq lh (/ hh n))
  23.         (princ "\n 一阶楼梯宽") (princ lw)
  24.         (princ "\n 一阶楼梯高") (princ lh)
  25.         ;;进入循环前的准备
  26.         (setq p1 pa)
  27.         (command "PLINE")   ;;;;进入循环前先执行多段线命令,可将楼梯变为多段线
  28.         ;;进入循环
  29.         (repeat n
  30.                 (setq p2 (polar p1 (* pi 0.5) lh))
  31.                 (setq p3 (polar p2 ldirect lw))
  32.                 (command  "_non" p1 "_non" p2 "_non" p3)
  33.                 (setq p1 p3)
  34.         )
  35.         (command "")
  36.         (princ "\n 画楼梯任务完成")
  37.         (prin1)
  38. )
  39. (prompt "\n 画楼梯程序(可选择楼梯方向),命令:tt")
  40. (prin1)
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2018-10-29 15:47 | 显示全部楼层
本帖最后由 Marckie 于 2018-10-29 16:09 编辑

各位,问了群里大佬,原来要把捕捉给关掉 (setvar "osmode" 0);关闭捕捉

发表于 2018-10-30 19:59 来自手机 | 显示全部楼层
嗯,调用CAD命令绘图一定要先关闭捕捉
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-28 18:14 , Processed in 0.217917 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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