搜索
您的当前位置:首页正文

Autolisp加载文件操作方法及自定义函数

来源:易榕旅网
Autolisp加载文件操作方法及自定义函数

说明:本文件的函数与过程主要是针对程序初始化操作,可以批量加载文件,当文件不在Autocad支持搜索路径中时,选择文件后自动将路径添加到AutoCad支持搜索路径中。对于常规的批量加载文件,可以自定义个简化程序,不作环境变量的操作。;;**************************************************************************************;;;;本程序由红色金刚石开发,你可以任意使用,如果你有好的意见和建议请给作者反馈;;;;**************************************************************************************;;**************************************************************************************;;;;文件名:LoadFile.lsp;;;;功;;能:文件加载函数string.lspdir.lsp--------加载文件加载string.lsp加载dir.lsp目录选择对话框,获取文件夹路径;;需要引用的文件:;;;;函数一;;;;函数二;;;;函数三;;;;函数四;;LoadlspLoadSTRINGLoadDIRGetDir;;函数五LoadFile加载文件。在支持路径中搜索lsp文件,找到就加载,没有找到就选择目录或文件;;;与函数Loadlsp不同之处添加了错误捕获;;;;加载lsp文件列表。在支持路径中搜索lsp文件,;;函数六LoadFiles找到就加载,没有找到就选择目录或文件;;;;;;函数七GetSupportPath获取支持搜索路径;;这个方法还不如基础函数编写,一句代码解决“getevn\"ACAD\"”;;;;**************************************************************************************;;**************************************************************************************;;;;函数名:Loadlsp;;;;功能:加载lsp文件。在支持路径中搜索lsp文件,找到就加载,没有找到就选择目录或文件;;;;说;;明:本函数单独指定文件必须在STRING.lsp和Dir.lsp加载成功后;;变量:;;filename--;;需要加载的文件名;;返回:如果文件存在,返回T,否则nil;;;;**************************************************************************************(defunLoadlsp(filename/f_name;文件名,不含路径f_path;文件路径,不含文件名path;文件绝对路径b_loads;文件加载成功s_title;对话框标题s_fpaths_fnameret);;偿试加载文件(setqpath(loadfilenamenil))(if(notpath)(progn;;加载不成功(setqb_loadsnil)(setqs_title(strcat\"请选择\"filename\"文件的路径\"))(setqpath(getfileds_titlefilename\"lsp\"0));;如果未指定文件,则返回nil(if(notpath)(evalnil)(progn;;已经选择文件,重新加载(setqret(loadpathnil));如果加载失败返回nil;;将文件路径添加到环境变量中,需要加载Dir.lsp(progn;;dir.lsp加载成功(setqs_fpath(getfilepathpath))(if(not(HasPaths_fpath(getenv\"ACAD\")\";\");;这里有个大的Bug);;不在环境路径中,则添加(progn(setqret(SetFindPaths_fpath\"ACAD\")))(progn(setqs_fname(getfilenamepath))(princ(strcat\"\\n文件\"s_fname\"存在错误,加载不成功\")))))))))(princ));;endLoadlsp;;**************************************************************************************;;;;函数名:GetSupportPath;;;;功;;;;说;;能:获取支持搜索路径明:这个方法还不如基础函数编写,一句代码解决“getevn\"ACAD\"”;;返回:支持搜索路径或nil;;;;**************************************************************************************(defunGetSupportPath(/AcadObjectpreferenceSelfileSel)(VL-LOAD-COM)(setqAcadObject(vlax-get-acad-object))(setqpreferenceSel(vla-get-PreferencesAcadObject))(setqfileSel(vla-get-FilespreferenceSel));;取出当前的SupportPath值(eval(vla-get-SupportPathfileSel)));;**************************************************************************************;;;;函数名:LoadSTRING;;;;功目录;;;;变;;能:加载String.lsp文件。在支持路径中搜索lsp文件,找到就加载,没有找到就选择量:;;返回:如果文件存在,返回T,否则nil;;;;**************************************************************************************(defunLoadString(/s_path;文件路径s_fname;文件名s_dir_lsp;CAD环境目录,通过目录浏览选择s_titles_dir_cad);;偿试加载文件(setqs_path(load\"string.lsp\"nil))(if(nots_path)(progn(setqs_title;如果加载失败返回nil\"请选择\\\"string.lsp\\\"所在目录或\\\"Lsp目录\\\"添加到AtuoCAD支持路径!\")(setqs_dir_lsp(getdirs_title))(if(nots_dir_lsp)(exit)(progn(setqs_dir_cad(getenv\"ACAD\"));;检查路径字符串最后一个字符是不是\";\"(if(not(eq\";\"(substrs_dir_cad(strlens_dir_cad)1)))(setqs_dir_cad(strcats_dir_cad\";\")))(setqs_dir_cad(strcats_dir_cads_dir_lsp))(setenv\"ACAD\"s_dir_cad)(setqs_path(load\"string.lsp\"nil))(if(nots_path)(progn(alert\"未成功设置支持搜索路径,文件加载不成功,请检查设置,程序将退出!\"))))))));;endLoadString;;**************************************************************************************;;;;函数名:LoadDIR;;;;功录;;;;变;;能:加载dir.lsp文件。在支持路径中搜索lsp文件,找到就加载,没有找到就选择目量:;;返回:如果文件存在,返回T,否则nil;;;;**************************************************************************************(defunLoadDir(/s_path;文件路径s_fname;文件名s_dir_lsp;CAD环境目录,通过目录浏览选择s_titles_dir_cad);;偿试加载文件(setqs_path(load\"dir.lsp\"nil));如果加载失败返回nil(if(nots_path)(progn(setqs_title\"请选择\\\"dir.lsp\\\"所在目录或\\\"Lsp目录\\\"添加到AtuoCAD支持路径!\")(setqs_dir_lsp(getdirs_title))(if(nots_dir_lsp)(exit)(progn(setqs_dir_cad(getenv\"ACAD\"));;检查路径字符串最后一个字符是不是\";\"(if(not(eq\";\"(substrs_dir_cad(strlens_dir_cad)1)))(setqs_dir_cad(strcats_dir_cad\";\")))(setqs_dir_cad(strcats_dir_cads_dir_lsp))(setenv\"ACAD\"s_dir_cad)(setqs_path(load\"dir.lsp\"nil))(if(nots_path)(progn(alert\"未成功设置支持搜索路径,文件加载不成功,请检查设置,程序将退出!\"))))))));;endLoaddir;;**************************************************************************************;;;;函数名:GetDir;;;;功;;能:获得指定文件夹路径;;变量:;;s_title;;--对话框标题;;返回:设置成功,返回T,否则nil;;;;**************************************************************************************(defunGetDir(s_title/s_tsh;对话框标题;;创建一个shell应用folder;返回所选文件夹的Folder对象folderobject;获取shell对象的self特征result;获取文件夹路径)(vl-load-com);;关闭回显(setqscmde(getvar\"CMDECHO\"))(setvar\"CMDECHO\"0);;创建一个shell应用,接收程序ID并试图将其作为进程内服务器加载到AutoCAD中(setqsh(vla-getInterfaceObject(vlax-get-acad-object)\"Shell.Application\"));;对话框自定义提示消息(setqs_ts_title);;调用activex方法创建一个对话框,使用户可以选择一个文件夹,然后返回所选文件夹的Folder对象。(setqfolder(vlax-invoke-methodsh'BrowseForFolder0s_t0));;释放进程(vlax-release-objectsh)(if(not(notfolder))(progn;;如果folder不空;;获取shell对象的self特征(setqfolderobject(vlax-get-propertyfolder'Self));;获取文件夹路径(setqresult(vlax-get-propertyFolderObject'Path))(princ\"\\n该指定路径为:\")(princ\"\\n\")(princresult))(progn;;folder为空(princ\"\\n未指定路径!\")(princ)));;绘图结束恢复回显(setvar\"CMDECHO\"scmde)(princ);;;(print)(evalresult));;endGetDir;;**************************************************************************************;;自动加载(LoadDir)(loadstring);;**************************************************************************************;;**************************************************************************************;;;;函数名:c:testLoadFile;;;;功能:检查文件加载是否成功;;;;**************************************************************************************(defunc:testLoadFile()(alert\"loadFile.lsp加载成功!\"));;**************************************************************************************;;;;函数名:LoadFiles;;;;功文件;;;;说;;能:加载lsp文件列表。在支持路径中搜索lsp文件,找到就加载,没有找到就选择明:本函数单独指定文件必须在STRING.lsp和Dir.lsp加载成功后;;变量:;;lst_file;;--需要加载的文件名列表;;返回:;;;;**************************************************************************************(defunLoadFiles(lst_file/lst_f_path)(progn(setqlst_f_path(mapcar(function(lambda(x)(list'loadfilex)))lst_file))(mapcar'evallst_f_path)(princ)));;end_LoadFiles(defunc:ccc();;(loadfile\"error.lsp\")(setqlst_files(list\"string.lsp\"\"error.lsp\"\"string.lsp\"\"str1ing.lsp\"\"pwx.lsp\"\"pw1x.lsp\"\"error2.lsp\"))(setqlst_noload(loadfileslst_files));半天是这里语法错误(princ\"\\n\")(princ\"ok\")(princ));;**************************************************************************************;;;;函数名:LoadFile;;;;功;;;;说;;;;能:加载文件。在支持路径中搜索lsp文件,找到就加载,没有找到就选择文件明:本函数单独指定文件必须在STRING.lsp和Dir.lsp加载成功后相对于Loadlsp函数,本方法更优化;;变量:;;filename--;;需要加载的文件名;;返回:返回T,否则nil;;;;**************************************************************************************(defunLoadFile(filename/f_name;文件名,不含路径f_path;文件路径,不含文件名path;文件绝对路径b_loads;文件加载成功s_title;对话框标题s_fpaths_fnamerete_msg1e_msg2)(if(and(not(notfilename))(not(eq\"\"filename)))(progn;;偿试加载文件;文件名不为空(setqretnil)(setqret(vl-catch-all-apply'load(listfilename)))(if(vl-catch-all-error-pret)(progn;捕获到错误-偿试加载文件;;加载不成功;;捕获错误消息(setqe_msg1(vl-catch-all-error-messageret));;打印错误消息(princ(strcat\"\\n\"e_msg1))(setqs_title(strcat\"请选择\"filename\"文件的路径\"))(setqpath(vl-catch-all-apply'getfiled(lists_titlefilename\"lsp;*\"0)))(if(notpath)(progn;未选择文件时(princ(strcat\"\\n未选择文件!\"))(evalnil))(progn;已经选择文件,重新加载(setqretnil)(setqret(vl-catch-all-apply'Load(listpath)));不递归试试,正常加载返回值是一个函数(if(vl-catch-all-error-pret)(progn;通过对话框选择文件加载失败说明文件有问题,应中止程序(setqe_msg2(vl-catch-all-error-messageret))(princ(strcat\"\\nPn***E\"e_msg2)))(progn;加载成功成功;;将文件路径添加到环境变量;;获取文件路径,这里就不需要再捕获错误了(setqs_fpath(vl-filename-directorypath))(princ);;不在CAD支持路径中则添加,vla-put-SupportPath(if(not(HasPaths_fpath(getsupportpath)\";\"));;不在环境路径中,则添加(setqret(SetFindPaths_fpath\"ACAD\")))(evalpath))));;end_progn);;end_if);;end_progn捕获到错误(progn;;文件加载成功;;经测试,只要路径正确,任何文件都会加载成功,以后再查这是为什么(princ(strcat\"\\n文件:\\\"\"filename\"\\\"加载成功!\"))(evalpath)));;end_if);;end_progn文件名不为空(progn;文件名为空(princ\"\\n文件名为空!\")(evalnil)))(princ))

因篇幅问题不能全部显示,请点此查看更多更全内容

Top