乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: suriwaits

[编程交流] 先进措施

[复制链接]

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 19:12:41 | 显示全部楼层
有几个打字错误,我应该先测试,但多一点,这项工作可以做得更好
 
  1. (setq pickobj (entsel "\nPick line :"))
  2. (setq stpt (cdr (assoc 10 (entget (car pickobj)))))
  3. (setq endpt (cdr (assoc 11 (entget (car pickobj)))))
  4. (setq len (distance stpt endpt))
  5. (setq rad (getreal "\nEnter desirable radius"))
  6. (setq howmany (/ len rad))
  7. (setq frac (- howmany (fix howmany)))
  8. (if (> frac 0.5000001)
  9. (setq howmany (+ (fix howmany) 1))
  10. (setq howmany (fix howmany))
  11. )
  12. (command "Divide" (car pickobj) "B" "001" "Y" howmany)
  13. (princ "\nAll done")

 
下一步是把一个反向线,使块面对corret的方式,每次我会添加也许明天,如果我有时间
 
尝试在stpt和endpt处添加insert
回复

使用道具 举报

8

主题

41

帖子

33

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 19:16:06 | 显示全部楼层
 
你基于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,这样我可以多出一个喷头,而不是计算出的。
 
真正的问题是在大多数情况下,选择最小半径的喷头。
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 19:19:10 | 显示全部楼层
Suriwaits,
 
我做了一些检查,但它不起作用。
 
例如:
 
  1. (defun sprktyp (d / minr tmp typ)
  2.    (setq minr (rem d (* 15 0.3048)) typ 15)
  3.    (if (< (setq tmp (rem d (* 12 0.3048))) minr) (setq minr tmp typ 12))
  4.    (if (< (setq tmp (rem d (* 10 0.3048))) minr) (setq minr tmp typ 10))
  5.    
  6.    (list (/ d (+ (fix (/ d (* typ 0.3048))) 1)) (strcat (itoa typ) "-180"))
  7. )

 
如果我用15.2和13.0运行它,结果如下
 
  1. $ (sprktyp 15.2)
  2. (3.04 "12-180")
  3. _$ (sprktyp 13.0)
  4. (2.6 "10-180")

 
我要试试别的。
 
ymg公司
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 19:19:59 | 显示全部楼层
例行检查的有趣想法。
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 19:24:13 | 显示全部楼层
下面是一个修订版:
 
  1. (defun sprktyp (d / minr tmp typ)
  2.    (setq  minr (- (* (+ (fix (/ d (* 15 0.3048))) 1) (* 15 0.3048)) d)    typ 15)
  3.    (if (< (setq tmp (- (* (+ (fix (/ d (* 12 0.3048))) 1) (* 12 0.3048)) d)) minr) (setq minr tmp typ 12))
  4.    (if (< (setq tmp (- (* (+ (fix (/ d (* 10 0.3048))) 1) (* 10 0.3048)) d)) minr) (setq minr tmp typ 10))
  5.    
  6.    (list (/ d (+ (fix (/ d (* typ 0.3048))) 1)) (strcat (itoa typ) "-180"))
  7. )

 
结果:
  1. _$ (sprktyp 15.2)
  2. (3.04 "10-180")
  3. _$ (sprktyp 13.0)
  4. (4.33333 "15-180")

 
虽然它与您的样本不一致,但过度喷涂是最小化的。
 
ymg公司
回复

使用道具 举报

8

主题

41

帖子

33

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 19:26:20 | 显示全部楼层
尊敬的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’的喷头
 
回复

使用道具 举报

8

主题

41

帖子

33

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 19:31:38 | 显示全部楼层
 
看起来很棒,
 
但我不知道如何在AutoCAD中检查这一点。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 19:33:42 | 显示全部楼层
pBe--->等待最终代码。
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 19:37:30 | 显示全部楼层
Suriwaits,
 
试试这个,没有错误检查,也没有优化。尚未实施环形区域。
 
ymg公司
 
  1. (defun round (x) (if (>= (- x (fix x)) 0.5) (1+ (fix x)) (fix x)))
  2. (defun dtr (a) (* pi (/ a 180.0)))
  3. (defun rtd (a) (/ (* a 180.0) pi))
  4. ;;; listpol   by Gille Chanteau                                               ;
  5. ;;; Returns the vertices list of any type of polyline (WCS coordinates)       ;
  6. ;;;                                                                           ;
  7. ;;; Argument                                                                  ;
  8. ;;; en, a polyline (ename or vla-object)                                      ;
  9. (defun listpol (en / i p l)  
  10. (setq i (+ (vlax-curve-getEndParam en) (if (vlax-curve-IsClosed en) 1 0))))
  11. (while (setq p (vlax-curve-getPointAtParam en (setq i (1- i))))
  12.      (setq l (cons (trans p 0 1 ) l))
  13. )
  14. )
  15. (defun sprktyp (d / minr tmp typ)
  16.    (setq  minr (- (* (+ (fix (/ d (* 15 0.3048))) 1) (* 15 0.3048)) d)    typ 15)
  17.    (if (< (setq tmp (- (* (+ (fix (/ d (* 12 0.3048))) 1) (* 12 0.3048)) d)) minr) (setq minr tmp typ 12))
  18.    (if (< (setq tmp (- (* (+ (fix (/ d (* 10 0.3048))) 1) (* 10 0.3048)) d)) minr) (setq minr tmp typ 10))   
  19.    (list (/ d (+ (fix (/ d (* typ 0.3048))) 1)) (strcat (itoa typ) "-180"))
  20. )
  21. (defun c:spr ( / a cb d d1 d2 enl n oldsnap p1 pl s1b s2b ss)
  22. (setq oldsnap (getvar 'OSMODE))
  23. (setvar 'OSMODE 0)
  24. (prompt "\nSelect The Zone To Cover With Sprinklers:")
  25. (if (setq ss (ssget "_:S" '((-4 . "<or")(0 . "*POLYLINE")(0 . "CIRCLE")(-4 . "or>"))))
  26.     (progn
  27.        (setq enl (entget (ssname ss 0)))
  28.        (cond
  29.            ((= (cdr (assoc 0 enl)) "CIRCLE") (princ "\nNot Implemented Yet."))
  30.            (t (setq pl (listpol (ssname ss 0))
  31.                     p1 (car pl)
  32.                     pl (cdr pl)
  33.                     d1 (distance p1 (car  pl))
  34.                     d2 (distance (car pl) (cadr pl))
  35.                    s1b (sprktyp d1)
  36.                    s2b (sprktyp d2)
  37.                     cb (strcat (itoa (max (atoi (cadr s1b)) (atoi (cadr s2b)))) "-90")
  38.                )
  39.                (repeat 2
  40.                   (vl-cmdf "_INSERT" cb p1 "" "" (rtd (setq a (angle p1 (car pl)))))
  41.                   (setq n 1)                 
  42.                   (while (< (setq d (* n (car s1b))) d1)                       
  43.                       (vl-cmdf "_INSERT" (cadr s1b) (polar p1 a d) "" "" (rtd a))
  44.                       (setq n (1+ n))
  45.                   )
  46.                   (setq p1 (car pl) pl (cdr pl))
  47.                   (vl-cmdf "_INSERT" cb p1 "" "" (rtd (setq a (angle p1 (car pl)))))
  48.                   (setq n 1)                 
  49.                   (while (< (setq d (* n (car s2b))) d2)                       
  50.                       (vl-cmdf "_INSERT" (cadr s2b) (polar p1 a d) "" "" (rtd a))
  51.                       (setq n (1+ n))
  52.                   )
  53.                   (setq p1 (car pl) pl (cdr pl))
  54.                )
  55.            )         
  56.                
  57.        )
  58.     )
  59. )
  60. (setvar 'OSMODE oldsnap)
  61. (princ)
  62. )      
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 19:39:09 | 显示全部楼层
我唯一想更改YMG的是,如下所示可以节省大量的打字
 
  1. (setq s15 (* 15.0 0.3048)) or (setq s15 4.572)
  2. (setq s10 3.048)
  3. (setq s12 (* 12.0 0.3048)) or (setq s12 3.6576)
  4. ; 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,并使用公制喷水器水力设计公式
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 19:45 , Processed in 0.451518 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表