乐筑天下

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

[编程交流] Lisp程序问题,请用l

[复制链接]

27

主题

146

帖子

119

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
137
发表于 2022-7-5 20:28:03 | 显示全部楼层 |阅读模式
嗨,伙计们
可以帮我补充一下“dot”功能吗?谢谢!
 
  1. ;;http://bbs.xdcad.org/thread-678248-1-1.html
  2. ;;by huang
  3. (defun C:myjoin(/ E H J LST N OBJ P11 P12 P21 P22 SS X)
  4. (defun twoEnt        (e1 e2)
  5.    (setq p11 (vlax-curve-getStartPoint e1))
  6.    (setq p12 (vlax-curve-getEndPoint e1))
  7.    (setq p21 (vlax-curve-getStartPoint e2))
  8.    (setq p22 (vlax-curve-getEndPoint e2))
  9.    (cond ((and (equal (det p11 p12 p21) 0) (equal (det p11 p12 p22) 0))
  10.    (setq H (car (Max-distance (list p11 p12 p21 p22))))
  11.    (setq obj (vlax-ename->vla-object e1))
  12.    (vlax-put obj 'StartPoint (car H))
  13.    (vlax-put obj 'EndPoint (cadr H))
  14.   )
  15.    )
  16. )
  17. (cond
  18.    ((setq ss (ssget '((0 . "LINE"))))
  19.     (repeat (setq n (sslength ss))
  20.       (setq e (ssname ss (setq n (1- n))))
  21.       (setq lst (cons e lst))
  22.     )
  23.     (foreach j        lst
  24.       (mapcar '(lambda (x) (cond ((and (entget x) (entget j)) (twoEnt j x)))) lst)
  25.     )
  26.    )
  27. )
  28. (princ)
  29. )
  30. ;;(Max-distance (getpt (ssget) 10))=>(((-2670.87 3701.22 0.0) (-1725.61 3689.13 0.0)) . 945.338)
  31. (defun Max-distance (H / D M MAXD P PAIR Q U V W)
  32. (setq Q (cdr (append H H (list (car H)))))                  
  33. (setq MaxD 0.0)                                            
  34. (foreach U H                                                    
  35.    (setq V (car Q))                                          
  36.    (setq W (cadr Q))                                          
  37.    (setq M (MJ:Mid V W))                                    
  38.    (while (> (dot M U V) 0.0)                                    
  39.      (setq Q (cdr Q))                                          
  40.      (setq V (car Q))                                          
  41.      (setq W (cadr Q))                                          
  42.      (setq M (MJ:Mid V W))                                    
  43.    )
  44.    (setq D (distance U V))                                  
  45.    (if        (> D MaxD)                                            
  46.      (setq MaxD D                                          
  47.     Pair (list U V)                                    
  48.      )
  49.    )
  50. )
  51. (cons Pair MaxD)                                          
  52. )
  53. (defun MJ:Mid (P1 P2)
  54. (mapcar '(lambda (X Y) (* (+ X Y) 0.5)) P1 P2)
  55. )
  56. ;;(det (getpoint)(getpoint)(getpoint))
  57. (defun det (p1 p2 p3 / x2 y2)
  58. (setq        x2 (car p2)
  59.        y2 (cadr p2)
  60. )
  61. (- (* (- x2 (car p3)) (- y2 (cadr p1)))
  62.     (* (- x2 (car p1)) (- y2 (cadr p3)))
  63. )
  64. )
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 20:43:09 | 显示全部楼层
代码有点错误。。。我不知道该怎么办,但我猜应该是这样的:
 
  1. ;;http://bbs.xdcad.org/thread-678248-1-1.html
  2. ;;by huang
  3. ;;mod by M.R.
  4. (defun c:myjoin (/ e h j lst n obj p11 p12 p21 p22 ss)
  5. (vl-load-com)
  6. (defun twoent (e1 e2)
  7.    (setq p11 (vlax-curve-getstartpoint e1))
  8.    (setq p12 (vlax-curve-getendpoint e1))
  9.    (setq p21 (vlax-curve-getstartpoint e2))
  10.    (setq p22 (vlax-curve-getendpoint e2))
  11.    (if (and (equal (det p11 p12 p21) 0)
  12.             (equal (det p11 p12 p22) 0)
  13.        )
  14. [highlight];=> if you want only WCS calculation leave this line, but if you want it 3D replace line with T[/highlight]
  15.      (progn
  16.        (setq h (car (max-distance (list p11 p12 p21 p22))))
  17.        (setq obj (vlax-ename->vla-object e1))
  18.        (vlax-put obj 'startpoint (car h))
  19.        (vlax-put obj 'endpoint (cadr h))
  20.      )
  21.    )
  22. )
  23. (cond
  24.    ((setq ss (ssget '((0 . "LINE"))))
  25.     (repeat (setq n (sslength ss))
  26.       (setq e (ssname ss (setq n (1- n))))
  27.       (setq lst (cons e lst))
  28.     )
  29.     (foreach j lst
  30.       (mapcar '(lambda (x)
  31.                  (cond ((and (entget x) (entget j)) (twoent j x)))
  32.                )
  33.               lst
  34.       )
  35.     )
  36.    )
  37. )
  38. (princ)
  39. )
  40. ;;(max-distance ptlst)=>(((-2670.87 3701.22 0.0) (-1725.61 3689.13 0.0)) . 945.338)
  41. (defun max-distance (h / d maxd pair q v)
  42. (setq q (cdr (append h h (list (car h)))))
  43. (setq maxd 0.0)
  44. (foreach u h
  45.    (setq
  46.      v (car
  47.          (vl-sort q
  48.                   '(lambda (a b) (> (distance u a) (distance u b)))
  49.          )
  50.        )
  51.    )
  52.    (setq d (distance u v))
  53.    (if (> d maxd)
  54.      (setq maxd d
  55.            pair (list u v)
  56.      )
  57.    )
  58. )
  59. (cons pair maxd)
  60. )
  61. ;;(det (getpoint)(getpoint)(getpoint))
  62. (defun det (p1 p2 p3)
  63. (+ (* (car p1)
  64.        (- (* (cadr p2) (caddr p3)) (* (cadr p3) (caddr p2)))
  65.     )
  66.     (* (- (cadr p1))
  67.        (- (* (car p2) (caddr p3)) (* (car p3) (caddr p2)))
  68.     )
  69.     (* (caddr p1)
  70.        (- (* (car p2) (cadr p3)) (* (car p3) (cadr p2)))
  71.     )
  72. )
  73. )
回复

使用道具 举报

27

主题

146

帖子

119

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
137
发表于 2022-7-5 21:03:42 | 显示全部楼层
 
非常感谢你,马尔科。但是,无法批量加入。
 
应该是这样的:
回复

使用道具 举报

27

主题

146

帖子

119

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
137
发表于 2022-7-5 21:12:05 | 显示全部楼层
  1. (defun dot (p1 p2 p3 / x1 y1)
  2. (setq        x1 (car p1)
  3.        y1 (cadr p1)
  4. )
  5. (+ (* (- (car p2) x1) (- (car p3) x1))
  6.     (* (- (cadr p2) y1) (- (cadr p3) y1))
  7. )
  8. )

 
我找到了“点”函数,但不能正常工作
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 21:26:30 | 显示全部楼层
我建议您对同一任务使用JOIN命令。。。
 
http://www.theswamp.org/index.php?topic=46124.0
 
  1. ;Written by: Chris Wade
  2. ;small mod by M.R.
  3. (defun c:ja ( / *error* uFlag doc StopLoop SelSet SelLen LoopCT )
  4. (vl-load-com)
  5. (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  6. (defun *error* (msg)
  7.    (if doc
  8.      (vla-EndUndoMark doc)
  9.    )
  10.    (if msg
  11.      (prompt msg)
  12.    )
  13.    (princ)
  14. )
  15. (while (= StopLoop nil)
  16.    (princ
  17.      "\nPlease select the objects that you would like to join : "
  18.    )
  19.    (setq SelSet (ssget))
  20.    (cond ((/= SelSet nil)
  21.           (vla-StartUndoMark doc)
  22.           (setq SelLen (sslength SelSet))
  23.           (setq LoopCT 0)
  24.           (while (< LoopCT SelLen)
  25.             (vl-cmdf "._join" (ssname SelSet LoopCT) SelSet "")
  26.             (setq LoopCT (+ LoopCT 1))
  27.           )
  28.           (setq StopLoop T)
  29.          )
  30.    )
  31. )
  32. (*error* nil)
  33. )

 
我以为你想要这样的东西:
 
  1. ;;by M.R.
  2. (defun c:myjoin ( / max-distance e ptlst n p1 p2 ss filter ch x )
  3. ;;(max-distance ptlst)=>(((-2670.87 3701.22 0.0) (-1725.61 3689.13 0.0)) . 945.338)
  4. (defun max-distance ( h / d maxd pair q v )
  5.    (setq q h)
  6.    (setq maxd 0.0)
  7.    (foreach u h
  8.      (setq
  9.        v (car
  10.            (vl-sort q
  11.                     '(lambda ( a b ) (> (distance u a) (distance u b)))
  12.            )
  13.          )
  14.      )
  15.      (setq d (distance u v))
  16.      (if (> d maxd)
  17.        (setq maxd d
  18.              pair (list u v)
  19.        )
  20.      )
  21.    )
  22.    (cons pair maxd)
  23. )
  24. (initget "2D 3D")
  25. (setq ch (getkword "\n2D or 3D calculation [2D/3D] <3D> : "))
  26. (if (null ch)
  27.    (setq ch "3D")
  28. )
  29. (setq filter (if (eq ch "3D")
  30.                 (list '(0 . "LINE"))
  31.                 (list '(0 . "LINE")          '(-4 . "<and")
  32.                       '(-4 . "*,*,=")        '(10 0.0 0.0 0.0)
  33.                       '(-4 . "*,*,=")        '(11 0.0 0.0 0.0)
  34.                       '(-4 . "and>")
  35.                      )
  36.               )
  37. )
  38. (setq ss (ssget filter))
  39. (repeat (setq n (sslength ss))
  40.    (setq e (ssname ss (setq n (1- n))))
  41.    (setq p1 (cdr (assoc 10 (entget e)))
  42.          p2 (cdr (assoc 11 (entget e)))
  43.    )
  44.    (setq ptlst (cons p1 ptlst)
  45.          ptlst (cons p2 ptlst)
  46.    )
  47. )
  48. (setq x (max-distance ptlst))
  49. (entmake (list '(0 . "LINE")
  50.                 (cons 10 (caar x))
  51.                 (cons 11 (cadar x))
  52.                 '(62 . 1)
  53.           )
  54. )
  55. (princ)
  56. )

 
您好,M.R。
回复

使用道具 举报

27

主题

146

帖子

119

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
137
发表于 2022-7-5 21:35:51 | 显示全部楼层
 
李的套路很好!!!
 
 
谢谢你,马尔科,这也很好!但如果能用普林,那就更完美了!!!
 
 
不,这不是我想要的。这无法批量合并行。
212808dbesbtwwtkpbo0jk.jpg
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 09:01 , Processed in 0.523656 second(s), 66 queries .

© 2020-2025 乐筑天下

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