找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 765|回复: 4

[求助] 反应器里的坐标

[复制链接]
发表于 2019-10-4 18:24:07 | 显示全部楼层 |阅读模式
悬赏40D豆未解决
各位反应器大侠好。
我要请求2个问题好吗?

第一个问题是:做反应器。最后的步骤是给反应器一个调用函数。对吧。-----那能不能把给反应器调用函数-设置成一个变量。如果可以,,
当主体修改后-----去执行多种不同的调用函数?
第二个问题是:比如把一个园做成了反应器的主体,我们如何把园的圆心的坐标----保存下来。然后到调用函数里去提取。
  以上2个问题如果都可以做到的话。麻烦帮写好反应器样板语法格式。

普通的反应器我们都是这样写的,对吗   (setq EH2 (cdr (assoc 5 (entget (entlast)))))
    (setq EH_L (list EH1 EH2))                ;句柄表,它们将是反应器的关联数据
    (setq VC_L (list VC))                ;vla对象表,它们将是反应器的所有者
    (VLR-PERS
        (VLR-OBJECT-REACTOR VC_L EH_L '((:VLR-MODIFIED . CHANGE310)))
    )
                                        ;反应器链接到圆c上,两直线为关联数据,当修改圆c时调用函数change310

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2019-10-5 16:40:01 | 显示全部楼层
大家好,我的反应器圆心问题的2个问题,已经解决了。谢谢各位老师。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 6472个

财富等级: 富甲天下

发表于 2019-10-6 10:48:46 | 显示全部楼层
好高深的问题能把具体方法说出来吗?谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3904个

财富等级: 富可敌国

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

使用道具 举报

 楼主| 发表于 2019-10-10 16:34:59 | 显示全部楼层
大家好,我还是要认真学习论坛里的老师发的贴。

;;reac命令,修改反应器练习
(defun C:310-命令自动,修改反应器练习310 (/)                        ; cp r1 r2 p1 p2 p3 p4 vc eh1 eh2 eh_l vc_l)
    (vl-load-com)                        ;该函数加载 Visual LISP 提供的扩展,实现对 ActiveX 和 AutoCAD 反应器的支持,
                                        ;同时还提供了 ActiveX 实用程序、数据转换函数、词典处理函数和曲线测量函数。
    (setvar "cmdecho" 0)                ;cmdecho-控制在 AutoLISP 的 command 函数运行时 AutoCAD 是否回显提示和输入。
    (setvar "osmode" 0)                        ;关闭对象捕捉
    (setq CP (getpoint "\n指定圆的中心点: ")) ;请求输入圆心坐标
    (setq R1 (getdist CP "\n输入圆的半径: ")) ;请求输入圆的半径
    (setq R2 (* 1.2 R1))                ;设定r2为圆半径的1.2倍
    (setq P1 (polar CP 0 R2)                ;利用极坐标法计算以圆心为起点,弧度为0,长度为r2的p1点坐标
          P2 (polar CP (* pi 0.5) R2)        ;利用极坐标法计算以圆心为起点,弧度为pi/2,长度为r2的p2点坐标
          P3 (polar CP pi R2)                ;利用极坐标法计算以圆心为起点,弧度为pi,长度为r2的p3点坐标
          P4 (polar CP (* pi 1.5) R2)        ;利用极坐标法计算以圆心为起点,弧度为3/2*pi,长度为r2的p4点坐标
    )
    (command "layer" "m" "cuxian" "")        ;新建cuxian图层
    (command "layer" "lw" 0.3 "cuxian" "") ;更改cuxian层线宽为0.3
    (command "circle" CP R1)                ;画出用户输入的圆
    (setq VC (VLAX-ENAME->VLA-OBJECT (entlast)))
                                        ;将AutoLISP类型的对象名转换为VLA对象,
                                        ;entlast 函数经常用于获得刚用 command 函数加入到图形中的新图元的图元名。
                                        ;该函数选择的图元不一定要显示在屏幕上,也不一定要处于解冻状态。本次主要获得用户输入的圆。
    (command "layer" "m" "xixian" "")        ;新建xixian图层
    (command "layer" "c" 1 "xixian" "l" "center" "xixian" "")
                                        ;更改xixian为红色点划线
    (command "line" P1 P3 "")                ;用直线连接p1,p3点
    (setq EH1 (cdr (assoc 5 (entget (entlast)))))
                                        ;assoc-从关联表中搜索一个元素,如果找到则返回该关联表条目,
                                        ;entget-获得对象(图元)的定义数据。
                                        ;cdr-返回去掉了第一个元素的表,当 list 参数是点对表时,cdr 返回点对表的第二个元素,而不是以表的形式返回它。
    (command "line" P2 P4 "")                ;用直线连接p2,p4点
    (setq EH2 (cdr (assoc 5 (entget (entlast)))))
    (setq EH_L (list EH1 EH2))                ;句柄表,它们将是反应器的关联数据
    (setq VC_L (list VC))                ;vla对象表,它们将是反应器的所有者
    (VLR-PERS
        (VLR-OBJECT-REACTOR VC_L EH_L '((:VLR-MODIFIED . CHANGE310)))
    )
                                        ;反应器链接到圆c上,两直线为关联数据,当修改圆c时调用函数change
    (VLR-PERS
        (VLR-OBJECT-REACTOR VC_L NIL '((:VLR-MODIFIED . SHOW)))
    )
                                        ;反应器链接到圆c上,无关联数据,当修改圆c时调用函数show
    (setvar "cmdecho" 1)
    (setvar "osmode" 4133)
    (princ)
)

;;;change函数
(defun CHANGE310 (NOTIFIER-OBJECT REACTOR-OBJECT PARAMETER-LIST /)
                                        ;ec ec_l r2 eh_l e1_l e2_l p1 p2 p3 p4 )
    (vl-load-com)
    (setq EC   (VLAX-VLA-OBJECT->ENAME NOTIFIER-OBJECT)
          EC_L (entget EC)
          CP   (cdr (assoc 10 EC_L))
          R2   (* 1.2 (cdr (assoc 40 EC_L)))
    )                                        ;新数据
    (setq EH_L (VLR-DATA REACTOR-OBJECT)) ;获取反应器的关联数据: 句柄表
    (setq E1_L (entget (handent (car EH_L))) ;读出直线一图元表
          E2_L (entget (handent (cadr EH_L))) ;直线二图元表
    )
    (setq P1 (polar CP 0 R2)
          P2 (polar CP (* pi 0.5) R2)
          P3 (polar CP pi R2)
          P4 (polar CP (* pi 1.5) R2)
    )                                        ;从新计算直线个端点
    (setq E1_L (subst (vl-list* 10 P1) (assoc 10 E1_L) E1_L))
                                        ;修改直线一的起点
    (setq E1_L (subst (vl-list* 11 P3) (assoc 11 E1_L) E1_L))
                                        ;修改直线一的端点
    (entmod E1_L)                        ;更新直线一的图元表
    (setq E2_L (subst (vl-list* 10 P2) (assoc 10 E2_L) E2_L))
    (setq E2_L (subst (vl-list* 11 P4) (assoc 11 E2_L) E2_L))
    (entmod E2_L)                        ;更新直线二的图元表
)

;;;show函数
(defun SHOW (NOTIFIER-OBJECT REACTOR-OBJECT PARAMETER-LIST / R1)
    (vl-load-com)
    (setq R1 (VLA-GET-DIAMETER NOTIFIER-OBJECT)) ;获取直径
    (setq R1 (rtos R1 2 4))                ;转换为字符串
    (alert (strcat "圆的内径是: " R1))        ;报告操作结果
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-23 22:41 , Processed in 0.169119 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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