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

相关文章

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Idea调用WebService的关键步骤和注意事项

《Idea调用WebService的关键步骤和注意事项》:本文主要介绍如何在Idea中调用WebService,包括理解WebService的基本概念、获取WSDL文件、阅读和理解WSDL文件、选... 目录前言一、理解WebService的基本概念二、获取WSDL文件三、阅读和理解WSDL文件四、选择对接

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

Linux使用nohup命令在后台运行脚本

《Linux使用nohup命令在后台运行脚本》在Linux或类Unix系统中,后台运行脚本是一项非常实用的技能,尤其适用于需要长时间运行的任务或服务,本文我们来看看如何使用nohup命令在后台... 目录nohup 命令简介基本用法输出重定向& 符号的作用后台进程的特点注意事项实际应用场景长时间运行的任务服

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不