ObjectArx调用cad内部命令

2023-12-17 13:04

本文主要是介绍ObjectArx调用cad内部命令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PhdArxCadCmd.h

#pragma once
#include <memory>
#include <mutex>class PhdArxCadCmd final
{
public:static PhdArxCadCmd* Instance();private:PhdArxCadCmd() = default;static std::unique_ptr<PhdArxCadCmd> m_self;	//声明静态对象public://关闭命令回显void EchoOff() const;//刷新图纸bool CallRegen() const;//设置标注线性比例bool SetDimLineScale(double dValue) const;//设置标注全局比例bool SetDimScale(double dValue) const;//设置区域覆盖是否显示边框bool SetWipeoutShow(bool bShow = false) const;//设置倒圆角半径bool SetFilletRadius(double dRadius) const;//调用cad命令倒圆角bool FilletByCommand(AcDbObjectId& idArc,const AcDbObjectId& idLine1, const AcDbObjectId& idLine2) const;//定位实体bool OrientationEnt(const AcDbObjectId& idEnt) const;//zoom显示全部实体bool ZoomAllEnt() const;//zoom窗口bool ZoomWindow(const AcGePoint3d& ptMin,const AcGePoint3d& ptMax) const;};//宏定义
#define g_ArxCadCmd PhdArxCadCmd::Instance()

PhdArxCadCmd.cpp

#include "stdafx.h"
#include "../stdafx.h"
#include "PhdArxCadCmd.h"
#include <acedCmdNF.h>//初始化静态成员变量
std::unique_ptr<PhdArxCadCmd> PhdArxCadCmd::m_self;PhdArxCadCmd* PhdArxCadCmd::Instance()
{//判断智能指针对象是否为空if (m_self.get() == nullptr)	//双重检查{//定义互斥量对象static std::mutex mutex;//定义智能锁对象std::lock_guard<std::mutex> alock(mutex);//判断智能指针对象对否为空if (m_self.get() == nullptr){//创建实例,并绑定智能指针m_self.reset(new PhdArxCadCmd);}}return m_self.get();
}void PhdArxCadCmd::EchoOff() const
{resbuf var;int nRs = acedGetVar(_T("CMDECHO"), &var);if (var.resval.rint)//打开了命令回显{//ObjectARX已经将acedCommand函数升级为acedCommandS函数, 使用该函数需要添加头文件”acedCmdNF.h”。acedCommandS(RTSTR, _T("CMDECHO"), RTSHORT, 0, RTNONE);}
}bool PhdArxCadCmd::CallRegen() const
{int nRet = acedCommandS(RTSTR, _T("REGEN"), RTNONE);return nRet == RTNORM;
}bool PhdArxCadCmd::SetDimLineScale(double dValue) const
{//int nRet = acedCommand(RTSTR, _T("DIMLFAC"), RTREAL, dValue, RTNONE);int nRet = acedCommandS(RTSTR, _T("DIMLFAC"), RTREAL, dValue, RTNONE);return nRet == RTNORM;
}bool PhdArxCadCmd::SetDimScale(double dValue) const
{//int nRet = acedCommand(RTSTR, _T("DIMSCALE"), RTREAL, dValue, RTNONE);int nRet = acedCommandS(RTSTR, _T("DIMSCALE"), RTREAL, dValue, RTNONE);return nRet == RTNORM;
}bool PhdArxCadCmd::SetWipeoutShow(bool bShow /*= false*/) const
{int nRet;if (bShow){//nRet = acedCommand(RTSTR, _T("wipeout"), RTSTR, _T("f"), RTSTR, _T("on"), RTNONE);nRet = acedCommandS(RTSTR, _T("wipeout"), RTSTR, _T("f"), RTSTR, _T("on"), RTNONE);}else{//nRet = acedCommand(RTSTR, _T("wipeout"), RTSTR, _T("f"), RTSTR, _T("off"), RTNONE);nRet = acedCommandS(RTSTR, _T("wipeout"), RTSTR, _T("f"), RTSTR, _T("off"), RTNONE);}return nRet == RTNORM;
}bool PhdArxCadCmd::SetFilletRadius(double dRadius) const
{//int nRet = acedCommand(RTSTR, _T("_fillet"), RTSTR, _T("r"), RTREAL, dRadius, RTNONE);int nRet = acedCommandS(RTSTR, _T("_fillet"), RTSTR, _T("r"), RTREAL, dRadius, RTNONE);return nRet == RTNORM;
}bool PhdArxCadCmd::FilletByCommand(AcDbObjectId& idArc, const AcDbObjectId& idLine1, const AcDbObjectId& idLine2) const
{AcDbPoint* pt = new AcDbPoint(AcGePoint3d::kOrigin);AcDbObjectId ptId = g_ArxUtility->PostToModelSpace(pt);ads_name name1, name2;acdbGetAdsName(name1, idLine1);acdbGetAdsName(name2, idLine2);//int nRet = acedCommand(RTSTR, _T("_fillet"), RTENAME, name1, RTENAME, name2, RTNONE);int nRet = acedCommandS(RTSTR, _T("_fillet"), RTENAME, name1, RTENAME, name2, RTNONE);if (nRet != RTNORM){g_ArxCommand->DeleteEnt(ptId);return false;}//得到圆弧idads_name lastEnt;acdbEntLast(lastEnt);acdbGetObjectId(idArc, lastEnt);if (idArc == ptId){g_ArxCommand->DeleteEnt(ptId);return false;}else{g_ArxCommand->DeleteEnt(ptId);return true;}
}bool PhdArxCadCmd::OrientationEnt(const AcDbObjectId& idEnt) const
{AcDbEntityPointer pEnt(idEnt, AcDb::kForWrite);if (Acad::eOk != pEnt.openStatus())return false;AcDbExtents extent;pEnt->getGeomExtents(extent);pEnt->highlight();	//设置实体为高亮状态AcGePoint3d ptMin = extent.minPoint();AcGePoint3d ptMax = extent.maxPoint();double dWidth = fabs(ptMax.x - ptMin.x);double dHeight = fabs(ptMax.y - ptMin.y);AcGePoint3d CenterPt;CenterPt.x = (ptMax.x + ptMin.x) / 2;CenterPt.y = (ptMax.y + ptMin.y) / 2;ptMax.x = CenterPt.x + (dWidth / 2) * 2;ptMax.y = CenterPt.y + (dHeight / 2) * 2;ptMin.x = CenterPt.x - (dWidth / 2) * 2;ptMin.y = CenterPt.y - (dHeight / 2) * 2;CString strCommand;strCommand.Format(_T("ZOOM\nw\n%lf,%lf,%lf\n%lf,%lf,%lf\n"), ptMin.x, ptMin.y, ptMin.z, ptMax.x, ptMax.y, ptMax.z);acDocManager->sendStringToExecute(acDocManager->curDocument(), strCommand, true, false, false);return true;
}bool PhdArxCadCmd::ZoomAllEnt() const
{//int nRet = acedCommand(RTSTR, _T("zoom"), RTSTR, _T("a"), RTNONE);int nRet = acedCommandS(RTSTR, _T("zoom"), RTSTR, _T("a"), RTNONE);return nRet == RTNORM;
}bool PhdArxCadCmd::ZoomWindow(const AcGePoint3d& ptMin, const AcGePoint3d& ptMax) const
{int nRet = acedCommandS(RTSTR, _T("zoom"), RTSTR, _T("w"), RT3DPOINT, asDblArray(ptMin),RT3DPOINT, asDblArray(ptMax), RTNONE);return nRet == RTNORM;
}

这篇关于ObjectArx调用cad内部命令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/504456

相关文章

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

Python如何调用另一个类的方法和属性

《Python如何调用另一个类的方法和属性》在Python面向对象编程中,类与类之间的交互是非常常见的场景,本文将详细介绍在Python中一个类如何调用另一个类的方法和属性,大家可以根据需要进行选择... 目录一、前言二、基本调用方式通过实例化调用通过类继承调用三、高级调用方式通过组合方式调用通过类方法/静

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四

Linux grep 命令的使用指南

《Linuxgrep命令的使用指南》本文给大家介绍Linuxgrep命令的使用指南,包括基础搜索语法、实践指南,感兴趣的朋友跟随小编一起看看吧... 目录linux grep 命令全面使用指南一、基础搜索语法1. 基本文本搜索2. 多文件搜索二、常用选项详解1. 输出控制选项2. 上下文控制选项三、正则表达

DNS查询的利器! linux的dig命令基本用法详解

《DNS查询的利器!linux的dig命令基本用法详解》dig命令可以查询各种类型DNS记录信息,下面我们将通过实际示例和dig命令常用参数来详细说明如何使用dig实用程序... dig(Domain Information Groper)是一款功能强大的 linux 命令行实用程序,通过查询名称服务器并输