明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 22101|回复: 126

[源码] 【源码】比例可变的轨迹/路径阵列

    [复制链接]
发表于 2013-9-8 20:36 | 显示全部楼层 |阅读模式
本帖最后由 荒野孤行 于 2015-7-24 23:12 编辑

可以选择沿着曲线轨迹/路径不旋转/旋转阵列,同时阵列对象的比例也可以变化(但是需要将阵列的对象组成块),演示请见图示:

;;;******路径阵列 程序开始******
(defun c:t1 ()
  (setvar "osmode" 15359)
  (setvar "cmdecho" 0)
  (command "undo" "be")
  (princ "\n★功能:沿曲线路径阵列.\n")
  (while
    (progn (setq EntBlock     (entsel
                                "\n选择要阵列的块(请确保图块的基点已设定于其中心位置):"
                              )
                 BlockEntname (car EntBlock)
           )
           (not        (if (= EntBlock nil)
                  nil
                  (= (cdr (assoc 0 (entget BlockEntname))) "INSERT")
                )
           )
    )
     (princ
       "\n提示:选取的不是图块或未选取任何图元,请重新选取:"
     )
  )
  (setq BlockName (cdr (assoc 2 (entget (car EntBlock)))))
  (while
    (progn
      (setq EntCurve
             (entsel
               "\n请选择路径曲线(多段线、直线、样条曲线、圆、圆弧或椭圆):\n"
             )
      )
      (not
        (if (= EntCurve nil)
          nil
          (wcmatch (cdr (assoc 0 (entget (car EntCurve))))
                   "LWPOLYLINE,LINE,SPLINE,ARC,CIRCLE,ELLIPSE"
          )
        )
      )
    )
  )
  (initget 6)
  (if (not (setq num (getint "\n阵列总数量:<10>")))
    (setq num 10)
  )
  (initget "Y N")
  (if (not
        (setq kw (getkword "阵列同时旋转对象:[是(Y) / 否(N)]<Y>"))
      )
    (setq kw "Y")
  )
  (initget "A B")
  (if
    (not (setq gongshi
                (getkword
                  "\n选择计算图块比例变化的公式:[Sin(x)+1.2(A)/Cos(x)+1.2(B)]<A>: "
                )
         )
    )
     (setq gongshi "A")
  )
(if (not (setq angle_start (getreal "请输入图块比例变化的起始角度值:<0>"))
      )
    (setq angle_start 0)
  )
  (if (not
        (setq angle_end (getreal "请输入图块比例变化的终止角度值:<180>"))
      )
    (setq angle_end 180)
  )
  (setq angle_add (/ (- angle_end angle_start) num))
  (vl-load-com)
  (setvar "osmode" 0)
  (setq ObjCurve (vlax-ename->vla-object (car EntCurve)))
  (setq        len (vlax-curve-getdistatparam
              ObjCurve
              (vlax-curve-getendparam ObjCurve)
            )
  )
  (setq GapDist (/ len num))
  (setq i 0)
  (while (<= i num)
    (setq NextPt
           (vlax-curve-getPointAtDist ObjCurve (* i GapDist))
    )
    (if        (= kw "Y")
      (progn
        (setq xielv (vlax-curve-getFirstDeriv
                      ObjCurve
                      (vlax-curve-getParamAtPoint ObjCurve NextPt)
                    )
        )
        (if (= (car xielv) 0)
          (setq NextAng 90)
          (setq
            NextAng (/ (* (atan (/ (cadr xielv) (car xielv) 1.0)) 180)
                       pi
                    )
          )
        )
      )
      (setq NextAng 0)
    )
    (cond
      ((= gongshi "A")
       (setq bili (+ (sin (/ (* i angle_add PI) 180)) 1.2))
      )
      ((= gongshi "B")
       (setq bili (+ (cos (/ (* i angle_add PI) 180)) 1.2))
      )
    )
    (command "_.insert"        BlockName "non"        NextPt "xyz" bili "" ""        NextAng)
    (setq i (+ i 1))
  )
  (command "undo" "e")
  (setvar "osmode" 15359)
  (princ)
)
;;;;;;*******路径阵列 程序结束******

本帖子中包含更多资源

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

x

点评

正好需要,支持下支持下支持下支持下支持下  发表于 2016-9-18 19:49
2 主题 59 帖子 799 积分 中级会员 Rank: 3Rank: 3 积分799 发消息 109# 发表于 2016-6-21 19:13:20 | 只看该作者 正好需要,支持下支持下支持下支持下支持下 正好需要,支持下支持下支持下支   发表于 2016-9-18 19:48
2 主题 59 帖子 799 积分 中级会员 Rank: 3Rank: 3 积分799 发消息 109# 发表于 2016-6-21 19:13:20 | 只看该作者 正好需要,支持下  发表于 2016-9-18 19:47
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2020-6-27 19:24 | 显示全部楼层
本帖最后由 cjjh8301 于 2020-6-27 19:27 编辑

感谢楼主的源码
但是,为什么块阵列时,到了某个角度,就翻转过来了,能解决这个问题吗(块基点为短边中点)

本帖子中包含更多资源

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

x
发表于 2017-12-31 14:27 | 显示全部楼层
荒野孤行 发表于 2013-9-9 19:30
主要运用VLX-Curve-函数

图块的间距要是可以逐渐变化就完美了。
发表于 2022-5-19 12:38 | 显示全部楼层
正好需要,支持下
发表于 2020-6-29 22:35 | 显示全部楼层
实用的程序!!!
发表于 2020-6-25 19:30 | 显示全部楼层
可以选择对象的两点在曲线上阵列吗?
发表于 2020-6-5 17:56 | 显示全部楼层
看不到东西
发表于 2019-8-17 12:44 | 显示全部楼层
感谢共享代码!
发表于 2018-6-12 09:34 | 显示全部楼层
极品收藏了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 21:05 , Processed in 0.307612 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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