ObjectARX如何修改多行文字的格式

news2024/9/27 5:55:59

一 AutoCAD中多行文字的格式设置

AutoCAD在设置多行文字格式时使用了非常特殊的方式,多行文字整体可以有诸多格式属性,比如字高、颜色、旋转角度等等;但是,多行文字的每一个字符其实也可以有自己单独的格式。
比如,下面的多行文字整体是绿色,但是它其中的某一个字却可以是红色。
在这里插入图片描述
那么,CAD是怎么实现的呢?我们对这个多行文字执行list命令,执行结果如下:
在这里插入图片描述
从中我们可以看出,这个多行文字的内容竟然是:ab{\C1;c}de。这个{}括号括起来的就是字母’c’特有的格式,\C1;说明接下来的这个字符颜色索引为1号。CAD管这个叫做格式代码。我们看看格式代码都有哪些。
在这里插入图片描述

CAD就是根据上表的方式,确定了文字格式与格式代码之间的关系。也就是说,AcDbMText实体可以有整体的格式,但是其中每一个字符都可以有自己特定的格式,这个特定的格式由这个字符的格式代码控制
CAD允许你在外部文字编辑器中输入带格式代码的字符串,这样可以在CAD中生成特定格式的多行文字对象。具体可参见CAD帮助文档“在替换文字编辑器中设置多行文字的格式”。以下是一个示例。
在这里插入图片描述

二 ObjectARX如何设置多行文字的格式

我们知道了CAD设置多行文字格式的方式,那么在程序中设置多行文字格式就很简单了。比如说,我们需要让CAD多行文字统一显示为某个颜色,那么我们就应该去掉多行文字内容中所有诸如“\Cxxxx;”之类的格式代码,然后再设置多行文字对象的颜色。
这里额外说一句,千万不要简单的直接设置AcDbMText实体颜色,刚刚我们说过了,对里面单独设置的文字格式,这样设置不起作用
以下Demo代码可以统一修改一个多行文字实体所有字符的颜色。

//删掉多行文本中表征颜色的格式代码
void RemoveMTextColorField(AcDbMText* pMText)
{
	if (!pMText)
		return;

	TCHAR* psz = pMText->contents();
	CString sMText = psz;
	delete psz;

	if (sMText.GetLength() < 5)
		return;

	for (int iBegin = 0; iBegin < sMText.GetLength() - 1; iBegin++)
	{
		//CAD多行文字每个文字都可以拥有格式代码,需要删掉表征颜色的格式代码
		if (_T('\\') == sMText[iBegin])
		{
			if (_T('c') == tolower(sMText[iBegin + 1])) //这是表征颜色的格式代码
			{
				int iEnd;
				for (iEnd = iBegin + 2; iEnd < sMText.GetLength(); iEnd++)
					if (_T(';') == sMText[iEnd])
						break;

				if (iEnd < sMText.GetLength())
				{
					sMText.Delete(iBegin, iEnd + 1 - iBegin);
					iBegin--;
				}
				else
					break;
			}
			else		//排除多行文字字符'\'或者其他以\开头的格式代码
				iBegin++;
		}
	}
	
	pMText->setContents(sMText);
}

void CmdChangeMTextColor(void)
{
	Acad::ErrorStatus es;
	ads_name ename;
	ads_point pt;
	if (acedEntSel(_T("\nSelect a MText: "), ename, pt) != RTNORM) return;
	AcDbObjectId id = AcDbObjectId::kNull;
	acdbGetObjectId(id, ename);
	if (id == AcDbObjectId::kNull) return;
	AcDbObjectPointer<AcDbMText> pObj(id, AcDb::kForWrite);
	if ((es = pObj.openStatus()) != Acad::eOk)
	{
		if (es == Acad::eNotThatKindOfClass)
		{
			acutPrintf(_T("\nSelect a MText."));
		}
		else {
			acutPrintf(_T("\nError when opening the entity."));
		}
		return;
	}

	int iInput;
	if (RTNORM == acedGetInt(_T("\n请输入颜色索引号:"), &iInput))
	{
		AcDbMText *pMText = AcDbMText::cast(pObj.object());
		RemoveMTextColorField(pMText);
		pMText->setColorIndex(iInput);
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/187107.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java ssm学校二手服饰交易系统服装商城的卖家

目 录 Abstract 1 第一章 绪论 2 1.1课题背景 2 1.2课题研究的目的和意义 3 1.3论文所做的主要工作 3 第二章 技术介绍 4 2.1 B/S架构 4 2.2 MySQL 介绍 4 2.3 JSP技术介绍 4 第三章 系统分析与设计 6 3.1 可行性分析 6 3.2系统说明 6 3.…

Hexo 添加 Github 贡献图

参考&#xff1a;https://akilar.top/posts/1f9c68c9/ 安装 hexo-filter-gitcalendar 插件 执行命令安装 hexo-filter-gitcalendar 插件 npm install hexo-filter-gitcalendar --save在站点配置文件 _config.yml 或者主题配置文件如 _config.butterfly.yml 中添加 # hexo-filte…

jmeter录制脚本及报错:Could not create script recorder解决办法

本文分两部分&#xff1a;一、录制脚本最简单步骤&#xff1b;二、报错解决步骤 一、录制脚本步骤 1、右击【测试计划】添加一个线程组&#xff08;用于存放录制的脚本&#xff09;&#xff1b; 2、右击测试计划添加一个HTTP代理服务器&#xff08;添加--非测试元件--HTTP代理…

(mysql的相关操作)和(Navicat与MySQL的连接使用)

mysql的相关操作 详细教程 链接1: http://edu.jb51.net/mysql/mysql-tutorial.html 链接2: http://c.biancheng.net/view/2441.html mysql安装教程&#xff1a;https://blog.csdn.net/weixin_36369605/article/details/113599400?ops_request_misc%257B%2522request%255Fid%…

ABAP CDS-介绍(ABAP CDS视图)

目录前言架构概述CDS版本SAP平台CDS的可用性CDS其他的好处后续参考前言文章翻译自Tushar Sharma的文章&#xff0c;转载请注明原作者和译者&#xff01;在SAP发展到SAP HANA版本之后&#xff0c;SAP内部的技术正在快速地变化&#xff0c;SAP开发业务应用程序的方式已经发生了范…

CUDA编程笔记(8)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言原子函数完全在GPU中归约性能比较总结前言 原子函数的合理使用 原子函数 在cuda里&#xff0c;一个线程的原子操作可以在不受其他线程的任何操作的影响下完成对…

快!用Vim

文章目录简介基操移动删改查搜索替换多文件操作text object赋值粘贴macro补全配色自定义配置映射插件常用插件gopython浏览补全格式化gitTmuxneovim简介 在 Linux 平台使用 Vim 编辑器&#xff0c;成为NB Vimer安装 vim 就不介绍了 基操 三种模式 inserta: append i: inser…

ESP-C3入门6. 使用UART串口

ESP-C3入门6. 使用UART串口一、简介二、UART使用的一般步骤三、使用的API1. uart_config_t结构体和设置参数函数uart_param_config()2. 专用函数设置参数3. 设置通信管脚uart_set_pin()4. 安装驱动程序uart_driver_install()5. 运行UART通信 uart_write_bytes()和uart_read_byt…

Spring Batch 批处理-执行上下文

引言 接着上篇&#xff1a;Spring Batch 批处理-作业监听器&#xff0c;了解作业监听器后&#xff0c;本篇就来了解一下Spring Batch执行上下文&#xff0c;来看看Spring Batch 如何在作业与步骤间进行数据共享。 作业与步骤上下文 语文中有个词叫上下文&#xff0c;比如&am…

设置mysql远程链接

一、 进入mysql数据库 mysql -uroot –p密码 二、 创建用户进行远程链接 Mysql>grant all privileges on *.* to duan%identified by 111111 with grant option; ‘duan’:用户名 ‘%’&#xff1a;表示所有主机都可以登录&#xff0c;如果‘ip’表示该主机可…

[GXYCTF2019]luck_guy1题解

无论风暴把我带到什么样的岸边&#xff0c;我都将以主人的身份上岸。 ——贺拉斯 目录 1.查壳 2.静态分析 分析信息 猜测 3.wp 1.查壳 x86-64 拖入64位IDA 2.静态分析 找到main函数&#xff0c;按下F5反编译 int __cdecl main(int argc, const char **argv, const cha…

Python Windows Apache部署Django项目运行环境

目录 一、安装Apache服务器 1、在官网http://httpd.apache.org/download.cgi或网上搜索下载zip压缩包 2、Apache相关配置 3、创建Apache服务器 解决报错AH00369: Failed to open the Windows service manager, perhaps you forgot to log in as Adminstrator? 4、启动ap…

【每周Java技术】2023.01.26 周四 到 01.29 周日

文章目录一、01.26 周四 大年初五1.1&#xff09;Python的一道算法题目1.1.1) 题目1.1.2) 解答1.1.3) 知识点一、01.26 周四 大年初五 1.1&#xff09;Python的一道算法题目 1.1.1) 题目 2437. 有效时间的数目 给你一个长度为 5 的字符串 time &#xff0c;表示一个电子时钟…

产线工控设备安全经验分享

工控设备安全现状 工业控制系统是支撑国民经济的重要设施&#xff0c;是工业领域的神经中枢。现在工业控制系统已经广泛应用于电力、通信、化工、交通、航天等工业领域&#xff0c;支撑起国计民生的关键基础设施。 随着传统的工业转型&#xff0c;数字化、网络化和智能化的工…

机器学习算法竞赛实战--3,数据探索

数据挖掘是竞赛的核心模块之一&#xff0c;贯彻竞赛始终也是很多竞赛胜利的关键那么数据探索又是什么呢&#xff1f;可以解决哪些问题&#xff1f;首先应该明确3点&#xff0c;即如何确保自己准备好竞赛使用的算法模型如何为数据集选择最合适的算法如何定义可用于算法模型的特征…

安装DevStack稳定版本zed

STEP1: 创建stack用户(一定要&#xff01;) sudo useradd -s /bin/bash -d /opt/stack -m stack sudo chmod x /opt/stack echo "stack ALL(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack sudo -u stack -i //用stack用户登陆 STEP2: git clone devsta…

SAP中物料价格改变导致的库存价值变动业务分析

基于审计的需求要看看物料在标准成本价格变更前后的库存成本变化情况。找了下资料&#xff0c;需要用到 CKMPCSEARCH这个事务&#xff0c;相当于是一个用于价格修改凭证查询的事务。但试了一下在本公司的系统中并没有从搜索到其菜单位置。 尝试直接输入Tcode后&#xff0c;是可…

CSRF 伪造跨域请求

文章目录一、什么是伪造跨域请求二、攻击方式三、防御措施1、检查Referer字段2、添加校验token一、什么是伪造跨域请求 伪造跨域请求&#xff08;英语&#xff1a;Cross-site request forgery&#xff09;&#xff0c;通常缩写为 CSRF&#xff0c; 是一种挟制用户在当前已登录…

IntelliJ IDEA 2021.2(Community Edition)安装阿里编码规约插件,亲测有效

1.背景阿里巴巴java开发手册不断完善并出了很多版本到目前2023年1月截止&#xff0c;已经出了黄山版&#xff0c;在文章最后有参考资料可根据需要下载&#xff1b;随着企业对项目质量的要求&#xff0c;对开发代码也有了更高的要求和规范&#xff0c;借助阿里巴巴编码规约插件&…

redis geo 没有迁移手工插入数据

1、docker ps |grep redis2、docker exec -it qinghai-sc-xining-redis-single/eadd4cc4eefe bin\sh --进入redis容器[rootlocalhost ~]# [rootlocalhost ~]# [rootlocalhost ~]# [rootlocalhost ~]# docker ps|grep rediseadd4cc4eefe redis "docker-entrypoint.s…"…