明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2010|回复: 10

小弟请教各位高手!先谢谢了!

[复制链接]
发表于 2005-4-11 15:52 | 显示全部楼层 |阅读模式
小弟是AL的初学者,由于课题的需要想做一个程序:只要点取矩形中心点就能画矩形,(长2800,宽1400)想点几个就点几个,数量不限.但是每个相邻矩形的水平距离必须大于1500.


请哪为大大帮帮小弟!小弟天天在线等.谢谢!
发表于 2005-4-11 16:04 | 显示全部楼层
(defun c:tt (/ poi cenx ceny startpoint endpoint)
(while (setq poi (getpoint "\nPlease pick point:"))
(setq cenx (car poi))
(setq ceny (cadr poi))
(setq startpoint (list (- cenx 1400) (- ceny 700)))
(setq endpoint (list (+ cenx 1400) (+ ceny 700)))
(command "_rectang" startpoint endpoint)
)
) "数量不限.但是每个相邻矩形的水平距离必须大于1500." 是什么意思啊?
 楼主| 发表于 2005-4-11 16:26 | 显示全部楼层
先谢谢了!我试了!你的程序矩形可以运行!但是n 个矩形能重迭啊!我是说每个矩形不能挨的太近,也不能重迭,不管位置怎么样!必须保证相邻两个矩形的最近边的水平距离大于1500.如果不到1500,就自动默认为1500.不知道我说明白没有:)


还有数量不限的意思是我想点1个就出一个,想点2个就出两个,想点n个就出n个.


请大大再帮忙修改一下!
发表于 2005-4-11 17:10 | 显示全部楼层
`上面距离没限制吗?
 楼主| 发表于 2005-4-11 19:15 | 显示全部楼层
没有限制啊!可以重迭选取的!


关键就是距离怎么限制啊!


请教高人啊! 谢谢了
发表于 2005-4-11 21:19 | 显示全部楼层
不重迭选取点比较困难吧!
发表于 2005-4-11 23:16 | 显示全部楼层
citykunan黑侠的基础上改了一下,楼主拿去试一下。
  1. (defun c:tt (/ poi cenx ceny startpoint endpoint)
  2.   (setq x nil)
  3.   (while (setq poi (getpoint "\nPlease pick point:"))
  4.      (setq cenx (car poi))
  5.      (setq ceny (cadr poi))
  6.      (if (and (/= x nil) (< (abs (- cenx x)) 4300))
  7.        (setq cenx (* (/ (abs (- cenx x)) (- cenx x)) 4300))
  8.      )
  9.      (setq x cenx)
  10.      (setq startpoint (list (- cenx 1400) (- ceny 700)))
  11.      (setq endpoint (list (+ cenx 1400) (+ ceny 700)))
  12.      (command "_rectang" startpoint endpoint)
  13.   )
  14. )
 楼主| 发表于 2005-4-12 09:32 | 显示全部楼层
谢谢ZZXXQQ了,你的程序在点取第二个矩形的时候可以控制距离了,但是在点取第三个的时候,就可以和第一个重合了,还是控制不了使每一个矩形都不能重迭。 请各位高手再修改一下,我也在苦想中!谢谢:)
发表于 2005-4-12 10:30 | 显示全部楼层
这是我改得,楼主试试 (defun c:test (/ poi cenx ceny startpoint endpoint ent k ss p0 n left-poi)
(setq poi (getpoint "\nPlease pick point:"))
(setq p1 poi)
(setq cenx (car poi))
(setq ceny (cadr poi))
(setq startpoint (list (- cenx 1400) (- ceny 700)))
(setq endpoint (list (+ cenx 1400) (+ ceny 700)))
(command "_rectang" startpoint endpoint)
(setq ent (entlast))
(setq k T)
(while (setq p0 (getpoint "\nPlease pick point:"))
(setq ss (ssget "c" (polar p0 0 4300) (polar p0 pi 4300)))
(if (/= ss nil)
(progn
(setq n (sslength ss))
(if (= n 1)
(progn
(setq left-poi (cdr (assoc 10 (entget (ssname ss 0))))) ;_取出矩形的左下角坐标
(if (< (- (car p0) (car left-poi)) 0)
(setq p0 (list (- (car left-poi) 4300) (cadr p0)))
(setq p0 (list (+ (car left-poi) 7100) (cadr p0)))
)
)
(progn
(prompt "\n距离不够不能生成矩形!")
(setq k nil)
)
)
)
)
(if k
(command "copy" ent "" p1 p0)
(setq k T)
)
(setq poi p0)
)
)
 楼主| 发表于 2005-4-12 11:45 | 显示全部楼层
谢谢各位高手!好象还是不行啊 ljpnb,就是在点第三个的时候总不能和其他两个分开,不是和第一个重迭就是和第二个重迭!我自己也在研究呢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-17 19:06 , Processed in 0.398539 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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