zoukankan      html  css  js  c++  java
  • ObjectARX开发教程(转)——第2课:AutoCAD数据库

    第2课:AutoCAD数据库
    介绍

    AutoCAD数据库的结构
    每个AutoCAD图形代表一个存储在几种对象中的数据库结构。打开工程图时,AutoCAD会自己创建一个有组织的高效数据库。该数据库包含用于创建基本工程图的最少数据。

    最少的数据量由诸如图层,线型,文本样式等对象表示。这样,您将获得第0层,标准字体,连续样式等。
    在AutoCAD 2000版中,您可以与MDI环境同时使用多个图形。此功能提供了极大的灵活性,但在处理多个图纸时也有些麻烦。在本课程中,我们将不讨论MDI方面,但是ObjectARX应用程序可能会要求它。
    数据如何存储
    数据库维护需要绘图的每种对象。这些对象存储在容器(容器)中,这些容器是为管理相同类型的对象而创建的特殊对象。这样,我们就可以使用适当的存储方法和过程来存储实体,类,版式等。

    存储在数据库中的每个对象都接收一个称为ObjectId的标识符。该标识符在同一AutoCAD会话中是唯一的,并且在每个对象的整个生命周期内有效。 ObjectId由其数据库生成,因此您不必关心它是如何创建的。

    在ObjectARX内部,我们有3种基本类型的对象:
    实体:图形对象(直线,圆弧,文本等);
    容器(隔间):用于存储和管理对象集(图层表,轮廓表等)的特殊对象;
    对象集:非图形对象(组,布局等)。
    创建对象
    要使用ObjectARX创建对象,我们有一些基于对象类型和要存储对象的公式(大多数情况下,我们需要将对象存储在自己的隔间中)。基本上,您将执行以下操作:
    将指针包含在要创建的对象中,并将其称为new运算符;
    使用此指针,调用对象的适当方法以更改其属性;
    获取指向您要在其中创建对象的数据库的指针(通常是当前数据库);
    打开一个存储数据的容器;
    通过其指针精确调用对象存储方法;
    获取对象的标识符(ObjectId)(由容器自动生成);
    完成所有对象集(包括隔离专区和刚刚创建的对象)的关闭过程。
    显然,您可以巧妙地创建一些使流程自动化的对象(类),因为它们是统一的且易于重用。主要思想是创建一种数据库实用程序函数,例如:Addlayer,AddLine,AddTextStyle等。

    *重要的是不要忘记关闭对象集,因为这将导致AutoCAD立即停止工作。
    创建线段(AcDbLine)的简单示例
    以下代码显示了如何在2点之间创建一条线。在这个简单的过程中,代码不会捕获错误,但是主要目的是使您熟悉这些概念。它需要嵌入到ObjectARX应用程序的结构中才能工作。稍微注意打开和关闭订单。
    //首先,我们必须声明一对点
    AcGePoint3d startPt(1.0,1.0,0.0);
    AcGePoint3d endPt(10.0,10.0,0.0);
    //现在我们将初始化一个AcDbLine指针
    //在这种情况下,构造函数允许2点
    AcDbLine * pLine =新的AcDbLine(startPt,endPt);
    //我们将在BlockTable中打开相应的隔离专区
    AcDbBlockTable * pBlockTable = NULL;
    //首先,获取当前数据库,然后获取BlockTable
    AcDbDatabase * pDB = acdbHostApplicationServices()-> workingDatabase();
    pDB-> getSymbolTable(pBlockTable,AcDb :: kForRead);
    //在BlockTable中,打开ModelSpace
    AcDbBlockTableRecord * pBlockTableRecord = NULL;
    pBlockTable-> getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb :: kForWrite);
    //在拥有ModelSpace之后,我们可以关闭BlockTable
    pBlockTable-> close();
    //使用ModelSpace光标,我们可以添加新行
    AcDbObjectId lineId = AcDbObjectId :: kNull;
    pBlockTableRecord-> appendAcDbEntity(lineId,pLine);
    //要完成此过程,请关闭ModelSpace和创建的实体
    pBlockTableRecord-> close();
    pLine-> close();

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 Torry的困惑(提高型)
    Java实现 蓝桥杯VIP 算法提高 Torry的困惑(提高型)
    Java实现 蓝桥杯VIP 算法提高 Torry的困惑(提高型)
    Java实现 蓝桥杯VIP 算法提高 计算时间
    关于编译器和链接器的一个实验
    Windows下获取逻辑cpu数量和cpu核数量(用GetLogicalProcessorInformation,从XP3才开始有的API)
    计算机底层数据的处理方式(汇编后将所有数据都转化为补码二进制数据,所有类型信息都会消失)
    值得推荐的C/C++框架和库
    Delphi子类调用祖父类的虚函数
    [Framework Design Guideline]
  • 原文地址:https://www.cnblogs.com/ztcad/p/14113873.html
Copyright © 2011-2022 走看看