最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python通過dxfgrabber庫實現(xiàn)獲取CAD信息

 更新時間:2023年06月02日 09:28:21   作者:一個有夢有戲的人  
dxfgrabber?是一個?Python?庫,用于讀取和解析?AutoCAD?DXF(Drawing?Exchange?Format)文件,本文就來教教大家如何利用dxfgrabber庫實現(xiàn)獲取CAD信息吧

前言

最近需要通過python來獲取cad模型的內(nèi)容信息,然而筆者也沒學(xué)過python,只能用過查詢+動手摸索一步一步進行下去,然后通過dxfgrabber進行本次的學(xué)習(xí)與實踐,在通過Java去執(zhí)行腳本獲取值。以下就是筆者對本次學(xué)習(xí)與工作的記錄。

dxfgrabber庫

dxfgrabber 是一個 Python 庫,用于讀取和解析 AutoCAD DXF(Drawing Exchange Format)文件。DXF 是一種常用的 CAD 文件格式,用于存儲和交換二維和三維圖形數(shù)據(jù)。dxfgrabber 提供了一個簡單而強大的接口,用于從 DXF 文件中提取圖形對象的信息,如線段、圓、多邊形、文本等。它可以讀取 DXF 文件的實體(entities)、圖層(layers)、塊(blocks)、屬性(attributes)等元素,并提供了方便的方法來訪問和操作這些數(shù)據(jù)。使用 dxfgrabber,你可以編寫 Python 腳本來讀取和分析 DXF 文件,提取其中的幾何信息、屬性數(shù)據(jù)或其他圖形元素。這使得你可以輕松地處理和轉(zhuǎn)換 DXF 數(shù)據(jù),進行自動化的 CAD 數(shù)據(jù)處理、生成報告、可視化或其他相關(guān)任務(wù)。總之,dxfgrabber 是一個方便的工具,使你能夠輕松地處理和分析 DXF 文件,從中提取所需的圖形和屬性信息。

具體內(nèi)容與api可以看一下官方文檔:dxfgrabber — dxfgrabber 1.0.0 documentation

DXF的內(nèi)容

在解析CAD模型時,我們是通過轉(zhuǎn)成DXF文件,通過對DXF文件進行解析,從而得到所需的數(shù)據(jù)集。

我們通過讀取.dxf文件獲得一個dxf對象,這里我準備了一個dxf文件

dxf = dxfgrabber.readfile("D:\\Code\\draft.dxf")

接著我們在下一行打個斷點,可以查看讀到得文件得對象都有什么屬性。

從Expression中就已經(jīng)可以之間看到有那些數(shù)據(jù)了。

dxfgrabber中的entities

先看一下entities,在 dxfgrabber 中,entities 是一個 DXF 文件中所有實體對象的集合。每個實體對象都具有一組特定的屬性,可以通過訪問這些屬性來獲取有關(guān)實體的信息,他的基類是Shape

通過斷點查看屬性,但是不管是實體內(nèi)部還是實體各種類型下的屬性,不同的DXF文件可能包含其他自定義屬性或應(yīng)用特定的標準屬性,這取決于創(chuàng)建DXF文件的工具和設(shè)置。

但是,不同得圖形類型就會呈現(xiàn)不同的數(shù)據(jù)屬性。

LINE類型的數(shù)據(jù)

首先看一下line類型的數(shù)據(jù),通過expression可以看出線形的某些數(shù)據(jù),其中start和end是其起始坐標。以及顏色等其他屬性。

這里我調(diào)用其方法打印出來每條線的起始位置坐標,這個如果是需要繪制那種特定的路線,那么可以根據(jù)他的顏色值來進行判斷。如下代碼,我通過每個實體的dxftype去判斷是何種類型,以下只是判斷了線型,并且獲取其起點坐標,以及顏色數(shù)值。

# -*- coding: utf-8 -*-
import dxfgrabber


def get_line_coordinates():
    dxf = dxfgrabber.readfile("D:\\Code\\draft.dxf")
    coordinates = []
    for e in dxf.entities:
        if e.dxftype == 'LINE':
            start_x = e.start[0]
            start_y = e.start[1]
            start_z = e.start[2]
            color = e.color
            coordinates.append((start_x, start_y, start_z))
            print(u"顏色:" + str(color) + u", " + e.dxftype + u" - 起點坐標:" + str(start_x) + u", " + str(start_y)
                  + u", " + str(start_z));
    return coordinates


line_coordinates = get_line_coordinates()
print(line_coordinates)

結(jié)果如下的打印輸出

6547608e022&title=&width=810.6666666666666)

CIRCLE類型的數(shù)據(jù)

通過斷點的方式來查看circle類型中存在著那些屬性,其中最常見的就是以下屬性:

  • center:圓心坐標,表示為一個包含X、Y、Z值的元組或點對象。
  • radius:圓的半徑,表示為一個浮點數(shù)。
  • thickness:圓的厚度,表示為一個浮點數(shù)。通常在2D繪圖中為0。
  • color:圓的顏色,表示為一個整數(shù)值??梢允褂妙伾磉M行解釋。
  • layer:圓所在的圖層名稱,表示為一個字符串。
  • linetype:圓的線型名稱,表示為一個字符串。例如,"CONTINUOUS"表示實線。
  • linetype_scale:圓的線型比例,表示為一個浮點數(shù)。
  • extrusion:圓的擠壓方向,表示為一個包含X、Y、Z值的元組或向量對象。通常在2D繪圖中為(0, 0, 1)。
  • start_angle:圓的起始角度,表示為一個浮點數(shù)。默認為0度,以弧度為單位。
  • end_angle:圓的結(jié)束角度,表示為一個浮點數(shù)。默認為2π(360度),以弧度為單位。

這里接下來就不演示代碼了,需要查看屬性可以通過斷點的形式去查看,通過點屬性的方式得到相應(yīng)的值,就只是介紹可能存在的屬性字段。

POLYLINE類型的數(shù)據(jù)

每個實體類型為POLYLINE(多段線)的實體對象具有以下常見屬性:

  • points:多段線的頂點坐標列表,表示為包含X、Y、Z值的元組或點對象。
  • closed:指示多段線是否閉合的布爾值。
  • thickness:多段線的厚度,表示為一個浮點數(shù)。通常在2D繪圖中為0。
  • color:多段線的顏色,表示為一個整數(shù)值。可以使用顏色表進行解釋。
  • layer:多段線所在的圖層名稱,表示為一個字符串。
  • linetype:多段線的線型名稱,表示為一個字符串。例如,"CONTINUOUS"表示實線。
  • linetype_scale:多段線的線型比例,表示為一個浮點數(shù)。
  • extrusion:多段線的擠壓方向,表示為一個包含X、Y、Z值的元組或向量對象。通常在2D繪圖中為(0, 0, 1)。
  • elevation:多段線的高度(Z軸值),表示為一個浮點數(shù)。通常在2D繪圖中為0。

POINT類型的數(shù)據(jù)

每個實體類型為POINT(點)的實體對象具有以下常見屬性:

  • point:點的坐標,表示為一個包含X、Y、Z值的元組或點對象。
  • thickness:點的厚度,表示為一個浮點數(shù)。通常在2D繪圖中為0。
  • color:點的顏色,表示為一個整數(shù)值??梢允褂妙伾磉M行解釋。
  • layer:點所在的圖層名稱,表示為一個字符串。

還有許多數(shù)據(jù)類型就不一一介紹,根據(jù)具體的DXF文件,不同文件可能存在不同數(shù)據(jù)。

dxfgrabber中的layers

layers,在dxfgrabber庫中,要查看圖層的相關(guān)信息,可以通過庫里面的layers來獲取他包含所有圖層的列表。

通過斷點可以看到其內(nèi)部有哪些屬性,不同的dxf文件,屬性都可能不同。以下是我這個dxf文件所有的屬性

  • name:圖層的名稱,表示為一個字符串。
  • color:圖層的顏色,表示為一個整數(shù)值??梢允褂妙伾磉M行解釋。
  • linetype:圖層的線型名稱,表示為一個字符串。例如,"CONTINUOUS"表示實線。
  • frozen:一個布爾值,指示圖層是否被凍結(jié)(不可見)。
  • on:屬性用于表示圖層是否處于打開狀態(tài)。
  • locked:一個布爾值,指示圖層是否被鎖定,即無法進行編輯。

dxfgrabber中的blocks

DXF文件的塊(Blocks)信息可以通過訪問blocks屬性來獲取。blocks是一個包含所有塊的字典,其中鍵是塊的名稱,值是表示塊的對象。

每個塊對象具有以下常見屬性和方法:

  • name:塊的名稱,表示為一個字符串。
  • entities:塊中的實體對象列表。
  • basepoint:塊的基點坐標,表示為一個包含X、Y、Z值的元組或點對象。
  • insertion_points:塊的插入點坐標列表,表示為包含X、Y、Z值的元組或點對象。
  • has_attributes:一個布爾值,指示塊是否包含屬性定義。
  • get_attribute(tag):獲取塊的屬性值,其中tag為屬性的標簽。
  • extrusion:實體對象的擠出方向。
  • is_xref:屬性用于表示實體對象是否來自外部引用,外部引用是一種將其他DXF文件中的實體對象鏈接到當(dāng)前DXF文件的機制。

案例

本次案例是編寫一個腳本,再通過Java來執(zhí)行這段代碼。用的環(huán)境是python2.7,jdk1.8。雖然比較老了,下次再把python升到3.10。

python代碼

首先是python代碼,本次編寫邏輯很簡單,只是單純的使用dxfgrabber庫讀取dxf文件,并且以json的形式把值返回回去,這里只是判斷實體的類型為LINE,輸出類型與起點的x,y坐標值。

# -*- coding: utf-8 -*-
import sys
import json
import dxfgrabber
def get_line_coordinates():
    dxf = dxfgrabber.readfile("D:\\Code\\draft.dxf")
    coordinates = []
    for e in dxf.entities:
        if e.dxftype == 'LINE':
            data = {
				"type": e.dxftype,
                "x": e.start[0],
                "y": e.start[1]
            }
            coordinates.append(data)
    return coordinates
line_coordinates = get_line_coordinates()
# 將結(jié)果寫入到標準輸出,而不是打印
sys.stdout.write(json.dumps(line_coordinates))

Java代碼

因為在Java環(huán)境中執(zhí)行python代碼,會出現(xiàn)環(huán)境不同,找不到庫,所以需要設(shè)置一下環(huán)境路徑,以及python的解釋器路徑。通過PythonInterpreter.get方法去執(zhí)行函數(shù),需要攜帶兩個參數(shù),一個是函數(shù)名,另一個是返回的對象類型,這里我們用PyFunction類來進行返回,通過調(diào)用__call__來獲得一個python對象,我們返回的是一個數(shù)組對象,所以這里可以轉(zhuǎn)成PyList對象。后面通過alibaba.fastjson來轉(zhuǎn)成JSONArray對象。

這些代碼也就只是為了學(xué)習(xí)而制作,身為一名python小白,對這些還不夠理解,可能常規(guī)做法并不這樣做,因此后續(xù)還需要更多的嘗試。

/**
* @Author: lyd
* @Description: 執(zhí)行代碼
* @Date: 2023/5/31
*/
public class JavaExecutorPythonUtils {
    // TODO Auto-generated method stub
    public static void main(String[] args) throws JsonProcessingException {
        System.setProperty("python.path", "C:\\Users\\14194\\.windows-build-tools\\python27\\Lib\\site-packages");
        PythonInterpreter interpreter = new PythonInterpreter();
        interpreter.execfile("D:\\Code\\test.py");
        // 設(shè)置 Python 解釋器路徑
        interpreter.exec("import sys");
        interpreter.exec("sys.path.append('C:\\Users\\14194\\.windows-build-tools\\python27')");
        // 第一個參數(shù)為需要執(zhí)行的函數(shù)(變量)的名字,第二個參數(shù)為期望返回的對象類型
        PyFunction pyFunction = interpreter.get("get_line_coordinates", PyFunction.class);
        //調(diào)用函數(shù),如果函數(shù)需要參數(shù),在Java中必須先將參數(shù)轉(zhuǎn)化為對應(yīng)的“Python類型”
        PyObject pyobj = pyFunction.__call__();
        PyList pyList = (PyList) pyobj;
        ObjectMapper objectMapper = new ObjectMapper();
        String s = objectMapper.writeValueAsString(pyList);
        JSONArray jsonArray = JSON.parseArray(s);
        System.out.println("the anwser is: " + jsonArray);
    }
}

運行結(jié)果

總結(jié)

本次就是第一次對python讀取cad信息進行摸索,好多都不是很會,也沒有學(xué)過python,對python語言還是不夠理解,這也就導(dǎo)致了在Java中執(zhí)行腳本的時候有些摸不著頭腦,也希望看到本篇文章的讀者能夠給一些建議與信息提示??偟膩碚f,就是用過dxfgrabber庫獲取文件對象,在讀取所需的內(nèi)容,工作使用肯定不可能如此簡單就完成,我的需求是獲取cad中的某些路徑,就差不多是cad圖中描繪了車的行動軌跡路線,然后我想把這些行動軌跡的坐標獲取出來,通過后端的一些處理在傳到前端web界面顯示。希望路過的伙伴給個建議或提示。

以上就是Python通過dxfgrabber庫實現(xiàn)獲取CAD信息的詳細內(nèi)容,更多關(guān)于Python獲取CAD信息的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python使用BeautifulSoup進行XPath和CSS選擇器定位

    Python使用BeautifulSoup進行XPath和CSS選擇器定位

    在 Python 中,BeautifulSoup 是一個常用的 HTML 和 XML 解析庫,它允許我們輕松地定位和提取網(wǎng)頁中的特定元素,本文將詳細介紹如何在 BeautifulSoup 中使用 XPath 和 CSS 選擇器定位 HTML 元素,并提供示例代碼以幫助新手理解這些概念,需要的朋友可以參考下
    2024-11-11
  • Python閉包實現(xiàn)計數(shù)器的方法

    Python閉包實現(xiàn)計數(shù)器的方法

    這篇文章主要介紹了Python閉包實現(xiàn)計數(shù)器的方法,分析了閉包的概念及實現(xiàn)計數(shù)器的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • Pygame實現(xiàn)監(jiān)聽鼠標示例詳解

    Pygame實現(xiàn)監(jiān)聽鼠標示例詳解

    這篇文章主要介紹了通過Pygame模塊實現(xiàn)監(jiān)聽鼠標的功能,文章的示例代碼講解詳細,對我們的學(xué)習(xí)或工作有一定的價值,感興趣的小伙伴可以了解一下
    2021-12-12
  • Django中使用Whoosh進行全文檢索的方法

    Django中使用Whoosh進行全文檢索的方法

    這篇文章主要介紹了Django中使用Whoosh進行全文檢索的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • CentOS系統(tǒng)上安裝Conda的詳細指南

    CentOS系統(tǒng)上安裝Conda的詳細指南

    Conda 是一個開源的包管理系統(tǒng)和環(huán)境管理系統(tǒng),廣泛應(yīng)用于數(shù)據(jù)科學(xué)和機器學(xué)習(xí)領(lǐng)域,本文將詳細介紹如何在 CentOS 系統(tǒng)上安裝 Conda吧
    2025-03-03
  • 如何在Python?中使用?join()?函數(shù)把列表拼接成一個字符串

    如何在Python?中使用?join()?函數(shù)把列表拼接成一個字符串

    這篇文章主要介紹了如何在Python?中使用?join()?函數(shù)把列表拼接成一個字符串,文章圍繞?join()?函數(shù)的相關(guān)資料展開詳細內(nèi)容,需要的小伙伴可以參考一下,希望對你有幫助
    2022-03-03
  • 基于Python實現(xiàn)的百度貼吧網(wǎng)絡(luò)爬蟲實例

    基于Python實現(xiàn)的百度貼吧網(wǎng)絡(luò)爬蟲實例

    這篇文章主要介紹了基于Python實現(xiàn)的百度貼吧網(wǎng)絡(luò)爬蟲,實例分析了Python實現(xiàn)網(wǎng)絡(luò)爬蟲的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • Python配置pip國內(nèi)鏡像源的實現(xiàn)

    Python配置pip國內(nèi)鏡像源的實現(xiàn)

    這篇文章主要介紹了Python配置pip國內(nèi)鏡像源的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Python 自動化修改word的案例

    Python 自動化修改word的案例

    這篇文章主要介紹了Python 自動化修改word的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python Json與pickle模塊序列化使用介紹

    Python Json與pickle模塊序列化使用介紹

    這篇文章主要為大家介紹了Python中常用的兩個序列化模塊:pickle序列化和json序列化。文中的示例代碼講解詳細,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-10-10

最新評論

濮阳县| 东源县| 太保市| 永泰县| 荃湾区| 宝清县| 泗阳县| 彭山县| 灵山县| 蚌埠市| 根河市| 南江县| 库车县| 枣庄市| 乌拉特后旗| 高碑店市| 抚顺县| 江山市| 阳原县| 康乐县| 临沭县| 北京市| 沙雅县| 高青县| 徐汇区| 泸州市| 赤壁市| 抚远县| 勐海县| 昭苏县| 定襄县| 辰溪县| 水城县| 河池市| 昌江| 鸡东县| 凭祥市| 英德市| 桃江县| 广南县| 连州市|