青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

eryar

PipeCAD - Plant Piping Design Software.
RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
posts - 603, comments - 590, trackbacks - 0, articles - 0

OpenCASCADE DataExchange DWG

Posted on 2014-10-15 23:02 eryar 閱讀(6454) 評論(0)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

OpenCASCADE DataExchange DWG

eryar@163.com

Abstract. DWG is a file format created in the 70’s for the emerging CAD applications. Currently it is the native file format of AutoCAD, a proprietary CAD program developed by Autodesk. Libredwg is a free C library to read and write DWG files. This program is part of GNU project, released under the aegis of GNU. The paper focus on the usage of Libredwg, and use the Libredwg to read a DWG file and output the entities of the DWG to Tcl script for OpenCASCADE Draw Test Harness visualization.

Key Words. OpenCASCADE, DWG, Libredwg, DataExchange, Windows

1. Introduction

DWG是CAD軟件AutoCAD及基于AutoCAD的軟件保存設計數據所用的一種專有文件格式,始于1970年代的一套Interact CAD軟件。之后Autodesk公司于1982年取得版權開始使用這種文件格式。Autodesk公司擁有、開發并且更新DWG文件格式,通常每隔幾年DWG就會隨著在AutoCAD中添加新的特性而對DWG格式進行更新。

DWG格式及它的ASCII格式變體DXF格式,已經成為CAD制圖數據交換中的事實文件標準,據估計全世界有超過十億個DWG文件。有幾家公司正在對DWG文件格式進行逆向工程以試圖為其它的設計軟件提供讀寫DWG文件的能力。Autodesk公司也提供了一套需要授權的DWG讀寫技術開發包“RealDWG”。

新版的AutoCAD可以打開舊版的DWG文件,AutoCAD2007可以打開2.0版本的DWG文件并且可以保存為R14版本。另外Autodesk公司提供一個免費的DWG查看工個“DWG TrueView”用于查看所有版本的DWG文件。另外Autodesk公司是vendor lock-in策略的強力支持者,盡力保護DWG文件格式并且禁止開發支持DWG格式的開放源代碼庫。

2006年11月12日,Autodesk公司對Open Design Alliance-一款支持DWG格式的自由庫OpenDWG提出了訴訟。

ASCII格式的DXF文件的文檔Autodesk提供了,但是二進制的DWG格式并沒有提供相關文檔,由上可見對DWG文件的讀寫處理是非常困難的。本文主要介紹如何使用Libredwg庫來對讀取DWG中的幾何數據,并將幾何數據生成為可以在OpenCASCADE中顯示的Tcl腳本,以驗證讀取數據的正確性。

2.Modify Libredwg for Visual Studio

Libredwg是一個Free的讀寫DWG文件的C庫,這個程序是GNU項目的一部分,授權方式是GNU GPL3。

Libredwg是Libdwg的一個分支,其目的是創建OpenDWG庫的一個替代庫。也是高優先級的Free軟件項目:

http://www.fsf.org/campaigns/priority-projects/priority-projects/highpriorityprojects#ReplaceOpenDWG ,更多信息可訪問http://www.gnu.org/software/libredwg 。

從網上下載的Libredwg源程序是在Linux下編譯的,并沒有配置在Windows下編譯方法。為了使用Libredwg可以在Windows上的Visual Studio中編譯通過,對Libredwg做了一些修改,最終編譯成功。在Visual Studio 2008上成功編譯的工程可以文后的鏈接中下載。

下面給出使用Libredwg讀取DWG文件中直線、圓及文字的例子程序:

 

/*
 * load_dwg.c: load a DWG, get lines, text and circles
 * written by Felipe Castro
 * modified by Felipe Corrêa da Silva Sances
 * modified by Thien-Thi Nguyen
 
*/

#include 
<dwg.h>
#include 
"suffix.c"

void add_line(double x1, double y1, double x2, double y2)
{
  
// Make something with that
}

void add_circle(double x, double y, double R)
{
  
// Make something with that
}

void add_text(double x, double y, char *txt)
{
  
// Make something with that
}

int load_dwg(char *filename)
{
  unsigned 
int i;
  
int success;
  Dwg_Data dwg;

  dwg.num_objects 
= 0;
  success 
= dwg_read_file(filename, &dwg);
  
for (i = 0; i < dwg.num_objects; i++)
    {
      Dwg_Entity_LINE 
*line;
      Dwg_Entity_CIRCLE 
*circle;
      Dwg_Entity_TEXT 
*text;

      
switch (dwg.object[i].type)
        {
      
case DWG_TYPE_LINE:
        line 
= dwg.object[i].tio.entity->tio.LINE;
        add_line(line
->start.x, line->end.x, line->start.y, line->end.y);
        
break;
      
case DWG_TYPE_CIRCLE:
        circle 
= dwg.object[i].tio.entity->tio.CIRCLE;
        add_circle(circle
->center.x, circle->center.y, circle->radius);
        
break;
      
case DWG_TYPE_TEXT:
        text 
= dwg.object[i].tio.entity->tio.TEXT;
        add_text(text
->insertion_pt.x, text->insertion_pt.y, text->text_value);
        
break;
        }
    }
  dwg_free(
&dwg);
  
return success;
}

int main (int argc, char *argv[])
{
  REQUIRE_INPUT_FILE_ARG (argc);
  load_dwg (argv[
1]);
  
return 0;
}

因為Libredwg用的C編程風格,沒有定義導出定義宏,所以決定將Libredwg編譯成靜態庫libredwg.lib,然后使用其頭文件及這個靜態庫的方式來在程序中使用Libredwg庫。

經過測試,若DWG中只有簡單的線和圓等簡單實體,Libredwg還是可以正確讀取出。但是若用rewrite的例子來測試寫DWG的功能,簡單的實例如一個圓的數據都會寫出到DWG失敗,看樣子寫的功能還沒有完全實現好。

3.DWG to OCC

基于上面的例子程序,結合Libredwg的讀取功能,將DWG中的幾何數據導出成Tcl腳本,這樣就可以方便在OpenCASCADE的Draw Test Harness中來測試結果了。下面給出具體的程序實例及如何在Draw Test Harness中來使用生成的Tcl腳本。

 

/*
*    Copyright (c) 2014 eryar All Rights Reserved.
*
*        File    : Main.cpp
*        Author  : eryar@163.com
*        Date    : 2014-10-15 20:46
*        Version : 1.0v
*
*    Description : Use libredwg to read data from DWG and
*                  output them to Tcl script for Draw.
*
*      Key words : OpenCASCADE, libredwg, Draw Test Harness
*/

#include 
"dwg.h"

#include 
<fstream>
#include 
<iostream>

#pragma comment(lib, 
"../Debug/libredwg.lib")

// Output the entities to Tcl for OpenCASCADE Draw.
static std::ofstream theTclExporter("d:/dwg2occ.tcl");


void OutputLine(int id, const Dwg_Entity_LINE* theLine)
{
    
// Draw Tcl command: vline name xa ya za xb yb zb
    theTclExporter << "vline line" << id << " " 
        
<< theLine->start.x << " " << theLine->start.y << " " << theLine->start.z << " " 
        
<< theLine->end.x << " " << theLine->end.y << " " << theLine->end.z << std::endl;
}

void OutputCircle(int id, const Dwg_Entity_CIRCLE* theCircle)
{
    
// Draw Tcl command: circle name x y [z [dx dy dz]] [ux uy [uz]] radius
    
// 1. make a curve
    theTclExporter << "circle circle" << id << " "
        
<< theCircle->center.x << " " << theCircle->center.y << " " << theCircle->center.z << " " 
        
<< "0 0 1 " << theCircle->radius << std::endl;

    
// 2. make edge from the circle
    theTclExporter << "mkedge e" << id << " "
        
<< "circle" << id << std::endl;

    
// 3. display the circle edge
    theTclExporter << "vdisplay e" << id << std::endl;
}

void OutputText(int id, const Dwg_Entity_TEXT* theText)
{
    
// vdrawtext : vdrawtext  : vdrawtext name X Y Z R G B hor_align ver_align angle zoomable height Aspect [Font [isMultiByte]]
    theTclExporter << "vdrawtext " << theText->text_value << " "
        
<< theText->insertion_pt.x << " " << theText->insertion_pt.y << " 0" 
        
<< " 255 255 000 " 
        
<< theText->horiz_alignment << " " << theText->vert_alignment << " " 
        
<< theText->height << " 1 Times-Roman"<< std::endl;
}

int LoadDwg(char* theDwgFile)
{
    
int aResult = 0;

    Dwg_Data aDwgData;

    aResult 
= dwg_read_file(theDwgFile, &aDwgData);

    
for (unsigned int i = 0; i < aDwgData.num_objects; ++i)
    {
        
switch (aDwgData.object[i].type)
        {
        
case DWG_TYPE_LINE:
            OutputLine(i, aDwgData.
object[i].tio.entity->tio.LINE);
            
break;

        
case DWG_TYPE_CIRCLE:
            OutputCircle(i, aDwgData.
object[i].tio.entity->tio.CIRCLE);
            
break;

        
case DWG_TYPE_TEXT:
            OutputText(i, aDwgData.
object[i].tio.entity->tio.TEXT);
            
break;
        }
    }

    
return aResult;
}

int main(int argc, char* argv[])
{
    theTclExporter.flags(std::ios::
fixed);

    theTclExporter 
<< "pload ALL" << std::endl;
    theTclExporter 
<< "vinit" << std::endl;
    theTclExporter 
<< "vtrihedron tr" << std::endl;

    
if (argc < 1)
    {
        std::cout 
<< "please input the dwg file name!" << std::endl;
    }
    
else
    {
        LoadDwg(argv[
1]);
    }

    theTclExporter 
<< "vdisplayall" << std::endl;
    theTclExporter 
<< "vfit" << std::endl;
    theTclExporter 
<< "vhelp" << std::endl;

    
return 0;
}

將生成的dwg2occ.tcl在OpenCASCADE的Draw Test Harness中顯示如下所示:

wps_clip_image-17275

Figure 3.1 Import the Tcl script in the Draw Test Hanress of OpenCASCADE

wps_clip_image-24182

Figure 3.2 Enitites in the DWG file

wps_clip_image-5022

Figure 3.3 Entities in the Draw Test Harness of OpenCASCADE

通過對比發現,直線和圓已經正確讀出,但是文字沒有讀出來。看來Libredwg的可靠性還有待提高啊。

4.Conclusion

通過使用Libredwg來讀取DWG格式中幾何數據,并將其轉換成OpenCASCADE的Draw Test Harness中能執行的Tcl腳本,以方便測試libredwg讀取數據的正確性。

通過簡單測試發現,libredwg能讀取直線和圓,但是文字內容沒有正確讀出,看來libredwg的可靠性還有待提高,但是發現這個開源庫的更新很緩慢。

5. References

1. DWG Wiki: http://en.wikipedia.org/wiki/.dwg

2. Libredwg: http://www.gnu.org/software/libredwg

3. OpenCASCADE Test Harness User’s Guide 6.7.1

 

Libredwg for Visual Studio: OpenCASCADE DataExchange DWG

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美专区18| 国产欧美精品| 亚洲欧洲在线播放| 久久久视频精品| 久久精品国产久精国产思思| 亚洲欧洲av一区二区| 亚洲一区尤物| 亚洲在线观看视频| 欧美专区在线播放| 久久乐国产精品| 国产亚洲福利| 亚洲影院污污.| 亚洲综合色自拍一区| 欧美一区二区三区视频免费| 性欧美18~19sex高清播放| 欧美与黑人午夜性猛交久久久| 久久久久国内| 欧美日韩hd| 国产三级欧美三级日产三级99| 永久免费视频成人| 这里只有精品视频在线| 亚洲欧美精品| 蜜桃av久久久亚洲精品| 亚洲美女少妇无套啪啪呻吟| 亚洲在线视频观看| 米奇777超碰欧美日韩亚洲| 欧美日韩性视频在线| 国产亚洲综合精品| 日韩视频免费观看高清完整版| 中日韩高清电影网| 久久国产天堂福利天堂| 欧美刺激午夜性久久久久久久| 亚洲精品一区二| 久久国产精品亚洲va麻豆| 欧美成人午夜激情在线| 国产精品系列在线| 日韩西西人体444www| 久久成人在线| 亚洲美女毛片| 久久综合九色综合久99| 国产精品久久久一本精品| 亚洲第一网站| 久久国产精品毛片| 一卡二卡3卡四卡高清精品视频 | 亚洲天堂免费观看| 老司机精品视频网站| 国产视频久久网| 亚洲一区二区三区视频| 欧美黄免费看| 久久资源av| 黄色av日韩| 久久久青草青青国产亚洲免观| 亚洲午夜激情| 国产精品成人一区二区三区夜夜夜| 亚洲精品免费看| 欧美黄色大片网站| 免费看的黄色欧美网站| 在线观看日韩专区| 免费在线欧美视频| 久久阴道视频| 最新中文字幕亚洲| 亚洲国产精品一区二区第四页av | 亚洲国产一区二区三区在线播 | 日韩视频精品在线| 欧美激情亚洲| 免费看黄裸体一级大秀欧美| 激情欧美一区二区三区| 久色婷婷小香蕉久久| 久久不射电影网| 精品99视频| 久久午夜激情| 蜜桃av久久久亚洲精品| 亚洲国产综合在线| 91久久亚洲| 欧美日韩视频免费播放| 国产精品99久久久久久久女警| 99riav1国产精品视频| 欧美日韩在线大尺度| 亚洲欧美日韩精品久久奇米色影视| 夜夜爽99久久国产综合精品女不卡| 欧美日韩精品一区二区三区四区| 亚洲午夜免费视频| 亚洲夜间福利| 激情综合网址| 欧美黄色aa电影| 国产精品v一区二区三区| 亚洲综合另类| 久久久精品五月天| 日韩视频免费观看高清完整版| 99精品欧美一区| 国产精品综合网站| 久久综合伊人77777蜜臀| 久久免费高清视频| 一本色道久久精品| 性色av香蕉一区二区| 亚洲国产精品传媒在线观看 | 欧美尤物巨大精品爽| 久久久久九九视频| 一区二区三区高清视频在线观看| 亚洲视频一区二区在线观看 | 亚洲欧美激情精品一区二区| 久久不射电影网| 在线视频亚洲一区| 久久av二区| 亚洲视频在线观看网站| 欧美在线视频网站| 夜夜嗨网站十八久久| 久久成人免费视频| 中日韩男男gay无套| 久久九九精品99国产精品| 日韩亚洲欧美一区| 久久aⅴ乱码一区二区三区| 一区二区电影免费观看| 亚洲无线视频| 国产视频亚洲| 亚洲免费电影在线观看| 精品成人国产| 亚洲欧美激情诱惑| 欧美高清视频在线| 欧美在线观看网址综合| 欧美国产1区2区| 久久精品人人做人人综合| 欧美日韩一区自拍| 91久久久在线| 亚洲人成7777| 亚洲国产一区二区视频| 亚洲男同1069视频| 亚洲深夜影院| 欧美剧在线免费观看网站| 欧美第一黄网免费网站| 国产原创一区二区| 亚洲自拍偷拍福利| 亚洲在线免费观看| 欧美四级在线| 99热精品在线| 亚洲色诱最新| 欧美日韩免费| 在线亚洲成人| 亚洲男人的天堂在线| 欧美日韩一区二区三区视频 | 久热re这里精品视频在线6| 国产精品视频网| 亚洲图中文字幕| 先锋影音一区二区三区| 国产精品国产三级国产普通话99| 日韩视频―中文字幕| 一区二区三区视频在线看 | 韩国三级电影久久久久久| 一区二区激情视频| 欧美一区2区三区4区公司二百 | 国产精品久久久久久久久久免费看| 亚洲精品黄网在线观看| 999亚洲国产精| 欧美三区美女| 亚洲婷婷综合久久一本伊一区| 亚洲一二三区在线| 国产精品久久久久免费a∨| 亚洲视频导航| 久久久九九九九| 亚洲高清影视| 欧美日韩精选| 欧美亚洲视频在线观看| 狂野欧美激情性xxxx欧美| 亚洲国产清纯| 国产精品久久久久77777| 午夜激情一区| 免费不卡视频| 亚洲天堂免费观看| 国产一区二区三区的电影| 久久嫩草精品久久久精品一| 亚洲国产欧美日韩精品| 亚洲欧美视频一区二区三区| 国产视频欧美视频| 欧美mv日韩mv国产网站app| 99精品视频免费全部在线| 久久精品人人做人人爽| 亚洲精选成人| 国产美女精品一区二区三区| 久久―日本道色综合久久| 一本色道**综合亚洲精品蜜桃冫| 久久狠狠一本精品综合网| 亚洲另类在线一区| 狠狠色综合网| 国产精品av久久久久久麻豆网| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲精品孕妇| 久久人人爽人人爽| 日韩视频免费大全中文字幕| 国产噜噜噜噜噜久久久久久久久 | 亚洲一区二区在线观看视频| 国产亚洲午夜高清国产拍精品| 免费91麻豆精品国产自产在线观看| 一区二区三区.www| 亚洲福利在线视频| 久久国产天堂福利天堂| 国产精品99久久久久久久久久久久| 亚洲国产一区二区三区青草影视| 国产一区二区三区黄| 国产精品久久久久久久久免费桃花 | 欧美日韩免费高清|