明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3370|回复: 13

求助:如何根据vba的objectid转换成lisp对象???

  [复制链接]
发表于 2005-7-19 09:48:00 | 显示全部楼层 |阅读模式
求助:如何根据vba的objectid转换成lisp对象???
发表于 2005-7-19 13:40:00 | 显示全部楼层
objectid是arx的吧?
发表于 2011-3-24 22:33:18 | 显示全部楼层
回复 zxfzxf 的帖子

没人知道吗?我也想知道
发表于 2011-3-24 22:46:11 | 显示全部楼层
回复 star_sur 的帖子

(vlax-vla-object->ename (vla-ObjectIDToObject (vla-get-ActiveDocument (vlax-get-acad-object)) id))
发表于 2011-3-24 23:21:09 | 显示全部楼层

如何根据vba的objectid转换成lisp对象?vba与lisp协同工作问题

本帖最后由 star_sur 于 2011-3-24 23:26 编辑

现在情况是appload  cc.lsp 以后 ,运行命令 cc,提示选择闭合的多义线,以这条闭合的多义线为边进行剪切,
我现在想用vba 自动指定对哪条闭合的多义线进行剪切,而不是手工选。想法就是用vba取得闭合的多义线的objectid,
存在变量Users1中,然后ThisDrawing.Application.ActiveDocument.SendCommand  “CC 自动读取Users1,
得到闭合的多义线,不再需要提示人工选择。

VBA里
有一条闭合的pl,objectid为“FFFFHGD”
SetVariable "Users1" , “FFFFHGD”
ThisDrawing.Application.ActiveDocument.SendCommand  “CC ”

Lisp里面
我想通过    (setq a (GetVar "Users1"))  ,直接让lisp直接去处理objectid 是"Users1" 的闭合pline线
请高手帮我看看lisp文件应该怎么改一下?


以下是 cc.lsp 文件完整源码,怎么修改一下,望赐教。我的求求

本帖子中包含更多资源

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

x
发表于 2011-3-25 08:14:03 | 显示全部楼层
本帖最后由 highflybird 于 2011-3-25 08:35 编辑

给你一个小小提示:
譬如在LISP中定义了
  1. (defun C:test (Handle)                                           ;handle 句柄
  2.     (setq entName (handent handle))                         ;entName是图元名字
  3.     (entget entName)
  4. )
在VB中添加如下代码:
  1.   
  2.   Set VL = CreateObject("VL.Application.16")                           '16这个数字根据CAD版本调整
  3.   VL.ActiveDocument.Functions.Item("c:test").funcall  Obj.Handle       '获得一个obj的Handle


这样就可以直接调用lisp函数并根据物体的handle 转化为图元名字,无需用sendcommand方式
同样,也可以反过来,根据 ThisDrawing.HandleToObject(handle)调用LISP中的句柄得到VB中的object
发表于 2011-3-25 09:19:39 | 显示全部楼层
为什么不直接用lisp自动指定对哪条闭合的多义线进行剪切?
发表于 2011-3-25 10:11:10 | 显示全部楼层
用户选择一条pl线,原话是这样
(setq e (car (entsel
        "\nSelect circle or closed polyline, ellipse or spline for trimming edge: ")))
现在情况是我知道这条线的句柄handle1,想把它改成,用句柄值取得这条pl线,怎么改?
Gu_xl  提示过,但是我对lisp一窍不通,所以请明点
发表于 2011-3-25 11:13:12 | 显示全部楼层
本帖最后由 highflybird 于 2011-3-25 11:17 编辑


  1. (defun c:CC2 ( / *error* *acad* doc ps osm as om emode pmode offd

改为:
  1. (defun c:CC2 ( handle / *error* *acad* doc ps osm as om emode pmode offd



  1.       (not (setq e (car (entsel
  2.        "\nSelect circle or closed polyline, ellipse or spline for trimming edge: "))))

改为:      
  1. (not (setq e (handent handle)))

在vb中


  1. '前面是你的代码
  2. 'obj是你得到的object

  3. Set VL = CreateObject("VL.Application.16")                           '16这个数字根据CAD版本调整
  4. VL.ActiveDocument.Functions.Item("c:cc2").funcall  Obj.Handle       '获得一个obj的Handle

发表于 2011-3-25 14:34:20 | 显示全部楼层
本帖最后由 star_sur 于 2011-3-25 15:24 编辑

回复 highflybird 的帖子

感谢 highflybird 的详细解答,感激,感觉希望来了,呵呵



'前面是你的代码
'obj是你得到的object
Set VL = CreateObject("VL.Application.16")                           '16这个数字根据CAD版本调整
VL.ActiveDocument.Functions.Item("c:cc2").funcall  Obj.Handle       '获得一个obj的Handle





我试了一下,执行
Set VL = CreateObject("VL.Application.16")                     
出错了


vl16.tlb 引用我也引用了,也是不行,盼复

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-6-10 13:12 , Processed in 0.194936 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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