objectArx --- 实体类AcDbEntity方法

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::kInvisibleAcDb::kvisible
    pEnt->setVisibility(AcDb::kInvisible);返回:Acad::ErrorStatus,传入AcDb::kInvisibleAcDb::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">-&gt;</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">-&gt;</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.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">-&gt;</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">&gt;</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">&lt;</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">-&gt;</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">-&gt;</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.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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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.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">-&gt;</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">-&gt;</span><span class="token function">rbChain</span><span class="token punctuation">(</span><span class="token operator">&amp;</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">-&gt;</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">-&gt;</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">-&gt;</span>resval<span class="token punctuation">.</span>rint<span class="token punctuation">)</span><span class="token punctuation">;</span>	
    
    			pXrecord<span class="token operator">-&gt;</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">-&gt;</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">-&gt;</span><span class="token function">rbChain</span><span class="token punctuation">(</span><span class="token operator">&amp;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&gt;</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">-&gt;</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编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

    1. 全新的界面设计 ,将会带来全新的写作体验;
    2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
    3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
    4. 全新的 KaTeX数学公式 语法;
    5. 增加了支持甘特图的mermaid语法1 功能;
    6. 增加了 多屏幕编辑 Markdown文章功能;
    7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
    8. 增加了 检查列表 功能。

    功能快捷键

    撤销: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.

    图片: Alt

    带尺寸的图片: Alt

    居中的图片: Alt

    居中并且带尺寸的图片: Alt

    当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

    如何插入一段漂亮的代码片

    博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

    // An highlighted block
    var foo = 'bar';
    

    生成一个适合你的列表

    • 项目
      • 项目
        • 项目
    1. 项目1
    2. 项目2
    3. 项目3
    • 计划任务
    • 完成任务

    创建一个表格

    一个简单的表格是这么创建的:

    项目Value
    电脑$1600
    手机$12
    导管$1

    设定内容居中、居左、居右

    使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列第二列第三列
    第一列文本居中第二列文本居右第三列文本居左

    SmartyPants

    SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

    TYPEASCIIHTML
    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)=(n1)!nN 是通过欧拉积分

    Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

    你可以找到更多关于的信息 LaTeX 数学表达式here.

    新的甘特图功能,丰富你的文章

    Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
    • 关于 甘特图 语法,参考 这儿,

    UML 图表

    可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

    张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

    这将产生一个流程图。:

    链接
    长方形
    圆角长方形
    菱形
    • 关于 Mermaid 语法,参考 这儿,

    FLowchart流程图

    我们依旧会支持flowchart的流程图:

    Created with Raphaël 2.3.0 开始 我的操作 确认? 结束 yes no
    • 关于 Flowchart流程图 语法,参考 这儿.

    导出与导入

    导出

    如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

    导入

    如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
    继续你的创作。


    1. mermaid语法说明 ↩︎

    2. 注脚的解释 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值