找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1222|回复: 3

[LISP程序]:如何取得图形编辑时间

[复制链接]
发表于 2007-1-21 18:45:30 | 显示全部楼层 |阅读模式

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

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

×
如何用Lisp取得图形编辑时间
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-1-23 11:32:31 | 显示全部楼层
查看帮助
(vl-file-systime filename)
例:
_$ (vl-file-systime
"c:/program files/<AutoCAD installation directory>/sample/visuallisp/yinyang.lsp")
(1998 4 3 8 10 6 52)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-30 16:45:06 | 显示全部楼层
谢谢各位解答.!
最近为了完成毕业设计,我选用了C++2005 + ObjectARX2007 对AutoCAD2007进行二次开发,而手头的资料也很有限,只有ObjectARX2000和2006两份资料,C++方面用的最高版本也是C++2003,而C++2005又有很多地方都有变化,所以在开发的过程中确实遇到了很多麻烦!后来经过自己的一些摸索和努力,也发现了一些变化,解决了一些问题,现在把它写下来,和有这方面需要的人一起分享!

acutPrintf ("") 要变成 acutPrintf (_T(""))
                struct resbuf *head=0,*eb1=0,*eb2=0;
                if(rs.GetRecordCount() > 0)
                {
                        haveRsFlag=TRUE;
                        eb1=new resbuf;
                        eb1->rbnext=NULL;
                        eb1->restype = RTLB;
                        for(int i=0;i<4;i++)
                        {
                                if(head==NULL)
                                {
                                        head=eb2=eb1;
                                        eb2->rbnext=eb1;
                                        eb2=eb1;
                                }
                                eb1=new resbuf;
                                eb1->rbnext=NULL;
                                strcpy(arrstr[0],V_BSTRT(&(rs.GetFieldValue(i+3))));
                                eb1->resval.rstring = arrstr[0];
                                eb1->restype = RTSTR;
                                eb2->rbnext=eb1;
                                eb2=eb1;
                        }
                        eb1=new resbuf;
                        eb1->restype = RTLE;
                        eb1->rbnext=NULL;
                        eb2->rbnext=eb1;
                        eb2=eb1;
                }
                if(haveRsFlag==TRUE)
                {
                        eb2->rbnext=NULL;
                        acedRetList(head);
                        delete(eb1);
                }
                else
                        acedRetNil();
                rs.Close();
                db.Close();
MessageBox ("")或MessageBox (S"") 都必须变为 MessageBox ( _T("") )

还有类似要用到 " " 的函数都要用 _T(" ")

char 和 char * 变为 TCHAR 和 TCHAR * 还有 ACHAR 和 WCHAR ,不过一般都用做 TCHAR 就可以了,不需要用ACHAR或WCHAR
strcmp 用做 _tcscmp
strlen 用做 wcslen
strcat 用做 wcscat
strcpy 用作 StrCpy
fopen 用做 _wfopen
fputs 用做 fputws
_itoa 用做 _itow

1、str开头函数在函数尾加"_s"
2、字符串加 ACRX_T("") 如:
//s.Format("%s",..) s.Format(ACRX_T("%s"),..)
字符转换为数据
_wtof
_wtoi
_wtol
3、_tempnam ->_wtempnam
4、_splitpath ->_wsplitpath_s
6、fopen->_wfopen_s//参数及返回已变化
7、fgets->fgetws
8、sscanf->swscanf_s
9、fscanf->fwscanf_s
10、fprintf->fwprintf_s
11、strchr->wcschr
12、strstr-> wcsstr
13、strtok_s->wcstok_s
14、strupr->_wcsupr_s(str,l+1);
建议字符串均改为TCHAR(ACHAR)类型
//char * filepath = "";
const TCHAR* filePath;
acdbCurDwg()->getFilename(filePath);

wsprintf(OutputMessage, "%s", szData);
wsprintf(OutputMessage, _T("%S"), szData);

char OutputMessage[200];
memset(OutputMessage,0,200);
TCHAR szData[60];
ZeroMemory(szData, sizeof(TCHAR)*60);

还有C++2005的一个大变化,就是控件的名称可以用中文的,之前的版本不支持,只能是英文字符,否则会说是无效字符

恩,暂时发现这些,和大家分享,大家要是也发现一些变化的话,也希望能发布出来,一起分享!!!
--------------------------------------------------------------------------------

恩,越来越标准化了!
--------------------------------------------------------------------------------

在调试程序过程中发现,CAD2007中全用UINCODE了。在工程开始时要设置字符集(老程序升级要注意)
我的程序中自已实现一个从CControlBar z派生的DOCKBAR,在C2005 + ARX2007 编译通过了,用UNICODE字符集编译链接就能正常加载运行,用mul-charsetldnd encoding也能编译链接,但加载后运行总提示一个内存读取错误!!后来在一直跟踪到CControlBar :: OnCreate(...)中发现在后一种情况下,m_pDockSite 和m_pDockContext不能正常初始化,据估计CAD2007中的核心部份是用Unicode 编译的!!

抛砖引玉,请多指教!!
--------------------------------------------------------------------------------

谢谢,正需要。
--------------------------------------------------------------------------------

objectarx2007文档清楚写明,ARX API 接口函数的字符(串)参数都使用UNICODE,你自己的程序可使用其他编码,但在传给ARX前必需转换为UNICODE

#import "C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE12\\mso.dll" rename("RGB", "MSRGB")
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\VBA6\\VBE6EXT.OLB" raw_interfaces_only, rename("Reference", "ignorethis"), rename("VBE", "testVBE")
#import "C:\\Program Files\\Microsoft Office\\Office12\\EXCEL.EXE" exclude("IFont", "IPicture") rename("RGB", "ignorethis"), rename("DialogBox", "ignorethis"), rename("VBE", "testVBE"), rename("ReplaceText", "EReplaceText"), rename("CopyFile","ECopyFile"), rename("FindText", "EFindText"), rename("NoPrompt", "ENoPrompt")

After migration to ObjectARX 2007 I have troubles retrieving IAcadApplication interface to add menu items. The code looks something like this:

CComPtr< IDispatch > pAcadDisp = NULL;
pAcadDisp = acedGetAcadWinApp()->GetIDispatch(TRUE);

CComPtr< IAcadApplication > pAcad;
hr = pAcadDisp->QueryInterface(IID_IAcadApplication, (void**)&pAcad); // fails here with HRESULT of E_NOINTERFACE
I have checked IID_IAcadApplicatio identifier and it seems that I get one that is specified in ObjectARX 2004.
2007 version:
MIDL_DEFINE_GUID(IID, IID_IAcadApplication,0x8F17437C,0x2EFB,0x4FC4,0x81,0x88,0xEE,0xFA,0x50,0xFE,0x7 1,0x47);
2004 version:
MIDL_DEFINE_GUID(IID, IID_IAcadApplication,0x93bc4e71,0xafe7,0x4aa7,0xbc,0x07,0xf8,0x0a,0xcd,0xb6,0x7 2,0xd5);

I'm not a COM expert and I can't figure out how is it possible that IID_IAcadApplication is from 2004 OARX version. All paths are set to 2007 OARX.
I have tryed manually change this identifier through the VS IDE and everything worked fine.
I have 2005, 2007, 2008 AutoCAD installed on my computer.
Any ideas?

CString sz = _T("Notepad.exe ") + BomName;
char p[501]={0};
strncpy(p,(LPCSTR)_bstr_t(sz),500);
WinExec(p, SW_SHOW);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-1-31 14:52:10 | 显示全部楼层
前几天刚看到别人的一个程序,里边有段是这么写的:
(defun xdl-getutime ()
  (* 86400 (getvar "tdusrtimer"))
)
(defun c:tt()
(setq t0 (xdl-getutime))
.....
(princ (strcat "\n共耗时" (rtos (- (xdl-getutime) t0) 2 3)
                 "秒。*****"

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 19:47 , Processed in 0.174355 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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