浩辰的.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. 数组方法indexOf & lastIndexOf

    indexOf() 语法:arrayObject.indexOf(searchvalue, startIndex) 功能:从数组的开头(位置0)开始向后查找. 参数:searchvalue:必需,要查 ...

  2. linux安装dpkg安装缺少依赖项的解决

    问题: dpkg: error processing package rxvt:i386 (--install): dependency problems - leaving unconfigured ...

  3. 移动端Android软键盘遮住输入框解决!

    在使用vue的情况下,在输入框中添加 <textarea class="textarea" @click="isAndroid" :maxlength=& ...

  4. 关于oracle的锁表解决session marked for kill

    oracle 使用的过程中,有时候会遇到锁表的情况,数据库增.删.改.查都是会锁表的,但是锁的类型会不同, 大多是行锁,部分会是表锁. 在oracle运行中,一直是有表在锁的,只不过很快一个操作结束, ...

  5. boost--asio

    1.asio综述 asio的核心类是io_service,它相当于前摄器模式的Proactor角色,在异步模式下发起的I/O操作,需要定义一个用于回调的完成处理函数,当I/O完成时io_service ...

  6. function类型(c++11)

    1.c++五大可调用的对象 可调用的对象常常作为泛型算法的实参 1)函数 2)函数指针 函数名其实也是函数指针,只不过函数名是一个常量指针,它的值不能改变,只能指向该函数,不能改变它的值让它指向别的函 ...

  7. git 如何更改某个提交内容/如何把当前改动追加到某次commit上? git rebase

    原文地址        http://www.jianshu.com/p/8d666830e826 [自己总结] 0, git diff git diff a b 是以a为基准,把b和a的区别展示出来 ...

  8. python3 print函数的用法

    1. 输出字符串 >>> strHello = 'Hello World' >>> print (strHello) Hello World 2. 格式化输出整数 ...

  9. HDU 5321 Beautiful Set (莫比乌斯反演 + 逆元 + 组合数学)

    题意:给定一个 n 个数的集合,然后让你求两个值, 1.是将这个集合的数进行全排列后的每个区间的gcd之和. 2.是求这个集合的所有的子集的gcd乘以子集大小的和. 析:对于先求出len,len[i] ...

  10. i2c总线,核心,驱动详解

    Linux I2C驱动分析(一)----I2C架构和总线驱动 一.I2C总线原理 I2C是一种常用的串行总线,由串行数据线SDA 和串线时钟线SCL组成.I2C是一种多主机控制总线,它和USB总线不同 ...