明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4173|回复: 10

批量相同组合图元关联修改

[复制链接]
发表于 2013-1-26 15:26 | 显示全部楼层 |阅读模式
本帖最后由 【KAIXIN】 于 2013-1-26 15:31 编辑

本人对此真是一点办法也没有了!!!

我有试过用块,也有试过用组,却总是不行!

请大家帮忙看看,谢谢!

下面是录制的动画(要实现的),试试用LISP或者.....是否可以?



说明:忘记发悬赏了,要是有哪位朋友弄好了,奖励:500明经币!



该贴已经同步到 【KAIXIN】的微博

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-1-26 16:23 | 显示全部楼层
建矩形块 获得基点 框选范围 根据矩形块基点 先删除后复制

评分

参与人数 1明经币 +1 金钱 +18 收起 理由
【KAIXIN】 + 1 + 18 认真回复奖

查看全部评分

发表于 2013-1-26 20:07 | 显示全部楼层

这个如何?
先上个fas,可以了就放源码~
定义图源:def 更新引用upd

本帖子中包含更多资源

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

x
发表于 2013-1-26 20:31 | 显示全部楼层
这个思路还有点意思,只是快放假了现在没有心思写了,等年后有空试试
 楼主| 发表于 2013-1-27 08:16 | 显示全部楼层
阿然 发表于 2013-1-26 20:07
这个如何?
先上个fas,可以了就放源码~
定义图源:def 更新引用upd



基本上可以了,

上图中的是矩形和多边形,然兄的只弄了多边形,需要改进!

本帖子中包含更多资源

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

x
发表于 2013-1-27 23:05 | 显示全部楼层
好吧,不纠结外框形状了


请重新下载fas测试

本帖子中包含更多资源

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

x
发表于 2013-1-28 08:27 | 显示全部楼层
然兄高手,这个功能不错
发表于 2013-1-28 10:01 | 显示全部楼层
本帖最后由 阿然 于 2013-1-28 10:06 编辑

说好了的代码,请大家指导,感觉写的还不完善
  1. (vl-load-com)
  2. (setvar "cmdecho" 0)
  3. (setq *AcadDoc* (vla-get-ActiveDocument (vlax-get-Acad-Object)))
  4. (setq *MoSpace* (vla-get-ModelSpace *AcadDoc*))

  5. (defun c:def (/ ss obj)
  6.   (if (and (setq obj
  7.       (vlax-ename->vla-object (car (entsel "\n选择一个闭合线:")))
  8.      )
  9.      (vlax-curve-isclosed obj)
  10.      (setq sourname (getstring "\n输入图源名:"))
  11.       )
  12.     (progn
  13.       (xr:setxdata obj (list "Test_app" sourname))
  14.       (princ)
  15.     )
  16.     (progn
  17.       (princ "\n用户取消或者图元不闭合:")
  18.       (princ)
  19.     )
  20.   )
  21. )

  22. (defun c:upd (/  FACTOR MAXPT MAXPT1 MINPT MINPT1 OBJ PTS PTS1 SS SS1 TEMPSS TEMPVLALST VLALST VLALST1 XDATA)
  23.   (if (and (setq obj (vlax-ename->vla-object (car (entsel "\n选择图源:"))))
  24.      (setq xdata (xr:getxdata obj))
  25.       )
  26.     (progn
  27.       (vla-getboundingbox obj 'minpt 'maxpt)
  28.       (setq minpt (vlax-safearray->list minpt)
  29.       maxpt (vlax-safearray->list maxpt)
  30.       )
  31.       (setq pts (xr:makepts obj))
  32.       (setq ss (ssget "WP" pts))
  33.       (setq vlalst (lm:ss->vla ss)
  34.       ss     nil
  35.       )
  36.       (princ "\n选择需要修改的引用:")
  37.       (setq ss1 (ssget '((-3 ("Test_app")))))
  38.       (setq vlalst1 (lm:ss->vla ss1)
  39.       ss1      nil
  40.       )
  41.       (foreach vla vlalst1
  42.   (if (= (cadr (xr:getxdata vla)) (cadr xdata))
  43.     (progn
  44.       (vla-getboundingbox vla 'minpt1 'maxpt1)
  45.       (setq minpt1 (vlax-safearray->list minpt1)
  46.       maxpt1 (vlax-safearray->list maxpt1)
  47.       )
  48.       (setq pts1 (xr:makepts vla))
  49.       (setq tempss (ssget "WP" pts1))
  50.       (setq tempvlalst
  51.        (lm:ss->vla tempss)
  52.       tempss nil
  53.       )
  54.       (xr:delete tempvlalst)
  55.       (setq factor
  56.        (/ (distance minpt1 maxpt1) (distance minpt maxpt))
  57.       )
  58.       (xr:scale (xr:copyandmove vlalst minpt minpt1)
  59.           minpt1
  60.           factor
  61.       )
  62.     )
  63.   )
  64.       )
  65.       (princ)
  66.     )
  67.     (progn
  68.       (princ "\n选择的物体非已定义图源或者用户取消!")
  69.       (princ)
  70.     )
  71.   )
  72. )

  73. (defun xr:makepts (obj / pts i objlength len precision)
  74. ;;; (setq objname (vla-get-objectname obj))
  75.   (setq  objlength (vlax-curve-getdistatparam
  76.         obj
  77.         (vlax-curve-getendparam obj)
  78.       )
  79.   )
  80.   (setq
  81.     i        -1
  82.     precision 20
  83.     len        (/ objlength precision)
  84.   )
  85.   (repeat precision ;_精度要高就设置多点
  86.     (setq pt (vlax-curve-getpointatdist obj (* (setq i (1+ i)) len)))
  87.     (setq pts (append pts (list pt)))
  88.   )
  89. )




  90. (defun xr:copyandmove (vlalst basept distpt / result)
  91.   (if vlalst
  92.     (mapcar '(lambda (x)
  93.          (vlax-invoke-method
  94.      x
  95.      'Move
  96.      (vlax-3d-point basept)
  97.      (vlax-3d-point distpt)
  98.          )
  99.        )
  100.       (setq result (mapcar '(lambda (x)
  101.             (vlax-invoke-method x 'Copy)
  102.           )
  103.          vlalst
  104.        )
  105.       )
  106.     )
  107.   )
  108.   result
  109. )

  110. (defun xr:scale  (vlalst basept factor)
  111.   (if vlalst
  112.     (mapcar '(lambda (x)
  113.          (vlax-invoke-method
  114.      x
  115.      'ScaleEntity
  116.      (vlax-3d-point basept)
  117.      factor
  118.          )
  119.        )
  120.       vlalst
  121.     )
  122.   )
  123. )


  124. (defun Xr:getxdata (obj / xdatatype xdata)
  125.   (vla-getxdata obj "" ''xdatatype 'xdata)
  126.   (mapcar 'vlax-variant-value (vlax-safearray->list xdata))
  127. )

  128. (defun Xr:delete (objlist / obj)
  129.   (foreach obj objlist
  130.     (if  (not (vlax-erased-p obj))
  131.       (vla-erase obj)
  132.     )
  133.   )
  134. )

  135. (defun Xr:setXdata
  136.        (obj datalst / datatype datatypelst data xdatatype xdata)
  137.   (foreach data  datalst
  138.     (cond
  139.       ((= data (car datalst))
  140.        (setq datatype 1001)
  141.       )
  142.       ((= (type data) 'INT)
  143.        (setq datatype 1070)
  144.       )
  145.       ((= (type data) 'REAL)
  146.        (setq datatype 1040)
  147.       )
  148.       ((= (type data) 'STR)
  149.        (setq datatype 1000)
  150.       )
  151.     )
  152.     (setq datatypelst (cons datatype datatypelst))
  153.   )
  154.   (setq datatypelst (reverse datatypelst))
  155.   (setq xdatatype (xr:list->int-array datatypelst))
  156.   (setq xdata (xr:list->var-array datalst))
  157.   (vla-setxdata obj xdatatype xdata)
  158. )


  159. (defun Xr:list->int-Array (intList / arraySpace sArray)
  160.   (setq  arraySpace
  161.    (vlax-make-safearray
  162.      vlax-vbInteger    ; 元素类型
  163.      (cons 0
  164.      (1- (length intList))
  165.      )        ; 数组维数
  166.    )
  167.   )
  168.   (setq sArray (vlax-safearray-fill arraySpace intList))
  169. )
  170. (defun Xr:list->Obj-Array (objList / arraySpace sArray)
  171.   (setq  arraySpace
  172.    (vlax-make-safearray
  173.      vlax-vbObject    ; 元素类型
  174.      (cons 0
  175.      (1- (length objList))
  176.      )        ; 数组维数
  177.    )
  178.   )
  179.   (setq sArray (vlax-safearray-fill arraySpace objList))
  180. )


  181. (defun Xr:list->var-Array (varList / arraySpace sArray)
  182.   (setq  arraySpace
  183.    (vlax-make-safearray
  184.      vlax-vbvariant    ; 元素类型
  185.      (cons 0
  186.      (1- (length varList))
  187.      )        ; 数组维数
  188.    )
  189.   )
  190.   (setq sArray (vlax-safearray-fill arraySpace varList))
  191. )

  192. (defun LM:ss->vla (ss / i l)
  193.   ;; ?Lee Mac 2010
  194.   (if ss
  195.     (repeat (setq i (sslength ss))
  196.       (setq
  197.   l (cons  (vlax-ename->vla-object (ssname ss (setq i (1- i))))
  198.     l
  199.     )
  200.       )
  201.     )
  202.   )
  203. )

  204. (defun lastent (/ a b)
  205.   (if (setq a (entlast)) ;_可获取最后一个主图元
  206.     (while (setq b (entnext a)) ;_检查其后是否有子图元   
  207.       (setq a b) ;_设定循环直到无子图元为止
  208.     )
  209.   )
  210.   a
  211. )



点评

是否做到全图用反应器来控制?比如:我删除复制后的图的其中一个图元,其他的包括源图都跟着改  发表于 2013-1-28 10:18

评分

参与人数 1明经币 +3 金钱 +30 收起 理由
【KAIXIN】 + 3 + 30 很给力!

查看全部评分

发表于 2013-1-28 15:28 | 显示全部楼层
阿然 发表于 2013-1-28 10:01
说好了的代码,请大家指导,感觉写的还不完善



很厉害  下来学习!
发表于 2013-5-24 00:13 | 显示全部楼层
传说中的APS
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 09:38 , Processed in 1.058470 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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