明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 12890|回复: 3

[源码]模拟动态四连杆

[复制链接]
发表于 2012-1-13 15:20 | 显示全部楼层 |阅读模式
本帖最后由 snddd2000 于 2012-1-14 08:46 编辑

练习grread之用
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. (defun C:SLG ()
  3.   (setq ent1 (car (entsel "Please choose a LWPolyLine: "))) ;_选取四节直线段的多段线
  4.   (while (/= (cdr (assoc 0 (entget ent1))) "LWPOLYLINE")
  5.     (setq ent1 (car (entsel "\nPlease choose a LWPolyLine: ")))
  6.   )
  7.   (setq ent1obj (vlax-ename->vla-object ent1))
  8.   (vla-highlight ent1obj 1) ;_虚显目标图元
  9.   (setq        pt1 (vlax-curve-getStartPoint ent1obj)
  10.         pt2 (GetNopolypoint ent1 2)
  11.         pt3 (GetNopolypoint ent1 3)
  12.         pt4 (vlax-curve-getEndPoint ent1obj)
  13.   )

  14.   (setq
  15.     ent2 (entmakex (entget ent1))
  16.   )

  17.   (setq ent2list (entget ent2))
  18.   (prompt "\nPlease Moving cursor to change")
  19.   (setq mm (grread t 15 0))
  20.   (while (= 5 (car mm))
  21.     (setq mm (grread t 15 0))
  22.     (setq pt0 (cadr mm))
  23.     (setq pt2new (polar pt1 (angle pt1 pt0) (distance pt1 pt2)))


  24. ;;;;;;;;;;;;;;;;;;;;;;;;;;;
  25.     (setq cir1
  26.            (entmakex (list (cons 0 "CIRCLE")
  27.                            (cons 10 pt2new)
  28.                            (cons 40 (distance pt2 pt3))
  29.                      )
  30.            )
  31.     )
  32.     (setq cir2
  33.            (entmakex (list (cons 0 "CIRCLE")
  34.                            (cons 10 pt4)
  35.                            (cons 40 (distance pt3 pt4))
  36.                      )
  37.            )
  38.     )
  39.     (setq ptlist1 (2cirIntersect cir1 cir2))
  40.     (entdel cir1)
  41.     (entdel cir2)
  42.       (setq pt3new pt3)
  43.     (if        ptlist1
  44.       (progn
  45.         (cond
  46.           ((= 1 (length ptlist1))
  47.            (setq pt3new (car ptlist1))
  48.           )
  49.           ((= 2 (length ptlist1))
  50.            (progn
  51.        (if (< (distance (car ptlist1) pt3new)
  52.              (distance (cadr ptlist1) pt3new)
  53.                  )
  54.                (setq pt3new (car ptlist1))
  55.                (setq pt3new (cadr ptlist1))
  56.              )
  57.            )
  58.           )
  59.         )

  60. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  61.         (setq n 0)
  62.         (setq ent2list (mapcar '(lambda        (p)
  63.                                   (if (= 10 (car p))
  64.                                     (progn
  65.                                       (setq n (1+ n))
  66.                                       (cond
  67.                                         ((= 2 n)
  68.                                          (setq p (cons 10 pt2new))
  69.                                         )
  70.                                         ((= 3 n)
  71.                                          (setq p (cons 10 pt3new))
  72.                                         )
  73.                                         (t (setq p p))
  74.                                       )
  75.                                     )
  76.                                     (setq p p)
  77.                                   )
  78.                                 )
  79.                                ent2list
  80.                        )
  81.         )
  82.         (entmod ent2list)
  83.       )
  84.     )
  85.   )
  86.   (vla-highlight ent1obj 0)
  87. )
  88. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  89. (defun GetNopolypoint (plent No)
  90.   (nth (1- No) (get-pline-points plent))
  91. )
  92. ;;;(eval '(pragma '((protect-assign GetNopolypoint))))

  93. (defun get-pline-points        (ent / ptlist ptlist1)
  94.   (vl-load-com)
  95.   (setq        ptlist '()
  96.         ptlist1        '()
  97.         n 0
  98.   )
  99.   (setq        ptlist (vlax-safearray->list
  100.                  (vlax-variant-value
  101.                    (vlax-get-property
  102.                      (vlax-ename->vla-object ent)
  103.                      'Coordinates
  104.                    )
  105.                  )
  106.                )
  107.   )
  108.   (cond
  109.     (
  110.      (=        "LWPOLYLINE"
  111.         (cdr (assoc 0
  112.                     (entget ent)
  113.              )
  114.         )
  115.      )
  116.      (progn
  117.        (repeat (/ (length ptlist) 2)
  118.          (setq ptlist1 (cons (list (nth n ptlist)
  119.                                    (nth (setq n (1+ n)) ptlist)
  120.                              )
  121.                              ptlist1
  122.                        )
  123.          )
  124.          (setq n (1+ n))
  125.        )
  126.      )
  127.     )
  128.     (
  129.      (=        "POLYLINE"
  130.         (cdr (assoc 0
  131.                     (entget ent)
  132.              )
  133.         )
  134.      )
  135.      (progn
  136.        (repeat (/ (length ptlist) 3)
  137.          (setq ptlist1 (cons (list (nth n ptlist)
  138.                                    (nth (setq n (1+ n)) ptlist)
  139.                                    (nth (setq n (1+ n)) ptlist)
  140.                              )
  141.                              ptlist1
  142.                        )
  143.          )
  144.          (setq n (1+ n))
  145.        )
  146.      )
  147.     )
  148.   )

  149.   (reverse ptlist1)
  150. )
  151. ;;;(eval '(pragma '((protect-assign get-pline-points))))
  152. (defun 2cirIntersect (cir1 cir2)
  153.   (vl-load-com)
  154.   (setq        ptlist (vlax-invoke
  155.                  (vlax-ename->vla-object cir1)
  156.                  'intersectwith
  157.                  (vlax-ename->vla-object cir2)
  158.                  0
  159.                )
  160.         n      0
  161.   )
  162.   (setq ptlist1 '())
  163.   (if ptlist
  164.     (progn
  165.       (repeat (/ (length ptlist) 3)
  166.         (setq ptlist1 (cons (list (nth n ptlist)
  167.                                   (nth (setq n (1+ n)) ptlist)
  168.                                   (nth (setq n (1+ n)) ptlist)
  169.                             )
  170.                             ptlist1
  171.                       )
  172.         )
  173.         (setq n (1+ n))
  174.       )
  175.     )
  176.   )
  177.   ptlist1
  178. ) ;_ end defun
  179. ;;;(eval '(pragma '((protect-assign 2cirIntersect))))

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2012-1-13 20:12 | 显示全部楼层
第一个坐着沙发顶上。好马!
发表于 2012-1-13 20:30 | 显示全部楼层
很好!学习了!!!!!!
发表于 2020-9-10 14:52 | 显示全部楼层

很好!学习了!!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-8 01:47 , Processed in 0.224737 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表