找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1405|回复: 13

[求助] [求助]:如何实现实体之间建立相关联?

[复制链接]
发表于 2004-3-4 20:14:42 | 显示全部楼层 |阅读模式

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

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

×
如何实现实体之间建立相关联?
比如:
1、有line1、line2并且两者相连【line1的端点p11=line2的端点p21】,一旦line1的端点p11发生改变,则p0自动更新p21点。
2、有line1、line2平行且两者的距离为w,一旦line1发生改变,则line2自动保持与line1平行且两者的距离为w不变。

麻烦那个大虾写个程序--最好是存autolisp
thank
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-3-4 20:29:45 | 显示全部楼层
这个要用发应器来实现
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-5 08:42:53 | 显示全部楼层
是不是想做尺寸驱动?
用反应器可以实现,但达到实用状态时,恐怕计算机有点受不了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-5 15:32:54 | 显示全部楼层
可以在第一条线的扩展数据加入指向第二条线的句柄,
编个lisp程序也应该可以实现把
你试试


(regapp "line2")
en2--------line2的实体名
(setq en2-data (entget en2))
(setq line2p (cdr (assoc  5 en2-data))))
;;;;line2p为2的句柄
(setq new (cons 1005 line2p))
(setq newen '((-3
                         ("line2" '((new)))
                      )))
(setq  en2-data (append (list en2-data newen)))
(entmod en2)

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2004-3-5 16:01:56 | 显示全部楼层
最初由 redearth 发布
[B]可以在第一条线的扩展数据加入指向第二条线的句柄,
编个lisp程序也应该可以实现把
你试试


(regapp "line2")
en2--------line2的实体名
(setq en2-data (entget en2))
(setq line2p (cdr (assoc  5 en2-... [/B]


楼主的要求和你写的不同,他要求是自动,一个实体位置改变了,另外一个实体会接到它的通知,自动改变位置。不是另外用程序执行去改变。

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

使用道具 举报

发表于 2004-3-5 16:41:49 | 显示全部楼层

  1. ;;1、有line1、line2并且两者相连【line1的端点p11=line2的端点p21】,一旦line1的端点p11发生改变,则p0自动更新p21点。

  2. ;;BY  LUCAS(龙龙仔)
  3. ;;一个简陋的反应器
  4. (defun REDRAW_LINE (NOTIFIER-OBJECT REACTOR-OBJECT PARAMETER-LIST)
  5.   (vl-load-com)
  6.   (if (not (vlax-erased-p NOTIFIER-OBJECT))
  7.     (vla-put-startpoint
  8.       (vlax-ename->vla-object (handent (vlr-data REACTOR-OBJECT)))
  9.       (vla-get-endpoint
  10.         NOTIFIER-OBJECT
  11.       )
  12.     )
  13.   )
  14. )
  15. ;;点选
  16. (defun C:TTT (/ LINE1 DXF10 DXF11 SS10 SS11 ENT)
  17.   (vl-load-com)
  18.   (defun MID (PT1 PT2)
  19.     (mapcar
  20.       '(lambda (X Y)
  21.          (* 0.5 (+ X Y))
  22.        )
  23.       PT1
  24.       PT2
  25.     )
  26.   )
  27.   (setq ENT (car (entsel "点选线: ")))
  28.   (setq DXF10 (cdr (assoc 10 (entget ENT))))
  29.   (setq DXF11 (cdr (assoc 11 (entget ENT))))
  30.   (if (> (sslength (setq SS (ssget "C" DXF10 DXF10 '((0 . "LINE")))))
  31.          1
  32.       )
  33.     (progn
  34.       (ssdel ENT SS)
  35.       (command "_.ROTATE" ENT "" (MID DXF10 DXF11) 180)
  36.       (setq SS10 (cdr (assoc 10 (entget (ssname SS 0)))))
  37.       (setq SS11 (cdr (assoc 11 (entget (ssname SS 0)))))
  38.       (if (equal DXF10 SS11)
  39.         (command "_.ROTATE" (ssname SS 0) "" (MID SS10 SS11) 180)
  40.       )
  41.     )
  42.     (progn
  43.       (ssdel ENT SS)
  44.       (setq SS (ssget "C" DXF11 DXF11 '((0 . "LINE"))))
  45.       (ssdel ENT SS)
  46.       (setq SS10 (cdr (assoc 10 (entget (ssname SS 0)))))
  47.       (setq SS11 (cdr (assoc 11 (entget (ssname SS 0)))))
  48.       (if (equal DXF11 SS11)
  49.         (command "_.ROTATE" (ssname SS 0) "" (MID SS10 SS11) 180)
  50.       )
  51.     )
  52.   )
  53.   (setq LINE1 (vlax-ename->vla-object ENT))
  54.   (setq        *LINEREACTOR*
  55.          (vlr-object-reactor
  56.            (list LINE1)
  57.            (cdr (assoc 5 (entget (ssname SS 0))))
  58.            '((:vlr-modified . REDRAW_LINE))
  59.          )
  60.   )
  61.   (princ)
  62. )

  63. ;;划线
  64. (defun C:TT (/ HOLDECHO LINE1)
  65.   (vl-load-com)
  66.   (setq HOLDECHO (getvar "cmdecho"))
  67.   (setvar "cmdecho" 0)
  68.   (command "_.line"
  69.            (getpoint "指定第一点: ")
  70.            (getpoint (getvar "lastpoint") "指定第二点: ")
  71.            ""
  72.   )
  73.   (setq LINE1 (vlax-ename->vla-object (entlast)))
  74.   (command "_.line"
  75.            (getvar "lastpoint")
  76.            (getpoint (getvar "lastpoint") "指定第三点: ")
  77.            ""
  78.   )
  79.   (setvar "cmdecho" HOLDECHO)
  80.   (setq        *LINEREACTOR*
  81.          (vlr-object-reactor
  82.            (list LINE1)
  83.            (cdr (assoc 5 (entget (entlast))))
  84.            '((:vlr-modified . REDRAW_LINE))
  85.          )
  86.   )
  87.   (princ)
  88. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-5 17:07:36 | 显示全部楼层
感觉用反应器实现这个有点大财小用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-3-6 14:17:00 | 显示全部楼层
主要是为了防止line1、line2被随意改变掉,line1与line2是有关联的。
反应器我不太熟悉,如果对系统影响大,我看也没有实现的必要,毕竟绘图是为了提高速度。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-6 21:52:41 | 显示全部楼层
最初由 libo2000 发布
[B]主要是为了防止line1、line2被随意改变掉,line1与line2是有关联的。
反应器我不太熟悉,如果对系统影响大,我看也没有实现的必要,毕竟绘图是为了提高速度。 [/B]

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

使用道具 举报

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

使用道具 举报

发表于 2004-3-8 09:06:11 | 显示全部楼层
请问上楼::编组怎么回事??
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-8 11:59:20 | 显示全部楼层
编组就是将若干个不相关联的实体组成一个组(GROUP)这样移动组中的任一实体,整个组就会跟这一起动,(这一点跟块有点相似)而且组中的实体可以单个编辑。
输入GROUP将出现一个对话框。
更详细的你可以看看cad的帮助。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-5-29 01:51:46 | 显示全部楼层
旧话题翻出来了,编组不能解决楼主的问题,lucas的程序能满足要求,不知图中反应器多了,是否会影响绘图速度,可否在修改完成后,删除反应器,释放内存呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2008-5-29 12:06:02 | 显示全部楼层
值得讨论,使用临时的,可控的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 18:48 , Processed in 0.231051 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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