使用VC编程实现DXF文件数据提取

合集下载

从VCT到DXF数据格式转换_费中强

从VCT到DXF数据格式转换_费中强

第29卷第8期 2006年8月合肥工业大学学报(自然科学版)J OU RNAL OF H EFEI UN IV ERSIT Y OF TECHNOLO GYVol.29No.8 Aug.2006 收稿日期:2005208210;修改日期:2005210219作者简介:费中强(1977-),男,安徽肥东人,合肥工业大学硕士生;高 飞(1964-),男,安徽滁州人,合肥工业大学教授,硕士生导师;胡小华(1965-),男,安徽宿县人,合肥市国土资源局信息中心教授级高工,合肥工业大学硕士生导师.从VC T 到DXF 数据格式转换费中强1, 高 飞1, 张克旺2, 胡晓华2(1.合肥工业大学土木建筑工程学院,安徽合肥 230009;2.合肥市国土资源局信息中心,安徽合肥 230001)摘 要:文章通过分析VCT 和DXF 格式文件各自的特点,制作一个包含CASS5.1图形库中所有图形的全集DXF 模板文件,并建立VCT 的要素代码和相应图形的DXF 代码的对应,找到了数据格式转换的方法;用高级编程语言编程,分别读取VCT 中的点、线、面、注记及宗地等要素,在DXF 的实体段中写入相应的DXF 代码,以读写文本文件的方式完成格式转换,从而使VCT 文件可以应用在GIS 系统中。

关键词:GIS ;VCT 格式;DXF 格式;DXF 模板文件;建立对应中图分类号:TP391 文献标识码:A 文章编号:100325060(2006)0821008205T ransform from VCT f iles to D XF f ilesFEI Zhong 2qiang 1, GAO Fei 1, ZHAN G Ke 2wang 2, HU Xiao 2hua2(1.School of Civil Engineering ,Hefei University of Technology ,Hefei 230009,China ;2.The Information Center of Hefei Bureau ofLand Resources ,Hefei 230001,China )Abstract :The characteristics of VCT and DXF files are analyzed ,and t hrough making a DXF module file which includes all t he figures in t he CASS5.1figure warehouse and building a relationship be 2tween t he element codes of VCT files and t he DXF codes of corresponding figures ,a way of t ransfor 2ming VCT files to DXF files is found.Advanced comp uter p rogramming language is adopted ,and t he figure element s such as point s ,lines ,surfaces and annotatio ns are read respectively ,and t hen t he corre 2sponding codes are written into DXF entities ,t hus achieving t he t ransform of file format s by reading and writing .t xt files.Then t he VC T files can be applied in t he geograp hical information system(GIS ).K ey w ords :geograp hical information system (GIS );VC T file ;DXF file ;DXF module file ;building of correspondence AutoCAD 软件包是美国AutoD ES K 公司20世纪80年代初开发的,现已成为国际上流行的微机CAD 软件包,在GIS 中的基础地理数据的采集编制工作中起着重要的作用。

提取dxf的最外围范围框

提取dxf的最外围范围框

提取dxf的最外围范围框全文共四篇示例,供读者参考第一篇示例:DXF文件是一种AutoCAD绘图文件的格式,常常会存在需要提取最外围范围框的需求。

这种需求通常出现在需要对文件进行定位、展示或者分析时,提取最外围范围框可以帮助用户更方便地获取文件的整体范围。

今天,我们就来探讨一下如何提取DXF文件的最外围范围框。

我们需要了解DXF文件的结构。

DXF文件是一种文本格式的文件,其包含了CAD绘图的信息,包括图层、线条、圆弧等图形元素。

在DXF文件中,最外围范围框是由文件中所有图形元素的最左下角和最右上角两个点组成的矩形框。

通过提取这两个点的坐标,我们就可以得到文件的最外围范围框。

接下来,我们需要选择一种合适的方法来提取最外围范围框。

一种简单直接的方法是通过编程语言来实现,比如使用Python语言读取DXF文件,解析其中的图形元素并计算出最外围范围框的坐标。

还有一种方法是使用专门的CAD软件,比如AutoCAD或者SolidWorks,这些软件可以直接打开DXF文件并提供相应的功能来获取最外围范围框。

在使用编程语言提取最外围范围框时,我们可以借助开源的库来实现。

比如使用Python的dxfgrabber库可以方便地读取DXF文件并提取其中的图形元素。

接着我们可以利用数学知识来计算出最外围范围框的矩形框,再将其绘制出来或者以其他格式保存。

提取DXF文件的最外围范围框是一项简单但有用的操作。

通过了解DXF文件的结构,选择合适的方法和工具,我们可以方便地提取文件的整体范围,为后续的操作提供便利。

希望本文可以帮助读者更好地理解如何提取DXF文件的最外围范围框,以便在实际工作中更好地应用。

第二篇示例:DXF文件是一种常见的图形文件格式,通常用于存储CAD绘图数据。

在处理DXF文件时,有时我们需要提取文件中的最外围范围框,以便更好地了解文件的整体结构和尺寸。

本文将介绍如何通过使用Python语言和相关库来提取DXF文件的最外围范围框。

读取 DXF 文件

读取 DXF 文件

读取DXF 文件以下是一个简单的Visual Basic 6 程序样例,它读取DXF 文件,并且从给定段的给定对象中提取特定代码和值。

' ReadDXF 从DXF 文件中提取指定的代码/值对。

' 此函数需要四个字符串参数、一个有效的DXF' 文件名、一个DXF 段名、该段中对象的' 名称以及由逗号分隔的代码列表。

'Function ReadDXF( _ByVal dxfFile As String, ByVal strSection As String, _ByVal strObject As String, ByVal strCodeList As String)Dim tmpCode, lastObj As StringOpen dxfFile For Input As #1' 获取第一个代码/值对codes = ReadCodes' 遍历整个文件,直到“EOF”行While codes(1) <> "EOF"' 如果组码为“0”,并且值为“SECTION”,则If codes(0) = "0" And codes(1) = "SECTION" Then' 这必须是一个新的段,以便获取下一个' 代码/值对。

codes = ReadCodes()' 如果此段是要获取的段,则If codes(1) = strSection Then' 获取下一个代码/值对,并codes = ReadCodes' 遍历此段,直到“ENDSEC”While codes(1) <> "ENDSEC"' 在某段中,所有的“0”代码都表示' 对象。

如果找到了“0”代码,则存储' 对象名称,供以后使用。

基于VC++的DXF数据文件接口的研究

基于VC++的DXF数据文件接口的研究
[ D] "N )! G3H 文件的数据格式
G3H 文件本质上由代码及关联值对组成’ 代码( 通常称为组码) 表明其后的值的类型’ 使用这 些组码和值对,可以将 G3H 文件组织到由记录组成的区域中,这些记录由组码和数据项目组成’ 在 G3H 文件中,每个组码和值对都各占一行’ 每个段都以一个后跟字符串 LQE<SX( 的组码 * 开始,其后是组码 ) 和表示该段名称的字符串 ( 例如,YQJGQZ) ’ 每个段都由定义其元素的组码和值组成’ 每个段都以一个后跟字符串 Q(GLQE 的组码 * 结束’ G3H 文件完整的结构如下: ! ! [ 收稿日期] )**A B ") B *C! ! ! ! [ 修回日期] )**+ B *) B )D 万方数据 [ 作者简介] 王子茹( "C#A B ) ,女,辽宁铁岭人,教授,博士,从事工程可视化辅助设计、工程图学的研究’
"! G3H 文件基本格式
"N "! G3H 文件 G3HOG/1P40? QR=>10?6 H4&6 ( 图形交换文件) 是一种 JLESS 文本文件,它包含对应的 GTU 文件的
[ +] 全部信息,用它形成图形速度快’ 可以与第三方文件有良好的数据互读 ,如 ,G@1R、 @1:V1W 等都
可以直接读取 G3H 文件,但是作为开发软件的 $E FF 却没有为 G3H 文件设立接口函数’
! 第" 期
王子茹等:基于 #$%% 的 &’( 数据文件接口的研究
・ PW・
)* ( +,-.).)/0&1.1 2 2 3455) { 6/.76- (859, ; } )* ( ( +,-.).)/0 : ; (6//<=0 % 0)>/=* ( ,3?@?AB,8&,C) % ,-.).D9)>/) ; 2 +,-.).)/0 : ; ?=.1E9)>/) { FE=G1E4-E=HI ( +,-.).)/0 : ; J,-.).)/0) ; …… +,-.).)/0 : ; J,-.).)/0 2 FE=G1EC/8EE=H ( +,-.).)/0 : ; J,-.).)/0, +,-.).)/0 : ; ?=.1E9)>/ % KLLMK , FB3& ) ; …… } +,-.).)/0 指向实体结构 ,3?@?@,9 的指针; +,-.).DB/1N/6 : 实体数据头的指针; +,-.).D&1.1 : 将要添加的实体数据结构的指针; ,-.).D9)>/ : 将要添加的实体数据量大小 O PQ PQ M! 图形的绘制 #$ % % 不仅在点定义的时候用的是整数的形式,而且在直线、圆、矩形等绘制的时候所用的参 数全是整数类型,这就决定了将导入数据重绘的时候不能直接用 #$ %% 提供的 R=S/?= ( ) 、 5)-/?= ( ) 等常用的 F&@ 绘图命令O 可以采用两种方法解决这个问题:一是将点的格式转化成像素格式,然 后调用 #$ %% 提供的绘图函数,在视口内绘制图形;二是调用 T+/-F5 动态连接库,利用 T+/-F5 绘 图命令进行绘制O PQ PQ U! 图元信息输出 为了便于直观地了解图形图元信息及二次开发,本程序附带设置了一个图元信息输出接口,使用 者可以根据需要对数据进行查询或输出为 ,VH/E 格式文件O 程序中自带了一个 $,N).E)0. 类,负责对图 元信息的处理O

C编程实现文件复制

C编程实现文件复制

C编程实现文件复制文件复制是计算机科学中一个基本的操作,它可以将一个文件的内容复制到另一个文件中。

在C编程语言中,我们可以使用标准库函数来实现文件复制操作。

文件复制的基本步骤如下:1.打开源文件和目标文件:首先,我们需要使用`fopen`函数打开要复制的源文件,指定打开模式为读取模式("r")。

如果文件打开成功,则返回一个文件指针,用于后续的读取操作。

然后,我们使用`fopen`函数打开要复制到的目标文件,指定打开模式为写入模式("w")。

如果文件打开成功,则返回一个文件指针,用于后续的写入操作。

2.读取源文件的内容:使用`fread`函数从源文件中读取一段数据,并将其存储在一个缓冲区中。

`fread`函数需要指定读取的字节数、每个字节的大小和要读取数据的文件指针。

读取成功后,将返回实际读取的字节数。

3.将读取的内容写入目标文件:使用`fwrite`函数将源文件中读取的内容写入到目标文件中。

`fwrite`函数需要指定写入的字节数、每个字节的大小和要写入数据的文件指针。

写入成功后,它将返回实际写入的字节数。

4.关闭文件:当文件复制完成后,我们需要使用`fclose`函数关闭源文件和目标文件,释放相关的资源。

下面是一个简单的示例代码实现文件复制功能:```c#include <stdio.h>#define BUFFER_SIZE 4096int mainFILE *source_file, *destination_file;char buffer[BUFFER_SIZE];size_t bytes_read, bytes_written;//打开源文件和目标文件source_file = fopen("source.txt", "rb");destination_file = fopen("destination.txt", "wb");if (source_file == NULL , destination_file == NULL)printf("文件打开失败\n");return 1;}//读取源文件的内容,并将其写入目标文件while ((bytes_read = fread(buffer, 1, BUFFER_SIZE,source_file)) > 0)bytes_written = fwrite(buffer, 1, bytes_read,destination_file);if (bytes_written != bytes_read)printf("文件写入失败\n");return 1;}}//关闭文件fclose(source_file);fclose(destination_file);printf("文件复制成功\n");return 0;```在上面的示例代码中,我们通过定义了一个缓冲区`buffer`来存储读取和写入的数据。

c读取excel文件内容

c读取excel文件内容

c读取excel文件内容在C语言编程中,有时候我们需要读取Excel文件的内容,进行一些数据处理或者分析。

本文将介绍如何在C语言中读取Excel文件的内容,以及如何处理这些数据。

首先,我们需要使用C语言中的一些库来实现对Excel文件的读取。

在C语言中,我们可以使用libxls这个库来读取Excel文件。

这个库提供了一些函数,可以帮助我们打开Excel文件,并逐行读取其中的内容。

接下来,我们需要打开Excel文件,并创建一个workbook对象来表示这个文件。

然后,我们可以使用libxls提供的函数来逐行读取Excel文件中的内容。

通过这些函数,我们可以获取Excel文件中的每一行数据,然后进行处理。

在读取Excel文件的内容之后,我们可能需要对这些数据进行一些处理。

例如,我们可以将这些数据存储到一个数组中,或者进行一些计算操作。

在C语言中,我们可以使用数组来存储这些数据,然后通过循环来对这些数据进行处理。

除了使用libxls这个库之外,我们还可以考虑使用其他一些库来实现对Excel文件的读取。

例如,我们可以使用libxlsxwriter这个库来创建和写入Excel文件,同时也可以使用它来读取Excel文件的内容。

这个库提供了一些函数,可以帮助我们读取Excel文件中的内容,并进行一些处理操作。

总的来说,在C语言中读取Excel文件的内容并不是一件很困难的事情。

通过使用一些库,我们可以很容易地实现对Excel文件的读取,并对其中的内容进行处理。

通过本文的介绍,相信大家对在C语言中读取Excel文件的内容有了更深入的了解。

希望本文能对大家有所帮助。

CADDWGDXF文件C++解析库libdxfrw

CADDWGDXF文件C++解析库libdxfrw

CADDWGDXF⽂件C++解析库libdxfrw编译libdxfrw通⽤脚本(unix)autoreconf -vfi (optional)./configuremakemake install (as root)Windows VC++编译使⽤VS2013打开vs2013 \ libdxfrw.sln构建解决⽅案还有⼀个依赖于libdxfrw的dwg到dxf转换器,可以以相同的⽅式构建。

使⽤VS2013打开dwg2dxf \ vs2013 \ dwg2dxf.sln构建解决⽅案我采⽤VS2017版本,直接打开libdxfrw-master/vs2013/libdxfrw.sln,如下图所⽰:源⽂件存放在src⽬录下,⽐之前dxflib的源⽂件多了很多!直接构建build,我这⾥有个编译错误:参数类型不匹配,⽆法将“char **”转换为“const char **”解决办法:⾮const转const,强转⼀下即可!再次编译通过,在libdxfrw-master\vs2013\Debug或Release⽣成静态库⽂件libdxfrw.lib。

1/******************************************************************************2** dwg2text - Program to extract text from dwg/dxf **3** **4** Copyright (C) 2015 José F. Soriano, rallazz@ **5** **6** This library is free software, licensed under the terms of the GNU **7** General Public License as published by the Free Software Foundation, **8** either version 2 of the License, or (at your option) any later version. **9** You should have received a copy of the GNU General Public License **10** along with this program. If not, see </licenses/>. **11******************************************************************************/1213 #include <iostream>14 #include <fstream>15 #include <sys/stat.h>1617 #include "dx_iface.h"18 #include "dx_data.h"1920void usage(){21 std::cout << "Usage: " << std::endl;22 std::cout << " dwg2text <input>" << std::endl << std::endl;23 std::cout << " input dwg or dxf file to extract text" << std::endl;24 }2526bool extractText(std::string inName){27bool badState = false;28//verify if input file exist29 std::ifstream ifs;30 ifs.open (inName.c_str(), std::ifstream::in);31 badState = ifs.fail();32 ifs.close();33if (badState) {34 std::cout << "Error can't open " << inName << std::endl;35return false;36 }3738 dx_data fData; // 存储cad数据的容器类对象39 dx_iface *input = new dx_iface();40 badState = input->printText( inName, &fData ); // 读取cad⽂件并填充到cad数据容器类对象中,再找出text实体打印出来41if (!badState) {42 std::cout << "Error reading file " << inName << std::endl;43return false;44 }45delete input;4647return badState;48 }4950int main(int argc, char *argv[]) {51bool badState = false;52 std::string outName;53if (argc != 2) {54 usage();55return1;56 }5758 std::string fileName = argv[1];5960if (badState) {61 std::cout << "Bad options." << std::endl;62 usage();63return1;64 }6566bool ok = extractText(fileName);67if (ok)68return0;69else70return1;71 }2、dwg2dxf:将dwg转换为dxf(read/write)1bool convertFile(std::string inName, std::string outName, DRW::Version ver, bool binary, bool overwrite){ 2bool badState = false;3//verify if input file exist4 std::ifstream ifs;5 ifs.open (inName.c_str(), std::ifstream::in);6 badState = ifs.fail();7 ifs.close();8if (badState) {9 std::cout << "Error can't open " << inName << std::endl;10return false;11 }12//verify if output file exist13 std::ifstream ofs;14 ofs.open (outName.c_str(), std::ifstream::in);15 badState = ofs.fail();16 ofs.close();17if (!badState) {18if (!overwrite){19 std::cout << "File " << outName << " already exist, overwrite Y/N ?" << std::endl;20int c = getchar();21if (c == 'Y' || c=='y')22 ;23else {24 std::cout << "Cancelled.";25return false;26 }27 }28 }29//All ok proceed whit conversion30//class to store file read:31 dx_data fData;32//First read a dwg or dxf file33 dx_iface *input = new dx_iface();34 badState = input->fileImport( inName, &fData );35if (!badState) {36 std::cout << "Error reading file " << inName << std::endl;37return false;38 }3940//And write a dxf file41 dx_iface *output = new dx_iface();42 badState = output->fileExport(outName, ver, binary, &fData);43delete input;44delete output;4546return badState;47 }。

DXF文件格式读取(VC例子)

DXF文件格式读取(VC例子)

Download demo project - 167 KbIntroductionWhat is DXF?Drawing Interchange Format (DXF) files enable the interchange of drawings between AutoCAD and other programs. DXF files can be either ASCII or binary formats. Because ASCII DXF files are more common than the binary format, CadLib uses ASCII DXF format.What is CadLib?The CadLib is not a Computer Aided Design (CAD) program. It is a tool for creating DXF files that are used in the CAD programs. It consists of two parts. One of them is a Dynamic Link Library to create the DXF file. The other part is the programming interface. It is a class that integrates the cadio.dll functions. It can be used in Microsoft Visual C++ projects. In addition, the cadio.dll can be used in other Win32 programs.Why use CadLib?In some programs, it is needed to create a drawing output for use in other programs such as AutoCad. For example, in a "Building Detail Sheet Generator Program", the program needs to create a drawing output. And the most standard format for communicating drawing data is DXF.DXF file structureThe DXF format is a tagged data representation of all the information contained in a drawing file. Tagged data means that each data element in the file is preceded by an integer number that is called a group code. A group code's value indicates what type of data element follows. This value also indicates the meaning of a data element for a given object (or record) type. Virtually all user-specified information in a drawing file can be represented in DXF format. (from AutoCad's DXF reference)A DXF file consists of some sections. Each section has some drawing data in itself. The CadLib uses the following sections:1.HEADER2.TABLES3.BLOCKS4.ENTITIESThe main reference for DXF file structure that is used for CadLib is the AutoCad's DXF reference. You can find more information about DXF file structure here.ClassesThe classes are interfaces between CadIO.dll and the main program. "Test" has come with CadLib to demonstrate how to generate a DXF file with CDxfFileWrite and CDrawing classes.CDxfFileWrite classCDxfFileWrite gathers all the commands needed to directly create a DXF file. Usage of CDxfFileWrite is as follows:1.Create the DXF fileCollapse | Copy Code2.Begin and end the HEADER section. It's here for compatibility with some CADprograms. Others work without having HEADER section.Collapse | Copy Code3.Begin the TABLES section and put the LAYER, LTYPE, STYLE, DIMSTYLEtable-types as many as you want and then close the sectionCollapse | Copy Code4.Begin ENTITIES section and put entities data (LINE, CIRCLE, SOLID, TEXT,ARC, POINT, DIMLINEAR) and finally close the sectionCollapse | Copy Code5.Close the DXF fileCollapse | Copy CodeCDrawing classCDrawing class has all the commands to create a drawing in memory and save it as a DXF file. Usage of CDrawing is as follows:1.Create the on-memory drawingCollapse | Copy Code2.Create new LAYER, LTYPE, STYLE, DIMSTYLE table-types as many as youwant.Collapse | Copy Code3.Make entities data (LINE, CIRCLE, SOLID, TEXT, ARC, POINT, DIMLINEAR,POLYLINE).Collapse | Copy Code4.Save data to a DXF file.Collapse | Copy Code5.Destroy CDrawing and free allocated memory.Collapse | Copy CodeLoading data from a DXF file1.Create the on-memory drawing.Collapse | Copy Codee LoadDXFFile member function to load DXF file into memory.Collapse | Copy CodeThat's all!ConclusionSince I am a Civil Engineer, I decided to write a program to generate a beam or columns detail sheet without the use of AutoCAD. I have written a program that, with a little data about beam or column, will create the detail sheet automatically. Output of this program is a DXF file and it can be shown in AutoCAD or it can be plotted with it. This program can save the time for drawing the detail sheet withAutoCAD. If you are an AutoCAD operator, you will understand the meaning of words that are used in this article, or if you are a programmer who wants to write a program to create DXF files, first you need a little knowledge about AutoCAD or the drawing programs such as is mentioned above. This code can be useful for programmers who need to create DXF files from their programs. CadLib is not the best one and also there are many commercial software for creating DXF files but they are not open source. Feel free to change the code. Your comments in regards to this article will cause the improvement of CadLib.History∙20 Dec 2002o First release of CadLib∙19 Jan 2003o Some bug fixeso Added Dimension-Line support. It's a combination of other entity commands like "Line" and "Solid"o Added BLOCKS section supporto Added Arc, Point and InsertBlock commands for ENTITIES sectiono Text command has been improved∙11 May 2003o Added CDrawing class to store drawing data in memory and change the data before saving it as a DXF file.∙28 June 2003o Added DXF read capability to CDrawing classo Some bug fixes of CDrawing class when writing data to a DXF file ∙22 Nov 2003 (CadLib Version 2.00)o Added Drawing View capabilityo Added PolyLine command (by Tran duy Dung)o Improved DXF loading speedo Some bug fixes of drawing memory management functions ∙24 Aug 2004 (CadLib Version 2.10)o Added ZoomExtents Functiono Improved Viewing functions to show Dashed Lineso Added "ChangeEntity" & "DeleteEntity" commandso Added Dimension view capabilityo Fixed a bug occures when viewing a rotated blocko Improved viewing of textsLicenseThis article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)About the Author。

VC和Excel的数据导出与保存

VC和Excel的数据导出与保存

VC和excel数据导出与保存在BOOL CVCExcelApp::InitInstance()之中,int nResponse = dlg.DoModal()语句之后加入如下代码:if(!AfxOleInit())///初始化COM库{AfxMessageBox("初始化COM失败");return FALSE;}为了能调用Excel的接口我们打开MFC ClassWizard->Automation->Add Class->From a type library,选择[Excel的安装路径]\EXCEL.exe,然后把所有的类都添加进去,头文件为excel.h,源文件为excel.cpp。

当然,你也可以只把一些比较常用的类如_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range加进去,因为网上流传的绝大部分教程都只添加这几个类,这完全根据你个人的需要。

但在本例中我们至少还要用到Interior类(设置底色),Font类(设置字体),而且这样做又简单又方便扩展功能,不管三七二十一全部弄进去吧!但这样做会有一个问题,有可能产生类的名字冲突,例如本来你自己写了一个类叫Font,当你全部添加时又再次加入了Font类,这样就重复定义了,不过可以通过名字空间来解决这个问题。

再在VCExcelDlg.cpp文件的头部添加(如果系统已经自动添加就不要重复添加了):#include "VCExcel.h"#include "comdef.h"这样一来我们的程序就可以自由调用EXCEL了,一切准备就绪。

下面先在CVCExcelDlg中添加如下成员变量,用来操控Excel应用程序、工作簿和单元格。

Range m_ExlRge;_Worksheet m_ExlSheet;Worksheets m_ExlSheets;_Workbook m_ExlBook;Workbooks m_ExlBooks;_Application m_ExlApp;我们利用加载Excel模板来生成要求的表格,在本工程Debug文件夹中建立一个Excel文件,命名为Template.xls。

DXF格式文件读取方法

DXF格式文件读取方法

DXF格式文件读取方法DXF(Drawing Exchange Format)是一种用于交换CAD数据的文件格式,它可以包含2D和3D图形和元数据。

下面是使用Python读取DXF文件的方法。

1. 安装依赖:首先,需要安装适用于DXF文件的Python库。

其中,较流行的库是`ezdxf`和`dxfgrabber`。

可以使用以下命令安装其中一个库:```pip install ezdxfpip install dxfgrabber```2.导入库:使用以下代码导入所需的库:```pythonimport ezdxf#或者import dxfgrabber```3.读取DXF文件:选择适用的库,使用以下代码读取DXF文件:使用`ezdxf`库:```pythondoc = ezdxf.readfile('example.dxf')```使用`dxfgrabber`库:```pythondoc = dxfgrabber.readfile('example.dxf')```4.访问实体:接下来,可以通过以下方式访问DXF中的实体:使用`ezdxf`库:```pythonmsp = doc.modelspace( # 访问模型空间for entity in msp:if entity.dxftype( == 'LINE': # 仅处理类型为线的实体start = entity.dxf.start # 起点坐标end = entity.dxf.end # 终点坐标print(f"Line: {start}, {end}")elif entity.dxftype( == 'CIRCLE': # 处理圆center = entity.dxf.center # 圆心坐标radius = entity.dxf.radius # 半径print(f"Circle: {center}, {radius}")```使用`dxfgrabber`库:```pythonentities = doc.entitiesfor entity in entities:if entity.dxftype == 'LINE':start = entity.start # 起点坐标end = entity.end # 终点坐标print(f"Line: {start}, {end}")elif entity.dxftype == 'CIRCLE':center = entity.center # 圆心坐标radius = entity.radius # 半径print(f"Circle: {center}, {radius}")```以上代码遍历DXF文件中的所有实体,并打印出线段和圆的相关信息。

CAD二次开发 DXF接口方法研究与实现

CAD二次开发  DXF接口方法研究与实现

DXF接口方法研究与实现摘要:AutoCAD的DXF文件数据格式由标题HEADER段、类CLASSES段、符号表TABLES段、块BLOCKS段、图元ENTITIES段、对象OBJECTS段、文件的结束符号7大段组成。

用Visualc++读取DXF文件,实现DXF 文件的外部接口,在AutoCAD与自行开发软件之间建立数据通道,实现数据传递和共享。

关键词:DXF文件;Visualc++;接口程序引言:DXF(DrawingExchangeFile)文件是Autodesk公司推出的与外部CAD/CAM 进行图形信息交换的一个接口,是图形信息交换的文件格式,可以是ASCII码格式或二进制格式。

由于ASCII码DXF文件易于被其它程序处理,通常情况下的DXF文件指ASCII格式文件,主要用于实现高级语言编写的程序与AutoCAD系统的连接。

对DXF接口方法行研究,用VC++设计了接口程序。

§1.1 DXF文件的一般结构DXF(Drawing eXchang File)文件的最小组成单位是组(GROUP)。

一个DXF文件由多个组组成。

每个组在DXF文件中占两行。

第一行是组码(GROUP CODE),它是一个整数;第二行是组值(GROUP V ALUE),它的数据类型取决于组码的数值。

DXF文件的组码分成很多类,每类组码具有确定的用途,并确定其相应的组值的类型。

DXF文件分成多个节(SECTION),每个节均由多个组(GROUP)组成。

每个节均由一个组值为字符串SECTION的0组开始,后跟组值为表示节名的字符串的2组,其后为组成该节的各个组,最后以组值为字符串ENDSEC的0组表示该节结束。

所有节结束后,在DXF文件的最后是组值为字符串EOF(End Of File)的组作为文件结束标志。

典型的DXF文件由下面几个节组成:(1)标题节(HEADER)标题节记录了图形的一般信息。

它包括AutoCAD图形数据库的版本号以及大量的系统变量。

用C语言程序读取CAD的dxf文件里的实体语言

用C语言程序读取CAD的dxf文件里的实体语言

wold line-dxf(FILE *fp,char layer[2],float x1,floal y1,float x2,float y2)fprintf(fp,"0\nLINE\n 8\n%s\n",1ayer);fprintf(fp,"10\n%f\n 20\n%f\n",x1,y1);fprintf(fp,"l1\n%f\n 2l\n%f\n",x2,y2);}#include <math .h>;#include < stdio.h>;#include "acad -dxf.c"main(){float r1,r2,11,12,13 x[100],y[37].Z[37];float beta.beta1,fq,dz,w;int i;float xl,x1,y1,z1,x2,z2,x3,z3 ,x4 ,z4,xs,zs,Xe, ze;FILE*fp摘要:本文简要介绍了一下DXF文件的组成。

重点讲述了怎样使用C语言来读取DXF文件中的实体信息。

关键字:C、DXFAbstract: The paper present the basic parts of DXF file. And focus on how to use C read the entity’s information from DXF file.Key Words: C, DXFDXF是Drawing eXchange File的缩写,意思为图形交换文件,在工程制图中有广泛的应用,掌握了DXF文件的读写对编写CAD软件时的图形信息的交换有重要意义。

它有两种格式:一种是ASCII DXF 格式;一种是二进制DXF格式。

ASCII DXF文件格式是ASCII 文字格式的AutoCAD图形的完整表示,这种文件格式易于被其它程序处理。

VC下的目录文件的复制.(SHFileOperation)

VC下的目录文件的复制.(SHFileOperation)

VC下的目录文件的复制.(SHFileOperation)需要添加头文件:#include <windows.h>#include <shellapi.h>需要指定shell32.lib或者shell32.dll链接总结一下SHFileOperation的用法,希望对大家有用//删除文件或者文件夹bool DeleteFile(char * lpszPath){SHFILEOPSTRUCT FileOp={0};FileOp.fFlags = FOF_ALLOWUNDO | //允许放回回收站FOF_NOCONFIRMATION; //不出现确认对话框FileOp.pFrom = lpszPath;FileOp.pT o = NULL; //一定要是NULLFileOp.wFunc = FO_DELETE; //删除操作return SHFileOperation(&FileOp) == 0;}//复制文件或文件夹bool CopyFile(char *pTo,char *pFrom){SHFILEOPSTRUCT FileOp={0};FileOp.fFlags = FOF_NOCONFIRMATION| //不出现确认对话框FOF_NOCONFIRMMKDIR ; //需要时直接创建一个文件夹,不需用户确定FileOp.pFrom = pFrom;FileOp.pT o = pTo;FileOp.wFunc = FO_COPY;return SHFileOperation(&FileOp) == 0;}//移动文件或文件夹bool MoveFile(char *pTo,char *pFrom){SHFILEOPSTRUCT FileOp={0};FileOp.fFlags = FOF_NOCONFIRMATION| //不出现确认对话框FOF_NOCONFIRMMKDIR ; //需要时直接创建一个文件夹,不需用户确定FileOp.pFrom = pFrom;FileOp.pT o = pTo;FileOp.wFunc = FO_MOVE;return SHFileOperation(&FileOp) == 0;}//从命名文件或文件夹bool ReNameFile(char *pTo,char *pFrom){SHFILEOPSTRUCT FileOp={0};FileOp.fFlags = FOF_NOCONFIRMATION; //不出现确认对话框FileOp.pFrom = pFrom;FileOp.pT o = pTo;FileOp.wFunc = FO_RENAME;return SHFileOperation(&FileOp) == 0;}void refilename(char *name){int n;char old[] = "/home/yuyang/zrgate1.7/ftp/log/log";n = rename(old, name);if (n == 0)printf("the filerename complete\n");elseprintf("error");}应用举例:DeleteFile("d:\\PID\0\0"); //删除一个文件夹DeleteFile("d:\\PID.dsp\0d:\\PID.dsw\0\0"); //删除多个文件CopyFile("d:\0\0","D:\\MyProjects\\临时程序\0\0"); //把"临时程序"文件夹放到d盘下面CopyFile("d:\0\0","D:\\MyProjects\\临时程序\\PID.dsp\0D:\\MyProjects\\临时程序\\PID.dsw\0"); //把PID.dsp 和PID.dsw俩个文件放到d盘下面ReNameFile("d:\\NewName","d:\\PID\0\0"); \\把PID文件夹从命名为NewName注意:,如果你想把"D:\\MyProjects\\临时程序\0\0"的文件夹复制到D盘下,并从命名为NewName,应该这样CopyFile("d:\\NewName\0\0","D:\\MyProjects\\临时程序\\*.*\0\0"); //把"临时程序"文件夹复制到d盘下并从命名为"NewName"下面这个类方便你复制多个文件或文件夹,仅作参考//连接多个路径的类class JOINFILEPATH{private:int pos;char* MultipleFilePath;public:JOINFILEPATH(){pos=0;MultipleFilePath=new char[MAX_PATH*10];memset(MultipleFilePath,0,MAX_PATH*10);}~JOINFILEPATH() { delete []MultipleFilePath; }void join(char *FilePath){while(*FilePath!='\0')MultipleFilePath[pos++]=*FilePath++;pos++;}char * GetMultipleFilePath() {return MultipleFilePath;}};//应用举例:JOINFILEPATH FilePath;FilePath.join("D:\\MyProjects\\临时程序\\PID\\PID.dsp");FilePath.join("D:\\MyProjects\\临时程序\\PID\\PID.dsw");CopyFile("d:\0\0",FilePath.GetMultipleFilePath());1 pFrom和pT o最好以\0\0结尾(把存放路径的字符串初始化为0),不然有可能会出错,中间的每一个路径用\0隔开2 pFrom所指向的文件或文件夹(可以多个)会被复制或移动到pT o 所指向的文件夹下面(假如文件夹不存在会询问是否创建,当然你也可以选择直接创建)参数详解:Typedef struct _ShFILEOPSTRUCT{HWND hWnd; //消息发送的窗口句柄;UINT wFunc; //操作类型LPCSTR pFrom; //源文件及路径LPCSTR pT o; //目标文件及路径FILEOP_FLAGS fFlags; //操作与确认标志BOOL fAnyOperationsAborted; //操作选择位LPVOID hNameMappings; //文件映射LPCSTR lpszProgressTitle; //文件操作进度窗口标题}SHFILEOPSTRUCT, FAR * LPSHFILEOPSTRUCT;在这个结构中,hWnd是指向发送消息的窗口句柄,pFrom与pTo是进行文件操作的源文件名和目标文件名,它包含文件的路径,对应单个文件的路径字符串,或对于多个文件,必须以NULL作为字符串的结尾或文件路径名之间的间隔,否则在程序运行的时候会发生错误。

从VCT到DXF数据格式转换

从VCT到DXF数据格式转换

从VCT到DXF数据格式转换
费中强;高飞;张克旺;胡晓华
【期刊名称】《合肥工业大学学报(自然科学版)》
【年(卷),期】2006(029)008
【摘要】文章通过分析VCT和DXF格式文件各自的特点,制作一个包含CASS5.1图形库中所有图形的全集DXF模板文件,并建立VCT的要素代码和相应图形的DXF代码的对应,找到了数据格式转换的方法;用高级编程语言编程,分别读取VCT 中的点、线、面、注记及宗地等要素,在DXF的实体段中写入相应的DXF代码,以读写文本文件的方式完成格式转换,从而使VCT文件可以应用在GIS系统中.
【总页数】5页(P1008-1012)
【作者】费中强;高飞;张克旺;胡晓华
【作者单位】合肥工业大学,土木建筑工程学院,安徽,合肥,230009;合肥工业大学,土木建筑工程学院,安徽,合肥,230009;合肥市国土资源局信息中心,安徽,合肥,230001;合肥市国土资源局信息中心,安徽,合肥,230001
【正文语种】中文
【中图分类】TP391
【相关文献】
1.基于组件技术的由VCT到Shape数据格式转换研究 [J], 刘小伟;高飞;胡小华;沙海峰;骆旭佳
2.AutoCAD与VCT数据格式转换实现 [J], 白海丽;李建国
3.基础地理信息建库中AUTOCAD中DXF与ARC/INFO中EOO的数据格式转换[J], 张刚强;王波
4.基于FME的城市规划数据格式转换应用研究 [J], 于菲菲
5.基于FME的产业集聚区控制性详细规划数据格式转换应用研究 [J], 黄革勤;冯志立;刘钰莹
因版权原因,仅展示原文概要,查看原文内容请购买。

用VC++读取DXF文件格式的源代码和相关资料

用VC++读取DXF文件格式的源代码和相关资料

我刚找到的:大家先看看做好了告诉我一声我也正准备做这个!!我们使用?Visual?C++??来写一个读取DXF文件的小程序。

在实际应用中,模型中实体的数目以及实体中点和面的数目都是不定的,为了有效地利用内存,我们选择MFC类库中的聚合类CobArray类所创建的对象vertex,?sequence来存储和管理实体的点坐标和点序。

CObArray类是一个用来存放数组类的聚合类,它能根据要存进来的数组(或结构)多少自动进行自身大小的高速,而且这个类本身具有的成员函数使得我们对它的对象的操作更加方便、快捷,用它编的程序也易于读懂。

三维实体模型的模型信息中的一部分信息可以在标题段中读出,通过读取变量名为$UCSORG的三个变量,可以得到三维实体在世界坐标系中自身所定义的用户坐标系原点的三维坐标。

通过读取$EXTMAX,$EXTMIN可以获知三维实体在世界坐标系中的范围,而其它部分的信息只有读完了全部DXF文件后才可以通过计算确定。

对于三维实体模型的全部点坐标、点序,可以在实体段中按照前面介绍的DXF文件基本结构读出。

现在我们开始写这个程序。

先建立一个头文件定义如下的结构:VERTEX,?SEQUENCE和类CVertex,?Csequence。

typedef?struct?{float?x,y,z;}VERTEX;?结构VERTEX用来存储点的坐标typedef?struct?{int?a,b,c;}SEQUENCE;?结构SEQUENCE用来存储实体的面的组成typedef?struct?{char?obName[20];?定义结构myVertex来存储实体的名字,点的坐标以及面的组成,CObArray?Vertex;?其中,点的坐标和面的组成是由聚合类CObArray定义的对象来CObArray?Sequence;?在存储的,我们可以把VERTEX结构和SEQUENCE结构加入到}myVertex;?这两个对象中保存class?CVertex?:?public?CObject{?因为CObArray类的对象中只能加入由CObject派生的对象,所以protected:?我们还需要建立一个由CObject类派生的CVertex类。

VC中可靠读写DWG图形文件的新方法

VC中可靠读写DWG图形文件的新方法

N+(9WNA 系 统 崩 溃 。 )Q2 直 接 读 写 二 进 制 加 密 格 式 的 AUV 文 件 。 N+(9WNA
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
(接上页)
!
结束语
除以上介绍的方法之外,还可 以 在 .$’3$’%4030 中 使 用
!"#$%&’"($)*+!!$’ , ,, *-($./$012 ;
)K2 通 过 N+(9A$.M 公 司 提 供 的 X*4$=(N/Y Z NA; 、 O5N
或 O".+0# [".7 在 N+(9WNA 内 部 操 作 AUV 文 件 。 这种方 法极为可靠, 但是开发难度大、 程 序 调 试 复杂。在 高 版 本 的 开 发 中 , 由 于 地 址 共 享 及代 码 编 写 不 当 ,还可 能 造 成
!"#$%&’ 接口类 (!")*!++,$")#$-. (!")*/-"01&.#2 (!")*/-"01&.# (!")*3-*&,4+)"& (!")*5)+&64+)"& (!")*4&,&"#$-.4&# (!")*7 实体名
5-$.#O-4)E&!66)KG 位 置 在 >.!0#-")*9&)*<6$#&HVVVI 前 面 。 HLI 点 取 编 译 器 (/@ 环 境 主 菜 单 F$&WXY8,)22<$Z)6* ,

C实现dwg文件读取

C实现dwg文件读取

C#读取DWG文件方法(一)直接读取文件结构struct BITMAPFILEHEADER{public short bfType;public int bfSize;public short bfReserved1;public short bfReserved2;public int bfOffBits;}public static System.Drawing.Image GetDwgImage(string FileName){if (!(File.Exists(FileName))){throw new FileNotFoundException("文件没有被找到");}FileStream DwgF=null; //文件流int PosSentinel; //文件描述块的位置BinaryReader br=null; //读取二进制文件int TypePreview; //缩略图格式int PosBMP; //缩略图位置int LenBMP; //缩略图大小short biBitCount; //缩略图比特深度BITMAPFILEHEADER biH; //BMP文件头,DWG文件中不包含位图文件头,要自行加上去byte[] BMPInfo; //包含在DWG文件中的BMP文件体MemoryStream BMPF = new MemoryStream(); //保存位图的内存文件流BinaryWriter bmpr = new BinaryWriter(BMPF); //写二进制文件类System.Drawing.Image myImg = null;try{DwgF = new FileStream(FileName, FileMode.Open, FileAccess.Read); //文件流br = new BinaryReader(DwgF);DwgF.Seek(13, SeekOrigin.Begin); //从第十三字节开始读取PosSentinel = br.ReadInt32(); //第13到17字节指示缩略图描述块的位置DwgF.Seek(PosSentinel + 30, SeekOrigin.Begin); //将指针移到缩略图描述块的第31字节TypePreview = br.ReadByte(); //第31字节为缩略图格式信息,2 为BMP格式,3为WMF格式if (TypePreview == 1){}else if (TypePreview == 2 || TypePreview == 3){PosBMP = br.ReadInt32(); //DWG文件保存的位图所在位置LenBMP = br.ReadInt32(); //位图的大小DwgF.Seek(PosBMP + 14, SeekOrigin.Begin); //移动指针到位图块biBitCount = br.ReadInt16(); //读取比特深度DwgF.Seek(PosBMP, SeekOrigin.Begin); //从位图块开始处读取全部位图内容备用BMPInfo = br.ReadBytes(LenBMP); //不包含文件头的位图信息br.Close();DwgF.Close();biH.bfType = 19778; //建立位图文件头if (biBitCount < 9){biH.bfSize = 54 + 4 * (int)(Math.Pow(2, biBitCount)) + LenBMP;}else{biH.bfSize = 54 + LenBMP;}biH.bfReserved1 = 0; //保留字节biH.bfReserved2 = 0; //保留字节biH.bfOffBits = 14 + 40 + 1024; //图像数据偏移//以下开始写入位图文件头bmpr.Write(biH.bfType); //文件类型bmpr.Write(biH.bfSize); //文件大小bmpr.Write(biH.bfReserved1); //0bmpr.Write(biH.bfReserved2); //0bmpr.Write(biH.bfOffBits); //图像数据偏移bmpr.Write(BMPInfo); //写入位图BMPF.Seek(0, SeekOrigin.Begin); //指针移到文件开始处myImg = System.Drawing.Image.FromStream(BMPF); //创建位图文件对象bmpr.Close();BMPF.Close();}return myImg;}catch (EndOfStreamException){throw new EndOfStreamException("文件不是标准的DWG格式文件,无法预览!");}catch (IOException ex){if (ex.Message == "试图将文件指针移到文件开头之前。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用VC++编程实现DXF文件数据提取
作者:胡胜红
作者单位:湖北经济学院,湖北,武汉,430205
刊名:
福建电脑
英文刊名:FUJIAN COMPUTER
年,卷(期):2006,(11)
被引用次数:7次
1.李晓辉计算机辅助设计与绘图-(AutoCAD2006中文版) 2006
2.詹海生;李广鑫;马志欣基于ACIS的几何造型技术与系统开发 2002
3.孙家广;杨长贵计算机图形学 1994
1.学位论文尚金栓涵闸CAD软件系统的研究1997
该文对国内外普遍采用的AutoCAD绘图软件包的二次开发技术进行了较深入的研究,形成了一套CAD软件开发的实用的理论和方法,并以此理论和方法为指导,开发了一套函闸CAD软件系统.
2.期刊论文吴志林.倪国葳电脑配筋的优越性-科技资讯2009(1)
社会的进步,科技的发展,各行各业的管理都已进入了信息化管理和计算机应用技术的高科技领域.本文论述了结合AntoCAD绘图软件,有效的提高工作效率及合理利用钢筋,降低工程成本的可行性.
3.会议论文廖士源笔画识别法建立Auto CAD绘图汉字库1986
该文提出的笔画识别法,是将点阵汉字转换成绘图笔画汉字行之有效的方法,它成功地把在中国流行的标准线体16×16点阵汉字换成了笔画汉字。

该笔画汉字是用AutoCAD的形定义来描述,能在AutoCAD软件包编辑的图形中插入,并能绘制出带汉字的标准工程图。

采用此法建立的笔画汉字库,不仅字形美观,而且缩短了在PC机上建立笔画汉字库的时间。

该汉字库已配到汉化的AutoCAD绘图软件包CCAD上。

笔画识别法可在其它计算机上,为CAD建立绘图汉字库参考。

(本刊录)
4.学位论文胡友安三峡大型水工闸门结构分析及计算机应用研究--基于MicroStation平台的平面闸门绘图系统的开发1997
MicroStation是一个灵活、通用和高效的绘图软件.该文讨论了MicroStation平台的绘图功能和开发特点,并将该平台与AutoCAD绘图平台进行了比较.阐明了平面闸门计算机辅助绘图系统的基本开发思路、程序结构、数据结构和软件的使用方法等内容.重点介绍了在MicroStation平台上用MDL语言开发"水工金属结构工具图库"和"平面闸门参数化绘图软件"的一些关键技术,例如,程序开发的数据结构,程序结构,图纸表达的示意与夸大,表格数据的函数化和自建的功能函数库等项技术.
1.张国庆DXF文件在激光打标系统的应用研究[期刊论文]-光电技术应用 2010(5)
2.李尚国.陈开岩.司俊鸿.陈辉.宋凯.郝元伟基于VC++的矿井通风系统图DXF文件数据接口研究[期刊论文]-能源技术与管理 2009(3)
3.刘启生.邵东伟.杜云明.张世忠基于DXF文件的数控加工系统的实现研究[期刊论文]-佳木斯大学学报(自然科学版) 2009(4)
4.李芳珍.许伦辉DXF文件格式及其外部接口的研究[期刊论文]-兵工自动化 2008(7)
5.张玉灯.郑涛.毛新生基于AutoCAD的二维建模研究[期刊论文]-水利与建筑工程学报 2008(2)
6.王健.闫立梅型材下料表的参数提取和管理[期刊论文]-计算机辅助工程 2008(3)
7.王子茹.任清波基于VC++的DXF数据文件接口的研究[期刊论文]-厦门理工学院学报 2007(1)
本文链接:/Periodical_fjdn200611117.aspx
授权使用:广东工业大学图书馆(gdgydxtsg),授权号:14ba4b30-d9e9-4578-9cac-9edf00964f0e
下载时间:2011年5月10日。

相关文档
最新文档