明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4646|回复: 11

[提问] (已解决)拉伸程序修改

[复制链接]
发表于 2014-3-1 12:11:50 | 显示全部楼层 |阅读模式
本帖最后由 123456abc 于 2014-3-1 17:47 编辑

下面是一组从网上获取的拉伸程序,执行后提示错误: 错误: 无法获取 ObjectID: nil,请高手帮忙改进一下,多谢!!

(defun c:ofss (/ E G O P1 P2 V1 V2 V3);
*************************************************************************************************
*        by ElpanovEvgeniy 26.02.2010
*        ----------------
*        27.02.2010 8:30
*        fix bug for acad 2004 (vlax-curve-getFirstDeriv e (vlax-curve-getEndParam e))
*        ----------------
*        27.02.2010 8:55
*        fix bug for first arc segment
*************************************************************************************************
(setq e  (entsel)
       p1 (cadr e)
       e  (car e)
       p1 (fix (vlax-curve-getParamAtPoint e (vlax-curve-getClosestPointTo e p1)))
       o  (vlax-ename->vla-object e));_ setq
(if (= 1 (cdr (assoc 70 (entget e))))
  (cond ((zerop p1)
         (setq p2 (1+ p1)
               v1 (list (vlax-curve-getPointAtParam e (vlax-curve-getEndParam e))
                        (vlax-curve-getFirstDeriv e (1- (vlax-curve-getEndParam e)))
                  ) ;_  list
               v2 (list (vlax-curve-getPointAtParam e p1) (vlax-curve-getFirstDeriv e 0.5))
               v3 (list (vlax-curve-getPointAtParam e p2) (vlax-curve-getFirstDeriv e 1.5))
         ) ;_  setq
        )
        ((= p1 (1- (vlax-curve-getEndParam e)))
         (setq p2 0
               v1 (list (vlax-curve-getPointAtParam e (1- p1))
                        (vlax-curve-getFirstDeriv e (+ (1- p1) 0.5))
                  ) ;_  list
               v2 (list (vlax-curve-getPointAtParam e p1) (vlax-curve-getFirstDeriv e (+ p1 0.5)))
               v3 (list (vlax-curve-getPointAtParam e p2) (vlax-curve-getFirstDeriv e (+ p2 0.5)))
         ) ;_  setq
        )
        ((setq p2 (1+ p1)
               v1 (list (vlax-curve-getPointAtParam e (1- p1))
                        (vlax-curve-getFirstDeriv e (+ (1- p1) 0.5))
                  ) ;_  list
               v2 (list (vlax-curve-getPointAtParam e p1) (vlax-curve-getFirstDeriv e (+ p1 0.5)))
               v3 (list (vlax-curve-getPointAtParam e p2) (vlax-curve-getFirstDeriv e (+ p2 0.5)))
         ) ;_  setq
        )
  ) ;_  cond
  (cond ((zerop p1)
         (setq p2 (1+ p1)
               v2 (list (vlax-curve-getPointAtParam e 0) (vlax-curve-getFirstDeriv e 0.5))
               v1 (list (car v2) (list (cadadr v2) (- (caadr v2)) 0.))
               v3 (list (vlax-curve-getPointAtParam e p2) (vlax-curve-getFirstDeriv e 1.5))
         ) ;_  setq
        )
        ((= p1 (1- (vlax-curve-getEndParam e)))
         (setq p2 (vlax-curve-getEndParam e)
               v1 (list (vlax-curve-getPointAtParam e (1- p1))
                        (vlax-curve-getFirstDeriv e (+ (1- p1) 0.5))
                  ) ;_  list
               v2 (list (vlax-curve-getPointAtParam e p1) (vlax-curve-getFirstDeriv e (+ p1 0.5)))
               v3 (list (vlax-curve-getPointAtParam e p2) (list (cadadr v2) (- (caadr v2)) 0.))
         ) ;_  setq
        )
        ((setq p2 (1+ p1)
               v1 (list (vlax-curve-getPointAtParam e (1- p1))
                        (vlax-curve-getFirstDeriv e (+ (1- p1) 0.5))
                  ) ;_  list
               v3 (list (vlax-curve-getPointAtParam e p2) (vlax-curve-getFirstDeriv e (+ p2 0.5)))
               v2 (list (vlax-curve-getPointAtParam e p1) (vlax-curve-getFirstDeriv e (+ p1 0.5)))
         ) ;_  setq
        )
  ) ;_  cond
) ;_  if
(while (= (car (setq g (grread nil 5 0))) 5)
  (vla-put-coordinate
   o
   p1
   (vlax-make-variant
    (vlax-safearray-fill (vlax-make-safearray 5 '(0 . 1))
                         (reverse (cdr (reverse (inters (car v1)
                                                        (mapcar '+ (car v1) (cadr v1))
                                                        (cadr g)
                                                        (mapcar '+ (cadr g) (cadr v2))
                                                        nil
                                                ) ;_  inters
                                       ) ;_  reverse
                                  ) ;_  cdr
                         ) ;_  reverse
    ) ;_  vlax-safearray-fill
   ) ;_  vlax-make-variant
  ) ;_  vla-put-coordinate
  (vla-put-coordinate
   o
   p2
   (vlax-make-variant
    (vlax-safearray-fill (vlax-make-safearray 5 '(0 . 1))
                         (reverse (cdr (reverse (inters (car v3)
                                                        (mapcar '+ (car v3) (cadr v3))
                                                        (cadr g)
                                                        (mapcar '+ (cadr g) (cadr v2))
                                                        nil
                                                ) ;_  inters
                                       ) ;_  reverse
                                  ) ;_  cdr
                         ) ;_  reverse
    ) ;_  vlax-safearray-fill
   ) ;_  vlax-make-variant
  ) ;_  vla-put-coordinate
) ;_  while
(princ)
)

发表于 2020-3-15 16:01:56 | 显示全部楼层
edata 发表于 2014-3-1 17:31
要选择不低于三点的多段线

能不能实现有捕捉?
发表于 2019-9-19 13:50:04 | 显示全部楼层

很强大,只是能加上捕捉就更好了
发表于 2019-9-3 10:55:31 | 显示全部楼层
很强大,只是能加上捕捉就更好了
发表于 2014-3-1 13:12:20 | 显示全部楼层
应是注解部份的干扰...

本帖子中包含更多资源

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

x
 楼主| 发表于 2014-3-1 15:08:35 | 显示全部楼层
还是不能用,一样的错误啊
发表于 2014-3-1 17:31:16 | 显示全部楼层
要选择不低于三点的多段线
  1. ;|
  2. *************************************************************************************************
  3. *        by ElpanovEvgeniy 26.02.2010
  4. *        ----------------
  5. *        27.02.2010 8:30
  6. *        fix bug for acad 2004 (vlax-curve-getFirstDeriv e (vlax-curve-getEndParam e))
  7. *        ----------------
  8. *        27.02.2010 8:55
  9. *        fix bug for first arc segment
  10. *************************************************************************************************
  11. |;

  12. (defun c:ofss (/ E G O P1 P2 V1 V2 V3)        ;
  13.   (vl-load-com)
  14.   (prompt "\n选择不低于三点的多段线:")
  15.   (setq        e (entsel))
  16.   (if (and e (= (cdr(assoc 0 (entget (car e)))) "LWPOLYLINE"))
  17.            (progn
  18.          (setq
  19.         p1 (cadr e)
  20.         e  (car e)
  21.         p1 (fix        (vlax-curve-getParamAtPoint
  22.                   e
  23.                   (vlax-curve-getClosestPointTo e p1)
  24.                 )
  25.            )
  26.         o  (vlax-ename->vla-object e)
  27.   ) ;_ setq
  28.   (if (= 1 (cdr (assoc 70 (entget e))))
  29.     (cond
  30.       ((zerop p1)
  31.        (setq p2        (1+ p1)
  32.              v1        (list
  33.                   (vlax-curve-getPointAtParam e (vlax-curve-getEndParam e))
  34.                   (vlax-curve-getFirstDeriv
  35.                     e
  36.                     (1- (vlax-curve-getEndParam e))
  37.                   )
  38.                 ) ;_  list
  39.              v2        (list (vlax-curve-getPointAtParam e p1)
  40.                       (vlax-curve-getFirstDeriv e 0.5)
  41.                 )
  42.              v3        (list (vlax-curve-getPointAtParam e p2)
  43.                       (vlax-curve-getFirstDeriv e 1.5)
  44.                 )
  45.        ) ;_  setq
  46.       )
  47.       ((= p1 (1- (vlax-curve-getEndParam e)))
  48.        (setq p2        0
  49.              v1        (list (vlax-curve-getPointAtParam e (1- p1))
  50.                       (vlax-curve-getFirstDeriv e (+ (1- p1) 0.5))
  51.                 ) ;_  list
  52.              v2        (list (vlax-curve-getPointAtParam e p1)
  53.                       (vlax-curve-getFirstDeriv e (+ p1 0.5))
  54.                 )
  55.              v3        (list (vlax-curve-getPointAtParam e p2)
  56.                       (vlax-curve-getFirstDeriv e (+ p2 0.5))
  57.                 )
  58.        ) ;_  setq
  59.       )
  60.       ((setq p2        (1+ p1)
  61.              v1        (list (vlax-curve-getPointAtParam e (1- p1))
  62.                       (vlax-curve-getFirstDeriv e (+ (1- p1) 0.5))
  63.                 ) ;_  list
  64.              v2        (list (vlax-curve-getPointAtParam e p1)
  65.                       (vlax-curve-getFirstDeriv e (+ p1 0.5))
  66.                 )
  67.              v3        (list (vlax-curve-getPointAtParam e p2)
  68.                       (vlax-curve-getFirstDeriv e (+ p2 0.5))
  69.                 )
  70.        ) ;_  setq
  71.       )
  72.     ) ;_  cond
  73.     (cond
  74.       ((zerop p1)
  75.        (setq p2        (1+ p1)
  76.              v2        (list (vlax-curve-getPointAtParam e 0)
  77.                       (vlax-curve-getFirstDeriv e 0.5)
  78.                 )
  79.              v1        (list (car v2) (list (cadadr v2) (- (caadr v2)) 0.))
  80.              v3        (list (vlax-curve-getPointAtParam e p2)
  81.                       (vlax-curve-getFirstDeriv e 1.5)
  82.                 )
  83.        ) ;_  setq
  84.       )
  85.       ((= p1 (1- (vlax-curve-getEndParam e)))
  86.        (setq p2        (vlax-curve-getEndParam e)
  87.              v1        (list (vlax-curve-getPointAtParam e (1- p1))
  88.                       (vlax-curve-getFirstDeriv e (+ (1- p1) 0.5))
  89.                 ) ;_  list
  90.              v2        (list (vlax-curve-getPointAtParam e p1)
  91.                       (vlax-curve-getFirstDeriv e (+ p1 0.5))
  92.                 )
  93.              v3        (list (vlax-curve-getPointAtParam e p2)
  94.                       (list (cadadr v2) (- (caadr v2)) 0.)
  95.                 )
  96.        ) ;_  setq
  97.       )
  98.       ((setq p2        (1+ p1)
  99.              v1        (list (vlax-curve-getPointAtParam e (1- p1))
  100.                       (vlax-curve-getFirstDeriv e (+ (1- p1) 0.5))
  101.                 ) ;_  list
  102.              v3        (list (vlax-curve-getPointAtParam e p2)
  103.                       (vlax-curve-getFirstDeriv e (+ p2 0.5))
  104.                 )
  105.              v2        (list (vlax-curve-getPointAtParam e p1)
  106.                       (vlax-curve-getFirstDeriv e (+ p1 0.5))
  107.                 )
  108.        ) ;_  setq
  109.       )
  110.     ) ;_  cond
  111.   ) ;_  if
  112.   (while (= (car (setq g (grread nil 5 0))) 5)
  113.     (vla-put-coordinate
  114.       o
  115.       p1
  116.       (vlax-make-variant
  117.         (vlax-safearray-fill
  118.           (vlax-make-safearray 5 '(0 . 1))
  119.           (reverse
  120.             (cdr
  121.               (reverse
  122.                 (inters
  123.                   (car v1)
  124.                   (mapcar '+ (car v1) (cadr v1))
  125.                   (cadr g)
  126.                   (mapcar '+ (cadr g) (cadr v2))
  127.                   nil
  128.                 ) ;_  inters
  129.               ) ;_  reverse
  130.             ) ;_  cdr
  131.           ) ;_  reverse
  132.         ) ;_  vlax-safearray-fill
  133.       ) ;_  vlax-make-variant
  134.     ) ;_  vla-put-coordinate
  135.     (vla-put-coordinate
  136.       o
  137.       p2
  138.       (vlax-make-variant
  139.         (vlax-safearray-fill
  140.           (vlax-make-safearray 5 '(0 . 1))
  141.           (reverse
  142.             (cdr
  143.               (reverse
  144.                 (inters
  145.                   (car v3)
  146.                   (mapcar '+ (car v3) (cadr v3))
  147.                   (cadr g)
  148.                   (mapcar '+ (cadr g) (cadr v2))
  149.                   nil
  150.                 ) ;_  inters
  151.               ) ;_  reverse
  152.             ) ;_  cdr
  153.           ) ;_  reverse
  154.         ) ;_  vlax-safearray-fill
  155.       ) ;_  vlax-make-variant
  156.     ) ;_  vla-put-coordinate
  157.   ) ;_  while
  158.     )
  159.   )
  160.   (princ)
  161. )

评分

参与人数 1明经币 +1 收起 理由
liuhaixin88 + 1 乐于助人奖!

查看全部评分

 楼主| 发表于 2014-3-1 17:46:54 | 显示全部楼层
恩,确实是要选三点,多谢
发表于 2014-11-14 00:23:32 | 显示全部楼层
怎么才能让这个程序有捕捉
发表于 2014-11-14 09:07:46 | 显示全部楼层
这个不是太好用,不能按照距离拉伸
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 18:16 , Processed in 0.185594 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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