浩辰的.net bug太多了,建议大家不要移植....!!!听说.grx的支持不错,大家可以去试试敲c++

本例仅仅是测试用途.......含有大量的自动加载代码供大家参考....

acad的自动加载是将"支持路径"下的"acad.lsp"和"acaddoc.lsp",但是这两个文件非常容易被"360安全中心"杀死.....所以最好是卸载"360安全中心",

那么浩辰的lisp文件也是这样加载的....不过就是acad改成gcad而已.....

所以做一个lisp工具箱的思路就是,在你的"工具箱文件夹"内写一个acad.lsp文件,然后把你的工具箱文件夹加入到支持路径.

加入支持路径这步也不需要手写,可以写一个首次加载的"拖拉加载.lsp"来解决,

因为拖拉lsp文件到绘图区,cad会自动加载,自动加载的路径会出现在命令历史,

再从命令历史中去掉多余的东西,就是工具箱路径,工具箱路径再通过环境变量设置到支持路径.

这样,每次用户只需要拖拉一个lsp文件,就可以安装好你的工具箱了,然后下次再启动cad的时候,cad会自动检索工具箱的acad.lsp,这个acad.lsp就可以加载其他位置的功能...

我的工具箱为了防止杀软杀死acad.lsp,是把acad.lsp换成c#写的dll,

拖拉加载的时候,会加载dll,dll内写注册表,注册表如同acad.lsp可以进行再次加载dll,

这样下次启动cad的时候,dll就可以为所欲为了.

    1. 将acad.pgp,lsp,fas,vlx,名称增加一份gcad.pgp,lsp,fas,vlx.涉及系统加载用.
    2. Lisp的拖拉加载在gcad无法通过lastprompt获取命令历史栏最后一行(含路径字符串),请改用_.copyhist命令实现拖拉加载...以下代码贴出两种拖拉方式.
      ;;;name:    BF-Catalog
      ;;;desc: 设置基础目录
      ;;;arg: #xdlj:字符串
      ;;;return: 成功:工具箱基础目录, 失败:输出警告提示
      ;;;example: (BF-Catalog "04.工作小工具\\Notepad2.exe")
      ;;;example: (BF-Catalog "") -> "D:\\K01.惊惊盒子\\"
      (if (not BF-Catalog)
      (progn
      ;拖拉添加信任目录
      (vl-catch-all-apply ;捕获错误
      '(lambda (/ str nn str1 html)
      (while (= (logand (getvar "CmdActive") 1) 1)(command));结束已有命令
      (princ "\n")
      ;字符串处理,得到完整路径:
      ;ACAD最后一句内容:"命令: (LOAD \"D:/桌面/新建文本文档.lsp\")"
      ;GCAD无法获取最后一句内容
      (if (getvar "GCADVER");是浩辰
      (progn ;是执行
      (command "_.copyhist")
      (setq html (vlax-create-object "htmlfile"))
      (setq str (vlax-invoke-method (vlax-get (vlax-get html 'parentwindow) 'clipboarddata) 'getdata "text")
      str (strcase (if (= (type str) 'variant) (vlax-variant-value str) str))
      )
      (setq str (vl-string-right-trim " " str))
      (while (vl-string-search "\r\n" str)
      (setq str (vl-string-subst "" "\r\n" str))
      )
      (while (setq nn (vl-string-search "(LOAD \"" str))
      (setq str (substr str (+ nn 8)))
      )
      (and (setq nn (vl-string-search "\")" str))
      (setq str (substr str 1 (1+ nn))) ;file name
      )
      (setq str (vl-filename-directory (vl-string-translate "/" "\\" str)))
      (and html (vlax-release-object html))
      )
      (progn ;acad也可以用_.copyhist的方法的,这里只是展示lastprompt的用法,但是浩辰无法用lastprompt
      (setq
      str1 (getvar "lastprompt") ;获得最后一行命令
      nn (vl-string-search "(LOAD \"" str1);在字符串中搜索指定子串
      )
      (if nn
      (progn
      (setq
      str (substr str1 (+ nn 8)) ;去掉前面的
      nn (vl-string-search "\")" str) ;在字符串中搜索指定子串
      str (substr str 1 (1+ nn)) ;去掉文件名称
      str (vl-filename-directory (vl-string-translate "/" "\\" str));转化
      )
      )
      )
      )
      )
      (if str
      (progn
      ;添加信任目录
      (@add-Catalog str (list "" "02.小插件" "06.填充" "Fonts")) ;定义惊惊盒子基础目录
      (eval (list 'defun 'BF-Catalog '(#xdlj)(list 'strcat (strcat str "\\")'#xdlj)))
      )
      )
      )
      )
      )
      )
      ;;;name:@add-Catalog
      ;;;desc:加入信任路径
      ;;;arg:#str:基础路径
      ;;;arg:#fname:文件夹名
      ;;;return:什么都不返回
      ;;;example:(@add-Catalog "D:\\K01.惊惊盒子" (list "01.程序")),不可以末尾有\\
      (defun @add-Catalog
      (str fname / wanzhenglujing acadPath acadPaths)
      (foreach zibiao fname
      (if (= zibiao "")
      (setq wanzhenglujing str)
      (setq wanzhenglujing (strcat str "\\" zibiao))
      )
      (if (findfile wanzhenglujing);路径是否存在
      (progn
      ;路径是否重复
      (setq acadPath (getenv "ACAD"))
      (setq acadPaths (BF-Str-Split acadPath ";"))
      (foreach zibiao2 acadPaths
      (if (/= (strcase zibiao2)(strcase wanzhenglujing));转大写
      (setenv "ACAD" (strcat wanzhenglujing ";" acadPath))
      )
      )
      )
      )
      )
      (princ)
      )
    3. 拖拉加载时候更改加载的dll方式,增加gcad部分,利用它特有的变量.acad会忽视这个变量的.
        (if (getvar "GCADVER");浩辰
      (progn
      (setq
      tmp_ver (substr (getvar "ACADVER") 1 4)
      tmp_str (cond
      ((= tmp_ver "19.0") "JJBoxGstarCad_2019.dll")
      (T nil)
      )
      )
      )
      (progn ;acad加载
      (setq
      tmp_ver (substr (getvar "ACADVER") 1 4)
      tmp_str (cond
      ((= tmp_ver "16.2") "JJBoxDeskCad_2006.dll")
      ((= tmp_ver "17.0") "JJBoxDeskCad_2007.dll")
      ((= tmp_ver "17.1") "JJBoxDeskCad_2008.dll")
      ((= tmp_ver "17.2") "JJBoxDeskCad_2009.dll")
      ((= tmp_ver "18.0") "JJBoxDeskCad_2010.dll")
      ((= tmp_ver "18.1") "JJBoxDeskCad_2011.dll")
      ((= tmp_ver "18.2") "JJBoxDeskCad_2012.dll")
      ((= tmp_ver "19.0") "JJBoxDeskCad_2013.dll")
      ((= tmp_ver "19.1") "JJBoxDeskCad_2014.dll")
      ((= tmp_ver "20.0") "JJBoxDeskCad_2015.dll")
      ((= tmp_ver "20.1") "JJBoxDeskCad_2016.dll")
      ((= tmp_ver "21.0") "JJBoxDeskCad_2017.dll")
      ((= tmp_ver "22.0") "JJBoxDeskCad_2018.dll")
      ((= tmp_ver "23.0") "JJBoxDeskCad_2019.dll")
      (T nil)
      )
      )
      )
      )

      (if (and tmp_str
              (findfile tmp_str);在支持路径内
          )
          (command "netload" (findfile tmp_str));截获错误加载
      )

    4. gcad注册表和acad注册表有点区别,少了语言版本及区域版本,而arx和dll重复加载的注册表位置和acad不同的地方是 HKEY_CURRENT_USER\SOFTWARE\Gstarsoft\GstarCAD\R19\zh-CN\

      要增加Applications项(不是Application),之后设置和acad的Applications一样.(这里浩辰居然没有空置一个,要自己去添加 - . - )

cad.net之ACAD移植到GCAD的自动加载问题的更多相关文章

  1. CAD 二次开发 -- 自动加载开发的DLL

    CAD二次开发可以采用写扩展DLL的方式实现.该DLL的函数可以被CAD调用. 但是调用前,必须用命令netload 将该dll加载到CAD. 其实可以修改注册表,当CAD软件启动后,自动加载扩展DL ...

  2. CAD调试时抛出“正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码”异常的解决方法

    这些天重装了电脑Win10系统,安装了CAD2012和VS2012,准备进行软件开发.在调试程序的时候,CAD没有进入界面就抛出 “正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain ...

  3. u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统

    http://www.linuxidc.com/Linux/2012-09/70510.htm  来源:Linux社区  作者:赵春江 uboot最主要的功能就是能够引导内核启动.本文就介绍如何实现该 ...

  4. u-boot移植总结(二)LED点灯调试 和 u-boot加载地址

    (一)LED点灯调试 FL2440电路总共有4个LED0,LED1,LED2,LED3,分别接到板子GPB5,GPB6,GPB8,GPB10引脚.通过设置三个寄存器GPBCON(0x56000010) ...

  5. Android4.0Sd卡移植之使用vold自动挂载sd卡

    在cap631平台上移植android4.0,发现内核驱动没有任何问题,能够读写,当总不能挂载. 后来发现是因为自动挂载需要vold的支持.vold程序负责检查内核的 sysfs 文件系统,发现有SD ...

  6. CAD数据分块,偏移校准,加载到百度地图、高德地图、谷歌等地图上

    前面分享过一篇如何将CAD海量数据显示在百度地图上(百度地图Canvas实现十万CAD数据秒级加载),但是很多开发者在CAD数据提取时遇到了问题,所以接下来的文章将介绍如何将CAD数据提取. 准备软件 ...

  7. 百度地图Canvas实现十万CAD数据秒级加载

    背景 前段时间工作室接到一个与地图相关的项目,我作为项目组成员主要负责地图方面的设计和开发.由于地图部分主要涉及的是前端页面的显示,作为一名Java后端的小白,第一次写了这么多HTML和JavaScr ...

  8. 通过openlayers加载dwg格式的CAD图并与互联网地图叠加

    Openlayers介绍 ​ Openlayers是一个基于Javacript开发,免费.开源的前端地图开发库,使用它,可以很容易的开发出WebGIS系统.目前Openlayers支持地图瓦片.矢量数 ...

  9. 如何实现通过Leaflet加载dwg格式的CAD图

    前言 ​ 在前面介绍了通过openlayers加载dwg格式的CAD图并与互联网地图叠加,openlayers功能很全面,但同时也很庞大,入门比较难,适合于大中型项目中.而在中小型项目中,一般用开源的 ...

随机推荐

  1. MySQL正则表达式 REGEXP详解

    在开始这个话题之前我们首先来做一个小实验,比较一下REGEXP和Like他们两个哪个效率高,如果效率太低,我们就没有必要做过多的研究了,实验的代码如下:<?phpRequire("co ...

  2. P3834 【模板】可持久化线段树 1(主席树)

    #include <bits/stdc++.h> #define read read() #define up(i,l,r) for(int i = (l);i <= (r);i++ ...

  3. 70.app上架被拒(info.plist定位参数配置)

    问题一: Your app declares support for location in the UIBackgroundModes key in your Info.plist file but ...

  4. centos7修改root根目录

    1.拷贝/root 原目录的东西到新目录中(包括.xxx文件) /abc 2.修改配置文件 vi /etc/passwd root:x:0:0:root:/root:/bin/bash ==> ...

  5. idea中使用thymeleaf标签时有红色的波浪线怎么去掉

    使用最新版本的idea2017可以解决,方法如下: 选择File->Settings->Editor->Inspections,然后搜索thymeleaf 将Expression v ...

  6. Linux 文件授权

    Linux用户权限     在Linux操作系统中,root的权限是最高的,相当于windows的administrator,拥有最高权限,能执行任何命令和操作,在Linux系统中,通过UID来区分用 ...

  7. Methods to reduce the number of pipeline stages

    Several techniques have been proposed to reduce the number of pipeline stages. We categorize them in ...

  8. windows下 python2 和python3 共存

    目前我们在国内网站上看到的两者共存的方法就是将其中一个的python.exe重命名.虽说在一定程度上可行,但存在一个重大的隐患,就是修改了名字的那个python对应的pip将无法使用. 下面说一下具体 ...

  9. Linux(CentOS)下的apache服务器配置与管理

    原文链接:http://blog.csdn.net/ylqmf/article/details/5291680 一.WEB服务器与Apache1.web服务器与网址 2.Apache的历史 3.补充h ...

  10. chrome用type=file获取图片路径并转base64字符串

    1 html页面 <div class="col-sm-2" style="height: 200px;margin-top: 14px;"> &l ...