objectArx — 实体类AcDbEntity方法
目录
一、实体类
1.1 继承关系
- 关系表
1.2 实体智能指针
- 功能:不必开发者手动关闭指针
- 获取实体对象id
// ads选择实体 ads_name en; ads_point pt; if (acedEntSel(NULL, en, pt) != RTNORM) return; // 打开实体ads名获得对象id,并包含容错函数 AcDbObjectId id; if (acdbGetObjectId(id, en) != Acad::eOk) return;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 创建实体智能指针对象
- 类构造函数法
AcDbEntityPointer pEnt(id, AcDb::kForWrite); if (pEnt.openStatus() != Acad::eOk) return;
- 1
- 2
- 类公共方法
AcDbEntityPointer pEnt; if (pEnt.open(id, AcDb::kForWrite) != Acad::eOk) return;
- 1
- 2
- 类构造函数法
二、AcDbEntity类方法
2.1 概述
- 以下方法均以1.2节
智能指针为基础
- AcDbEntity类方法官方合集: 点此处传送门
锁定:以下方法,锁定状态不可修改,故均要判断实体或图层是否锁定,并要跳过锁定,否则CAD直接崩溃
- 实体对象创建
- 默认调用:
pEnt->setDatabaseDefaults();
,可传参AcDbDatabase*
对象,未传则用当前数据库 - 设置内容:
- 颜色:Color
- 图层:Layer
- 线型:Linetype
- 线型比例:Linetype scale
- 可见性:Visibility
- 打印样式:Plot style name
- 线宽:Line weight
- 默认调用:
2.2 颜色方法
- 常用汇总
用法 释义 pEnt->colorIndex(); 返回实体颜色索引值:int类型 ,0随块,256随层,值在0~256间 pEnt->color(); 返回实体颜色对象:AcCmColor对象 pEnt->setColorIndex(intColor); 设置实体颜色索引:retColor为颜色索引值int类型 pEnt->setColor(color); 设置实体颜色:color为AcCmColor对象 - 以对话框形式
int retColor; // 函数返回值为:Acad::ErrorStatus // 参数:接收颜色索引值、是否允许随层或随块颜色索引值、当前颜色索引值 if (acedSetColorDialog(retColor, true, pEnt->colorIndex())) // 以颜色索引值设置实体颜色 pEnt->setColorIndex(retColor);
- 1
- 2
- 3
- 4
- 5
- 6
- 颜色对象方式
AcCmColor color; // 索引值: color.setColorIndex(7); // RGB法:如下 color.setRGB(123, 124, 250); // 以颜色对象设置实体颜色 pEnt->setColor(color);
- 1
- 2
- 3
- 4
- 5
- 6
颜色对象AcCmColor 方法:
- 判断:随块
color.isByBlock();
或随层color.isByLayer();
或未设置col.isByACI();
- 设置:
color.setRGB(123, 124, 250);
或color.setColorIndex(7);
- 返回值为int:
col.red();
或col.green();
或col.blue();
2.3 线型
2.3.1 线型种类
- 常用汇总
用法 释义 pEnt->linetype(lineTypeName); 传入AcString 类型字符串(可直接打印),返回Acad::ErrorStatus pEnt->linetype(); 上一个的重载函数,无传入值,返回ACHAR * pEnt->linetypeId(); 返回线型表记录对象id,AcDbObjectId 类型 pEnt->setLinetype(value); 1、以线型名称(AcString )设置实体线型,需要加载线型( 格式->线型...
),否则线型不变
2、以线性表记录对象id(AcDbObjectId )设置实体线型
- 获取实体线型表记录名
- 记录名称查询
AcString lineTypeName; if (pEnt->linetype(lineTypeName) != Acad::eOk) return; acutPrintf(_T("\n当前实体对象线型为:%s"), lineTypeName);
- 1
- 2
- 3
- 记录对象id查询
AcDbObjectId lineTypeId = pEnt->linetypeId();
- 1
- 记录名称查询
- 修改实体线型
- 记录名称修改
// 若未加载DASHED线型,则保持原线型,退出 if((pEnt->setLinetype(_T("DASHED"))) != Acad::eOk) return; acutPrintf(_T("\n当前实体对象线型为:%s"), pEnt->linetype());
- 1
- 2
- 3
- 记录对象id修改
pEnt->setLinetype(lineTypeId);
- 1
- 记录名称修改
2.3.2 线型比例
- 基本概念
- 全局比例:修改后,全部实体对象比例均变动
- 对象缩放比例:修改后,当前选中的对象及之后创建的对象比例均变动
- 对象实际线型缩放比例:全局比例 乘以 对象缩放比例
- 比例图示
对象缩放比例修改后:当前选中的对象 、 之后创建的对象均受影响
- 线型效果图
线实际放大比例:为全局比例 乘以 缩放比例
- 获取全局比例
double globalScale = acdbHostApplicationServices()->workingDatabase()->ltscale();
- 1
- 获取对象缩放比例
double entScale = pEnt->linetypeScale();
- 1
- 设置对象缩放比例
// 参数: // 返回:Acad::ErrorStatus,正常Acad::eOk pEnt->setLinetypeScale(2, true);
- 1
- 2
- 3
2.4 实体可见性
- 常用汇总
用法 释义 pEnt->visibility(); 返回: AcDb::kInvisible
或AcDb::kvisible
pEnt->setVisibility(AcDb::kInvisible); 返回: Acad::ErrorStatus
,传入AcDb::kInvisible
或AcDb::kvisible
- Commands.h
#include "stdafx.h"
void AddCommands();
void Test();
- 1
- 2
- 3
- 4
- Commands.cpp
#include "stdafx.h" #include "Commands.h" #include "Editor.h" #include "Database.h"
void AddCommands()
{
Editor::AddCommand(L“c-test”, ACRX_CMD_MODAL, Test);
}void Test()
{
ads_name en;
ads_point pt;
// 未选中任何实体,则显示所有隐藏实体
if (acedEntSel(NULL, en, pt) != RTNORM)
{ // 获取当前数据库所有实体id列表
AcDbObjectIdArray arrId = Database::GetAllEntIds();
// 遍历实体id列表,判断可见性,设置可见性
for (int i = 0; i < arrId.length(); i++)
{
AcDbObjectId id = arrId.at(i);
AcDbEntityPointer pEnt(id, AcDb::kForWrite);
if (pEnt->visibility() == AcDb::kInvisible)
pEnt->setVisibility(AcDb::kVisible);
}<span class="token punctuation">}</span> <span class="token comment">// 若选择了实体,则隐藏该实体(此处 非 使层不可见)</span> AcDbObjectId id<span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">acdbGetObjectId</span><span class="token punctuation">(</span>id<span class="token punctuation">,</span> en<span class="token punctuation">)</span> <span class="token operator">!=</span> Acad<span class="token operator">::</span>eOk<span class="token punctuation">)</span> <span class="token keyword">return</span><span class="token punctuation">;</span> AcDbEntityPointer <span class="token function">pEnt</span><span class="token punctuation">(</span>id<span class="token punctuation">,</span> AcDb<span class="token operator">::</span>kForWrite<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>pEnt<span class="token operator">-></span><span class="token function">visibility</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">==</span> AcDb<span class="token operator">::</span>kVisible<span class="token punctuation">)</span> pEnt<span class="token operator">-></span><span class="token function">setVisibility</span><span class="token punctuation">(</span>AcDb<span class="token operator">::</span>kInvisible<span class="token punctuation">)</span><span class="token punctuation">;</span>
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
2.5 实体图层
- 常用方法表
用法 释义 pEnt->layer(layerName); 获得实体所在层 层表记录对象
字符串名称:传入AcString 对象
返回Acad::ErrorStatus
,官方推荐pEnt->layer(); 重载函数:返回: ACHAR *
,官方不推荐pEnt->layerId(); 返回: AcDbLayerTableRecord
层表记录对象id(AcDbObjectId )pEnt->setLayer(_T(“0”)); 设置实体图层:传入图层名称,返回 Acad::ErrorStatus
pEnt->setLayer(newVal); 重载函数:同上,传入层表记录对象id(AcDbObjectId ),返回 Acad::ErrorStatus
- 获取实体图层
AcString layerName; pEnt->layer(layerName); acutPrintf(_T("\n实体图层名为:%s"), layerName);
- 1
- 2
- 3
- 设置实体图层
// 如果没有图层1则return,若实体所在图层为锁定,则崩溃 // 需自行对实体所在层的层表记录做判断过滤 if (pEnt->setLayer(_T("1")) != Acad::eOk) return; acutPrintf(_T("\n实体图层名为:%s"), pEnt->layer());
- 1
- 2
- 3
- 4
- 5
2.6 实体线宽
-
常用方法表
用法 释义 pEnt->lineWeight(); 返回: AcDb::LineWeight
,枚举类见下pEnt->setLineWeight(AcDb::kLnWt100); 返回: Acad::ErrorStatus
,传入AcDb::LineWeight
-
代码示例
// 获取实体线宽 AcDb::LineWeight lineWeight = pEnt->lineWeight(); acutPrintf(_T("\n实体LineWeight值为:%d"), lineWeight);
// 设置实体线宽
if (pEnt->setLineWeight(AcDb::kLnWt100) != Acad::eOk)
return;
acutPrintf(_T(“\n修改后实体LineWeight值为:%d”), pEnt->lineWeight());- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
-
AcDb::LineWeight
enum LineWeight { kLnWt000 = 0, kLnWt005 = 5, kLnWt009 = 9, kLnWt013 = 13, kLnWt015 = 15, kLnWt018 = 18, kLnWt020 = 20, kLnWt025 = 25, kLnWt030 = 30, kLnWt035 = 35, kLnWt040 = 40, kLnWt050 = 50, kLnWt053 = 53, kLnWt060 = 60, kLnWt070 = 70, kLnWt080 = 80, kLnWt090 = 90, kLnWt100 = 100, // 此处为1毫米 kLnWt106 = 106, kLnWt120 = 120, kLnWt140 = 140, kLnWt158 = 158, kLnWt200 = 200, kLnWt211 = 211, kLnWtByLayer = -1, // 随层 kLnWtByBlock = -2, // 随块 kLnWtByLwDefault = -3 }; // 默认
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
三、其他简单操作
3.1 求交点
- Commands.h
#include "stdafx.h"
void AddCommands();
void GetEntInters();- 1
- 2
- 3
- 4
- Commands.h
- Commands.cpp
#include "stdafx.h" #include "Commands.h" #include "Editor.h" #include "Database.h" #include "Circle.h"
void AddCommands()
{ // 点选交点
Editor::AddCommand(L“c-inter”, ACRX_CMD_MODAL, GetEntInters);
}void GetEntInters()
{ // 点选同时获取实体指针pEnt、实体id
AcDbEntity pEnt1, pEnt2;
AcDbObjectId id1, id2;
pEnt1 = Editor::selectEntity(id1, AcDb::kForRead);
pEnt2 = Editor::selectEntity(id2, AcDb::kForRead);<span class="token comment">// pEnt1调用方法返回与pEnt2相交的 点列表 points</span> <span class="token comment">// AcDb::kOnBothOperands: 必须相交才有值</span> <span class="token comment">// AcDb::kExtendBoth: 可以不相交,取延长线</span> AcGePoint3dArray points<span class="token punctuation">;</span> pEnt1<span class="token operator">-></span><span class="token function">intersectWith</span><span class="token punctuation">(</span>pEnt2<span class="token punctuation">,</span> AcDb<span class="token operator">::</span>kOnBothOperands<span class="token punctuation">,</span> points<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 遍历点列表:在每个交点上画圆</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>points<span class="token punctuation">.</span><span class="token function">length</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> points<span class="token punctuation">.</span><span class="token function">length</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> AcGePoint3d pt <span class="token operator">=</span> points<span class="token punctuation">.</span><span class="token function">at</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token class-name">Circle</span><span class="token operator">::</span><span class="token function">Add</span><span class="token punctuation">(</span>pt<span class="token punctuation">,</span> <span class="token number">2.0</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> pEnt1<span class="token operator">-></span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> pEnt2<span class="token operator">-></span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 效果
3.2 炸开实体
- Commands.h
#include "stdafx.h"
void AddCommands();
void MyExplode();- 1
- 2
- 3
- 4
- Commands.h
- Commands.cpp
#include "stdafx.h" #include "Commands.h" #include "Editor.h" #include "Database.h" #include "Circle.h"
void AddCommands()
{ // 炸开实体
Editor::AddCommand(L“c-explode”, ACRX_CMD_MODAL, MyExplode);
}// 炸开实体
void MyExplode()
{ // 获得实体的指针和id
AcDbObjectId id;
AcDbEntity pEnt = Editor::selectEntity(id, AcDb::kForWrite);
// explode方法只接受这个对象
AcDbVoidPtrArray pVoids;
// 将pEnt炸开后方pVoids里
pEnt->explode(pVoids);
for (int i = 0; i < pVoids.length(); i++)
{
// 将列表中每个对象强制类型转换为AcDbEntity
AcDbEntity pEnt = (AcDbEntity *)pVoids.at(i);
Database::PostToModelSpace(pEnt);
}
// 删除原实体
pEnt->erase();
pEnt->close();
}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
3.3 设置高亮
- Commands.h
#include "stdafx.h"
void AddCommands();
void SetEntHighlight();- 1
- 2
- 3
- 4
- Commands.cpp
#include "stdafx.h" #include "Commands.h" #include "Editor.h" #include "Database.h"
void AddCommands()
{ // 设置高亮
Editor::AddCommand(L“c-highlight”, ACRX_CMD_MODAL, SetEntHighlight);
}// 设置高亮
void SetEntHighlight()
{ // 获得实体的指针和id
AcDbObjectId id;
AcDbEntity *pEnt = Editor::selectEntity(id, AcDb::kForWrite);
// 高亮方法highlight
pEnt->highlight();
pEnt->close();
}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 效果
3.4 获取文字范围盒
- 功能:获取单行文字的矩形包围框,即文字范围
- 代码示例
ads_name en; ads_point pt, pt1, pt2; // 屏幕上选择单行文字实体 acedEntSel(NULL, en, pt); // 通过实体名en获得结果缓冲区链表 resbuf * rb = acdbEntGet(en); // 传入链表 返回:pt1即为左下角点,pt2即为右上角点 acedTextBox(rb, pt1, pt2);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
四、实体的扩展字典
- 功能:每个实体都可以设置一个扩展字典,用于存储用户自定义数据,CAD维护但不使用此数据
- 扩展字典:扩展字典以键值对(key-value)形式来保存 扩展字典记录,可有多个键值对
- 扩展字典键key:为字符串,详见setAt函数
- 扩展字典值(value):为扩展字典记录,其中保存结果缓冲区链表(即为数据)
4.1 增扩展字典及记录
- Commands.h
#include "stdafx.h"
void AddCommands();
void test();- 1
- 2
- 3
- 4
- Commands.cpp
#include "stdafx.h" #include "Commands.h" #include "Editor.h" #include "Line.h"
void AddCommands()
{
Editor::AddCommand(L“c-test”, ACRX_CMD_MODAL, test);
}
// 设置实体的扩展字典
void test()
{ // 图中拾取实体,用于添加扩展字典
ads_name en;
ads_point pt;
if (acedEntSel(NULL, en, pt) != RTNORM)
{
return;
}
// 获取拾取实体的对象id
AcDbObjectId id;
acdbGetObjectId(id, en);
AcDbEntity *pEnt = NULL;
// 对象id=》对象指针
if (acdbOpenObject(pEnt, id, AcDb::kForWrite) == Acad::eOk)
{ // 给对象新建扩展字典
pEnt->createExtensionDictionary();
// 对象指针调用方法返回扩展字典 对象id,并关闭对象指针
AcDbObjectId dictId = pEnt->extensionDictionary();
pEnt->close();<span class="token comment">// 备用:扩展字典 对象指针、扩展字典记录 对象指针、扩展字典 对象id、结果缓冲区</span> AcDbDictionary <span class="token operator">*</span>pDict <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span> AcDbXrecord <span class="token operator">*</span>pXrec <span class="token operator">=</span> <span class="token keyword">new</span> AcDbXrecord<span class="token punctuation">;</span> AcDbObjectId xrecordId<span class="token punctuation">;</span> resbuf <span class="token operator">*</span>rb <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span> <span class="token comment">// 获得扩展字典对象指针pDict:返回值、字典 对象id、打开方式</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">acdbOpenObject</span><span class="token punctuation">(</span>pDict<span class="token punctuation">,</span> dictId<span class="token punctuation">,</span> AcDb<span class="token operator">::</span>kForWrite<span class="token punctuation">)</span> <span class="token operator">==</span> Acad<span class="token operator">::</span>eOk<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token comment">// setAt设置 扩展字典中 扩展字典记录:</span> <span class="token comment">// 设置 扩展字典记录名称、</span> <span class="token comment">// 返回 扩展字典记录 对象指针 pXrec、</span> <span class="token comment">// 返回 扩展字典记录 对象id xrecordId(此处没用)</span> pDict<span class="token operator">-></span><span class="token function">setAt</span><span class="token punctuation">(</span><span class="token function">_T</span><span class="token punctuation">(</span><span class="token string">"存量"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> pXrec<span class="token punctuation">,</span> xrecordId<span class="token punctuation">)</span><span class="token punctuation">;</span> rb <span class="token operator">=</span> <span class="token function">acutBuildList</span><span class="token punctuation">(</span>AcDb<span class="token operator">::</span>kDxfText<span class="token punctuation">,</span> <span class="token function">_T</span><span class="token punctuation">(</span><span class="token string">"此处可以做文字备注"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> AcDb<span class="token operator">::</span>kDxfInt32<span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">,</span> RTNONE<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 用获取的扩展字典记录 对象指针 设置 扩展数据</span> pXrec<span class="token operator">-></span><span class="token function">setFromRbChain</span><span class="token punctuation">(</span><span class="token operator">*</span>rb<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 清理工作:表记录对象、结果缓冲区内存,给第二个记录复用</span> pXrec<span class="token operator">-></span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">acutRelRb</span><span class="token punctuation">(</span>rb<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 同样方法设置第二个记录,以下给pXrec、xrecordId、rb重新赋值</span> pXrec <span class="token operator">=</span> <span class="token keyword">new</span> AcDbXrecord<span class="token punctuation">;</span> pDict<span class="token operator">-></span><span class="token function">setAt</span><span class="token punctuation">(</span><span class="token function">_T</span><span class="token punctuation">(</span><span class="token string">"参数"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> pXrec<span class="token punctuation">,</span> xrecordId<span class="token punctuation">)</span><span class="token punctuation">;</span> rb <span class="token operator">=</span> <span class="token function">acutBuildList</span><span class="token punctuation">(</span>AcDb<span class="token operator">::</span>kDxfText<span class="token punctuation">,</span> <span class="token function">_T</span><span class="token punctuation">(</span><span class="token string">"半径及中心"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> AcDb<span class="token operator">::</span>kDxfReal<span class="token punctuation">,</span><span class="token number">23.45</span><span class="token punctuation">,</span> AcDb<span class="token operator">::</span>kDxfXCoord<span class="token punctuation">,</span> pt<span class="token punctuation">,</span> RTNONE<span class="token punctuation">)</span><span class="token punctuation">;</span> pXrec<span class="token operator">-></span><span class="token function">setFromRbChain</span><span class="token punctuation">(</span><span class="token operator">*</span>rb<span class="token punctuation">)</span><span class="token punctuation">;</span> pXrec<span class="token operator">-></span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">acutRelRb</span><span class="token punctuation">(</span>rb<span class="token punctuation">)</span><span class="token punctuation">;</span> pDict<span class="token operator">-></span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span>
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
扩展字典记录修改:没有修改,直接 覆盖结果缓冲区链表即为修改
- 效果
4.2 读取扩展字典
- Commands.h
#include "stdafx.h"
void AddCommands();
void view();- 1
- 2
- 3
- 4
- Commands.h
- Commands.cpp
#include "stdafx.h" #include "Commands.h" #include "Editor.h"
void AddCommands()
{
Editor::AddCommand(L“c-view”, ACRX_CMD_MODAL, view);
}
// 读取实体设置扩展字典、扩展字典记录
void view()
{ // 选取实体并获得字典:以下同上节
ads_name en;
ads_point pt;
if (acedEntSel(NULL, en, pt) != RTNORM)
{
return;
}
AcDbObjectId id;
acdbGetObjectId(id, en);
AcDbEntity *pEnt = NULL;
if (acdbOpenObject(pEnt, id, AcDb::kForRead) == Acad::eOk)
{
AcDbObjectId dictId = pEnt->extensionDictionary();
pEnt->close();
if (dictId.isNull())
{
acutPrintf(_T(“\n此实体不包含扩展记录!”));
return;
}AcDbDictionary <span class="token operator">*</span>pDict <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span> AcDbXrecord <span class="token operator">*</span>pXrecord <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span> resbuf <span class="token operator">*</span>pRb <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span> <span class="token comment">// 后面不要acutRelRb(pTemp);,因为acutRelRb(pRb);已经释放了内存空间</span> resbuf <span class="token operator">*</span>pTemp <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">acdbOpenObject</span><span class="token punctuation">(</span>pDict<span class="token punctuation">,</span> dictId<span class="token punctuation">,</span> AcDb<span class="token operator">::</span>kForRead<span class="token punctuation">)</span> <span class="token operator">==</span> Acad<span class="token operator">::</span>eOk<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token comment">/***********获取第一个扩展字典记录数据***************/</span> <span class="token comment">// 通过字典中 扩展记录名称 获得其对应的 扩展记录对象指针</span> pDict<span class="token operator">-></span><span class="token function">getAt</span><span class="token punctuation">(</span><span class="token function">_T</span><span class="token punctuation">(</span><span class="token string">"存量"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> pXrecord<span class="token punctuation">,</span> AcDb<span class="token operator">::</span>kForRead<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 通过 扩展记录对象指针 获得结果缓冲区链表 </span> pXrecord<span class="token operator">-></span><span class="token function">rbChain</span><span class="token punctuation">(</span><span class="token operator">&</span>pRb<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>pRb <span class="token operator">!=</span> <span class="token constant">NULL</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token comment">// 用pTemp作迭代器,需要保留pRb来最终关闭结果缓冲区链表</span> pTemp <span class="token operator">=</span> pRb<span class="token punctuation">;</span> <span class="token comment">// 以下都是针对刚才设置的结果缓冲区链表依次提取,否则用switch提取</span> <span class="token function">acutPrintf</span><span class="token punctuation">(</span><span class="token function">_T</span><span class="token punctuation">(</span><span class="token string">"\n存量记录存储的备注字符串:%s"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> pTemp<span class="token operator">-></span>resval<span class="token punctuation">.</span>rstring<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 移动迭代器至下一个链表节点</span> pTemp <span class="token operator">=</span> pTemp<span class="token operator">-></span>rbnext<span class="token punctuation">;</span> <span class="token function">acutPrintf</span><span class="token punctuation">(</span><span class="token function">_T</span><span class="token punctuation">(</span><span class="token string">"\n存量记录存储的短整型:%d"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> pTemp<span class="token operator">-></span>resval<span class="token punctuation">.</span>rint<span class="token punctuation">)</span><span class="token punctuation">;</span> pXrecord<span class="token operator">-></span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">acutRelRb</span><span class="token punctuation">(</span>pRb<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">/***********获取第二个扩展字典记录数据***************/</span> pDict<span class="token operator">-></span><span class="token function">getAt</span><span class="token punctuation">(</span><span class="token function">_T</span><span class="token punctuation">(</span><span class="token string">"参数"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> pXrecord<span class="token punctuation">,</span> AcDb<span class="token operator">::</span>kForRead<span class="token punctuation">)</span><span class="token punctuation">;</span> pXrecord<span class="token operator">-></span><span class="token function">rbChain</span><span class="token punctuation">(</span><span class="token operator">&</span>pRb<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>pRb <span class="token operator">!=</span> <span class="token constant">NULL</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> pTemp <span class="token operator">=</span> pRb<span class="token punctuation">;</span> pTemp <span class="token operator">=</span> pTemp<span class="token operator">-></span>rbnext<span class="token punctuation">;</span> <span class="token function">acutPrintf</span><span class="token punctuation">(</span><span class="token function">_T</span><span class="token punctuation">(</span><span class="token string">"\n参数存储的浮点型:%.9f"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> pTemp<span class="token operator">-></span>resval<span class="token punctuation">.</span>rreal<span class="token punctuation">)</span><span class="token punctuation">;</span> pTemp <span class="token operator">=</span> pTemp<span class="token operator">-></span>rbnext<span class="token punctuation">;</span> <span class="token function">acutPrintf</span><span class="token punctuation">(</span><span class="token function">_T</span><span class="token punctuation">(</span><span class="token string">"\n参数存储的点(%.3f %.3f %.3f)"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> pTemp<span class="token operator">-></span>resval<span class="token punctuation">.</span>rpoint<span class="token punctuation">[</span>X<span class="token punctuation">]</span><span class="token punctuation">,</span> pTemp<span class="token operator">-></span>resval<span class="token punctuation">.</span>rpoint<span class="token punctuation">[</span>Y<span class="token punctuation">]</span><span class="token punctuation">,</span> pTemp<span class="token operator">-></span>resval<span class="token punctuation">.</span>rpoint<span class="token punctuation">[</span>Z<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> pXrecord<span class="token operator">-></span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">acutRelRb</span><span class="token punctuation">(</span>pRb<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> pDict<span class="token operator">-></span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span>
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 效果
4.3 删除扩展字典记录
-
Commands.h
#include "stdafx.h"
void AddCommands();
void del();- 1
- 2
- 3
- 4
-
-
Commands.cpp
#include "stdafx.h" #include "Commands.h" #include "Editor.h"
void AddCommands()
{
Editor::AddCommand(L“c-delete”, ACRX_CMD_MODAL, del);
}// 删除扩展字典记录
void del()
{ // 选取实体并获得字典:以下同上两节
ads_name en;
ads_point pt;
if (acedEntSel(NULL, en, pt) != RTNORM)
{
return;
}
// 获取实体对象指针
AcDbObjectId id;
acdbGetObjectId(id, en);
AcDbEntity pEnt = NULL;
if (acdbOpenObject(pEnt, id, AcDb::kForRead) == Acad::eOk)
{ // 获取 实体 扩展字典id,用完关闭实体指针
AcDbObjectId dictId = pEnt->extensionDictionary();
pEnt->close();
if (dictId.isNull())
{
acutPrintf(_T(“\n此实体不包含扩展记录!”));
return;
}
// 通过 字典对象id 获得 字典对象指针 pDict
AcDbDictionary pDict = NULL;
AcDbXrecord *pXrecord = NULL;<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">acdbOpenObject</span><span class="token punctuation">(</span>pDict<span class="token punctuation">,</span> dictId<span class="token punctuation">,</span> AcDb<span class="token operator">::</span>kForRead<span class="token punctuation">)</span> <span class="token operator">==</span> Acad<span class="token operator">::</span>eOk<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> Acad<span class="token operator">::</span>ErrorStatus es <span class="token operator">=</span> pDict<span class="token operator">-></span><span class="token function">getAt</span><span class="token punctuation">(</span><span class="token function">_T</span><span class="token punctuation">(</span><span class="token string">"参数"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> pXrecord<span class="token punctuation">,</span> AcDb<span class="token operator">::</span>kForWrite<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>es<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token function">AfxMessageBox</span><span class="token punctuation">(</span><span class="token function">_T</span><span class="token punctuation">(</span><span class="token string">"记录打开失败"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> pXrecord<span class="token operator">-></span><span class="token function">erase</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> pXrecord<span class="token operator">-></span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> pDict<span class="token operator">-></span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">AfxMessageBox</span><span class="token punctuation">(</span><span class="token function">_T</span><span class="token punctuation">(</span><span class="token string">"已删除"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span>
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
五、获取实体属性
5.1 简查对象属性信息
- 功能:实现CAD的
LIST
命令 - Commands.h
#include "stdafx.h"
void AddCommands();
void GetEntList();- 1
- 2
- 3
- 4
- Commands.cpp
#include "stdafx.h" #include "Commands.h" #include "Editor.h" #include "Database.h"
void AddCommands()
{ // 查询对象属性信息
Editor::AddCommand(L“c-list”, ACRX_CMD_MODAL, GetEntList);
}// 查询对象属性信息
void GetEntList()
{
AcDbObjectId id;
AcDbEntity *pEnt = Editor::selectEntity(id, AcDb::kForRead);
// 跟list命令一样
pEnt->list();
pEnt->close();
}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 效果
5.2 详查对象属性信息
-
功能:获取一个实体的所有属性
-
Commands.h
#include "stdafx.h"
void AddCommands();
void Test();- 1
- 2
- 3
- 4
-
-
Commands.cpp
#include "stdafx.h" #include "Commands.h" #include "Editor.h" // AcRxMember 类的头文件 #include "rxmember.h" // AcRxProperty 类的头文件 #include "rxprop.h" // AcRxValue 类的头文件 #include "rxvalue.h"
void AddCommands()
{
Editor::AddCommand(L“c-test”, ACRX_CMD_MODAL, Test);
}void Test()
{ // 选择实体
ads_name en;
ads_point pt;
if (acedEntSel(_T(“\n选择要打印实体属性的对象:”),en, pt) != RTNORM)
{
return;
}
// 获得对象id:通过实体名ads_name
AcDbObjectId id;
if (acdbGetObjectId(id, en) != Acad::eOk) return;
// 智能指针基类AcDbObjectPointerBase,下面为派生类
// 使用智能指针对象的构造函数:自动释放指针,传入对象id,功能类似于acdbOpenObject
AcDbEntityPointer ent(id, AcDb::kForRead);
// 智能指针基类的函数openStatus,用于判断对象打开是否成功
if (ent.openStatus() != Acad::eOk) return;<span class="token comment">// 函数theEngine:返回AcRxMemberQueryEngine对象指针,</span> <span class="token comment">// 设计模式中的单例模式(框架创建对象,且生命周期只有一个此对象)</span> <span class="token comment">// 函数newMemberIterator:返回可以 遍历 实体成员(属性项)的 迭代器pItr, 传入实体指针ent</span> AcRxMemberIterator <span class="token operator">*</span>pItr <span class="token operator">=</span> <span class="token class-name">AcRxMemberQueryEngine</span><span class="token operator">::</span><span class="token function">theEngine</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token function">newMemberIterator</span><span class="token punctuation">(</span>ent<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 打印格式:30个字节左对齐(-30s),属性名称、值类型、属性值</span> <span class="token function">acutPrintf</span><span class="token punctuation">(</span><span class="token function">_T</span><span class="token punctuation">(</span><span class="token string">"\n%-30s\t%-35s\t%s"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token function">_T</span><span class="token punctuation">(</span><span class="token string">"Name"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token function">_T</span><span class="token punctuation">(</span><span class="token string">"Type"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token function">_T</span><span class="token punctuation">(</span><span class="token string">"Value"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 用于存储 下面循环获得的 指向 属性对象(实体对象的) 的 指针</span> AcRxProperty <span class="token operator">*</span>prop<span class="token punctuation">;</span> <span class="token comment">// 迭代器pItr有初始值,这里省略</span> <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token punctuation">;</span> <span class="token operator">!</span>pItr<span class="token operator">-></span><span class="token function">done</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>pItr<span class="token operator">-></span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token comment">// 迭代器对象的current方法:返回AcRxMember对象指针</span> <span class="token comment">// AcRxProperty类是 AcRxMember类的派生类,所以可以强制类型转换</span> prop <span class="token operator">=</span> <span class="token class-name">AcRxProperty</span><span class="token operator">::</span><span class="token function">cast</span><span class="token punctuation">(</span>pItr<span class="token operator">-></span><span class="token function">current</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>prop <span class="token operator">!=</span> <span class="token constant">NULL</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token comment">// 给err赋初值</span> Acad<span class="token operator">::</span>ErrorStatus err <span class="token operator">=</span> Acad<span class="token operator">::</span>eOk<span class="token punctuation">;</span> <span class="token comment">// 属性值对象:还有empty、isEmpty、varies、isVaries、type、toString方法</span> AcRxValue value<span class="token punctuation">;</span> <span class="token comment">// AcRxProperty类的获取 属性对象AcRxValue 的值的方法</span> <span class="token comment">// 还有setValue方法,查文档学习</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>err <span class="token operator">=</span> prop<span class="token operator">-></span><span class="token function">getValue</span><span class="token punctuation">(</span>ent<span class="token punctuation">,</span> value<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">==</span> Acad<span class="token operator">::</span>eOk<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> ACHAR <span class="token operator">*</span>szValue <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span> <span class="token comment">// AcRxValue方法toString:返回value值字符串长度,</span> <span class="token comment">// 传入用于接收字符串的指针(可为null)、传入字符串长度(可为0)</span> <span class="token comment">// 此处调用toString方法仅为了知道字符串长度</span> <span class="token keyword">int</span> valuesize <span class="token operator">=</span> value<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token constant">NULL</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>valuesize <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token comment">// 字符串加一:包含尾部的\0</span> valuesize<span class="token operator">++</span><span class="token punctuation">;</span> <span class="token comment">// 开辟 接收 字符串对象 的内存空间</span> szValue <span class="token operator">=</span> <span class="token keyword">new</span> ACHAR<span class="token punctuation">[</span>valuesize<span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token comment">// 重新调用toString方法,给szValue赋值</span> value<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>szValue<span class="token punctuation">,</span> valuesize<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// 输出结果:AcRxProperty方法name(属性名)、</span> <span class="token comment">// AcRxValue方法type(属性类型)、</span> <span class="token comment">// AcRxValue方法toString(属性值)</span> <span class="token function">acutPrintf</span><span class="token punctuation">(</span><span class="token function">_T</span><span class="token punctuation">(</span><span class="token string">"\n%-30s\t%-35s\t%s"</span><span class="token punctuation">)</span><span class="token punctuation">,</span>prop<span class="token operator">-></span><span class="token function">name</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> value<span class="token punctuation">.</span><span class="token function">type</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">name</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span>szValue <span class="token operator">==</span> <span class="token constant">NULL</span><span class="token punctuation">)</span> <span class="token operator">?</span> <span class="token function">_T</span><span class="token punctuation">(</span><span class="token string">"none"</span><span class="token punctuation">)</span> <span class="token operator">:</span> szValue<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 如果字符串指针szValue有值:delete释放掉内存空间</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>szValue<span class="token punctuation">)</span> <span class="token keyword">delete</span> szValue<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span>
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
-
效果(此处点选了一个矩形)
选择要打印实体属性的对象: Name Type Value Area double 71.106116 BlockId AcDbObjectId 1f62bd281f0 CastShadows bool 0 ClassName AcString none Closed bool 1 CollisionType AcDb::CollisionType 1 Color AcCmColor BYLAYER ConstantWidth double 0.000000 Elevation double 0.000000 EndParam double 4.000000 ExtensionDictionary AcDbObjectId 0 Handle AcDbHandle 21a HasBulges bool 0 HasFields bool 0 HasSaveVersionOverride bool 0 HasWidth bool 0 IsA AcRxClass* AcDbPolyline IsAProxy bool 0 IsCancelling bool 0 IsEraseStatusToggled bool 0 IsErased bool 0 IsModified bool 0 IsModifiedGraphics bool 0 IsModifiedXData bool 0 IsNewObject bool 0 IsNotifyEnabled bool 0 IsNotifying bool 0 IsObjectIdsInFlux bool 0 IsOnlyLines bool 1 IsPeriodic bool 1 IsPersistent bool 1 IsPlanar bool 1 IsReadEnabled bool 1 IsReallyClosing bool 1 IsTransactionResident bool 0 IsUndoing bool 0 IsWriteEnabled bool 0 LayerId AcDbObjectId 1f62bd28100 Length double 35.923246 LineWeight AcDb::LineWeight -1 LinetypeId AcDbObjectId 1f62bd28150 LinetypeScale double 1.000000 LocalizedName AcString 多段线 MaterialId AcDbObjectId 1f62bd285e0 MergeStyle AcDb::DuplicateRecordCloning 1 Normal AcGeVector3d 0.000000 0.000000 1.000000 ObjectId AcDbObjectId 1f62bd2c520 OwnerId AcDbObjectId 1f62bd281f0 Plinegen bool 0 PlotStyleName AcString ByColor ReceiveShadows bool 0 StartParam double 0.000000 Thickness double 0.000000 Transparency AcCmTransparency 0 Visible AcDb::Visibility 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
-
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的
代码片
.// An highlighted block var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 Value 电脑 $1600 手机 $12 导管 $1 设定内容居中、居左、居右
使用
:---------:
居中
使用:----------
居左
使用----------:
居右第一列 第二列 第三列 第一列文本居中 第二列文本居右 第三列文本居左 SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE ASCII HTML Single backticks 'Isn't this fun?'
‘Isn’t this fun?’ Quotes "Isn't this fun?"
“Isn’t this fun?” Dashes -- is en-dash, --- is em-dash
– is en-dash, — is em-dash 创建一个自定义列表
-
Markdown
- Text-to- HTML conversion tool Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎