autocad形源代码_在开放源代码库中使用AutoCAD文件格式

许多开发人员和地理信息系统(GIS)专业人员无法使用图形交换格式(DXF)或“图形”(DWG)文件。 这些AutoCAD格式通常要求您具有Windows®和AutoCAD副本才能打开它们。 使用一些方便的开源库,您可以使您的应用程序能够免费读取任何操作系统上的DXF和DWG文件。 在本文中,您将构建一个转换器,将这些文件格式转换为更开放的ESRI shapefile或锁Kong标记语言(KML...
摘要由CSDN通过智能技术生成

autocad形源代码

许多开发人员和地理信息系统(GIS)专业人员无法使用图形交换格式(DXF)或“图形”(DWG)文件。 这些AutoCAD格式通常要求您具有Windows®和AutoCAD副本才能打开它们。 使用一些方便的开源库,您可以使您的应用程序能够免费读取任何操作系统上的DXF和DWG文件。 在本文中,您将构建一个转换器,将这些文件格式转换为更开放的ESRI shapefile或锁Kong标记语言(KML)格式。 商业和开源软件使用ESRI Shapefile,而Google Earth和Google Maps主要使用KML。

AutoCAD DWG和LibreDWG

最常见的AutoCAD格式是“绘图”格式,文件扩展名以.dwg结尾。 很少有软件应用程序可以读取此格式,这是在AutoCAD中保存文件时的默认格式。 但是,您可以使用开源库LibreDWG(参见相关主题 )来读取这些文件。 文件格式由一个控制块组成,该控制块包含表示文件中形状的其他块,以及用于模型空间和图纸空间的块,这些模型空间和图纸空间表示文档中坐标的偏移量。

您可以通过打开文档并读取文件来使用库,然后遍历主控制块中的每个块,如清单1所示。

清单1.打开一个DWG文件并遍历主控制块
Dwg_Data dwg = new Dwg_Data();
int errno = dwg_read_file((char *)inputFilename, dwg);
if (errno) {
  fprintf(stderr, "Could not open DWG. Returned error code: $d\n", errno);
  delete dwg;
}

Dwg_Object_BLOCK_CONTROL * ctrl = dwg->object[0].tio.object->tio.BLOCK_CONTROL;
dumpBlock(ctrl->model_space);
dumpBlock(ctrl->paper_space);	

for (int i = 0; i < ctrl->num_entries; i++) {
  dumpBlock(ctrl->block_headers[i]);
}	
dwg_free(dwg);

每个块可以代表几种几何类型中的任何一种:直线,圆,弧,锚定到某个位置的文本或插入(将偏移量应用于以后的块)。 您可以通过访问get_first_owned_objectget_next_owned_object返回的块对象的属性依次处理每个对象,如清单2所示

清单2.使用get_first_owned_object和get_next_owned_object读取对象
void InputFormatDWG::dumpBlock(Dwg_Object_Ref * block) {
  if (!block) return;
  if (!block->obj) return;
  if (!block->obj->tio.object) return;

  Dwg_Object_BLOCK_HEADER * header = block->obj->tio.object->tio.BLOCK_HEADER;
  Dwg_Object * obj = get_first_owned_object(block->obj, header);
  while (obj) {
    if (obj->type == DWG_TYPE_LINE) {
      Dwg_Entity_LINE * line = obj->tio.entity->tio.LINE;
      printf("Line starting at (%f, %f, %f) ending at (%f, %f, %f)\n", line->start.x, 
              line->start.y, 0, line->end.x, line->end.y, 0);
      // Don't delete "line" - dwg_free will do this
    }

    obj = get_next_owned_object(block->obj, obj, header);
  }
}

这样,从头到尾使用LibreDWG读取DWG文件是一个顺序流程。 在C++实现LibreDWG时,将dwg.h包含在extern "C"块中非常重要,以避免以后遇到链接器错误。 这是一个例子:

extern "C" {
	#include <dwg.h>
}

该库的先决条件是autoconfswigtexinfopython-dev软件包以及编译器软件包(如果使用Debian或Ubuntu,则为build-essential )。 您可以通过在命令行中输入以下内容来下载来构建库:

git clone git://git.sv.gnu.org/libredwg.git

。 。 。 其次是:

./autogen.sh && ./configure && make && sudo make install

AutoCAD DXF和dxflib

DXF格式是AutoCAD内部的导出选项。 这样,支持DWG的应用程序比支持DWG的应用程序更多,并且文件格式规范已发布( 有关完整DXF规范的链接,请参阅参考资料)。 但是,您可以使用开源dxflib库读取这些文件。 与LibreDWG不同,读取DXF文件的驱动程序由您自己的顺序编码驱动。 实际上,使用dxflib就像编写事件驱动的代码。

您可以通过调用DL_Dxf对象的in函数并将指针传递给从DL_CreationAdapter抽象类继承的类来打开文件。 当in函数运行时,它将在传递给它的类中调用几个函数。 有几十个这样的功能(见DXFLib程序员指南链接相关信息 ),但你只关心在大多数情况下,通常,少数addPointaddLineaddCircleaddVertex 。 您只需要实现您关心的功能即可; 其余的您可以忽略。 清单3显示了一个简单的示例,该示例加载DXF文件并仅读取其中的行。

清单3.加载DXF文件并只读行
LineReader.h:
#ifndef LINEREADER_H
#define LINEREADER_H

#include "dxflib/src/dl_dxf.h"
#include "dxflib/src/dl_creationadapter.h"
#include <stdio.h>

class LineReader: public DL_CreationAdapter {
	public:
		// Our functions:
		void readLines(const char * filename);

		// Overloading from parent DL_CreationAdapter:
		void addLine(const DL_LineData& data);


};
#endif

LineReader.cpp:
void LineReader::readLines(const char * filename) {
  DL_Dxf * getData = new DL_Dxf();
  if (!getData->in(filename, this)) {
    fprintf(stderr, "Could not retrieve data from input file.\n");
    delete getData;
    exit(1);
  } 
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: AutoCAD VBA和VB.net是一种用于AutoCAD软件的开发工具,它们可以帮助用户通过编程来扩展AutoCAD的功能。AutoCAD VBA使用的是Visual Basic for Applications,而VB.net使用的是Visual Basic编程语言。 开发基础方面,对于AutoCAD VBA和VB.net开发,首先需要了解基本的编程概念和语法。需要学习如何定义变量、使用条件和循环语句、处理用户输入和输出等。还需要了解AutoCAD的对象模型,包括图纸、图层、实体等对象以及它们的属性和方法。理解这些基本知识后,可以开始编写简单的程序来实现一些基本的功能。 实例教程方面,有一些网上资源和书籍提供了很多实例教程和源代码。这些教程可以帮助用户学习如何使用AutoCAD VBA和VB.net来解决实际的问题。例如,可以学习如何根据用户输入创建特定类型的实体,如何修改实体的属性,如何自动标注图纸等等。通过这些实例教程,用户可以逐步掌握开发AutoCAD的技巧和技术。 源代码方面,可以在网上搜索一些开源项目或者示例代码,这些代码可以用作学习和实践的参考。通过阅读和理解源代码,可以学习到更多编程技巧和规范。同时,也可以利用这些源代码作为基础,进行修改和扩展,以满足自己的需求。 总之,AutoCAD VBA和VB.net开发基础与实例教程以及源代码可以帮助用户学习如何使用编程语言来扩展AutoCAD的功能。通过学习基础知识、实践例子和参考源代码,用户可以逐步提升自己的编程能力,并且能够应用到实际的工程项目中。 ### 回答2: "AutoCAD VBA和VB.NET开发基础与实例教程"是一本介绍如何使用VBA和VB.NET编程语言AutoCAD软件中进行开发的教程。该书包含了许多实例和源代码,供读者学习和实践。 在该教程中,作者首先介绍了AutoCAD的基本知识,包括AutoCAD的界面、命令和常用工具等。然后,作者详细介绍了VBA和VB.NET编程语言的基础知识,包括变量、数据类型、循环和条件语句等。读者可以通过理解这些基础知识,为后续的开发工作做好准备。 接下来,该教程通过一些实例,展示了如何使用VBA和VB.NET编程语言进行AutoCAD开发。这些实例包括创建和修改图纸、添加和编辑对象、执行命令等。每个实例都提供了详细的源代码和解释,读者可以通过按照教程一步一步地操作,逐渐掌握AutoCAD开发的技巧和方法。 在学习完该教程后,读者将能够独立进行AutoCAD的开发工作,并应用自己的编程知识解决实际问题。同时,该教程也为读者进一步深入学习和扩展AutoCAD开发提供了基础。 总之,“AutoCAD VBA和VB.NET开发基础与实例教程”是一本实用的教程,通过详细的实例和源代码,帮助读者掌握在AutoCAD使用VBA和VB.NET进行开发的基本技能。无论是初学者还是有一定编程基础的读者,都能从中受益。 ### 回答3: Autocad VBA和VB.NET都是用于开发Autocad定制程序的编程语言。它们可以实现自动化绘图、数据处理和图操作等功能。下面是一个基础的Autocad VBA和VB.NET开发教程和源代码示例。 首先,通过以下几个步骤配置Autocad VBA开发环境: 1. 打开Autocad软件。 2. 执行“vbaide”命令,打开VBA集成开发环境。 3. 在VBA集成开发环境中,创建一个新的模块。 4. 在模块中编写代码。 以下是一个简单的Autocad VBA示例,用于在绘图中绘制一条直线: Sub DrawLine() Dim startPoint As Variant Dim endPoint As Variant startPoint = InputBox("Please enter the start point coordinates:") endPoint = InputBox("Please enter the end point coordinates:") ThisDrawing.ModelSpace.AddLine startPoint, endPoint End Sub 上述代码使用了InputBox函数来获取用户输入的起点和终点坐标,并使用AddLine方法在绘图中添加一条直线。 如果你想使用VB.NET来进行Autocad开发,可以使用Autocad.Net API。以下是一个简单的VB.NET示例,用于在绘图中绘制一条直线: Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry Public Class MyCommands <CommandMethod("DrawLine")> Public Sub DrawLine() Dim doc As Document = Application.DocumentManager.MdiActiveDocument Dim db As Database = doc.Database Using trans As Transaction = db.TransactionManager.StartTransaction() Dim bt As BlockTable = trans.GetObject(db.BlockTableId, OpenMode.ForRead) Dim btr As BlockTableRecord = trans.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite) Dim startPoint As New Point3d(0, 0, 0) Dim endPoint As New Point3d(100, 100, 0) Dim line As New Line(startPoint, endPoint) btr.AppendEntity(line) trans.AddNewlyCreatedDBObject(line, True) trans.Commit() End Using End Sub End Class 上述代码使用Autocad.Net API中的相关类和方法来实现在绘图中绘制一条直线的功能。通过定义一个Command方法,并使用CommandMethod特性进行标记,可以在Autocad软件中执行该命令。 以上是一个简单的Autocad VBA和VB.NET开发基础与实例教程的源代码示例。通过学习这些示例,你可以了解如何使用Autocad VBA和VB.NET进行开发,并根据自己的需求进行扩展和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值