明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1499|回复: 13

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

[复制链接]
发表于 2019-12-29 11:42:59 | 显示全部楼层 |阅读模式
10明经币
本帖最后由 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号布局,并将复制后的布局移动到最后一个位置,然后直接切换到新建的布局!!(功能希望可以完整实现)

最佳答案

查看完整内容

也就是几行,但是不保证正确性,请您自己测试:
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2019-12-29 11:43:00 | 显示全部楼层
本帖最后由 x_s_s_1 于 2019-12-29 23:55 编辑

也就是几行,但是不保证正确性,请您自己测试:
  1. (defun c:test1 (/ oldcmd layouts lst n)
  2.   (setq oldcmd(getvar"cmdecho"))
  3.   (setvar"cmdecho"0)
  4.   (setq  layouts  (vla-get-layouts
  5.       (vla-get-activedocument (vlax-get-acad-object))
  6.     )
  7.   )
  8.   (vlax-for layout layouts
  9.     (setq lst (cons (vlax-get-property layout 'name) lst))
  10.   )
  11.   (setq  lst (vl-sort (vl-remove "Model" lst)
  12.          '(lambda (e1 e2) (< (atoi e1) (atoi e2)))
  13.       )
  14.   lst (append lst (list (itoa (1+ (atoi (last lst))))))
  15.   n   (length lst)
  16.   )
  17.   (vl-cmdf "layout" "c" "" (last lst))
  18.   (foreach x lst (vla-put-taborder (vla-item layouts x) n))
  19.   (setvar "ctab"(last lst))
  20.   (setvar"cmdecho"oldcmd)
  21.   (princ)
  22. )



本帖子中包含更多资源

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

x

点评

哦,先看的旧的,没注意这边呢,已经评了,真是太感谢了,困扰已久的问题终于解决了,再次表示衷心的感谢,目前试用很好,我再实际操作中用几天看看,估计没啥问题了,谢谢!!!  发表于 2019-12-30 07:44

评分

参与人数 2明经币 +2 收起 理由
ssdsfg + 1 很给力!
xj6019 + 1 很给力!

查看全部评分

回复

使用道具 举报

发表于 2019-12-29 17:37:47 | 显示全部楼层
我再试试
回复

使用道具 举报

发表于 2019-12-29 18:33:41 | 显示全部楼层

除过移动布局到最后,其余都实现了。尽力了!

本帖子中包含更多资源

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

x

点评

你先把源码发上来吧,我先用着,等段时间看看,只要解决了移动到最后的问题,我接着付币,或者一个月后如果还没有解决我也把币付给你,其实毕竟你现在的这个是你之前那个的修正版是吧,真正的问题还没全解决你觉得呢  发表于 2019-12-29 20:20
回复

使用道具 举报

 楼主| 发表于 2019-12-29 18:44:52 | 显示全部楼层
论坛的大神们,你们给点意见好吧,帮助一下解决这个问题,你们见多识广,这个移动到最后的命令或者函数,赐教一下好不好呀,拜托了!!!
回复

使用道具 举报

发表于 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")))
回复

使用道具 举报

发表于 2019-12-30 11:10:53 | 显示全部楼层
x_s_s_1 发表于 2019-12-29 11:43
也就是几行,但是不保证正确性,请您自己测试:

可以,学习了!
回复

使用道具 举报

 楼主| 发表于 2020-2-1 09:07:26 | 显示全部楼层
x_s_s_1 发表于 2019-12-29 11:43
也就是几行,但是不保证正确性,请您自己测试:

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

使用道具 举报

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

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

使用道具 举报

 楼主| 发表于 2020-2-4 09:59:05 | 显示全部楼层
x_s_s_1 发表于 2020-2-2 15:55
抱歉,我试了一下,确实有您所述的问题,我估计是重排布局的时候影响速度,但是我没有办法解决。

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

不知道其他老师有没有好的方案哦!!

点评

速度慢的问题,可以通过改名来解决。  发表于 2023-3-4 21:51
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 10:26 , Processed in 0.209410 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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