按指定的顺序排列块
你好,下午好我需要这方面的帮助。
在指定区域中排列单个块,并在选择对象中等分固定点,如图所示。
例如,我想计算该区域中有多少个夹具(可能是矩形r多段线等…)。
当做
kpsk公司
图纸。图纸 有很多方法可以做到这一点。
你的已知参数是什么?
固定装置之间的最小/最大间距?
每平方英尺的固定装置数量?
房间大小?
-大卫 嗨,大卫,
实际上,X和Y值应该手动给定。
例如,一个固定装置将覆盖12平方米(即4 x 3=12,在此x=3&Y=4)。
这样我就可以计算出在那个房间里许多固定装置可以占用的硬件。
当做
kpsk公司 如果固定装置的覆盖范围是正方形,我会尝试这样的方式:
;++++++++++++ Get RECTANGLE +++++++++++++++++++++++++
(defun getrect (/ p1 p2)
(initget 1)
(setq p1 (getpoint "\n1st Corner: "))
(initget 1)
(setq p2 (getcorner p1 "\n2nd Corner: "))
(setq ll (list (min (car p1) (car p2))
(min (cadr p1) (cadr p2))
(caddr p1))
ur (list (max (car p1) (car p2))
(max (cadr p1) (cadr p2))
(caddr p1))
lr (list (car ur) (cadr ll) (caddr p1))
ul (list (car ll) (cadr ur) (caddr p1)))
(prin1))
;++++++++++++ Make A Fixture Block ++++++++++++++++++
(defun checkblk (/ sq)
(and (not (tblsearch "BLOCK" "FIXT"))
(setq sq (* (sqrt la) 0.5))
(entmake (list (cons 0 "BLOCK")(cons 2 "FIXT")(list 10 0 0 0)(cons 70 0)))
(entmake (list (cons 0 "CIRCLE")(list 10 0 0 0)(cons 40 1)
(cons 8 "0")(cons 39 0)(cons 6 "BYLAYER")(cons 62 256)))
(entmake (list (cons 0 "LINE")(cons 6 "BYLAYER")
(cons 8 "0")(cons 39 0)(cons 62 2)
(list 10 (- sq) (- sq) 0)
(list 11 (+ sq) (- sq) 0)))
(entmake (list (cons 0 "LINE")(cons 6 "BYLAYER")
(cons 8 "0")(cons 39 0)(cons 62 2)
(list 10 (- sq) (- sq) 0)
(list 11 (- sq) (+ sq) 0)))
(entmake (list (cons 0 "LINE")(cons 6 "BYLAYER")
(cons 8 "0")(cons 39 0)(cons 62 2)
(list 10 (+ sq) (+ sq) 0)
(list 11 (+ sq) (- sq) 0)))
(entmake (list (cons 0 "LINE")(cons 6 "BYLAYER")
(cons 8 "0")(cons 39 0)(cons 62 2)
(list 10 (+ sq) (+ sq) 0)
(list 11 (- sq) (+ sq) 0)))
(entmake (list (cons 0 "ENDBLK")(cons 8 "0"))))
(prin1))
;++++++++++++ Main Routine ++++++++++++++++++
(defun c:fixt (/ la a e q sq xq yq xs ys)
(initget 6)
(setq la (getdist "\nArea of Coverage per Fixture <12>: "))
(or la (setq la 12.))
(getrect)
(checkblk)
(setq a (* (- (car lr) (car ll)) (- (cadr ul) (cadr ll)))
e (/ a la)
q (fix (if (zerop (rem e 1)) e (1+ (fix e))))
sq (* (sqrt la))
xq (1+ (fix (/ (- (car lr) (car ll)) sq)))
yq (1+ (fix (/ (- (cadr ul) (cadr ll)) sq)))
xs (/ (- (car lr) (car ll)) xq)
ys (/ (- (cadr ul) (cadr ll)) yq))
(entmake (list (cons 0 "INSERT")(cons 2 "FIXT")
(list 10 (+ (car ll) (* xs 0.5))
(+ (cadr ll) (* ys 0.5)) 0)
(cons 45 ys)(cons 44 xs)
(cons 71 yq)(cons 70 xq)))
(princ (strcat "\nEfficency - Minimun Req'd=" (itoa q)
"\nQuantity Used=" (itoa (* xq yq))))
(prin1))
如果覆盖范围是圆形或矩形,则必须进行一些不同的计算-大卫 嗨,大卫。
真的是一个非常棒的Lisp程序,我不能离开论坛不给你我最好的问候。
我也在寻找一个和你一样好的程序,但它需要一些改变来满足我的需要。
那么,如果我试图根据需要修改它,有什么问题吗?
虽然我可以也可以不可以。
顺致敬意,
塔瓦特 嗨,大卫,
不错。
如果可能的话,我需要一些改变
输出块由minsert我们不能xplode和移动一个或一些夹具。
还需要块应选择一个(用户选择)
用户输入需要?
1.区域覆盖
2.选择块
3.选择区域边界
提前感谢
当做
马尼语:D
如果你修改它,一点问题都没有。玩得开心,如果你需要帮助,请回复-大卫
选择块是一个简单的更改。
通过边界线将是一个非常复杂的例行程序。矩形很容易解决,不规则柱脚将是一个真正的挑战-大卫 你好
是的,你说得很好,但我问边界只是指它的矩形,所以矩形应该是可选择的(有时我们不能在这么大的图形中轻松绘制矩形),所以选择rec?最受欢迎的选项。。。。。。。。。。。。。。。。。。
谢谢
马尼
页:
[1]