xj6019 发表于 2019-12-29 11:42:59

求布局移动并复制到最后的完整修正版(此为新帖,旧帖子请忽略)

本帖最后由 xj6019 于 2019-12-29 17:41 编辑

画图的时候 必须用到布局的复制并移动到最后,每次用鼠标挨个的点,可不可以做一个lisp实现呢,要求1.当前布局的情况下,输入命令,把当前布局复制并移动到最后,我布局起名一般情况是有规律的都是1.2.3.4.5.........这样一直往后起名,要求移动到最后读取上一次的布局名称,并将复制并移动后的布局名称自动改为对应的下一个号。 打个比方,现在一共有15个布局,我选择在7号布局,输入命令后,自动把7号布局移动并复制到最后,然后起名为16.就这么个功能




求布局移动并复制到最后的完整修正版的源码
最大的布局编号+1复制,支持不连续数,复制的时候参照现有布局名称里面的最大数+1,
比方说现有布局有:1.2.3.6.8.10.11.15在7布局运行命令后,直接复制出16号布局,并将复制后的布局移动到最后一个位置,然后直接切换到新建的布局!!(功能希望可以完整实现)

x_s_s_1 发表于 2019-12-29 11:43:00

本帖最后由 x_s_s_1 于 2019-12-29 23:55 编辑

也就是几行,但是不保证正确性,请您自己测试:
(defun c:test1 (/ oldcmd layouts lst n)
(setq oldcmd(getvar"cmdecho"))
(setvar"cmdecho"0)
(setqlayouts(vla-get-layouts
      (vla-get-activedocument (vlax-get-acad-object))
    )
)
(vlax-for layout layouts
    (setq lst (cons (vlax-get-property layout 'name) lst))
)
(setqlst (vl-sort (vl-remove "Model" lst)
         '(lambda (e1 e2) (< (atoi e1) (atoi e2)))
      )
lst (append lst (list (itoa (1+ (atoi (last lst))))))
n   (length lst)
)
(vl-cmdf "layout" "c" "" (last lst))
(foreach x lst (vla-put-taborder (vla-item layouts x) n))
(setvar "ctab"(last lst))
(setvar"cmdecho"oldcmd)
(princ)
)


ssdsfg 发表于 2019-12-29 17:37:47

我再试试

ssdsfg 发表于 2019-12-29 18:33:41

ssdsfg 发表于 2019-12-29 17:37
我再试试
除过移动布局到最后,其余都实现了。尽力了!

xj6019 发表于 2019-12-29 18:44:52

论坛的大神们,你们给点意见好吧,帮助一下解决这个问题,你们见多识广,这个移动到最后的命令或者函数,赐教一下好不好呀,拜托了!!!

x_s_s_1 发表于 2019-12-29 23:52:50

本帖最后由 x_s_s_1 于 2019-12-30 00:00 编辑

有效的代码也就是那么五六句,看您两个帖子硬是没人给您源码,就抽时间搞了一下,不当之处请您自己修改一下。求布局列表还可以如下:
(mapcar'cdr(vl-remove-if-not'(lambda (x) (eq 3(car x)))(dictsearch (namedobjdict) "ACAD_LAYOUT")))

ssdsfg 发表于 2019-12-30 11:10:53

x_s_s_1 发表于 2019-12-29 11:43
也就是几行,但是不保证正确性,请您自己测试:

可以,学习了!

xj6019 发表于 2020-2-1 09:07:26

x_s_s_1 发表于 2019-12-29 11:43
也就是几行,但是不保证正确性,请您自己测试:

老师您好,使用中发现当布局数量超过30个以后,运行命令非常慢,30个布局以后大约每次都需要15秒以上,随着布局数量增多,速度还在一直变的更慢,我开始以为是画的东西太多,然后试着在空文件中运行命令,也是当布局数量超过30个以后也是变的非常的慢
   求老师能帮忙再给优化一下代码吗,拜托了,谢谢!!

x_s_s_1 发表于 2020-2-2 15:55:25

xj6019 发表于 2020-2-1 09:07
老师您好,使用中发现当布局数量超过30个以后,运行命令非常慢,30个布局以后大约每次都需要15秒以上,随 ...

抱歉,我试了一下,确实有您所述的问题,我估计是重排布局的时候影响速度,但是我没有办法解决。

xj6019 发表于 2020-2-4 09:59:05

x_s_s_1 发表于 2020-2-2 15:55
抱歉,我试了一下,确实有您所述的问题,我估计是重排布局的时候影响速度,但是我没有办法解决。

好的,谢谢了!!才明白,您是用重新排序,把新建的布局排到最后的,不能对新建的直接执行移动到最后吗?

不知道其他老师有没有好的方案哦!!
页: [1] 2
查看完整版本: 求布局移动并复制到最后的完整修正版(此为新帖,旧帖子请忽略)