找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3747|回复: 35

[求助] 原地copy属性块----------总结

[复制链接]

已领礼包: 604个

财富等级: 财运亨通

发表于 2013-6-3 16:47:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 /db_自贡黄明儒_ 于 2013-6-14 14:02 编辑

(entmake(entget en)好象不行,各路高手,怎么办?
(vlax-map-collection SS1 'vla-copy);;ss1为vla选择集,好象也不行呢,怎么办?
对以下高手的回复总结如下:
  1. ;;(setq en (car (entsel "\n拾取属性块:")))
  2. ;;1 command co法(by woman1314)
  3. (command "_.copy" en "" "0,0" "@")

  4. ;;2 entmake法(by ll_j)
  5. (defun w2 (en / BOOL ENT NEN)
  6.   (setq  nen en
  7.   bool T
  8.   )
  9.   (while bool
  10.     (entmake (setq ent (entget nen)))
  11.     (if  (equal (cdr (assoc 0 ent)) "SEQEND")
  12.       (setq bool nil)
  13.       (setq nen (entnext nen))
  14.     )
  15.   )
  16. )

  17. ;;3 vlax法(by woman1314)
  18. (vlax-invoke-method (vlax-ename->vla-object en) 'Copy)

  19. ;;4 vla法(by free-Lancer)
  20. (vla-copy (vlax-ename->vla-object en))

  21. ;;5 vla-InsertBlock法(by Lispboy)
  22. (defun w3 (en / IP MSPACE NAME ROT UTIL VLA-EN XSCALE YSCALE ZSCAL)
  23.   (setq  mspace (vla-get-modelspace
  24.      (vla-get-activedocument (vlax-get-acad-object))
  25.          )
  26.   )
  27.   (setq vla-en (vlax-ename->vla-object en))
  28.   (setq  Name   (vla-get-Name vla-en)
  29.   ip     (vla-get-InsertionPoint vla-en)
  30.   xscale (vla-get-XScaleFactor vla-en)
  31.   yscale (vla-get-YScaleFactor vla-en)
  32.   zscale (vla-get-ZScaleFactor vla-en)
  33.   rot    (vla-get-Rotation vla-en)
  34.   )  
  35.   (vla-InsertBlock mspace ip Name xscale yscale zscale rot)
  36. )

  37. ;;6 选择集法(by Gu_xl)
  38. (defun w4 (ss)
  39.   (command "_.select" ss "")
  40.   (vlax-map-Collection
  41.     (vla-get-ActiveSelectionSet
  42.       (vla-get-ActiveDocument (vlax-get-acad-object))
  43.     )
  44.     'vla-copy
  45.   )
  46. )

  47. ;;7 entmakex法
  48. 未知


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-6-3 16:56:23 | 显示全部楼层
属性块的重心是实体跟随,仅复制一个块是不行的,还需要复制后面跟随的属性ATTRIB,甚至可能还有复制最后的块结束标记。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-3 16:59:17 | 显示全部楼层
直接 entmake(entget en) 肯定不行啊,里面的组-1 什么的去掉,不能带着原来的实体名。

点评

试了块、线、圆都可直接 (entmake (entget x))这样的!  详情 回复 发表于 2013-6-3 17:25
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-6-3 17:02:50 | 显示全部楼层
Lispboy 发表于 2013-6-3 16:59
直接 entmake(entget en) 肯定不行啊,里面的组-1 什么的去掉,不能带着原来的实体名。

entmake是不管那些的,遇到实体名、句柄什么的,都是忽略的。

点评

元老,那要怎么才能搞肯呢?  发表于 2013-6-3 17:13

评分

参与人数 1D豆 +5 收起 理由
wowan1314 + 5 又学了一招! 呵呵!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-3 17:03:49 | 显示全部楼层
本帖最后由 wowan1314 于 2013-6-3 17:07 编辑

(command "_.copy" X "" "0,0" "@")这样呢!(vlax-invoke-method X 'Copy)这样呢!

点评

(vlax-invoke-method (vlax-ename->vla-object(car (entsel))) 'Copy)这个还行,应该不算用command了,我想!  发表于 2013-6-3 17:18
都是lispboy惹的祸,我不是写了一个单向阵列吗.lispboy说不用commad,  详情 回复 发表于 2013-6-3 17:10
假如不用command呢?  发表于 2013-6-3 17:08

评分

参与人数 1D豆 +3 收起 理由
/db_自贡黄明儒_ + 3 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-3 17:04:44 | 显示全部楼层
((-1 . <图元名: 7efe6778>) (0 . "INSERT") (5 . "116DF") (102 .
"{ACAD_REACTORS") (330 . <图元名: 7efe67b8>) (102 . "}") (330 . <图元名:
7ef87c10>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "图框") (62 . 1)
(6 . "Continuous") (100 . "AcDbBlockReference") (66 . 1) (2 . "tuchuo") (10
72700.1 37288.7 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 .
0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))

-1,5,330,102,410,都不能有。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2013-6-3 17:10:20 | 显示全部楼层
wowan1314 发表于 2013-6-3 17:03
(command "_.copy" X "" "0,0" "@")这样呢!(vlax-invoke-method X 'Copy)这样呢!

都是lispboy惹的祸:P,我不是写了一个单向阵列吗.lispboy说不用commad,

点评

告诉你个方法,G版前几天的帖子写过,好像。 别用ENTMAKE,也别用VLA-COPY方法,这些都是慢的。 用 entmakex ,然后用 vla-transFormby , (不好意思,涉及到矩阵了,不过没啥,一个单位矩阵作用上而已)  详情 回复 发表于 2013-6-3 17:24
哪有那么多说法!只要速度没什么影响!那就怎么方便怎么来!  详情 回复 发表于 2013-6-3 17:18
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-3 17:18:16 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2013-6-3 17:10
都是lispboy惹的祸,我不是写了一个单向阵列吗.lispboy说不用commad,

哪有那么多说法!只要速度没什么影响!那就怎么方便怎么来!
不能跟lispboy比呀! 他时间比较充裕,精力比较旺盛。

点评

第一次反对你哦,这话不对 写代码得追求点啥嘛。  详情 回复 发表于 2013-6-3 17:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-3 17:22:00 | 显示全部楼层
wowan1314 发表于 2013-6-3 17:18
哪有那么多说法!只要速度没什么影响!那就怎么方便怎么来!
不能跟lispboy比呀! 他时间比较充裕,精 ...

第一次反对你哦,这话不对:lol

写代码得追求点啥嘛。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-3 17:24:24 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2013-6-3 17:10
都是lispboy惹的祸,我不是写了一个单向阵列吗.lispboy说不用commad,

告诉你个方法,G版前几天的帖子写过,好像。

别用ENTMAKE,也别用VLA-COPY方法。

用 entmakex ,然后用 vla-transFormby , (不好意思,涉及到矩阵了,不过没啥,一个单位矩阵作用上而已)

点评

我用(entmakex (entget (car (entsel))))没有成功呀,到底怎么做的说一说呀,你话到嘴边又咽下了.  详情 回复 发表于 2013-6-4 08:17
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-3 17:25:39 | 显示全部楼层
Lispboy 发表于 2013-6-3 16:59
直接 entmake(entget en) 肯定不行啊,里面的组-1 什么的去掉,不能带着原来的实体名。

试了块、线、圆都可直接 (entmake (entget x))这样的!

点评

想当然了,收回我的话。  详情 回复 发表于 2013-6-3 17:33

评分

参与人数 1D豆 +5 收起 理由
Lispboy + 5 指点奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-6-3 17:31:19 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2013-6-3 17:10
都是lispboy惹的祸,我不是写了一个单向阵列吗.lispboy说不用commad,

这样(单属性块示例):
  1. (defun c:tt()
  2.   (setq en (car (entsel "\n拾取属性块:"))  ;本体
  3.         ent(entget en)
  4.         nen(entnext en)        ;属性attrib
  5.         nee(entnext nen)       ;块结束标记seqend
  6.   )
  7.   (entmake ent)
  8.   (entmake (entget nen))
  9.   (entmake (entget nee))
  10. )


我也是不建议使用command的,但学习Lisp的过程中,command也是必不可少的环节,不过,通过对acad及Lisp的深入了解,command函数会使用的越来越少,但并不是完全不用。就是acad自带的那些lisp程序,也还是有很多使用command的。

评分

参与人数 2D豆 +8 收起 理由
/db_自贡黄明儒_ + 3 很给力!经验;技术要点;资料分享奖!
Lispboy + 5 技术引导讨论和指点奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-3 17:33:31 | 显示全部楼层
wowan1314 发表于 2013-6-3 17:25
试了块、线、圆都可直接 (entmake (entget x))这样的!

想当然了,收回我的话。{:soso_e163:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-3 17:54:57 | 显示全部楼层
经测试 (vla-copy (vlax-ename->vla-object (car (entsel)))) 可以拷贝属性块(Autocad 2014)

评分

参与人数 1D豆 +3 收起 理由
/db_自贡黄明儒_ + 3 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-3 17:56:04 | 显示全部楼层
我也是Lispboy害的,弄的现在写一个都要考虑下面的原则{:soso_e113:}
原则有ZZQQXX和Lispboy总结出来的
1  尽量用mapcar,apply 组合 cons,car,cdr 基本函数
   ACAD内部肯定有没公布的秘密对表的操作。要不不能0.01秒就处理完。
2  如果只能用APPEND的,那么程序就不要写了。
3  循环里面也别要 nth 去读表,也很慢的,要一次次的遍历表,循环越多,速度越慢,N*N至少
4  不怕 reverse,也很快。
5  巨量数据的处理,请别用递归
6、能用整数不用浮点;
7、变量名字母长度不要超过6个;
8、用cons代替append;
9、采用好的算法;
10、如可能少用command函数;
11、用乘法代替除法(/ pi 2)-->(* pi 0.5),用加法代替乘法(* pi 2)--> (+ pi pi);
12、用空间换时间,设中间变量保存中间计算数值,不重复计算;
13、图形文件不要太大,常使用purge命令进行清理;
14、不要一下子打开太多的图;
15、使用1+函数代替(+ n 1),1-函数代替(- n 1);
16、尽量减少程序运算次数
17、尽量直接使用lisp基本函数,如:car、cdr、cons等,近量少用append、length等函数
18、使用递归等方法,速度相对较慢!比直接使用基本函数计算逊色不少!

点评

总结的很好,但是也不要束缚了手脚,还有一个原则,选用最短的代码解决实际问题,不是每个程序要经常用的  详情 回复 发表于 2013-6-3 18:09
别忘了,还有葛老,LL-J老总结的一些 while 代码不要太多,不必要的放循环外面 ...... 还有发源码帖,必要时候修改成求助  详情 回复 发表于 2013-6-3 18:04

评分

参与人数 3D豆 +13 收起 理由
xshrimp + 5 很给力!经验;技术要点;资料分享奖!
/db_自贡黄明儒_ + 3 很给力!经验;技术要点;资料分享奖!
Lispboy + 5 权限内最大加分,作为害人的补偿,哈哈。

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-25 12:34 , Processed in 0.607189 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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