天气与日历 切换到窄版

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

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

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 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-11-1 15:34 , Processed in 0.169601 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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