(setq pickobj (entsel "\nPick line :"))
(setq stpt (cdr (assoc 10 (entget (car pickobj)))))
(setq endpt (cdr (assoc 11 (entget (car pickobj)))))
(setq len (distance stpt endpt))
(setq rad (getreal "\nEnter desirable radius"))
(setq howmany (/ len rad))
(setq frac (- howmany (fix howmany)))
(if (> frac 0.5000001)
(setq howmany (+ (fix howmany) 1))
(setq howmany (fix howmany))
)
(command "Divide" (car pickobj) "B" "001" "Y" howmany)
(princ "\nAll done")
下一步是把一个反向线,使块面对corret的方式,每次我会添加也许明天,如果我有时间
尝试在stpt和endpt处添加insert
你基于minium overspary选择喷水器的想法很棒。但问题是,我必须将喷水装置调整为15.2/4=3.8m,这超出了我给出的范围(4-4.5m、3-3.6m和2.5-3.0m)。请在此张贴您的代码,这将有助于我估计的目的。
我将在随机长度上使用您的代码并检查结果。
如果我们可以使用以下内容,
对于4.57m,(4.57-1.49)/4.57=0.67,
对于3.66m,(3.66-0.56)/3.66=0.85,
对于3.048m,(3.048-3.008)/3.048=0.013,这样我可以多出一个喷头,而不是计算出的。
真正的问题是在大多数情况下,选择最小半径的喷头。 Suriwaits,
我做了一些检查,但它不起作用。
例如:
(defun sprktyp (d / minr tmp typ)
(setq minr (rem d (* 15 0.3048)) typ 15)
(if (< (setq tmp (rem d (* 12 0.3048))) minr) (setq minr tmp typ 12))
(if (< (setq tmp (rem d (* 10 0.3048))) minr) (setq minr tmp typ 10))
(list (/ d (+ (fix (/ d (* typ 0.3048))) 1)) (strcat (itoa typ) "-180"))
)
如果我用15.2和13.0运行它,结果如下
$ (sprktyp 15.2)
(3.04 "12-180")
_$ (sprktyp 13.0)
(2.6 "10-180")
我要试试别的。
ymg公司 例行检查的有趣想法。 下面是一个修订版:
(defun sprktyp (d / minr tmp typ)
(setqminr (- (* (+ (fix (/ d (* 15 0.3048))) 1) (* 15 0.3048)) d) typ 15)
(if (< (setq tmp (- (* (+ (fix (/ d (* 12 0.3048))) 1) (* 12 0.3048)) d)) minr) (setq minr tmp typ 12))
(if (< (setq tmp (- (* (+ (fix (/ d (* 10 0.3048))) 1) (* 10 0.3048)) d)) minr) (setq minr tmp typ 10))
(list (/ d (+ (fix (/ d (* typ 0.3048))) 1)) (strcat (itoa typ) "-180"))
)
结果:
_$ (sprktyp 15.2)
(3.04 "10-180")
_$ (sprktyp 13.0)
(4.33333 "15-180")
虽然它与您的样本不一致,但过度喷涂是最小化的。
ymg公司 尊敬的YMG。
我认为当使用固定值时会非常困难。
如果您可以使用范围(4-4.5、3-3.5和2.5-2.9m)而不是使用固定半径(如15’、12’、10’),那么它将是灵活的。
例如,对于15英尺的喷水器,请尝试13英尺、13.5英尺、14英尺、14.5英尺和15英尺。
如果上述条件均不适用,则尝试使用10.5’、11’、11.5’&12’的12’喷水器。
10’带8.5’,9’,9.5,10’的喷头
看起来很棒,
但我不知道如何在AutoCAD中检查这一点。 pBe--->等待最终代码。 Suriwaits,
试试这个,没有错误检查,也没有优化。尚未实施环形区域。
ymg公司
(defun round (x) (if (>= (- x (fix x)) 0.5) (1+ (fix x)) (fix x)))
(defun dtr (a) (* pi (/ a 180.0)))
(defun rtd (a) (/ (* a 180.0) pi))
;;; listpol by Gille Chanteau ;
;;; Returns the vertices list of any type of polyline (WCS coordinates) ;
;;; ;
;;; Argument ;
;;; en, a polyline (ename or vla-object) ;
(defun listpol (en / i p l)
(setq i (+ (vlax-curve-getEndParam en) (if (vlax-curve-IsClosed en) 1 0))))
(while (setq p (vlax-curve-getPointAtParam en (setq i (1- i))))
(setq l (cons (trans p 0 1 ) l))
)
)
(defun sprktyp (d / minr tmp typ)
(setqminr (- (* (+ (fix (/ d (* 15 0.3048))) 1) (* 15 0.3048)) d) typ 15)
(if (< (setq tmp (- (* (+ (fix (/ d (* 12 0.3048))) 1) (* 12 0.3048)) d)) minr) (setq minr tmp typ 12))
(if (< (setq tmp (- (* (+ (fix (/ d (* 10 0.3048))) 1) (* 10 0.3048)) d)) minr) (setq minr tmp typ 10))
(list (/ d (+ (fix (/ d (* typ 0.3048))) 1)) (strcat (itoa typ) "-180"))
)
(defun c:spr ( / a cb d d1 d2 enl n oldsnap p1 pl s1b s2b ss)
(setq oldsnap (getvar 'OSMODE))
(setvar 'OSMODE 0)
(prompt "\nSelect The Zone To Cover With Sprinklers:")
(if (setq ss (ssget "_:S" '((-4 . "<or")(0 . "*POLYLINE")(0 . "CIRCLE")(-4 . "or>"))))
(progn
(setq enl (entget (ssname ss 0)))
(cond
((= (cdr (assoc 0 enl)) "CIRCLE") (princ "\nNot Implemented Yet."))
(t (setq pl (listpol (ssname ss 0))
p1 (car pl)
pl (cdr pl)
d1 (distance p1 (carpl))
d2 (distance (car pl) (cadr pl))
s1b (sprktyp d1)
s2b (sprktyp d2)
cb (strcat (itoa (max (atoi (cadr s1b)) (atoi (cadr s2b)))) "-90")
)
(repeat 2
(vl-cmdf "_INSERT" cb p1 "" "" (rtd (setq a (angle p1 (car pl)))))
(setq n 1)
(while (< (setq d (* n (car s1b))) d1)
(vl-cmdf "_INSERT" (cadr s1b) (polar p1 a d) "" "" (rtd a))
(setq n (1+ n))
)
(setq p1 (car pl) pl (cdr pl))
(vl-cmdf "_INSERT" cb p1 "" "" (rtd (setq a (angle p1 (car pl)))))
(setq n 1)
(while (< (setq d (* n (car s2b))) d2)
(vl-cmdf "_INSERT" (cadr s2b) (polar p1 a d) "" "" (rtd a))
(setq n (1+ n))
)
(setq p1 (car pl) pl (cdr pl))
)
)
)
)
)
(setvar 'OSMODE oldsnap)
(princ)
)
我唯一想更改YMG的是,如下所示可以节省大量的打字
(setq s15 (* 15.0 0.3048)) or (setq s15 4.572)
(setq s10 3.048)
(setq s12 (* 12.0 0.3048)) or (setq s12 3.6576)
; note be careful * 15 0.3048 can return a integer * 15.0 0.3048 forces real answer
一般来说,作为一名从事公制工作的工程师,我们不会使用3.048,我们会采用3.0、3.6和4.5,并使用公制喷水器水力设计公式
页:
1
[2]