找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 190|回复: 0

objectArx ---基础操作

[复制链接]

1

主题

0

回帖

35

积分

管理员

积分
35
发表于 2024-3-18 19:25:29 | 显示全部楼层 |阅读模式
[code]目录
一、自动加载Base.arx
二、文件选择
2.1 CAD风格
2.2 windows原生风格
2.2.1 单选
2.2.2 多选
2.2.3 只选文件夹
一、自动加载Base.arx
功能:测试时不用频繁的打开关闭cad 去 加载 卸载 Base.arx

模板:以第(三)篇文件结构为基础

Commands.h

#include "StdAfx.h"

void AddCommands();
void lapp();
void uapp();

Commands.cpp

#include "StdAfx.h"
#include "Commands.h"
#include "Editor.h"
#include "acedCmdNF.h"

void AddCommands()
{        // 加载arx
        Editor::AddCommand(L"lapp", ACRX采用CMD采用MODAL, lapp);
        // 卸载arx
        Editor::AddCommand(L"uapp", ACRX采用CMD采用MODAL, uapp);
}


void lapp() {
        // 加载arx,acedCommandS模拟人工输入,注意添加头文件,注意加载文件位置
        if(acedCommandS(RTSTR, 采用T("arx"),
                                        RTSTR, 采用T("l"),
                                        RTSTR, 采用T("D:\\CPP\\Base\\x64\\Debug\\Base.arx"),
                                        RTNONE)
                                        ==RTNORM)
                        acutPrintf(采用T("\n加载成功"));
}

void uapp() {
        if (acedCommandS(RTSTR, 采用T("arx"),
                                        RTSTR, 采用T("u"),
                                        RTSTR, 采用T("D:\\CPP\\Base\\x64\\Debug\\Base.arx"),
                                        RTNONE)
                                        == RTNORM)
                acutPrintf(采用T("\n卸载成功"));
}


注意:

组名:修改Editor.cpp和acrxEntryPoint.cpp中的命令组名(去看代码),不可与Base.arx相同
保存位置:生成后改名为luapp.arx,文件单独保存
二、文件选择
2.1 CAD风格
打开文件对话框

// 创建文件的结果缓冲区节点
resbuf *fileName = NULL;

// 函数:对话框标题、默认路径、默认后缀名、默认名字、标识符(0打开)、文件的结果缓冲区节点
if (acedGetFileNavDialog(采用T("文件选择"),
                                                 NULL,
                                                 采用T("arx;dwg"),
                                                 采用T("test"),
                                                 0,
                                                 &fileName) == RTNORM)
{
        if (acedArxLoad(fileName->resval.rstring) != RTNORM)
        {
                acutPrintf(采用T("\n无法加载应用程序%s"), fileName->resval.rstring);
        }
        else
                acutPrintf(采用T("\n加载%s应用程序成功!"), fileName->resval.rstring);
}

acutRelRb(fileName);


效果


查找文件绝对路径

ACHAR *fileName = 采用T("123.dwg");
// 接收返回值:
ACHAR fullPath[128];
// 返回结果类型码:RTNORM 或 RTERROR
acedFindFile(fileName, fullPath, 128);

查找范围:当前文件所在文件夹、acad.exe所在文件夹、CAD环境变量内的路径



2.2 windows原生风格
2.2.1 单选
代码
void singleSel()
{
        // 构造函数:true为打开,false为存储,也可CFileDialog dlg(true);
        CFileDialog dlg(true, NULL, NULL, NULL, 采用T("全部文件|*.*|dwg文件| *.dwg||"));

        // 设置初始目录
        CString path("C:\\Users\\Administrator\\Desktop");
        dlg.m采用ofn.lpstrInitialDir = path;
        dlg.m采用ofn.lpstrTitle =采用T("此处为对话框标题");

        if (dlg.DoModal() == IDOK)
        {        // 返回 C:\Users\Administrator\Desktop\123.dwg
                acutPrintf(L"\n%s", dlg.GetPathName());
                // 返回 123.dwg
                acutPrintf(L"\n%s", dlg.GetFileName());
                // 返回 123
                acutPrintf(L"\n%s", dlg.GetFileTitle());
                // 返回 dwg
                acutPrintf(L"\n%s", dlg.GetFileExt());
        }
}





2.2.2 多选
代码示例
void MultiSel()
{
        // TODO: 在此添加控件通知处理程序代码
        // 构造函数:第四个参数为允许多选,不包括文件夹
        CFileDialog dlg(true, NULL, NULL, OFN采用ALLOWMULTISELECT);
        // 调整缓冲区大小:存储选择到的文件路径
        dlg.m采用ofn.lpstrFile = new TCHAR[1024];
        // 最多存储文件个数
        dlg.m采用ofn.nMaxFile = 1024;

        // 循环获取文件名
        CString pathName;
        if (dlg.DoModal() == IDOK)
        {
                POSITION mpos = dlg.GetStartPosition();
                while (mpos != NULL)
                {
                        pathName = dlg.GetNextPathName(mpos);
                        acutPrintf(采用T("\n文件名为:%s"), pathName);
                }
               
        }
        // new与delete对应
        delete[] dlg.m采用ofn.lpstrFile;
}



2.2.3 只选文件夹
代码示例
void folderSel()
{        //存放选择的目录路径
        ACHAR szPath[MAX采用PATH];     
        CString str;

        ZeroMemory(szPath, sizeof(szPath));
        // bi为结构体
        BROWSEINFO bi;
        bi.hwndOwner = m采用hWnd;
        bi.pidlRoot = NULL;
        bi.pszDisplayName = szPath;
        bi.lpszTitle = 采用T("请选择目录:");
        bi.ulFlags = 0;
        bi.lpfn = NULL;
        bi.lParam = 0;
        bi.iImage = 0;
        //弹出选择目录对话框
        LPITEMIDLIST lp = SHBrowseForFolder(&bi);
        // 选择成功
        if (lp && SHGetPathFromIDList(lp, szPath))
                AfxMessageBox(szPath);
        // 选择失败
        else
                AfxMessageBox(采用T("\n无效的目录,请重新选择"));
}


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2025-1-1 17:41 , Processed in 0.101528 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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