明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2996|回复: 16

[源码] 图形净距离阵列

[复制链接]
发表于 2017-10-15 18:36 | 显示全部楼层 |阅读模式
本帖最后由 孙玉坤 于 2017-10-15 20:32 编辑

;角度阵列程序(Angle array routine),比AutoCAD的阵列容易得多。

(defun C:AAR ( / ss ang bp cnt dist d)
(PRINC "\n 角度阵列\(2005.8.5胡晓航\) ")
  (cond
    (  (setq ss (ssget))
       (initget 1)
       (setq bp (getpoint "\n基点: "))
       (initget 1)
       (setq ang
           (getangle bp "\n阵列方向: "))
         (initget 7)
         (setq dist
           (getdist "\n对象间距: "))
         (initget 7)
         (setq cnt (getint "\n对象个数: "))
         (setq d 0.0)
         (setvar "cmdecho" 0)
         (command "_.undo" "_g"
                  "_.copy" ss "" "_m" bp)
         (repeat (1- cnt)
           (command
               (polar bp ang (setq d (+ d dist)))))
               (command "" "_.undo" "_e")
        )
      )
      (princ)
)
这个代码只能做到阵列距离一效果,  哪位大神帮忙改一下  ,如图形二所示,阵列的距离为两个图元间的净距离,加记忆功能。。。万分感谢

本帖子中包含更多资源

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

x
发表于 2017-10-18 11:18 | 显示全部楼层
  1. (defun C:aa (/ A1 A2 ANG BP CNT D DIST SS)
  2.   (defun ax:GetBoundingBox (ent / ll ur)
  3.     (vla-getboundingbox (vlax-ename->vla-object ent) 'll 'ur)
  4.     (mapcar 'vlax-safearray->list (list ll ur))
  5. )
  6.   (PRINC "\n 角度阵列\(2005.8.5胡晓航\) ")  
  7.   (cond
  8.     ((setq ss (car (entsel "\n选择对象:")))
  9.      (initget 1)
  10.      (setq bp (getpoint "\n基点: "))
  11.      (initget 1)
  12.      (setq ang
  13.             (getangle bp "\n阵列方向: ")
  14.      )
  15.      (initget 7)
  16.      (setq dist
  17.             (getdist "\n对象间距: ")
  18.      )
  19.      (initget 7)
  20.      (setq cnt (getint "\n对象个数: "))
  21.      (setvar "cmdecho" 0)
  22.      (setvar "osmode" 0)
  23.      (repeat (1- cnt)
  24.        (setq a1 (ax:GetBoundingBox ss))
  25.        (setq a2 (list (caadr a1) (cadar a1)))
  26.        (setq d (distance (car a1) a2))
  27.        (setq d (+ d dist))
  28.        (command "_.copy" ss "" bp (polar bp ang d))
  29.        (setq ss (entlast))
  30.      )     
  31.     )
  32.   )
  33.   (setvar "osmode" 15359)
  34.   (princ)
  35. )


;注意只考滤陈列间距二水平的效果
发表于 2019-1-5 15:25 | 显示全部楼层
  1. (defun c:tt ()
  2.   (setq ang (UangLE 1 "" "阵列方向<输入或鼠标直接量取>" ang nil))
  3.   (setq dist (Udist 1 "" "间隔<输入或鼠标直接量取>" dist nil))
  4.   (setq nn (Uint 7 "" "数量" nn))
  5.   (setvar "osmode" 0)
  6.   (while (setq ss (ssget))
  7.     (setq p1 (xyp-9pt ss 1)
  8.           p2 (xyp-9pt ss 3)
  9.           dd (distance p1 p2)
  10.           i  1
  11.     )
  12.     (repeat (1- nn)
  13.       (setq p3 (polar p1 ang (* (+ dd dist) i))
  14.             i  (1+ i)
  15.       )
  16.       (xyp-copyMove ss p1 p3)
  17.     )
  18.   )
  19.   (princ)
  20. )
发表于 2017-10-18 21:52 | 显示全部楼层
也许这个可以满足你的要求,定的规则是这样的:,可以是接受鼠标和键盘输入且有默认值;如果上次的输入是鼠标框选的,这次是按的空格,则默认为阵列距离;如果上次输入是键盘输入产,这次按了空格,则默认为净距离输入;自动记忆上次的输入值且是双项记忆(在有双项阵列的情况下),如下




本帖子中包含更多资源

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

x
发表于 2017-10-15 18:46 | 显示全部楼层
无法达到阵列间距二的效果
发表于 2017-10-17 16:41 | 显示全部楼层
楼主的想法有些情况更符合实际工作
 楼主| 发表于 2017-10-18 21:22 | 显示全部楼层
琴剑江山_10184 发表于 2017-10-18 11:18
;注意只考滤陈列间距二水平的效果

非常感谢版主的热情帮助,效果刚刚刚的  就是不能框选   可能在修改成多选  那就完美啦
 楼主| 发表于 2017-10-18 22:19 | 显示全部楼层
luyu9635 发表于 2017-10-18 21:52
也许这个可以满足你的要求,定的规则是这样的:,可以是接受鼠标和键盘输入且有默认值;如果上次的输入是鼠 ...

正式我想要的功能 ,万分感谢两位大师的 辛苦付出
发表于 2017-10-18 22:24 | 显示全部楼层
孙玉坤 发表于 2017-10-18 22:19
正式我想要的功能 ,万分感谢两位大师的 辛苦付出

楼主 CAD批量插入tiff图片或者pdf参考底图 并阵列排版  你会吗
发表于 2017-10-19 10:42 | 显示全部楼层
好东西,正需要,顶顶顶
发表于 2017-10-19 16:49 | 显示全部楼层
这个不错的,一直头疼的问题被解决了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-16 20:24 , Processed in 0.372115 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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