明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3837|回复: 15

[基础] 求助,那位大侠帮忙编一个方框阵列程序

  [复制链接]
发表于 2010-2-6 09:00:00 | 显示全部楼层 |阅读模式

    那位大侠帮忙编一个方框阵列程序,基本要求是:将一个方框可以设置行列数阵列,行和列间距不一样可以设置,

只要四边点,不要中间点。最后效果如附图,

 楼主| 发表于 2010-2-6 09:02:00 | 显示全部楼层

发一下附件。

本帖子中包含更多资源

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

x
发表于 2010-2-6 22:40:00 | 显示全部楼层
本帖最后由 作者 于 2010-2-9 20:14:58 编辑

阵列后删去中间的行吗?
游客,本帖隐藏的内容需要发帖数高于 2 才可浏览,你当前发帖数只有 0
发表于 2010-2-7 10:01:00 | 显示全部楼层

感谢Z版,向你学习思路

在AUTOCAD 2008下,做些局部调整,测试O.K.

但如执行图面范围超过荧幕画面时,无法画出正确的图形,

不知如何解决呢?

程序调整如下:

;方框阵列 明经 ZZXXQQ 2010.2.6
(defun c:tt ()
 (defun Min_Max()
  (vla-getboundingbox(vlax-ename->vla-object end) 'minp 'maxp)
  (setq minp (vlax-safearray->list minp)
        maxp (vlax-safearray->list maxp))
  (setq minx (car minp)
        maxx (car maxp)
        miny (cadr minp)
        maxy (cadr maxp))
  (if (> minx0 minx) (setq minx0 minx))
  (if (> miny0 miny) (setq miny0 miny))
  (if (< maxx0 maxx) (setq maxx0 maxx))
  (if (< maxy0 maxy) (setq maxy0 maxy))
 )
 (setvar "CMDECHO" 0)
 (vl-load-com)
 (command "undo" "be")
 (command "ucs" "w")
 (if (and (princ "\n选择阵列目标 :") (setq ss (ssget))) (progn
  (setq minx0 1e6 miny0 1e6 maxx0 -1e6 maxy0 -1e6)
  (setq i 0)
  (repeat (sslength ss)
   (setq end (ssname ss i))
   (setq end_data (entget end))
   (Min_Max)
   (setq i(1+ i))
  )
  (if (and (setq n (getint "\n列数 --- :"))
           (setq m (getint "\n行数 ||| :"))
           (> n 2)
           (> m 2)) (progn
   (setq h (getdist (strcat "\n行距 <" (rtos (- maxx0 minx0) 2 3) "> --- :")))
   (setq h (if h h (- maxx0 minx0)))
   (setq w (getdist (strcat "\n列距 <" (rtos (- maxy0 miny0) 2 3) "> ||| :")))
   (setq w (if w w (- maxy0 miny0)))
   (setq pmin (list maxx0 maxy0))
;   (setq pmax (list (+ (* (- n 2) (- maxx0 minx0)) maxx0) (+ (* (- m 2) (- maxy0 miny0)) maxy0)))
   (setq pmax (list (+ (* (- m 2) (- maxx0 minx0)) maxx0) (+ (* (- n 2) (- maxy0 miny0)) maxy0)))
;   (command ".array" ss "" "r" n m h w ".erase" "W" pmin pmax "")
;   (command ".array" ss "" "r" n m w h ".erase" "W" pmin pmax "")
   (command ".array" ss "" "r" n m w h ".erase" "W" pmin pmax "")
;   (command ".rectang" pmin  pmax)
  ))
 ))
 (command "undo" "e")
 (princ)
)

发表于 2010-2-7 17:06:00 | 显示全部楼层
(command ".array" ss "" "r" n m w h ".erase" "W" pmin pmax "")
可能会造成误杀!
发表于 2010-2-9 15:28:00 | 显示全部楼层

 非常感谢版主,但是为什么我效果是这样的?我使用的版本AUTOCAD2004.是不是使用方法有问题还是

本帖子中包含更多资源

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

x
发表于 2010-2-9 15:33:00 | 显示全部楼层
   好像行和列也是反的?
发表于 2010-2-9 15:58:00 | 显示全部楼层
    4楼程序好像是如果超出屏幕的部分就不删除了,但是即使你把界面缩小的很小,最后点又只剩下右上部分了。用全部阵列再删除如果点到比如240*160好像比较慢哦!
发表于 2010-2-9 16:13:00 | 显示全部楼层

    我觉得思路是不是应该这样:先通过第一个方框位置和输入的行列数确定对角上方框位置,然后通过这两个位置来进行单行,单列的阵列,只不过一个是向上向右阵列,另外一点是向左向下阵列一行一列。

   我主要是做电子的,但是有时又要用到AUTOCAD,还请各位大侠多多支持。谢谢大家。

发表于 2010-2-9 20:16:00 | 显示全部楼层
关于超出屏幕的问题,可在ERASE前加上"ZOOM" "W" pmin pmax。3楼已改。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 01:53 , Processed in 0.226528 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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