njcknfy 发表于 2023-3-28 15:05:52

基于中望CAD二次开发的实践分享

做了二十多年AutoCAD的二次开发,随着公司采购中望CAD替代AutoCAD(主要是AutoCAD采用按年租用方式比较恶心),一年多的时间一直在做将原有AutoCAD二次开发的功能和代码移植到中望CAD环境中来,目前基本完成了,抽出时间整理了一下实践经验,在这里和大家分享交流。
首先分享个重要的工具,这个程序是将用LISP二次开发的VLX和FAS程序可以转换至中望CAD支持的VLS的工具,原来AutoCAD加载程序appload后加载的vlx或fas后缀的程序,在中望CAD里是加载vls后缀的程序。

njcknfy 发表于 2023-7-10 15:21:45

本帖最后由 njcknfy 于 2023-7-10 15:24 编辑

分享个如何获取对象RGB颜色列表和给对象添加RGB颜色的LISP方法
以下是获取对象的RGB颜色列表
(defun Get_TXSTRGBCOLOR         (TXST_NAME)
;;;获取对象的RGB颜色列表
;;;(Get_TXSTRGBCOLOR TXST_NAME)
;;;参数: TXST_NAME 对象是 ENAME 或者 VLA-OBJECT
;;;(setq TXST_NAME(car(entsel)))
(cond      ((= (type TXST_NAME) 'VLA-OBJECT)
         (progn      (setq TXST_OBJ TXST_NAME
                      oColor   (vlax-get-property TXST_OBJ 'TrueColor)
                      clrR   (vlax-get-property oColor 'Red)
                      clrG   (vlax-get-property oColor 'Green)
                      clrB   (vlax-get-property oColor 'Blue))
                (setq TXSTRGB_LIST (list clrR clrG clrB))))
      ((= (type TXST_NAME) 'ENAME)
         (progn      (setq TXST_OBJ (vlax-ename->vla-object TXST_NAME))
                (setq oColor (vlax-get-property TXST_OBJ 'TrueColor)
                      clrR   (vlax-get-property oColor 'Red)
                      clrG   (vlax-get-property oColor 'Green)
                      clrB   (vlax-get-property oColor 'Blue))
                (setq TXSTRGB_LIST (list clrR clrG clrB))))
      (t (setq TXSTRGB_LIST nil)))
TXSTRGB_LIST)
以下是给对象添加RGB颜色列表的方法
(defun Put_TXSTRGBCOLOR   (TXST_NAME TXSTRGB_LIST)
;;;修改对象RGB颜色值
;;;(Put_TXSTRGBCOLOR TXST_NAME TXSTRGB_LIST)
;;;参数: TXST_NAME-对象是 ENAME 或者 VLA-OBJECT, TXSTRGB_LIST-对象实体的RGB颜色列表(R G B)
;;;(setq TXST_NAME(car(entsel)) TXSTRGB_LIST (list 140 30 252))
(cond((= (type TXST_NAME) 'VLA-OBJECT)
   (progn(setq TXST_OBJ TXST_NAME
          oColor   (vlax-get-property TXST_OBJ 'TrueColor))
    (vlax-invoke-method oColor
            'SetRGB
            (car TXSTRGB_LIST)
            (cadr TXSTRGB_LIST)
            (caddr TXSTRGB_LIST))
    (vlax-put-property TXST_OBJ 'TrueColor oColor)
    (vla-update TXST_OBJ)))
((= (type TXST_NAME) 'ENAME)
   (progn(setq TXST_OBJ (vlax-ename->vla-object TXST_NAME))
    (setq oColor (vlax-get-property TXST_OBJ 'TrueColor))
    (vlax-invoke-method oColor
            'SetRGB
            (car TXSTRGB_LIST)
            (cadr TXSTRGB_LIST)
            (caddr TXSTRGB_LIST))
    (vlax-put-property TXST_OBJ 'TrueColor oColor)
    (vla-update TXST_OBJ)
    (setq TXST_NAME (vlax-vla-object->ename TXST_OBJ))))
(t TXST_NAME))
TXST_NAME)

njcknfy 发表于 2023-7-10 15:46:48

类似ACAD加载ARX文件,中望CAD环境下也可以加载后缀为ZRX的文件,实现调用OPENDCL和DOSLIB插件,这边就分享一下基于ZWCAD2023for64位的ZRX,加载的方法就是命令行APPLOAD,选择下载附件解压缩后的ZRX文件,我们在实现ACAD二次开发迁移到ZWCAD时进行了充分测试,大部分功能都没啥问题,就是要注意ZWCAD的版本需要时2022年9月30日之后的版本,之前的ZWCAD版本LISP接口BUG比较多,好多功能不支持

tzan8752 发表于 2023-4-4 20:23:59

{:1_1:}谢谢版主

王阿非 发表于 2023-4-7 13:35:47

C++移植基本不用做什么修改

cjh20088 发表于 2023-6-15 09:05:17

版主这个很实用,支持:handshake

yuyehuan 发表于 2023-6-15 10:20:56

贴主,转化失败怎么弄呢

xiaguohe 发表于 2023-7-7 10:52:30

感谢分享
!!!!!

njcknfy 发表于 2023-7-8 17:20:11

yuyehuan 发表于 2023-6-15 10:20
贴主,转化失败怎么弄呢

这个不会失败啊,原来在ACADLISP里面编译好的VLX,直接转换成VLS我还没有遇到失败的情况

njcknfy 发表于 2023-7-10 16:13:13

基于中望CAD环境定制菜单栏和使用OPENDCL定制界面都是可以实现的,我们现在也在参与一些单位CAD国产化的二次开发改造项目,原来基于ACAD开发的ARX、LISP,VB.NET等都已经有实现的案例,有需要的单位欢迎项目咨询(友情提示:二次开发改造项目是按需收费),中望CAD还支持在国产操作系统下运行,我们正在做基于国产操作系统的二次开发迁移改造方法,希望有兴趣的朋友可以一起来参与
页: [1] 2
查看完整版本: 基于中望CAD二次开发的实践分享