theisland 发表于 2016-3-27 08:45:34

急求一个让直线等间距分布的程序!

有若干平行的直线长短不一,间距不等,能不能实现框选所有直线,然后两端的直线不动,程序自动移动中间的若干直线,最终实现各平行线之间间距相等?要求直线只在垂线方向移动,两端直线不动,在各种坐标系下均可完美运行,请高手出手相助!谢谢啦!

陈进佳 发表于 2016-3-27 10:54:00

(defun c:tt(/ a b ddy dy i lst n nptlst ptlst ss ssn ylst)
(if
(setq ss (ssget '((0 . "line"))))
(progn
    (setq i   -1
          lst nil
    )
    (while (setq ssn (ssname ss (setq i (1+ i))))
      (setq lst (cons ssn lst))
    )
    (setq lst(vl-sort lst '(lambda(x y)(>(caddr(assoc 10 (entget x)))(caddr(assoc 10 (entget y)))))))
    (setq ptlst(mapcar '(lambda(x)(cdr(assoc 10 (entget x))))lst))
    (setq dy(- (setq a(cadr(car ptlst)))(setq b(cadr(last ptlst)))))
    (setq n(length lst)
          ddy(/ dy (1- n)))
   (setq ylst (list b))
(setq i 1)
   (repeat (1- n)
   (setq ylst(cons (+ b (* i ddy))ylst))
   (setq i (1+ i))
   )
    (setq nptlst(mapcar '(lambda(x y) (list (car x)y))ptlst ylst))
    (setq lst(mapcar 'list lst ptlst nptlst))
    (foreach a lst(command "move" (car a)""(cadr a)(last a)))
   
    )
)
(princ)
)

theisland 发表于 2016-3-27 11:09:35

陈进佳 发表于 2016-3-27 10:54 static/image/common/back.gif


没反应呢,麻烦再看看,测试图已上传

陈进佳 发表于 2016-3-27 11:14:49

你一开始能表示清楚点或者给个示意图?

yoyoho 发表于 2016-3-27 11:23:13

测试对平行X轴的平行线有效

theisland 发表于 2016-3-27 11:32:51

陈进佳 发表于 2016-3-27 11:14 static/image/common/back.gif
你一开始能表示清楚点或者给个示意图?

不好意思,测试图中只是世界坐标系的情况,请把其他坐标系的情况考虑进去,谢谢!

菜卷鱼 发表于 2016-4-14 08:33:32

cad2011 测试,DIV 命令可以

Gray-wolf 发表于 2016-7-12 00:54:10

本帖最后由 Gray-wolf 于 2016-7-12 00:56 编辑

查看附件

林小林子 发表于 2016-7-12 22:44:53


cad2011 测试,DIV 命令可以

437271963 发表于 2016-7-16 18:32:10

框选直线,等距分布。
页: [1] 2
查看完整版本: 急求一个让直线等间距分布的程序!