明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1334|回复: 8

[已解答] 刚开始学lisp,程序简单也不会,求指教

[复制链接]
发表于 2013-10-22 22:03 | 显示全部楼层 |阅读模式
本帖最后由 影带走流年 于 2013-10-23 12:55 编辑

小弟,想画一个这样的图形:首先画出一个任意倾角的矩形,接着画出这个矩形包围的矩形,再然后扩大规定的长度。在计算矩形维护带的过程中,算出的点在使用pline或者line时不能画出矩形,求大神帮忙看看。小弟新学,再次谢过。



(defun c:jx()
  (setvar "cmdecho" 0)
  (setq p1 (getpoint "\n指定矩形的右下角点"))
  (setq w (getreal "\n指定矩形的宽度"))
  (setq h (getreal "\n指定矩形的高度"))
  (setq ang (getreal "\n指定矩形的倾斜角度"))
  (setq wh (getreal "\n围护带宽度<20>"))
  (if (= wh "") (= wh 20))
  (setq angh (* pi (/ ang 180)))
;;;  计算广场的各点
  (setq p2 (polar p1 angh h))
  (setq p3 (polar p2 (+ angh (/ pi 2)) w))
  (setq p4 (polar p1 (+ angh (/ pi 2)) w))
  (command  "pline" p1 p2 p3 p4 p1 "")
;;;  计算包围广场的矩形的各点
  (setq rp1 (list (car p4) (cadr p1)))
  (setq rp2 (list (car p2) (cadr p1)))
  (setq rp3 (list (car p2) (cadr p3)))
  (setq rp4 (list (car p4) (cadr p3)))
  (command  "line" rp1 rp2 rp3 rp4 rp1 "")
;;;  计算矩形围护带的各点
  (setq whp1 (list (- (car p4) wh) (- (cadr p1) wh)))
  (setq whp2 (list (+ (car p2) wh) (- (cadr p1) wh)))
  (setq whp3 (list (+ (car p2) wh) (+ (cadr p3) wh)))
  (setq whp4 (list (- (car p4) wh) (+ (cadr p3) wh)))
  (command  "pline" whp1 whp2 whp3 whp4 whp1 )
  (prin1)
)


发表于 2013-10-22 22:31 | 显示全部楼层
關了鎖點再說
发表于 2013-10-23 07:57 | 显示全部楼层
(setvar "OSMODE" 0)
 楼主| 发表于 2013-10-23 12:49 | 显示全部楼层
ZZXXQQ 发表于 2013-10-23 07:57
(setvar "OSMODE" 0)

我按您的方式试了一下,还是不行在(setq whp1 (list (- (car p4) wh) (- (cadr p1) wh)))中的(car p4)出现错误: 参数类型错误: numberp: nil,这个怎么理解的啊,麻烦了
发表于 2013-10-23 22:00 | 显示全部楼层
  1. (defun c:jx()
  2.   (setvar "cmdecho" 0)
  3. (setvar "OSMODE" 0)
  4. (setq p1 (getpoint "\n指定矩形的右下角点: "))
  5. (setq w (getreal "\n指定矩形的宽度: "))
  6. (setq h (getreal "\n指定矩形的高度: "))
  7. (setq ang (getreal "\n指定矩形的倾斜角度: "))
  8. (setq wh (getreal "\n围护带宽度<20>: "))
  9. (setq wh (if wh wh 20))
  10. (setq angh (/ (* ang pi) 180))
  11. ;;;  计算广场的各点
  12. (setq p2 (polar p1 angh h))
  13. (setq p3 (polar p2 (+ angh (/ pi 2)) w))
  14. (setq p4 (polar p1 (+ angh (/ pi 2)) w))
  15. (command  "pline" p1 p2 p3 p4 "c")
  16. ;;;  计算包围广场的矩形的各点
  17. (setq rp1 (list (car p4) (cadr p1)))
  18. (setq rp2 (list (car p2) (cadr p1)))
  19. (setq rp3 (list (car p2) (cadr p3)))
  20. (setq rp4 (list (car p4) (cadr p3)))
  21. (command  "line" rp1 rp2 rp3 rp4 "c")
  22. ;;;  计算矩形围护带的各点
  23. (setq whp1 (list (- (car p4) wh) (- (cadr p1) wh)))
  24. (setq whp2 (list (+ (car p2) wh) (- (cadr p1) wh)))
  25. (setq whp3 (list (+ (car p2) wh) (+ (cadr p3) wh)))
  26. (setq whp4 (list (- (car p4) wh) (+ (cadr p3) wh)))
  27. (command  "pline" whp1 whp2 whp3 whp4 "c")
  28. (setvar "CMDECHO" 1)
  29. (prin1)
  30. )
 楼主| 发表于 2013-10-24 13:09 | 显示全部楼层
ZZXXQQ 发表于 2013-10-23 22:00

谢谢你啊,我知道自己哪里错了。wh赋值没有成功,但是我还是不明白为什么 (if (= wh “”l ) (setq wh 20))为什么没有给sh赋值,是因为空与nil不同是吧。谢谢你啊。
发表于 2013-10-28 00:15 | 显示全部楼层
(setq wh (if wh wh 20))
原来还可以这么写,学习了。
 楼主| 发表于 2013-10-28 12:35 | 显示全部楼层
spiderman 发表于 2013-10-28 00:15
(setq wh (if wh wh 20))
原来还可以这么写,学习了。

这个确实厉害
发表于 2013-10-29 23:40 | 显示全部楼层
很多时候高手高手们随随便便一句代码,就够俺等新手们好好观摩一阵子了,呵呵。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-13 00:51 , Processed in 0.171999 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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