Autolisp例程问题
嗨,伙计们如您所见,这是通过输入rec的长度来执行矩形例程的编码。。问题是,
我想把圆放在矩形中的一行中,我需要指定我想要多少圆。。
圆圈之间的长度必须为109.00英寸
(定义c:SREC(/pt h)
(“矩形”原理)
(if(and(setq pt(getpoint“\n指定矩形起点:”))
(setq h(getreal“\n输入矩形长度:”))
(命令“_rectang”pt“_dimensions”(+0 h)h pt)
(提示“\n**无效输入**”))
(普林斯)
:示例随附:
我非常感谢那些愿意帮助我的人:):D
2750 , 109.图纸 正如你已经开始在这里是一些建议,而不是代码,希望它是有意义的,如果你的帖子再次卡住,一个学习lisp的好例子。我想你们可以从这里学习,而不是别人只是张贴代码的答案。
你可以用几种方法来做,但是看看数学
长度=L
偏移=109.0
Num=除以L/109(设置Num(/L偏移))
余数(*L(-num(fix num)))
Pt x(car Pt)Pt y(cadr Pt)
余数>2*圆周直径(如果(>(*2.0直径…如果是,则继续,如果否num=num-1,则圆接近边缘(setq num(-num 1))
现在计算出第一个圆的位置(设置q newpt(polar pt…(polar pt…)X穿过y向上一个双极
然后跨复制并重复num次(重复(修复num)。。。。
对于最上面的行,您可以使用array,而不是copy或circle命令 假设高度恒定,长度变化,可以创建一个动态块,根据长度添加或删除圆。这也可以很容易地用lisp完成,只是一个建议,以防你用这种方式做起来更舒服。 好主意,因为间距是在动态块中定义的,如果更改此值,它会立即更新。 你好
根据tombu的建议,动态块是这个技巧的最佳选择,但如果你不想使用动态块选项,这里是我的lisp程序。
(defun c:Test (/ _C rad spc len pt r p d)
;; Tharwat 04.07.2015 ;;
(setq rad 3.5 spc 109.0 )
(if
(and (setq len (getdist "\nSpecify Length of Rectangle :"))
(if (< 109 len)
t
(progn (princ "\nLength of rectangle is smaller than 109.0 !") nil )
)
(setq pt (getpoint "\nSpecify Rectangle Base point :"))
)
(progn
(defun _C (n _p)
(repeat n
(entmakex (list '(0 . "CIRCLE") (cons 10 _p) (cons 40 rad)))
(setq _p (polar _p 0. spc))
)
)
(setq r (1+ (fix (/ len 109.0)))
p (polar (polar pt 0. (setq d (/ (- len (* (fix r) 109.)) 2.))) (* pi 1.5) 12. )
)
(command "_.rectang" "_none" pt "_none" (polar (polar pt 0. len) (* pi 1.5) len))
(_C r p)
(_C r (setq p (polar (polar pt (* pi 1.5) (- len 12.)) 0. d))
)
)
)
(princ)
)
2750 , 109.图纸
我喜欢动态积木。。。
页:
[1]