天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 4|回复: 0

AutoCAD中的ARX插件一般写法(ObjectARX+C++)

[复制链接]
  • TA的每日心情
    开心
    昨天 15:23
  • 签到天数: 69 天

    [LV.6]常住居民II

    410

    主题

    167

    回帖

    2704

    积分

    管理员

    积分
    2704
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    // MyArxFirst.cpp : 定义 DLL 应用程序的导出函数。
    //ObjectArx开发对txt文本文件的操作一例
    #pragma once

    #include "stdafx.h"
    //
    #include "Convert.h"
    #include "fileSimpleClass.h"
    #include "dbSimpleClass.h"


    //定义两个函数
    void initApp();
    void unloadApp();

    //定义命令函数
    //------------------------------------------
    void hello();//打印"Hello world!"在AutoCAD Command上  的命令
    void pfvalue();//打印文件内容 的命令
    void pdbvalue();//ado连接数据库的方法 的命令
    void inputvalue(); //CAD交互操作的方法 的命令
    //------------------------------------------

    //定义CAD的实体点函数  这个函数是必须的
    extern "C"
    AcRx::AppRetCode
    acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)
    //void acrxEntryPoint(void* pkt)
    {
            switch (msg)
            {
                    case AcRx::kInitAppMsg:
                            acrxDynamicLinker->unlockApplication(pkt);
                            acrxRegisterAppMDIAware(pkt);
                            initApp();
                            break;
                    case AcRx::kUnloadAppMsg:
                            unloadApp();
                            break;
                    default:
                        break;
            }
            return AcRx::kRetOK;
    }



    void initApp()
    {
        //register a command with the AutoCAD command mechanism
            //string macro 用法:
            //_T("helloworld") or  __T("helloworld")  or ACRX_T("helloworld")
            acedRegCmds->addCommand(ACRX_T("HELLOWORLD_COMMANDS"),
                                        ACRX_T("ArxHsgBag"),
                                                            ACRX_T("Hello"),
                                                            ACRX_CMD_TRANSPARENT,
                                                            hello);
            acedRegCmds->addCommand(ACRX_T("PFVALUE_COMMANDS"),
                                        ACRX_T("ArxHsgBag"),
                                                            ACRX_T("pfvalue"),
                                                            ACRX_CMD_TRANSPARENT,
                                                            pfvalue);
            acedRegCmds->addCommand(ACRX_T("PDBVALUE_COMMANDS"),
                                        ACRX_T("ArxHsgBag"),
                                                            ACRX_T("pdbvalue"),
                                                            ACRX_CMD_TRANSPARENT,
                                                            pdbvalue);
            acedRegCmds->addCommand(ACRX_T("INPUTVALUE_COMMANDS"),
                                        ACRX_T("ArxHsgBag"),
                                                            ACRX_T("inputvalue"),
                                                            ACRX_CMD_TRANSPARENT,
                                                            inputvalue);
            //
    }


    void unloadApp()
    {
        acedRegCmds->removeGroup(ACRX_T("HELLOWORLD_COMMANDS"));
            acedRegCmds->removeGroup(ACRX_T("PFVALUE_COMMANDS"));
            acedRegCmds->removeGroup(ACRX_T("PDBVALUE_COMMANDS"));
            acedRegCmds->removeGroup(ACRX_T("INPUTVALUE_COMMANDS"));
    }


    //定义两个类变量
    fileSimpleClass fsc;
    dbSimpleClass dbsc;
    Convert cvOp;
    //----------------------------------------------------
    //实现命令函数
    void hello()//hello命令
    {
        acutPrintf(ACRX_T("\n第一个Arx程序Hello World!"));       
    }

    void pfvalue()//打印文件内容 命令
    {       
            acutPrintf(_T("开始输出文件内信息:\n"));
        const ACHAR* filepath=ACRX_T("d:\\test.txt");  //OK
            acutPrintf(filepath);        //OK
            fsc.pfvalue_default(filepath); //OK
            fsc.pfvalue2(filepath);  //OK
    }

    void pdbvalue()//输出数据库表内记录的命令
    {
        acutPrintf(_T("开始输出数据库表内记录:\n"));
            //...
            acutPrintf(_T("执行函数:pdbvalue_mdb结果\n"));
            dbsc.pdbvalue_mdb();
            acutPrintf(_T("执行函数:pdbvalue_mdb结果完毕!\n"));
            //
            acutPrintf(_T("执行函数:pdbvalue_mdb2结果\n"));
            dbsc.pdbvalue_mdb2();
            acutPrintf(_T("执行函数:pdbvalue_mdb2结果完毕!\n"));

            dbsc.pdbvalue_write();
            acutPrintf(_T("执行函数:pdbvalue_write完毕!\n"));
    }
    void displayvalue(_bstr_t bstrt)
    {
         ACHAR* tmp=cvOp.GetAcharPtr(bstrt);
         acutPrintf(tmp);
    }

    void inputvalue()
    {
        int res;
            //输入一个整数
            acedGetInt(_T("输入一个整数:"),&res);
            //显示
            displayvalue(_bstr_t(res));acutPrintf(_T("\n"));
            /*_bstr_t bstrt(res);
            ACHAR* tmp=cvOp.GetAcharPtr(bstrt);
        acutPrintf(tmp);*/
            //输入一个字符串
            ACHAR str;
            acedGetString(1,_T("输入一个字符:"),&str);
            //displayvalue(_bstr_t(str));acutPrintf(_T("\n"));       
    }
    //----------------------------------------------------

    void inputvalue()
    {
        int res;
    //输入一个整数
    acedGetInt(_T("输入一个整数:"),&res);
    //显示
    displayvalue(_bstr_t(res));acutPrintf(_T("\n"));
    /*_bstr_t bstrt(res);
    ACHAR* tmp=cvOp.GetAcharPtr(bstrt);
        acutPrintf(tmp);*/
    //输入一个字符串
    wchar_t* str;
    str=new wchar_t[4000];
    acedGetString(1,_T("输入一个字符:"),str);  
    displayvalue(_bstr_t(str));
    acutPrintf(_T("\n"));  
    }

     

     

     

     

    AutoCAD中的ARX插件一般写法(ObjectARX+C++)
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|

    GMT+8, 2024-7-1 05:11 , Processed in 0.062559 second(s), 23 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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