找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1402|回复: 18

[求助] 反应器问题求助

[复制链接]

已领礼包: 7个

财富等级: 恭喜发财

发表于 2018-11-25 21:15:54 | 显示全部楼层 |阅读模式

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

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

×
反应器新手  参考网上的资料  写了一个  特定半径的圆加中心线的反应器。现在的问题是 用“CIRCLE”画我设置的半径圆CAD就崩溃 画其他半径的正常,
把其他半径的圆改成我要的半径中心线也正常添加。  请大神们帮忙修改一下。
注意   “CIRCLE”  半径 5    CAD会崩溃  
注意   “CIRCLE”  半径 5    CAD会崩溃  
注意   “CIRCLE”  半径 5    CAD会崩溃  
(foreach rtr (cdar (vlr-reactors :VLR-AcDb-Reactor)) (if (= "sjkcssj" (vlr-data rtr)) (vlr-remove rtr)))
(vlr-acdb-reactor "sjkcssj" '((:vlr-objectModified . hello)))
(setq fyq_qj_c_d 5)
(defun hello(rtr args / j_elist)
  (setq j_elist (entget (cadr args)))
  (if (= "CIRCLE" (cdr (assoc 0 j_elist)))
    (if (= fyq_qj_c_d (cdr (assoc 40 j_elist)))
      (progn
        (setq j_p (cdr (assoc 10 j_elist)))
        (z_line (list (- (car j_p) fyq_qj_c_d 3) (cadr j_p)) (list (+ (car j_p) fyq_qj_c_d 3) (cadr j_p)))
        (z_line (list (car j_p) (- (cadr j_p) fyq_qj_c_d 3)) (list (car j_p) (+ (cadr j_p) fyq_qj_c_d 3)))
        )
      )
    )
  )
(defun z_line(j_p0 j_p1)
  (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") '(100 . "AcDbLine") ;'(8 . "ÖDDÄÏß2ã")
                 (cons 10 j_p0)(cons 11 j_p1))
    )
  )

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

已领礼包: 19个

财富等级: 恭喜发财

发表于 2018-11-25 21:43:01 | 显示全部楼层
本帖最后由 Lisphk 于 2018-11-25 21:46 编辑

你用的是什么版本的CAD呢?
在2019下,测试你的代码能用,半径修改为5后,能画出线

建议反应器里面别用 entget , 用 vla-get-objectname 判断是否是CIRCLE,vla-get-radius获取半径,判断半径是否相等别用=,用equal加精度判断

点评

[attachimg]81956[/attachimg] 大神 你看一下我的CAD还是不行啊 是CAD版本问题吗 直接输入5就崩溃 修改是正常的  详情 回复 发表于 2018-11-26 10:08
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2018-11-25 21:59:03 | 显示全部楼层
试试把函数hello改成下面

  1. (defun hello (rtr args / j_elist)
  2.   (setq e (cadr args)
  3.         o (vlax-ename->vla-object e))
  4.   (if (and o (= "AcDbCircle" (vla-get-objectname o)))
  5.     (if        (equal fyq_qj_c_d (vla-get-radius o) 1e-5)
  6.       (progn (setq j_p (vla-get-center o)
  7.                    j_p (vlax-safearray->list (vlax-variant-value j_p)))
  8.              (z_line (list (- (car j_p) fyq_qj_c_d 3) (cadr j_p))
  9.                      (list (+ (car j_p) fyq_qj_c_d 3) (cadr j_p))
  10.              )
  11.              (z_line (list (car j_p) (- (cadr j_p) fyq_qj_c_d 3))
  12.                      (list (car j_p) (+ (cadr j_p) fyq_qj_c_d 3))
  13.              )
  14.       )
  15.     )
  16.   )
  17. )

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

使用道具 举报

已领礼包: 7个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-11-26 10:07:57 | 显示全部楼层
不要用 entget和entmake
改成下面

  1. (foreach rtr (cdar (vlr-reactors :VLR-AcDb-Reactor))
  2.   (if (= "sjkcssj" (vlr-data rtr))
  3.     (vlr-remove rtr)
  4.   )
  5. )
  6. (vlr-acdb-reactor
  7.   "sjkcssj"
  8.   '((:vlr-objectModified . hello))
  9. )
  10. (setq fyq_qj_c_d 5)
  11. (defun hello (rtr args / j_elist)
  12.   (setq j_elist (entget (cadr args)))
  13.   (if (= "CIRCLE" (cdr (assoc 0 j_elist)))
  14.     (if (= fyq_qj_c_d (cdr (assoc 40 j_elist)))
  15.       (progn (setq j_p (cdr (assoc 10 j_elist)))
  16.              (z_line (list (- (car j_p) fyq_qj_c_d 3) (cadr j_p))
  17.                      (list (+ (car j_p) fyq_qj_c_d 3) (cadr j_p))
  18.              )
  19.              (z_line (list (car j_p) (- (cadr j_p) fyq_qj_c_d 3))
  20.                      (list (car j_p) (+ (cadr j_p) fyq_qj_c_d 3))
  21.              )
  22.       )
  23.     )
  24.   )
  25. )
  26. (defun hello (rtr args / j_elist)
  27.   (setq e (cadr args)
  28.         o (vlax-ename->vla-object e)
  29.   )
  30.   (if (and o (= "AcDbCircle" (vla-get-objectname o)))
  31.     (if (equal fyq_qj_c_d (vla-get-radius o) 1e-5)
  32.       (progn (setq j_p (vla-get-center o)
  33.                    j_p (vlax-safearray->list (vlax-variant-value j_p))
  34.              )
  35.              (vla-AddLine
  36.                (vla-get-modelspace
  37.                  (vla-get-activedocument (vlax-get-acad-object))
  38.                )
  39.                (vlax-3d-point (list (- (car j_p) fyq_qj_c_d 3) (cadr j_p)))
  40.                (vlax-3d-point (list (+ (car j_p) fyq_qj_c_d 3) (cadr j_p)))
  41.              )
  42.              (vla-AddLine
  43.                (vla-get-modelspace
  44.                  (vla-get-activedocument (vlax-get-acad-object))
  45.                )
  46.                (vlax-3d-point (list (car j_p) (- (cadr j_p) fyq_qj_c_d 3)))
  47.                (vlax-3d-point (list (car j_p) (+ (cadr j_p) fyq_qj_c_d 3)))
  48.              )
  49.       )
  50.     )
  51.   )
  52. )


点评

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

使用道具 举报

已领礼包: 7个

财富等级: 恭喜发财

 楼主| 发表于 2018-11-26 10:08:06 | 显示全部楼层
Lisphk 发表于 2018-11-25 21:43
你用的是什么版本的CAD呢?
在2019下,测试你的代码能用,半径修改为5后,能画出线

ezgif.com-video-to-gif.gif

大神  你看一下我的CAD还是不行啊   是CAD版本问题吗
直接输入5就崩溃    修改是正常的

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

使用道具 举报

已领礼包: 7个

财富等级: 恭喜发财

 楼主| 发表于 2018-11-26 10:11:26 | 显示全部楼层
marting 发表于 2018-11-26 10:07
不要用 entget和entmake
改成下面

谢谢   上面代码测试可以的

点评

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

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-11-26 10:22:16 | 显示全部楼层
qq2222081387 发表于 2018-11-26 10:11
谢谢   上面代码测试可以的

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

使用道具 举报

已领礼包: 5295个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 7个

财富等级: 恭喜发财

 楼主| 发表于 2018-11-27 11:14:18 | 显示全部楼层
marting 发表于 2018-11-26 10:22
记住,在反应器里面,尽量使用ActiveX,就没问题了。

还要在麻烦您一下    又遇到CAD崩溃的问题我添加了  圆的半径改变删除中心线的代码 直接画圆还是不行  修改没有问题
ezgif.com-video-to-gif (1).gif

还有就是移动圆怎么删除之前的中心线  给个思路就行
  • [pcode=vb,true]
  • (foreach rtr (cdar (vlr-reactors :VLR-AcDb-Reactor))  (if (= "sjkcssj" (vlr-data rtr))    (vlr-remove rtr)  ))(vlr-acdb-reactor  "sjkcssj"  '((:vlr-objectModified . hello)))(setq fyq_qj_c_d 5)(vl-load-com)(defun hello (rtr args / e o j_p gpCode dataValue)  (vl-load-com)  (setq e (cadr args)        o (vlax-ename->vla-object e)  )  (if (and o (= "AcDbCircle" (vla-get-objectname o)))    (cond      ((equal fyq_qj_c_d (vla-get-radius o))       (setq j_p (vla-get-center o)                   j_p (vlax-safearray->list (vlax-variant-value j_p))             )             (vla-AddLine               (vla-get-modelspace                 (vla-get-activedocument (vlax-get-acad-object))               )               (vlax-3d-point (list (- (car j_p) fyq_qj_c_d 3) (cadr j_p)))               (vlax-3d-point (list (+ (car j_p) fyq_qj_c_d 3) (cadr j_p)))             )       (vla-AddLine               (vla-get-modelspace                 (vla-get-activedocument (vlax-get-acad-object))               )               (vlax-3d-point (list (car j_p) (- (cadr j_p) fyq_qj_c_d 3)))               (vlax-3d-point (list (car j_p) (+ (cadr j_p) fyq_qj_c_d 3)))             )      )      (T       (setq j_p (vla-get-center o)                   j_p (vlax-safearray->list (vlax-variant-value j_p))             )       (setq ssetObj (vla-Add                      (vla-get-SelectionSets                        (vla-get-ActiveDocument                          (vlax-get-acad-object))) "SSET"))      (setq gpCode (vlax-make-safearray vlax-vbInteger '(0 . 0)))      (vlax-safearray-put-element gpCode 0 0)      (setq dataValue (vlax-make-safearray vlax-vbVariant '(0 . 0)))      (vlax-safearray-put-element dataValue 0 "LINE")      (vla-Select ssetObj acSelectionSetCrossing        (vlax-3d-point (list (+ 0.3 (car j_p)) (+ 0.3 (cadr j_p)) 0))        (vlax-3d-point (list (+ -0.3 (car j_p)) (+ -0.3 (cadr j_p)) 0)) gpCode dataValue)      (vla-erase ssetObj)      (vla-Delete ssetObj)       )      );cond    );(if (and o  );defun
  • [/pcode]

点评

建议你应该把两条线加入的时候,用句柄添加到圆的扩展实体数据里面,删除的时候,直接通过读扩展数据得到线,而不是每次都用选择集去选他们  详情 回复 发表于 2018-11-27 12:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2018-11-27 12:02:10 | 显示全部楼层
qq2222081387 发表于 2018-11-27 11:14
还要在麻烦您一下    又遇到CAD崩溃的问题我添加了  圆的半径改变删除中心线的代码 直接画圆还是不行  修 ...

建议你应该把两条线加入的时候,用句柄添加到圆的扩展实体数据里面,删除的时候,直接通过读扩展数据得到线,而不是每次都用选择集去选他们

点评

请问一下 在反应器里面用将 -3 组码加人列表 用entmod 更新列表 CAD就崩溃 在反应器里面应该用什么函数 将 -3组码 加入图元列表 我的代码如下  详情 回复 发表于 2018-11-27 18:21
好的 谢谢了 “扩展实体数据” 对我来说是新名称啊 研究一下 谁能来个例子就更好了  详情 回复 发表于 2018-11-27 12:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 7个

财富等级: 恭喜发财

 楼主| 发表于 2018-11-27 12:30:47 | 显示全部楼层
Lisphk 发表于 2018-11-27 12:02
建议你应该把两条线加入的时候,用句柄添加到圆的扩展实体数据里面,删除的时候,直接通过读扩展数据得到 ...

好的   谢谢了   “扩展实体数据” 对我来说是新名称啊   研究一下  

谁能来个例子就更好了

点评

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-11-27 14:40:21 | 显示全部楼层
qq2222081387 发表于 2018-11-27 12:30
好的   谢谢了   “扩展实体数据” 对我来说是新名称啊   研究一下  

谁能来个例子就更好了

扩展实体  搜索论坛

点评

又遇到问题了 帮忙看一下可以吗 1.有个疑问 我构造的是 :vlr-objectModified 对象已被修改 数据库反应器 现在将 “扩展实体数据” 加入圆中 算修改对象吗? 会不会无限循环下去 2.我用的是论坛中的  详情 回复 发表于 2018-11-28 13:04
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 7个

财富等级: 恭喜发财

 楼主| 发表于 2018-11-27 18:21:07 | 显示全部楼层
Lisphk 发表于 2018-11-27 12:02
建议你应该把两条线加入的时候,用句柄添加到圆的扩展实体数据里面,删除的时候,直接通过读扩展数据得到 ...

请问一下  在反应器里面用将 -3 组码加人列表    用entmod 更新列表 CAD就崩溃     在反应器里面应该用什么函数 将 -3组码 加入图元列表   我的代码如下
  1.        (regapp "lineID")
  2.        (setq list0 (list -3 (list "lineID" (cons 1000 "333"))))
  3.        (setq list2 (append (entget e) (list list0)))
  4.        (entmod list2)

点评

帮助文件例子 GETXDATA  详情 回复 发表于 2018-11-27 19:22
反应器里面别用 entget ,entmod,entmake这样的 用vla-getxdata, vla-setxdata  详情 回复 发表于 2018-11-27 18:50
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2018-11-27 18:50:07 | 显示全部楼层
qq2222081387 发表于 2018-11-27 18:21
请问一下  在反应器里面用将 -3 组码加人列表    用entmod 更新列表 CAD就崩溃     在反应器里面应该用什 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 20:28 , Processed in 0.478985 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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