找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2642|回复: 8

[求助]:请问如何在arx中调用lisp写的程序呢?

[复制链接]
发表于 2003-5-15 11:03:33 | 显示全部楼层 |阅读模式

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

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

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

Re: [求助]:请问如何在arx中调用lisp写的程序呢?

最初由 saintlzh 发布
[B]如题 [/B]

在arx中可以调用形如 C:XXX 的lisp函数

  1. struct resbuf *result = NULL, *list;
  2. list = acutBuildList(RTSTR, "c:CXXXX",/*RTXXX, param1...*/ RTNONE);
  3. if (list != NULL) {
  4.     int stat = acedInvoke(list, &result);
  5.     acutRelRb(list);
  6. }
  7. if (result != NULL)
  8. {
  9.     // Do somthing
  10.     acutRelRb(result);
  11. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-16 10:32:39 | 显示全部楼层
void AEC_Road()
{
        CString sCMD = "(load \"AEC_ROAD\" )" ;
        sCMD += "\n";

        AcApDocument* pAcTargetDocument = NULL;
        pAcTargetDocument = acDocManager->curDocument();

        CView * pView = acedGetAcadDwgView();
        if(pView != NULL)
        {
                pView->SetFocus();
        }

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

使用道具 举报

发表于 2003-5-16 13:45:26 | 显示全部楼层
最初由 binbin 发布
[B]void AEC_Road()
{
        CString sCMD = "(load \"AEC_ROAD\" )" ;
        sCMD += "\n";

        AcApDocument* pAcTargetDocument = NULL;
        pAcTargetDocument = acDocManager->curDocument();

        CView * pView = acedGetA... [/B]


sendStringToExecute方法不可取,有两个缺陷
一、不能取得lisp函数的返回值
二、sendStringToExecute不保证执行顺序,换句话说,有可能在执行 (load "AEC_ROAD" )  之前执行“draw_road”
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-16 15:48:05 | 显示全部楼层
我同意是得不到返回值.但第二点我不解!

看看vba的写法

Dim objVLAX As New VLAX, retval As String
    retval  = objVLAX.EvalLispExpression "(defun ax() )"
;-----------------------------------------------------------------

Private VL As Object
Private VLF As Object

Private Sub Class_Initialize()

    Set VL = AcadApplication.GetInterfaceObject("VL.Application.1")
    Set VLF = VL.ActiveDocument.Functions

End Sub


Public Function EvalLispExpression(lispStatement As String)

    Dim sym As Object, ret As Object, retval
   
    Set sym = VLF.Item("read").funcall(lispStatement)
    On Error Resume Next
    retval = VLF.Item("eval").funcall(sym)
    If Err Then
        EvalLispExpression = ""
    Else
        EvalLispExpression = retval
    End If

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

使用道具 举报

发表于 2003-5-16 21:12:50 | 显示全部楼层
sendStringToExecute只是简单的将字符串送到命令行然后立即返回,至于是否执行,执行对错sendStringToExecute并不检测。
因此在一个函数中,用sendStringToExecute同时发送多个命令给Acad是不可取的。
如果真要用sendStringToExecute, 可以结合AcApDocManager::inputPending来保证命令得到执行。
AcApDocManager::inputPending可以得到待处理的字符数目。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2004-2-27 16:56:56 | 显示全部楼层
AcApDocManager::inputPending可以得到待处理的字符数目。
只能知道等待处理的字符数,还是不能保证字符串的执行啊.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 12:42 , Processed in 0.184010 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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