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

相关文章

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

postgresql数据库基本操作及命令详解

《postgresql数据库基本操作及命令详解》本文介绍了PostgreSQL数据库的基础操作,包括连接、创建、查看数据库,表的增删改查、索引管理、备份恢复及退出命令,适用于数据库管理和开发实践,感兴... 目录1. 连接 PostgreSQL 数据库2. 创建数据库3. 查看当前数据库4. 查看所有数据库

python如何调用java的jar包

《python如何调用java的jar包》这篇文章主要为大家详细介绍了python如何调用java的jar包,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录一、安装包二、使用步骤三、代码演示四、自己写一个jar包五、打包步骤六、方法补充一、安装包pip3 install

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

git stash命令基本用法详解

《gitstash命令基本用法详解》gitstash是Git中一个非常有用的命令,它可以临时保存当前工作区的修改,让你可以切换到其他分支或者处理其他任务,而不需要提交这些还未完成的修改,这篇文章主要... 目录一、基本用法1. 保存当前修改(包括暂存区和工作区的内容)2. 查看保存了哪些 stash3. 恢