明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1941|回复: 7

[提问] 请问怎么编程给已画好的图形命名?

[复制链接]
发表于 2014-6-23 21:28:34 | 显示全部楼层 |阅读模式
就是编程让用户输入两个半径画好了两个圆,然后我后边要用到这两个圆求交点,怎么指出要用的是这两个圆呢?
顺便问下用(vla-intersectwith VLA对象 VLA对象 延伸模式)能实现我的目标吗~
求指导~
感谢~~


该贴已经同步到 jathney的微博
发表于 2014-6-23 21:36:18 | 显示全部楼层
看你怎么生成这两个圆。如果是command方式,那么用entlast获得最后生成的图元名方式可以获得。转化图元名求交点。
如果是entmakex方式,则直接得到图元名。转化图元名后求交点
如果是addcircle方式,直接得到圆的 VLA对象。可以直接求交点。
 楼主| 发表于 2014-6-23 22:02:36 | 显示全部楼层
edata 发表于 2014-6-23 21:36
看你怎么生成这两个圆。如果是command方式,那么用entlast获得最后生成的图元名方式可以获得。转化图元名求 ...

请问第三个用addcircle,生成两个vla对象,依然没有名字呀= =、 那在(vla-intersectwith VLA对象 VLA对象 延伸模式)命令里调用的时候咋说是哪两个vla对象呢?
发表于 2014-6-23 22:06:21 | 显示全部楼层
来个实例
  1. (defun c:tt(/ ipts lst myspace obj1 obj2)
  2.   (setq myspace(vla-get-modelspace(vla-get-activedocument (vlax-get-acad-object))));取得模型空间对象,图纸空间是vla-get-paperspace
  3.   (setq obj1 (vla-addcircle myspace (vlax-3d-point '(0 0 0)) 50);模型空间创建圆
  4.         obj2 (vla-addcircle myspace (vlax-3d-point '(1 1 0)) 50)
  5.         )
  6.   (setq ipts(vla-intersectwith obj1 obj2 0));取得俩物体的交点变体
  7.   (setq ipts(vlax-safearray->list(vlax-variant-value ipts));将vla交点变体转化成表的形式
  8.         lst '())
  9.   (if (>(length ipts) 3);分离多个交点
  10.     (repeat(/(length ipts)3)
  11.       (setq lst(cons(list(car ipts)(cadr ipts)(caddr ipts)) lst))
  12.       (setq ipts(cdddr ipts))
  13.       )
  14.     )
  15.     lst
  16.   )
  17. (defun c:tt2(/ en1 en2 ipts lst obj1 obj2)
  18.   (setq en1(entmakex(list '(0 . "circle")(cons 10 '(0 0 0))(cons 40 50)))
  19.         en2(entmakex(list '(0 . "circle")(cons 10 '(1 1 0))(cons 40 50)))
  20.         )
  21.   (setq obj1(vlax-ename->vla-object en1)
  22.         obj2(vlax-ename->vla-object en2)
  23.         )
  24.   (setq ipts(vla-intersectwith obj1 obj2 0));取得俩物体的交点变体
  25.   (setq ipts(vlax-safearray->list(vlax-variant-value ipts));将vla交点变体转化成表的形式
  26.         lst '())
  27.   (if (>(length ipts) 3);分离多个交点
  28.     (repeat(/(length ipts)3)
  29.       (setq lst(cons(list(car ipts)(cadr ipts)(caddr ipts)) lst))
  30.       (setq ipts(cdddr ipts))
  31.       )
  32.     )
  33.     lst
  34.   )
  35. (defun c:tt3(/ en1 en2 ipts lst obj1 obj2)
  36.   (command "circle" "non" '(0 0 0) "non" "50")
  37.   (setq en1(entlast))
  38.   (command "circle" "non" '(1 1 0) "non" "50")
  39.   (setq en2(entlast))
  40.   (setq obj1(vlax-ename->vla-object en1)
  41.         obj2(vlax-ename->vla-object en2)
  42.         )
  43.   (setq ipts(vla-intersectwith obj1 obj2 0));取得俩物体的交点变体
  44.   (setq ipts(vlax-safearray->list(vlax-variant-value ipts));将vla交点变体转化成表的形式
  45.         lst '())
  46.   (if (>(length ipts) 3);分离多个交点
  47.     (repeat(/(length ipts)3)
  48.       (setq lst(cons(list(car ipts)(cadr ipts)(caddr ipts)) lst))
  49.       (setq ipts(cdddr ipts))
  50.       )
  51.     )
  52.     lst
  53.   )



 楼主| 发表于 2014-6-23 22:16:58 | 显示全部楼层
edata 发表于 2014-6-23 22:06
来个实例

l了解了~谢谢!
 楼主| 发表于 2014-6-25 16:32:30 | 显示全部楼层
edata 发表于 2014-6-23 22:06
来个实例

再问一下 程序倒数第二句:(setq ipts(cdddr ipts)) 中的cdddr是什么意思?是保留从第四个元素开始的所有元素到ipts中吗?
发表于 2014-6-25 16:46:46 | 显示全部楼层
jathney 发表于 2014-6-25 16:32
再问一下 程序倒数第二句:(setq ipts(cdddr ipts)) 中的cdddr是什么意思?是保留从第四个元素开始的所有 ...

(cdddr x)=(cdr (cdr (cdr x))),最多只能“简化”四重。

评分

参与人数 1明经币 +1 金钱 +50 收起 理由
edata + 1 + 50 很详细

查看全部评分

 楼主| 发表于 2014-6-26 08:21:59 | 显示全部楼层
ll_j 发表于 2014-6-25 16:46
(cdddr x)=(cdr (cdr (cdr x))),最多只能“简化”四重。

谢谢~~~~~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-24 13:35 , Processed in 0.161395 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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