日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 二次开发 AutoCAD 简介

發布時間:2023/12/14 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 二次开发 AutoCAD 简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目 錄

  • Blog Links
  • 一、前言
  • 二、ActiveX Automation
  • 三、開發文檔/工具
    • 3.1 AutoCAD Help
    • 3.2 ArxDbg
  • 四、可用Python庫
    • 4.1 pyautocad
    • 4.2 pywin32
    • 4.3 ezdxf
    • 4.4 dxfgrabber
    • 4.5 dxfwrite
    • 4.6 gdal
  • 五、與CAD的連接
    • 5.1 ProgID
    • 5.2 示例
  • 六、數據轉換
  • 七、繪圖
    • 7.1 倒角矩形
    • 7.2 閉合多段線圖案填充
    • 7.3 動態塊
  • 八、顏色
  • 九、重要方法
    • 9.1 SendCommad
    • 9.2 GetEntity
    • 9.3 SetXData/GetXData
  • 十、文件
    • 10.1 另存為.dwg/.dxf
    • 10.2 另存為.pdf
    • 10.3 另存為.jpg/.png
  • 十一、致謝
  • 十二、說明
  • 十三、尾聲
  • 十四、參考文獻



Blog Links


  • DalNur | 博客總目錄

  • Python 二次開發 AutoCAD 簡介

  • Python 二次開發 AutoCAD 設置

  • Python 二次開發 AutoCAD 圖層

  • Python 二次開發 AutoCAD 繪圖

  • Python 二次開發 AutoCAD 修改

  • Python 二次開發 AutoCAD 塊組

  • Python 二次開發 AutoCAD 注釋

  • Python 二次開發 AutoCAD 文件

  • Python 二次開發 AutoCAD 選擇集






一、前言


??AutoCAD(Autodesk Computer Aided Design)是 Autodesk(歐特克)公司首次于 1982 年開發的自動計算機輔助設計軟件,在土木建筑,裝飾裝潢,工業制圖,工程制圖,電子工業,服裝加工等諸多領域有著廣泛的應用,主要用于二維繪圖、詳細繪制、設計文檔和基本三維設計,現已經成為國際上廣為流行的繪圖工具。


??上世紀 80 年代末 90 年代初, Guido van Rossum 在荷蘭國家數學和計算機科學研究所設計出計算機程序設計語言 Python 。 Python 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言,具有很強的可讀性。相比其他語言,語法結構更具特色。同時,它也是一種跨平臺的計算機程序設計語言,越來越多地用于獨立的、大型項目的開發。



??為什么采用 Python 語言二次開發 AutoCAD ?


????Python 是一種代表簡單主義思想的語言,簡單易學,應用范圍廣泛 。

????Python 擁有大量第三方庫,可輕易實現各種應用程序間的數據交換,如 AutoCAD 與 Excel / Word 間的數據交換。

????只要具有基礎的 Python 編程能力,就可實現對 AutoCAD 的二次開發,而不必特意學習 VBA 或者 LISP 。



??吾生也有涯,而知也無涯,以有涯隨無涯,殆己。



??總之,人的精力是有限的, Windows 平臺上的應用程序是各種各樣的,我們力爭只熟練掌握一門編程語言就能將各種應用程序串聯起來,以實現數據的順利傳遞,從而大幅度地提高工作效率和質量。這也是我當時在全網參考代碼很少的情況下堅持用 Python 調用 CAD 的原因。


??這個過程并非順利,本人純野生學習 Python,很多小 bug 都要查很久的資料才能解決。因粗心看錯了幫助文檔的參數定義,在繪制橢圓這卡了將近一個月;因不了解 CAD 系統對顏色的定義規則,在模型空間背景色設置上卡了將近3個月,通過不斷測試,硬是靠最原始的總結規律得到了顏色指定的換算公式;因不了解 Python 中的數據類型如何對應 AutoCAD 中的 Variant,圖案填充這又卡了好幾個月,最終在 ke1078 大神的幫助下,順利實現了圖案填充的繪制。


??為了使后續的學習者少走彎路,把寶貴的時間用于所研究的問題上,而非軟件操作層面,特此,將本人所了解到的 Python 語言二次開發 CAD 的有關內容記錄在此系列博客上。還需說明的是,因本人能力和水平確實有限,博客中的有關表述可能不嚴謹,甚至錯誤,還請大家及時批評指正。






二、ActiveX Automation


??AutoCAD 二次開發主要接口有 ObjectARX 接口、.net API 接口、AutoLisp 接口、ActiveX (com) 接口,更多詳見: AutoCAD二次開發簡介 。


AutoCAD API Performance

??ActiveX Automation 是 ActiveX 為 Windows 用戶提供的一項重要技術,可以使各應用程序間通過數據嵌入或鏈接的方式共享數據,并在 Windows 系統統一管理下進行協調,讓這些應用程序以一定的流程相互溝通,相互控制,即一個程序暴露其可用對象,另一個程序控制這些對象,設置屬性、調用方法,從而實現某種功能,完成所要求的動作。


??AutoCAD 程序開放某些對象給 Windows 系統,使用程序語言并通過 ActiveX Automation,我們就可以對這些對象進行存取。 AutoCAD ActiveX 接口的主要構件就對象,每一個顯露的對象均精確代表一個 AutoCAD 組件。


??AutoCAD 以分層結構來組織對象,分層結構的視圖稱為“對象模型”,如下圖所示。Application 對象是 AutoCAD ActiveX Automation 對象模型的根對象,通過它,用戶可以訪問任何其他的對象或任何對象指定的特性或方法。對象模型給出了上級對象與下級對象之間的訪問關系。




AutoCAD對象模型 (部分)

??AutoCAD 對象都至少具有一個屬性,用于描述對象。例如,圓具有半徑、面積、線型等屬性,通過這些屬性能描述出一個具體的圓。


????參考資料: AutoCAD ActiveX 二次開發技術 。




三、開發文檔/工具


3.1 AutoCAD Help


??AutoCAD 二次開發的兩個官方幫助文檔: ActiveX Reference Guide ActiveX Develop’s Guide 可在 CAD 的安裝目中獲得,兩個文件名分別為:acadauto.chm 和 acad_aag.chm 。


??可按如下方式獲取: 首先,安裝文件搜索神器 Everything;然后,在搜索欄內輸入 acadauto.chm,便可看到 ActiveX Reference Guide 文件及其所在路徑,該文件是隨 AutoCAD 程序的安裝一起附帶到你的電腦內的,只要你安裝了 CAD,該文件必然存在。




幫助文檔的獲取


3.2 ArxDbg


??ArxDbg 是 ObjectARX SDK 中包含多年的示例項目的名稱。它的主要目的是演示如何使用 ObjectARX API,但它本身就是一個完全獨立的實用程序。ObjectARX 程序員經常在開發期間使用此實用程序來測試和執行他們的應用程序代碼。更多詳見: [ObjectARX] ArxDbg介紹、自動加載及其下載 。



ArxDbg

????下載鏈接: ACAD二次開發必備輔助工具-ArxDbg 2005-2021各版本 。




四、可用Python庫


??在介紹各種 Python 庫前,有必要對 AutoCAD 的文件系統做一個簡單的了解。


??dwg 是 AutoCAD 以及基于 AutoCAD 的軟件保存設計數據所用的一種專有文件格式 (AutoCAD的圖形文件)。


??dxf 是 AutoCAD 繪圖交換文件,它是 Autodesk 公司開發的用于 AutoCAD 與其它軟件之間進行 CAD 數據交換的 CAD 數據文件格式。


??dxf (圖形交換文件) 是一種開放的矢量數據格式,它包含對應的 dwg 文件的全部信息,主要用于不同版本 CAD 間的數據交換。可以分為兩類:ASCII 格式和二進制格式;ASCII 具有可讀性好的特點,但占用的空間較大;二進制格式則占用的空間小、讀取速度快。由于 AutoCAD 是最流行的 CAD 系統,DXF 也被廣泛使用,成為事實上的標準。絕大多數 CAD 系統都能讀入或輸出 DXF 文件。ASCII 格式的 DXF 可以用文本編輯器進行查看。它包含對應的 dwg 文件的全部信息,不是 ASCII 碼形式,可讀性差,但用它形成圖形速度快,不同類型的計算機哪怕是用同一版本的文件,其 dwg 文件也是不可交換的。為了克服這一缺點,AutoCAD 提供了 dxf 類型文件,其內部為 ASCII 碼,這樣不同類型的計算機可通過交換 dxf 文件來達到交換圖形的目的,由于 dxf 文件可讀性好,用戶可方便地對它進行修改,編程,達到從外部圖形進行編輯和修改的目的。


??dwg 格式以及它的 ASCII 格式變體 dxf,已經成為 CAD 制圖數據交換中的事實文件標準。



??.dwg:脫離 AutoCAD 軟件環境讀寫 dwg 格式文件,基本無法實現,通過 COM 自動化操作是一個可選的方案。[1]


??.dxf:是與其它軟件進行 CAD 數據交換的文件格式,可脫離 AutoCAD 軟件環境讀寫,如利用 ezdxf 庫。[1]




4.1 pyautocad


??pyautocad 庫由俄羅斯工程師 Roman Haritonov 開發,用于簡化使用 Python 語言書寫 AutoCAD ActiveX Automation 腳本。主要參考資料如下:


????PiPy: pyautocad 0.2.0 。

????GitHub: reclosedev/pyautocad 。

????Documentation: pyautocad’s documentation 。

????Blog: 1. Python3操作AutoCAD:利用pyautocad庫能夠自動化地進行CAD畫圖. 陸壹爵爺 。

?????? 2. 利用python控制Autocad:pyautocad. bsider 。



pyautocad庫與AutoCAD的連接

??事實上,pyautocad 庫僅僅起到了接口作用,pyautocad 利用 comtypes.client 啟動或連接 CAD (pyautocad源代碼),如下圖所示:



pyautocad源代碼 (部分)

import comtypes.clienttry:acad = comtypes.client.GetActiveObject('AutoCAD.Application', dynamic=True) except WindowsError:acad = comtypes.client.CreateObject('AutoCAD.Application', dynamic=True)acad.Visible = True pyautocad啟動/連接CAD的Python代碼

4.2 pywin32


??pywin32 是一個 Python 庫,為 Python 提供訪問 Windows API 的擴展,提供了齊全的 windows 常量、接口、線程以及 COM 機制等。了解更多詳見博客:如何利用Python和win32編程避免重復性體力勞動(一) 。主要參考資料如下:


????PiPy: https://pypi.org/project/pywin32 。

????Github: https://github.com/mhammond/pywin32 。


????與 CAD 的連接

#!/usr/bin/env python # -*- coding: utf-8 -*-"""=============================Author: DalNurEmail: liyang@alu.hit.edu.cn============================= """import win32com.client as win32wincad = win32.Dispatch("AutoCAD.Application") doc = wincad.ActiveDocument msp = doc.ModelSpacedoc.Utility.Prompt("Hello! Autocad from pywin32com.\n")print(doc.Name)

????示例

win32com連接CAD示例 (與Excel交互)

????pywin32 Help

??首先確保你已經成功安裝了 pywin32 模塊,然后在搜索神器 Everything 的搜索欄中輸入 PyWin32.chm,便可得到其所在的路徑。



PyWin32幫助文檔的獲取

PyWin32幫助文檔

4.3 ezdxf


????ezdxf 庫的安裝

??如已安裝 Anaconda,在 Anaconda Prompt 中鍵入 pip install ezdxf 便可自動完成該庫的導入,如下圖所示;如未安裝 Anaconda,也可 pip 手動導入,其在 PyPI (Python Package Index) 上的注冊地址為:https://pypi.org/project/ezdxf/ 。


????Github: https://github.com/mozman/ezdxf 。

????Documentation: https://ezdxf.readthedocs.io/en/stable/ 。

????Blog: 使用Python讀寫DXF和DWG文件 。


????示例

import ezdxf# Create a new DXF document. doc = ezdxf.new(dxfversion='R2010')# Create new table entries (layers, linetypes, text styles, ...). doc.layers.new('TEXTLAYER', dxfattribs={'color': 2})# DXF entities (LINE, TEXT, ...) reside in a layout (modelspace, # paperspace layout or block definition). msp = doc.modelspace()# Add entities to a layout by factory methods: layout.add_...() msp.add_line((0, 0), (10, 10), dxfattribs={'color': 7}) msp.add_text('Test',dxfattribs={'layer': 'TEXTLAYER'}).set_pos((0, 0.2), align='CENTER')# Save DXF document. doc.saveas('test.dxf')

ezdxf生成.dxf文件

4.4 dxfgrabber


????Github: https://github.com/mozman/dxfgrabber 。

????Documentation: https://dxfgrabber.readthedocs.io/en/latest/ 。



4.5 dxfwrite


????Github: https://github.com/mozman/dxfwrite 。

????Documentation: https://dxfwrite.readthedocs.io/en/latest/ 。



4.6 gdal


????Blog: 使用Python讀寫DXF和DWG文件 。



??以上,便是截止目前常見的 AutoCAD 二次開發 Python 庫,可根據個人需要,選擇合適的 Python 庫。


??若想創建 .dwg 文件,建議采用 pywin32 庫;若想創建 .dxf 文件,同時脫離 AutoCAD 軟件環境,則可采用 ezdxf、dxfwrite,也可以采用 pywin32 庫繪制好相應的文件后,以另存為的方式創建 .dxf 文件。


??事實上,pyautocad 庫和 pywin32 庫僅僅起到了接口作用,它們只是構建好數據傳輸的通道,真正實現圖形創建的是 AutoCAD 程序本身,AutoCAD 應用程序接收來自 Python 的命令后,完成圖形的繪制等。因此,大家不必糾結于采用何種方式與 CAD 建立連接。


??就反應速度而言,pyautocad 庫相對較慢,而且好多高級的繪圖功能 pyautocad 庫暫時無法實現,如圖案填充、選擇集功能的實現等。所以,建議大家采用 pywin32 庫 即 win32com 方式連接 CAD 創建 .dwg 文件。除了速度方面的原因外,利用這個庫,可以與 Excel、Word、Sap2000 等其他程序構建起數據傳輸通道,看到這是不是覺得很爽,對的,我們的最終目的就是要用 Python 將各種計算軟件聯系起來,以實現某一工程問題的快速處理。例如一幢超高層建筑的設計,我們可以按如下方式進行: Excel 提供用戶輸入數據、SAP2000 進行全局多工況內力彈性計算、Abaqus 完成局部彈塑性分析、nCode 進行個別鋼構件的高周疲勞分析、AutoCAD 完成施工圖的繪制、Word 生成最終的計算說明文件,以上操作均可在 Python 的控制下快速進行。



????Python 二次開發 Excel 簡介

????Python 二次開發 SAP2000 概述

????Abaqus 二次開發 基本概念

????nCodeDL 疲勞分析 簡明教程

????Python 二次開發 Word 簡介



.dwg文件的創建邏輯

.dxf文件的創建邏輯


五、與CAD的連接


5.1 ProgID


??如果電腦中安裝了不止一個版本的 AutoCAD 為了順利完成指定版本 CAD 的調用則需指定 ProgID,即 ×××.Dispatch(“AutoCAD.Application.19”),其中 “AutoCAD.Application.19” 就是 2014 版 AutoCAD 的 ProgID。如下代碼將建立起 Python 與 2010 版 AutoCAD 的連接:


#!/usr/bin/env python # -*- coding: utf-8 -*-"""=============================Author: DalNurEmail: liyang@alu.hit.edu.cn============================= """import win32com.client import pythoncomwincad = win32com.client.Dispatch("AutoCAD.Application.18") doc = wincad.ActiveDocument doc.Utility.Prompt("Hello! Autocad from pywin32com.\n") msp = doc.ModelSpace print(doc.Name)

??根據 CAD 版本的不同, ProgID 可能會發生變化,部分版本 CAD 的 ProgID 如下:


AutoCAD 版本ProgID
2010AutoCAD.Application.18
2014AutoCAD.Application.19

??常見版本 CAD 的 ProgID 詳見博文: autocad application 版本 。


??另外,CAD 的 ProgID 可在官方二次開發幫助文檔 ActiveX Reference Guide 中查看,具體操作如下圖所示:



ProgID的查看

5.2 示例


#!/usr/bin/env python # -*- coding: utf-8 -*-"""=============================Author: DalNurEmail: liyang@alu.hit.edu.cn============================= """from pyautocad import Autocad, APoint import comtypes.client import time# 1.CAD自動啟動 ProgID = "AutoCAD.Application.19" # 2014版CADProgramIDtry:acad = comtypes.client.GetActiveObject(ProgID, dynamic=True) except WindowsError:acad = comtypes.client.CreateObject(ProgID, dynamic=True)acad.Visible = Trueprint("The program will pause for 60 seconds.") # 防止報錯 time.sleep(60) # 程序暫停60s運行# 2.連接方式的轉換 acad = Autocad(create_if_not_exists=True) acad.prompt("Hello! AutoCAD from pyautocad.") doc = acad.ActiveDocument print(doc.Name) msp = doc.ModelSpacedwgobj = acad.ActiveDocument.Application.Documents.Add("") dwgobj.Activate() # 設為當前文件。 doc = acad.ActiveDocument print(doc.Name) msp = doc.ModelSpace# 3.創建圖元 x1, y1 = 0, 0 x2, y2 = 100, 100 p1, p2, = APoint(x1, y1), APoint(x2, y2) msp.AddLine(p1, p2)# 4.文件保存 directory = r"D:" # 工作目錄 dwgname = "ZK.dwg" # 工作目錄 path = directory + "\\" + dwgname dwgobj.Close(True, path)# 5.程序退出 acad.ActiveDocument.Application.Quit()


六、數據轉換


??目的: 為了保證程序的順利運行,用戶輸入的數據類型需轉換成 CAD 能識別的數據類型。


??說明: 本人非計算機專業出身,以下表述純屬個人理解,不妥/錯誤之處還請各位批評指正。


??Python 中的數據類型較少,且對數據本身的要求也較為寬松,如一個列表中的各個元素可以分別屬于不同的數據類型,這雖然有利于降低程序的編寫難度,但也對 CAD 的二次開發產生了一些不必要的麻煩。


??在 CAD 二次開發過程中,很多函數/方法的參數要求輸入的數據類型為 Variant (array of objects) ,但在 Python 中似乎又沒有哪一種數據類型與之直接相對應,若采用 list 代替 Variant,那么程序無法順利執行,報錯為 “ 對象數組無效 ”。因此,需要某種轉換方式,將 Python 中定義的變量轉換為能夠被 CAD 識別的數據類型 Variant


??VARIANT 結構體主要是使用在 COM(組件對象模型)中用于傳遞參數使用,它的存在主要是為了保持一個在 COM 參數傳遞方法的統一性,它幾乎包含了所有普通常用類型的數據類型的傳遞,如整型,浮點型,布爾型等,以及相應類型的指針類型,如整型指針。[2]



??部分類型與變量對應關系如下表:


Member nameDescription
VT_EMPTYIndicates that a value was not specified.
VT_R8Indicates a double value.
VT_DISPATCHIndicates an IDispatch pointer.


??另外,NumPy arrays can be passed as VARIANT arrays arguments. The array is converted to a SAFEARRAY according to its type. [3] ( 此為 comptypes 庫幫助文檔原文,本人對計算機了解有限,為了不曲解原文,此處不做翻譯),部分對應關系如下:


NumPy typeVARIANT type
int32, int, intc, int_VT_I4
uint32, uint, uintcVT_UI4
float64, float_VT_R8


??comtypes 是一個輕量級的 python com 包,其中文網站詳見:https://www.cnpython.com/pypi/comtypes;官方文檔詳見:comtypes 1.1.3 documentation 。


??NumPy 是用 Python 進行科學計算的基礎軟件包,其官方的中文文檔詳見網站: Numpy 中文網 。


??在 Python 調用 AutoCAD 過程中,常用的數據轉換函數如下:


#!/usr/bin/env python # -*- coding: utf-8 -*-"""=============================Author: DalNurEmail: liyang@alu.hit.edu.cn============================= """import win32com.client import pythoncomwincad = win32com.client.Dispatch("AutoCAD.Application.19") doc = wincad.ActiveDocument doc.Utility.Prompt("Hello! Autocad from pywin32.") msp = doc.ModelSpace print(doc.Name)def vtpnt(x, y, z=0):"""坐標點轉化為浮點數"""return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x, y, z))def vtobj(obj):"""轉化為對象數組"""return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, obj)def vtfloat(lst):"""列表轉化為浮點數"""return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, lst)def vtint(lst):"""列表轉化為整數"""return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_I2, lst)def vtvariant(lst):"""列表轉化為變體"""return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_VARIANT, lst)

七、繪圖


??本部分僅介紹一些復雜圖形的繪制,更多基礎圖形的繪制詳見博客:Python AutoCAD 繪圖 。


7.1 倒角矩形


#!/usr/bin/env python # -*- coding: utf-8 -*-"""=============================Author: DalNurEmail: liyang@alu.hit.edu.cn============================= """from pyautocad import Autocad, APoint, aDouble import mathpyacad = Autocad(create_if_not_exists=True) pyacad.prompt("Hello! AutoCAD from pyautocad.") print(pyacad.doc.Name)[L, B, R] = [400, 200, 50] # L、B、R分別為矩形的長度、矩形的寬度及圓角半徑。x = [0.5 * (L - 2 * R), 0.5 * L] # 倒角矩形各關鍵點橫坐標的絕對值; y = [0.5 * (B - 2 * R), 0.5 * B] # 倒角矩形各關鍵點縱坐標的絕對值;pnts = [APoint(x[0], -y[1]), APoint(x[1], -y[0]), APoint(x[1], y[0]),APoint(x[0], y[1]), APoint(-x[0], y[1]), APoint(-x[1], y[0]),APoint(-x[1], -y[0]), APoint(-x[0], -y[1])]pnts = [j for i in pnts for j in i] # 將各點坐標順序變換為行數據 pnts = aDouble(pnts) # 轉化為雙精度浮點數plineObj = pyacad.model.AddPolyLine(pnts) plineObj.Closed = True # 閉合多段線 bulgeValue = math.tan(math.pi / 8) # 凸度,為四分之一倍圓弧所對圓心角的正切值。[plineObj.SetBulge(2 * i, bulgeValue) for i in range(4)] # 將多段線的第1、3、5、7部分設置為凸度為bulgevalue的圓弧。

倒角矩形

7.2 閉合多段線圖案填充


#!/usr/bin/env python # -*- coding: utf-8 -*-"""=============================Author: DalNurEmail: liyang@alu.hit.edu.cn============================= """import pythoncom import win32com.clientwincad = win32com.client.Dispatch("AutoCAD.Application") doc = wincad.ActiveDocument doc.Utility.Prompt("Hello! AutoCAD from pywin32.") msp = doc.ModelSpacedef vtobj(obj):return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, obj)def vtfloat(lst):return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, lst)[ptnName, ptnType, bAss] = ["ANSI31", 0, True]pnts = [100, -50, 0, 100, 50, 0, -100, 50, 0, -100, -50, 0] pnts = vtfloat(pnts)plineObj = msp.AddPolyLine(pnts) plineObj.Closed = TrueouterLoop = [] outerLoop.append(plineObj) outerLoop = vtobj(outerLoop) hatchObj = msp.AddHatch(ptnType, ptnName, bAss) hatchObj.AppendOuterLoop(outerLoop) hatchObj.Evaluate() # 進行填充計算,使圖案吻合于邊界。

閉合多段線的圖案填充


7.3 動態塊


??創建動態塊的標準流程為:創建普通塊(B) → 編輯塊 → 指定參數 → 設置動作,詳見: AutoCAD-如何創建動態塊。


??創建如下圖所示的動態塊,塊的名稱為 door,由矩形、圓弧及直線三個圖元構成,并具有三種用戶自定義狀態,分別為縮放、旋轉和翻轉。



#!/usr/bin/env python # -*- coding: utf-8 -*-"""==============================Author: Wang Yifang (SINOMACH)============================== """import win32com.client acad = win32com.client.Dispatch("AutoCAD.Application")# iterate through all objects (entities) in the currently opened drawing # and if its a BlockReference, display its attributes.for entity in acad.ActiveDocument.ModelSpace:name = entity.EntityNameprint(name)if name == 'AcDbBlockReference':if entity.IsDynamicBlock:print("Is dynamic block")block_ = entity.GetDynamicBlockProperties()print(block_)print("print property")for p in block_:print("{")print(p.AllowedValues)print(p.Description)print(p.PropertyName )print(p.ReadOnly)print(p.Show)print(p.UnitsType)print(p.Value)print("}")print("===================================")# 修改動態塊的尺寸if p.PropertyName == "距離1":p.Value = float(10)if p.PropertyName == "角度1":p.Value = float(3.14159265/3)# 角度為弧度制# if p.PropertyName == "翻轉狀態1":# p.Value = 1# 此功能報錯,原因待查明。


長度10 旋轉60度


八、顏色


??在 AutoCAD 中,顏色設置是普遍存的,如設置圖層的顏色,指定標注文字的顏色等等。多數情況下可以通過設置 RGB 值來實現,但有時需要直接指定一個數字來代表該顏色。在此,把代表該顏色的數值變量稱為 顏色標識號 (可能有專門的術語,管它呢,我就這么叫,愛誰誰),用 clr 表示。某一顏色的 clr 值可由該顏色的 RGB 值計算得到,計算公式如下:


clr=R+256×G+256×256×B{clr} = R + 256 × G + 256 × 256 × B clr=R+256×G+256×256×B


??例如: 對于白色(R=255,G=255,B=255),其對應的顏色標識號 clr 為 255 + 256 × 255 + 256 × 256 × 255 = 16777215。


??根據上述公式,幾種常用的標準顏色的顏色標識號如下:


顏色clr顏色clr
黑色0青色16776960
紅色255藍色16711680
黃色65535洋紅16711935
綠色65280白色16777215


????示例


??將 AutoCAD 程序的模型空間背景色設置成如下所示的淡綠色:


R=198 G=224 B=180

clr=198+256×224+256×256×180=11854022{clr} = 198 + 256 × 224 + 256 × 256 × 180 = 11854022 clr=198+256×224+256×256×180=11854022

#!/usr/bin/env python # -*- coding: utf-8 -*-"""=============================Author: DalNurEmail: liyang@alu.hit.edu.cn============================= """from pyautocad import Autocadpyacad = Autocad(create_if_not_exists=True) pyacad.prompt("Hello! AutoCAD from pyautocad.") print(pyacad.doc.Name)clr = 11854022 pyacad.ActiveDocument.Application.preferences.Display.GraphicsWinModelBackgrndColor = clr

模型空間背景色的設置

??該功能的實現歷經波折,卡頓了近三個月,終于,在那一天下班鈴響后測試成功。


??值得注意的是,不是所有的顏色指定都可以采用該種方式,如圖案填充顏色的設置就是通過直接設置 RGB 的方式實現的。


??藍色的定義: doc.Application.GetInterfaceObject(“AutoCAD.AcCmColor.19”).SetRGB(0, 0, 255) 。




九、重要方法


9.1 SendCommad


SendCommand方法

??極個別情況下,采用常規方式很難實現某一功能,如設置默認視圖、定義永久標注樣式等。此時,可嘗試采用 SendCommand 方式來實現。具體方法為,先在 AutoCAD 軟件界面操作一遍,然后查看在此過程中提示工具欄內的數據變化,最后,將這些變化稍加改動按照 CAD 二次開發的規則輸入到 SendCommand 內,即可得到相應的 Python 代碼。


??以直線的繪制為例,在 AutoCAD 軟件中的操作步驟為:輸入繪制直線的快捷命令 “L” > 回車 > 屏幕上點選第一個點 > 回車 > 屏幕上點選第二個點 > 回車,直覺告訴我們 SendCommand 括號內數據輸入也應該是這一順序,即


SendCommand ("L" + 回車 + 第一個點坐標 + 回車 + 第二個點坐標 + 回車)

直線繪制過程中命令欄內的顯示情況

SendCommand方式繪制直線的Python代碼

??另一個典型的例子是將程序的預設視圖由俯視變更為西南等軸測,將視覺樣式由二維線框變更為真實,在 CAD 界面操作后,命令欄讓將顯示出如下數據:



預設視圖及視覺樣式的修改

預設視圖及視覺樣式修改過程中命令欄內的顯示情況


??顯然,實現這兩項功能的 Python 代碼為:


#!/usr/bin/env python # -*- coding: utf-8 -*-"""=============================Author: DalNurEmail: liyang@alu.hit.edu.cn============================= """from pyautocad import Autocadpyacad = Autocad(create_if_not_exists=True) pyacad.prompt("Hello! AutoCAD from pyautocad.") print(pyacad.doc.Name)pyacad.ActiveDocument.SendCommand("_-view" + chr(13) + "_swiso" + chr(13)) # 定義預設視圖為西南等軸測。 pyacad.ActiveDocument.SendCommand("_vscurrent" + chr(13) + "_R" + chr(13)) # 視圖樣式設置為真實。

??值得注意的是,不是所有的功能均可由該方式實現,極其個別的功能就實現不了,但是這些功能通常也沒必要采用二次開發的方式實現,直接點下軟件界面不好么。



9.2 GetEntity


??更多圖元選擇即選擇集功能的實現,詳見博客:Python AutoCAD 選擇集 。



??以下代碼實現將所選圖元的顏色更改為紅色。


#!/usr/bin/env python # -*- coding: utf-8 -*-"""=============================Author: DalNurEmail: liyang@alu.hit.edu.cn============================= """import pythoncom import win32com.client import mathwincad = win32com.client.Dispatch("AutoCAD.Application") doc = wincad.ActiveDocument doc.Utility.Prompt("Hello! Autocad from pywin32com.\n") msp = doc.ModelSpace print(doc.Name)def vtpnt(x, y, z=0):"""坐標點轉化為浮點數"""return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x, y, z))pnt1, pnt2, pnt3 = vtpnt(-40, -40), vtpnt(500, 500), vtpnt(300, 200) lineObj = msp.AddLine(pnt1, pnt2) circleObj = msp.AddCircle(pnt3, 100)print("請在CAD程序界面點選圖元,未選中則報錯!") # try...except處理報錯 rtnObj = doc.Utility.GetEntity() # 返回對象print(rtnObj) print("所選圖元的ID:", rtnObj[0].ObjectID) print("鼠標單擊處的坐標:", rtnObj[1])sltObject = doc.ObjectIdToObject(rtnObj[0].ObjectID) # 圖元ID轉化為對應的圖元clr = doc.Application.GetInterfaceObject("AutoCAD.AcCmColor.19") clr.SetRGB(255, 0, 0) # 創建紅色 sltObject.TrueColor = clr # 指定顏色doc.Application.Update()

9.3 SetXData/GetXData

#!/usr/bin/env python # -*- coding: utf-8 -*-"""=============================Author: DalNurEmail: liyang@alu.hit.edu.cn============================= """# This example creates a line and attaches extended data to that line.import pythoncom import win32com.clientwincad = win32com.client.Dispatch("AutoCAD.Application") doc = wincad.ActiveDocument doc.Utility.Prompt("Hello! Autocad from pywin32com.\n") msp = doc.ModelSpace print(doc.Name)def vtpnt(x, y, z=0):return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x, y, z))def vtfloat(val):return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, val)def vtint(val):return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_I2, val)def vtvariant(var):return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_VARIANT, var)# Create the linestartPntCoords = vtpnt(1, 1, 0) startPoint = msp.AddPoint(startPntCoords) endPntCoords = vtpnt(5, 5, 0) endPoint = msp.AddPoint(endPntCoords) lineObj = msp.AddLine(startPntCoords, endPntCoords)# Initialize all the xdata values. Note that first data in the list should be # application name and first datatype code should be 1001DataType = [1001, 1000, 1003, 1040, 1041, 1070, 1071, 1042] Data = ["Test_Application", "This is a test for xdata","0", 1.23479137438413E+40, 1237324938, 32767, 32767, 10] reals3 = [-2.95, 100, -20] # DataType.append(1010) # Data.append(reals3) # worldPos = [4, 400.99999999, 2.798989] # DataType.append(1011) # Data.append(worldPos)DataType = vtint(DataType) Data = vtvariant(Data) # Attach the xdata to the line lineObj.SetXData(DataType, Data)# Return the xdata for the line xtypeOut, xdataOut = lineObj.GetXData("Test_Application") print(xtypeOut) print(xdataOut)

??所添加的拓展數據可按如下方式查看: [ObjectARX] ArxDbg介紹、自動加載及其下載 。


擴展數據的查看


十、文件


??更多文件相關的操作,詳見博客:Python AutoCAD 文件 。


10.1 另存為.dwg/.dxf


??以下方法另存為的文件格式只能是 .dwg 和 .dxf,這與在 CAD 軟件中,依次點擊 文件 >> 另存為 是相對應的。


  • 當前文件另存為.dwg/.dxf
  • ??將當前文件另存為 TestSaveAs.dxf,文件的版本是:AutoCAD 2013 DXF,代碼如下:

    pyacad.ActiveDocument.SaveAs("D:\\AutoCAD\\TestSaveAs", 61)

    ??上一代碼執行完畢后,當前文件被程序關閉,TestSaveAs.dxf 文件被打開,且設定為當前活躍文件。

    ??參數 61 為 AcSaveAsType enum,表示另存為文件的類型是 AutoCAD 2013 DXF,其他常用類型如下:


    版本.dwg.dxf
    AutoCAD 20001213
    AutoCAD 20042425
    AutoCAD 20073637
    AutoCAD 20104849
    AutoCAD 20136061

    ??AcSaveAsType enum 可在官方二次開發幫助文檔 ActiveX Develop’s Guide 中查看,查看方式如下圖所示:




  • 特定文件另存為.dwg/.dxf
  • ??將特定文件 PyAutoCAD.dwg 另存為 TestSaveAs.dxf,文件的版本是:AutoCAD 2013 DXF,代碼如下:

    pyacad.ActiveDocument.Application.Documents("PyAutoCAD.dwg").SaveAs("D:\\AutoCAD\\TestSaveAs", 61)

    10.2 另存為.pdf


    ??首先,確認繪圖儀 DWG To PDF.pc3 的工作目錄,在搜索神器 Everything 的搜索欄中輸入 DWG To PDF.pc3,便可得到繪圖儀的工作目錄,如下圖所示:




    ??另存為 .pdf 文件的 Python 代碼如下:


    #!/usr/bin/env python # -*- coding: utf-8 -*-"""=============================Author: DalNurEmail: liyang@alu.hit.edu.cn============================= """from pyautocad import Autocadpyacad = Autocad(create_if_not_exists=True) pyacad.prompt("Hello! AutoCAD from pyautocad.") print(pyacad.doc.Name)print(pyacad.ActiveDocument.ActiveLayout.ConfigName)# 設置繪圖儀管理器的工作目錄 ACADPref = pyacad.ActiveDocument.Application.preferences.FilesoriginalValue = ACADPref.PrinterConfigPath \= r"C:\Users\33876\AppData\Roaming\Autodesk\AutoCAD 2014\R19.1\chs\Plotters"print(ACADPref) print(originalValue)oplot = pyacad.ActiveDocument.PlotConfigurations.Add("PDF", acad.ActiveDocument.ActiveLayout.ModelType)# acad.ActiveDocument.SetVariable("sdi", 0) pyacad.ActiveDocument.ActiveLayout.ConfigName = "DWG To PDF.pc3" pyacad.ActiveDocument.SetVariable("Filedia", 0)# acad.ActiveDocument.SetVariable("RASTERPREVIEW", 1) pyacad.ActiveDocument.SetVariable("BACKGROUNDPLOT", 0) pyacad.ActiveDocument.Plot.QuietErrorMode = True# acad.ActiveDocument.Plot.PlotToFile("D:\\" + "123" + ".pdf", "Foxit Reader PDF Printer") pyacad.ActiveDocument.Plot.PlotToFile("D:\\" + "test" + ".pdf")oplot.Delete() oplot = None obj = pyacad.ActiveDocument.GetVariable("DBMOD") print(obj)

    ????參考資料: 使用python將cad批量導出至pdf 。

    ??本代碼只是簡單介紹該功能的實現,打印范圍等更為詳細的設置,請查看二次開發幫助文檔。



    10.3 另存為.jpg/.png


    ??更改繪圖儀設置即可,可參考另存為.dpf。



    確定繪圖儀的工作路徑
    #!/usr/bin/env python # -*- coding: utf-8 -*-"""=============================Author: DalNurEmail: liyang@alu.hit.edu.cn============================= """import win32com.clientwincad = win32com.client.Dispatch("AutoCAD.Application") doc = wincad.ActiveDocument doc.Utility.Prompt("Hello! Autocad from pywin32com.\n") msp = doc.ModelSpaceprint(doc.Name) print(doc.ActiveLayout.ConfigName)# 設置繪圖儀管理器的工作目錄 ACADPref = doc.Application.preferences.FilesoriginalValue = ACADPref.PrinterConfigPath \= r"C:\Users\33876\AppData\Roaming\Autodesk\AutoCAD 2014\R19.1\chs\Plotters"print(ACADPref) print(originalValue)oplot = doc.PlotConfigurations.Add("JPG", doc.ActiveLayout.ModelType)doc.ActiveLayout.ConfigName = "PublishToWeb JPG.pc3" doc.SetVariable("Filedia", 0)doc.SetVariable("BACKGROUNDPLOT", 0) doc.Plot.QuietErrorMode = Truedoc.Plot.PlotToFile("D:\\" + "test" + ".jpg")oplot.Delete() oplot = None obj = doc.GetVariable("DBMOD") print(obj)

    ??CAD轉化為JPG后,圖片模糊不清楚怎么辦 ?




    十一、致謝


    ??特別感謝 ke1078 同學提供的無私幫助,使得 Python 語言二次開發 AutoCAD 的許多高級功能得以順利實現。




    十二、說明


    ??2018年12月13日,該系列博客僅僅以一篇名為 【Python pyautocad庫 使用簡介】 的博客形式出現在 CSDN 上。為了清晰直觀,2019年7月20日左右,博主以博客【Python pyautocad庫 使用簡介】為基礎,按部分將原文擴展成 9 篇博客,后續又陸續進行了修改和編輯,特此說明。這 9 篇博客以 AutoCAD 草圖與注釋 工作空間菜單欄內的功能區分為標準,較為詳細地介紹了 Python 調用 AutoCAD 相關功能的實現。碼字不易,轉載還請注明出處!


    AutoCAD草圖與注釋

    轉載請注明出處!
    轉載請注明出處!
    轉載請注明出處!


    原博客部分內容

    ??這 9 篇博客分別是:


    ???? - Python 二次開發 AutoCAD 簡介

    ???? - Python 二次開發 AutoCAD 系統設置

    ???? - Python 二次開發 AutoCAD 圖層

    ???? - Python 二次開發 AutoCAD 繪圖

    ???? - Python 二次開發 AutoCAD 修改

    ???? - Python 二次開發 AutoCAD 塊組

    ???? - Python 二次開發 AutoCAD 注釋

    ???? - Python 二次開發 AutoCAD 文件

    ???? - Python 二次開發 AutoCAD 選擇集




    十三、尾聲


    ??以上,便是 Python 語言二次開發 AutoCAD 的簡單介紹。

    ??因篇幅有限,某些非關鍵功能未做詳細介紹,如有疑問,歡迎郵件交流。

    ??Email: liyang@alu.hit.edu.cn 。

    ??僅以此文為我斷斷續續一年多的 Python 調用 AutoCAD 的相關工作做一個總結。

    ??與此同時,也希望能夠為初學者/有需要的人提供多一點參考。

    ??本文僅用于個人學習,除此之外,無其他任何用途。

    ??因個人水平有限,文中難免有所疏漏,還請各位大神不吝批評指正。

    ??胸藏文墨懷若谷,腹有詩書氣自華,希望各位都能在知識的 pāo 子里快樂徜徉。

    ??本文最早發表于 2018-12-13 18:20:21,最后修改于 2020-4-25 22:02:07。

    ??如無特殊原因,不再更新!

    ??本文邏輯清楚,內容詳實,引例豐富。

    ??歡迎大家點贊、評論及轉載,轉載請注明出處!

    ??為我打call,不如為我打款!

    ??打賞可備注郵箱,本人將贈送本系列博客的全部 Python 源代碼。

    ??最后,祝各位攻城獅們,珍愛生命,保護發際線!






    十四、參考文獻


    [1]. 使用Python讀寫DXF和DWG文件. 大專欄.

    [2]. VARIANT的使用方法. xinzhiyounizhiyouni.

    [3]. comtypes 1.1.3 documentation




    總結

    以上是生活随笔為你收集整理的Python 二次开发 AutoCAD 简介的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    99精品久久久久久久 | 欧美成人精品在线 | 午夜精品一区二区三区在线 | 日韩欧美在线中文字幕 | 高清日韩一区二区 | 96久久欧美麻豆网站 | 欧美成人性网 | 超碰精品在线 | 亚洲天堂视频在线 | 99久久精品免费看国产麻豆 | 国产精品中文字幕在线播放 | 久久黄色片子 | 国产一级片免费视频 | 久久精品国产精品亚洲 | av综合在线观看 | 欧美日韩调教 | 手机成人免费视频 | 中文资源在线官网 | 精品国产乱码一区二 | 992tv人人草| 高清av中文在线字幕观看1 | 丁香婷婷社区 | 国产欧美久久久精品影院 | 亚洲成人av一区 | 国产福利一区二区在线 | 午夜精品久久久久 | 亚州av免费 | 日韩精品一区二区三区免费视频观看 | 综合网五月天 | 婷婷色综合网 | 99产精品成人啪免费网站 | 久久精品视频在线观看 | 天天射日 | 91自拍视频在线观看 | 波多野结衣视频在线 | 99在线观看视频 | 综合色天天 | 亚洲h在线播放在线观看h | 亚洲欧美日韩不卡 | 日韩乱码中文字幕 | 免费观看版| 欧美日韩中文国产一区发布 | 激情视频久久 | 久久 亚洲视频 | 天天操,夜夜操 | 欧美亚洲免费在线一区 | 中文字幕资源网 国产 | 一级做a爱片性色毛片www | 日韩a欧美| 婷婷在线五月 | 97在线精品 | 四虎小视频| 日本大片免费观看在线 | 日韩免费一二三区 | 成人国产精品一区二区 | 日韩激情久久 | 亚洲一级电影在线观看 | 九色琪琪久久综合网天天 | 久久黄色片子 | 久久视频免费在线观看 | 色天天久久 | 国产黄色一级片 | 色婷婷狠| 久久色视频 | 有码中文字幕在线观看 | 国语久久| 久久精品欧美一 | 色偷偷人人澡久久超碰69 | 久久久久伊人 | 国产麻豆精品95视频 | 久草色在线观看 | 亚洲成年人av | www国产精品com | 午夜久久影视 | 国产精品久久久久久欧美 | 亚洲精品国偷拍自产在线观看 | 西西444www高清大胆 | 亚洲精品久久久久中文字幕二区 | av在线电影免费观看 | 国产精品一区二区美女视频免费看 | 人人干狠狠干 | 久久中文字幕导航 | 麻豆 free xxxx movies hd | 精品视频久久 | 中文资源在线播放 | 91成人黄色 | 精品影院 | 免费高清在线视频一区· | 狠狠色狠狠色综合日日小说 | 国产一级性生活 | 国产精品久久二区 | 国产视频在线播放 | 91丝袜美腿 | 黄色毛片一级片 | 精品色999 | 黄色在线看网站 | 国内精品久久久久久久久久久久 | 久久精品高清 | 天天综合久久 | 伊人色**天天综合婷婷 | 亚洲美女免费视频 | 久久99国产视频 | 国产精品久久久久久久久久ktv | 国产黑丝袜在线 | 97视频在线观看视频免费视频 | 成人av免费在线观看 | 97看片网| 手机av在线免费观看 | 91夜夜夜| 国产福利资源 | 亚洲国产美女精品久久久久∴ | 亚洲视频免费在线观看 | 国产xvideos免费视频播放 | 亚洲成人精品久久久 | 免费观看成人 | 97精品国产aⅴ | 日本在线观看视频一区 | 高清国产午夜精品久久久久久 | 操处女逼 | 91成人小视频 | 69av视频在线观看 | 成人免费影院 | 免费高清看电视网站 | 成年人毛片在线观看 | 久久精品视频在线播放 | 97人人澡人人爽人人模亚洲 | 91九色视频观看 | 久久在线一区 | 三级黄色片在线观看 | 国产亚洲精品久久久久久大师 | 日韩高清观看 | 中文字幕国产 | 日韩视频一区二区三区 | 免费高清看电视网站 | 久久99免费观看 | 欧美精品亚洲精品 | 成人黄色毛片视频 | 有码中文字幕在线观看 | 99久久精品国产一区二区成人 | 日韩在线观看视频一区二区三区 | 久久婷婷影视 | 国内免费的中文字幕 | 日韩va在线观看 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 国产欧美在线一区 | 亚洲激情精品 | 日韩毛片在线播放 | av大全在线免费观看 | 一区二区久久久久 | 最新av在线播放 | 久久午夜国产 | 九九视频精品在线 | 亚洲精品欧美专区 | 成人在线免费观看视视频 | 五月天综合在线 | 丁香久久婷婷 | 国产成人精品三级 | 超碰人人做 | 欧美色图一区 | 国产免费叼嘿网站免费 | 天天做综合网 | 国产精品一区二区你懂的 | 欧美专区国产专区 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 中文字幕 国产视频 | 人人超碰97 | 亚洲在线视频免费 | 国产视频网站在线观看 | 日韩在线视频线视频免费网站 | 国产精品久久99精品毛片三a | 麻豆91精品91久久久 | 亚洲视频999 | 日韩av成人 | 去看片| 91成版人在线观看入口 | 欧美日韩一区二区视频在线观看 | 亚洲自拍偷拍色图 | a黄色片| 日韩成人精品一区二区 | 婷婷色六月天 | 91热精品 | 三级av免费观看 | 人人爽网站 | 五月天婷婷狠狠 | 国产成人av在线 | 啪啪免费视频网站 | 日韩精品一区二区三区中文字幕 | 国色综合 | 韩日三级在线 | 欧美精品久久久 | 久久99热精品这里久久精品 | 久久精品99视频 | 91精品国产乱码在线观看 | 精品国产伦一区二区三区免费 | 成人视屏免费看 | 91丨九色丨首页 | 国产高清在线看 | 国产美女久久 | 四虎免费在线观看 | 免费在线观看国产精品 | 中文字幕影片免费在线观看 | 日韩久久久久久久久久久久 | 丁香六月在线观看 | 色婷婷成人网 | 国产精品亚洲成人 | 夜夜夜夜爽 | 国产精品毛片久久久久久 | 亚洲国产午夜视频 | 国产女人40精品一区毛片视频 | 久久久99国产精品免费 | 91视频在线免费下载 | 久久污视频 | 6080yy午夜一二三区久久 | 永久免费在线 | 在线播放国产精品 | 欧美亚洲国产精品久久高清浪潮 | 日韩精品网址 | 色多多污污在线观看 | 91在线观看视频 | 91超在线 | www操操操 | 九色精品免费永久在线 | 国产免费作爱视频 | 欧美一二三视频 | 最新高清无码专区 | 日韩精品一区二区三区免费视频观看 | 久久成人高清视频 | 在线免费观看黄 | 99中文视频在线 | 精品欧美一区二区三区久久久 | 国产96在线观看 | 欧美a级成人淫片免费看 | 波多野结衣一区二区三区中文字幕 | 成年人在线免费视频观看 | 99热在线国产 | 中国精品少妇 | 国产欧美高清 | 中文字幕丰满人伦在线 | 亚洲精品美女在线 | 五月综合久久 | 久久久久免费精品国产 | 91精品久| 国产精品久久久久久久久久久久午夜 | 久久不卡日韩美女 | 狠狠色噜噜狠狠 | 免费久久网 | 国产在线高清精品 | 日韩欧美在线高清 | 99re中文字幕 | 丁香综合激情 | 亚洲天堂在线观看完整版 | 91中文字幕| 激情欧美一区二区三区免费看 | 久久国产精品影视 | 成人超碰97 | 免费一级片在线观看 | 精品久久久久久久久久久院品网 | 国产精品免费久久久久 | 人人插人人草 | 日本系列中文字幕 | 国产精品日韩久久久久 | 久草网站 | 国产一区二区午夜 | 国产高清在线免费 | 国产精品福利无圣光在线一区 | 国产二区视频在线观看 | 色婷婷狠狠五月综合天色拍 | 免费看av片网站 | 精品字幕 | 中文久久精品 | 国产黄色免费电影 | 亚洲一级电影视频 | 国产亚洲一区二区在线观看 | 一区二区丝袜 | 亚洲一区二区精品视频 | 国产福利午夜 | 毛片网在线观看 | 五月天久久 | 国产人成在线观看 | 美女在线观看av | 偷拍福利视频一区二区三区 | 999久久久久久久久6666 | 碰超在线 | 日韩h在线观看 | 2024av| 91麻豆精品国产91久久久无需广告 | 久久一级片 | 天天鲁天天干天天射 | 黄色一集片 | 久久久久免费精品视频 | 天堂av网址 | 免费在线观看毛片网站 | 97偷拍视频 | 久久看视频 | 在线观看v片 | 一本之道乱码区 | 亚洲成人网在线 | 国产午夜精品久久久久久久久久 | 日韩城人在线 | 久久这里只精品 | 51精品国自产在线 | 色婷婷狠狠干 | 98久9在线 | 免费 | 人人添人人澡人人澡人人人爽 | 中文字幕在线观看1 | 人人干人人上 | 国语精品免费视频 | 综合激情网... | 日韩三级在线观看 | 日韩在线免费 | 亚洲激情在线播放 | 欧美精品久久久久久久久老牛影院 | 国产区精品在线观看 | 久草在线最新 | 午夜精品一二三区 | 最新国产在线视频 | 999在线观看视频 | 免费av片在线 | 久久久久久久久毛片 | 狠狠色丁香婷婷综合久久片 | 成人动漫一区二区三区 | 久久久久久美女 | 免费97视频| 一区二区欧美激情 | 天堂入口网站 | 日韩欧美精品一区二区三区经典 | 国产a国产a国产a | 激情深爱.com | 亚洲精品国产精品99久久 | 国产伦精品一区二区三区四区视频 | 久久午夜精品视频 | 91av视频在线免费观看 | 亚洲视频精选 | 国产在线中文字幕 | 欧美片一区二区三区 | 欧美日韩视频在线一区 | 日韩精品一区二区三区电影 | 瑞典xxxx性hd极品 | 久久99爱视频 | 国产99久久久精品视频 | 久久 亚洲视频 | 亚洲精品久久在线 | 波多野结衣精品视频 | 国产精品无av码在线观看 | 欧美精品成人在线 | 国产69久久精品成人看 | 日操干| 六月天综合网 | 色偷偷88888欧美精品久久 | 一本一本久久a久久精品综合 | 久久99精品久久久久久三级 | www.91av在线 | av综合在线观看 | 久久看毛片 | 国产日本亚洲 | 国产伦理久久精品久久久久_ | av色综合 | 精品无人国产偷自产在线 | 国产黄大片 | 视频 国产区| 国产精品成人久久久 | 九九免费在线看完整版 | 国产人在线成免费视频 | 粉嫩av一区二区三区四区在线观看 | 亚洲国产高清在线 | 国产精品久久久久久久久久妇女 | 丁香在线视频 | 波多野结衣在线观看一区 | 国产色婷婷 | 黄色av一区二区三区 | 欧美在线观看视频 | 久久久高清 | 中文字幕在线看视频 | 国产999| 狠狠干综合网 | 色多多视频在线 | 九九在线播放 | 日本中文字幕视频 | 久久精品成人热国产成 | 国产精品免费观看国产网曝瓜 | 久久综合精品国产一区二区三区 | 超碰人人99 | 91九色视频网站 | av最新资源 | 最新日韩在线观看 | 国产精品av久久久久久无 | 欧美一二三四在线 | 国产在线视频资源 | 玖玖视频 | 2019中文在线观看 | 日韩精品一区二区免费 | 最近中文字幕在线 | 亚洲丁香久久久 | 天天爽天天爽 | 麻豆av一区二区三区在线观看 | 韩国精品在线观看 | 黄网在线免费观看 | 国产一级视频在线 | 成人午夜片av在线看 | 久久成人免费 | 国产伦精品一区二区三区高清 | 亚洲精品资源在线观看 | 日日夜夜天天久久 | 天堂网一区二区三区 | 欧美黄色高清 | 久久不射网站 | 91人人网| 成人在线你懂得 | 日本不卡视频 | 国产午夜精品久久久久久久久久 | 24小时日本在线www免费的 | 91mv.cool在线观看 | 一区二区精品在线 | 99tvdz@gmail.com| 在线播放国产精品 | 麻豆久久精品 | 精品一二三区视频 | 91成品人影院 | 91免费观看网站 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 国产高清在线免费视频 | 插久久 | 狠狠色丁香婷婷综合久小说久 | 国产黄色av | 免费久久网站 | 激情视频综合网 | 天天插日日操 | 久久精品视频在线看 | 91色在线观看 | 久久黄色影院 | 99色视频在线 | 久久久色 | 日本黄区免费视频观看 | 久久国产精彩视频 | 亚洲午夜精品久久久久久久久 | 亚洲国产一区二区精品专区 | 天天爽夜夜操 | 国产美女视频免费观看的网站 | 精品视频免费在线 | 综合在线亚洲 | 三级黄色在线观看 | 精品在线亚洲视频 | 婷婷精品在线视频 | 99久久精品免费看国产免费软件 | 天天操天天操天天操天天 | 欧美日在线观看 | 亚洲黄色一级视频 | 国产麻豆成人传媒免费观看 | 91在线观看高清 | 免费观看一区二区三区视频 | 99久久99久久精品免费 | 久久一区二区免费视频 | 国产精品久久久久久一二三四五 | 亚洲欧美日韩精品久久奇米一区 | 69精品人人人人 | 日韩精品一区二区久久 | av成人免费网站 | 中文永久字幕 | 天天操欧美 | 男女全黄一级一级高潮免费看 | 在线免费观看国产 | av一本久道久久波多野结衣 | 日韩一区二区三区视频在线 | 国产免费人成xvideos视频 | 久久呀 | 欧美久久电影 | 欧美一区二区免费在线观看 | 青青草国产精品视频 | 91av在线精品 | 狠狠色丁香久久婷婷综合_中 | av动图 | 久久综合色综合88 | 91香蕉视频污在线 | av成人亚洲 | av五月婷婷| 亚洲综合色av | 久草在线视频在线观看 | 国产群p视频 | 亚洲国产成人精品在线观看 | 久久久精品亚洲 | 国产色婷婷精品综合在线手机播放 | 91精品国产一区二区在线观看 | 久久久久国产精品免费 | 激情久久一区二区三区 | 久久免费看毛片 | 99婷婷狠狠成为人免费视频 | 国产精品视频 | 日批网站免费观看 | 亚洲精品综合久久 | 婷婷成人综合 | 国内精品视频一区二区三区八戒 | 国产在线第三页 | 中文字幕精品视频 | 国产精品久久久久久久久婷婷 | 四虎成人精品永久免费av | 综合色影院 | 日韩欧美在线视频一区二区 | 黄色app网站在线观看 | 亚洲激情网站免费观看 | 日韩av在线不卡 | av中文字幕在线播放 | 国产精品18久久久久久久久久久久 | 六月丁香在线观看 | 国产一二三四在线视频 | 五月天亚洲婷婷 | 亚洲精品66 | 97av在线视频 | 亚洲午夜久久久久久久久 | 免费成人在线视频网站 | 射射射综合网 | 91爱爱中文字幕 | 国产专区精品视频 | av在线播放网址 | 亚洲九九九在线观看 | av线上免费看 | 国产亚洲精品av | 久久99精品国产一区二区三区 | 一区二区精 | 国产日韩欧美在线影视 | 91麻豆精品国产午夜天堂 | 亚洲一级片在线观看 | 日韩69视频 | 精品91在线 | 色av网站| 在线日韩一区 | 91在线免费视频观看 | 精品日韩在线一区 | 欧美日韩二区三区 | 久久亚洲在线 | 国产精品美女久久久久久2018 | 在线观看国产91 | 最新日韩中文字幕 | 日韩午夜高清 | 国产视频欧美视频 | 日韩18p| 欧美另类网站 | 久久久久久久久久久黄色 | 国产尤物在线 | 国产精品24小时在线观看 | 久久成年人视频 | 黄色免费网战 | 天天玩天天操天天射 | 深爱激情综合网 | 夜夜骑日日操 | 日韩免费一级a毛片在线播放一级 | 久久国产精品99久久久久久丝袜 | 一区二三国产 | 亚洲精品视频在线观看视频 | 亚洲精品久久久久999中文字幕 | 91九色最新 | 2023年中文无字幕文字 | 手机在线永久免费观看av片 | 丁香九月激情 | 九九九在线观看视频 | 99爱视频 | 色婷婷精品大在线视频 | 97人人网 | 免费看亚洲毛片 | 国产一区二区三精品久久久无广告 | 99在线视频网站 | 人人讲| 精品国产精品一区二区夜夜嗨 | 国产精品国产三级国产 | 日本在线中文在线 | 在线亚洲午夜片av大片 | 久久免费国产精品 | 人人澡人人添人人爽一区二区 | av大全在线免费观看 | 最近字幕在线观看第一季 | 99久久国产免费,99久久国产免费大片 | 国产视频精品视频 | 免费观看一区 | 国产资源av | 国产97免费| 欧美视频xxx | 天天色婷婷 | 在线观看av网| 中文字幕在线观看不卡 | 天天天色综合a | 免费在线观看日韩 | 国产高清视频在线播放 | 五月天久久久久久 | 91久久国产露脸精品国产闺蜜 | 国产69精品久久久久久久久久 | 久久久久久久久久久久电影 | 毛片一二区 | 国产福利电影网址 | 免费看一级片 | 久草在线久草在线2 | 东方av免费在线观看 | 欧洲一区精品 | 探花视频在线观看免费 | 少妇高潮流白浆在线观看 | 国产丝袜美腿在线 | 在线播放 一区 | 国产精品视频区 | 亚洲精品av中文字幕在线在线 | 久久蜜臀av | 五月婷婷丁香在线观看 | 99精品免费网 | 日韩在线一区二区免费 | 亚洲天堂精品视频在线观看 | av国产在线观看 | 91刺激视频 | 超碰公开在线 | 成人在线视频一区 | 欧美精品中文字幕亚洲专区 | 又湿又紧又大又爽a视频国产 | 亚洲精品在线二区 | 一区二区三区免费 | 婷婷激情av | www五月天 | 懂色av懂色av粉嫩av分享吧 | 91精品国产91 | 亚洲视频在线看 | 麻豆精品传媒视频 | 综合精品久久久 | 一区二区三区精品在线视频 | 黄色网大全 | 五月婷婷丁香激情 | 国产黄免费 | 香蕉色综合 | 精品自拍av | 精品视频不卡 | 国产精品一区二区无线 | 黄色精品国产 | 亚洲精品玖玖玖av在线看 | 久草在线资源网 | 免费观看完整版无人区 | 奇米网网址| 天天综合网~永久入口 | 成年人黄色免费看 | 久久免费视频在线观看6 | 欧美日韩激情网 | 亚洲福利精品 | 超碰成人网 | 久久97超碰| 在线观看色网站 | 欧美一二三区播放 | 亚洲五月综合 | 欧美日韩免费在线观看视频 | 天天操天天操天天 | 久久久久久久影院 | 五月婷香 | 日韩欧美一区二区三区黑寡妇 | 97免费视频在线 | 欧美日韩一区二区三区视频 | 91精品视频免费在线观看 | 成 人 黄 色 视频播放1 | 天天天色| 中文字幕在线久一本久 | 91麻豆文化传媒在线观看 | 2020天天干天天操 | 欧美一级性 | 91九色视频在线观看 | 日韩在线观看一区二区三区 | 亚洲黄色在线观看 | 日韩天堂在线观看 | av网站大全免费 | 精品在线亚洲视频 | 久久精选 | 亚洲男男gⅴgay双龙 | 精品国内自产拍在线观看视频 | 丁香高清视频在线看看 | 丁香花在线观看视频在线 | 91精品啪在线观看国产线免费 | 国产精品高潮在线观看 | 亚洲综合色视频在线观看 | 中文字幕在线久一本久 | 日韩av片无码一区二区不卡电影 | 日韩大陆欧美高清视频区 | 黄色av免费 | 日韩电影在线一区 | 欧美最新另类人妖 | 免费看国产a| 精品国产一区二区三区日日嗨 | 国产精品爽爽久久久久久蜜臀 | 亚洲精品99久久久久中文字幕 | 麻豆视频在线免费观看 | 国产精品久久电影网 | 97综合视频| 天天干天天干天天操 | 日韩av在线高清 | 久久网页 | 国产在线观看不卡 | 国产一级片视频 | 999电影免费在线观看 | 五月天激情在线 | 成人黄色小说在线观看 | 日韩69av| 亚洲精品女人久久久 | 久久深夜福利免费观看 | www黄色 | 欧美a在线看 | 日韩在线观看你懂的 | 最新99热 | 欧美福利在线播放 | 亚洲永久精品视频 | 日日夜夜添 | 久久精品福利视频 | 亚洲欧美成人综合 | 国产黄色a | 天天干天天搞天天射 | 久久久久日本精品一区二区三区 | 久久特级毛片 | 精品一区二区在线免费观看 | 国产精品久久久久久妇 | 激情婷婷六月 | 午夜性盈盈 | 九九99| 久久网址| 中文字幕五区 | 在线观看av小说 | 国产精品入口麻豆www | 久久激情电影 | 日本久久影视 | 国产精品美女久久久网av | 在线天堂中文在线资源网 | 欧美a级片免费看 | a视频在线观看免费 | 五月天开心 | 91亚洲精 | 日韩视 | 免费看色视频 | 久久精品久久精品 | 精品视频97 | 成人免费视频免费观看 | 中文字幕亚洲欧美 | 精品综合久久 | 欧美黄色特级片 | 能在线看的av| 国产午夜精品理论片在线 | 国产精品99视频 | 丰满少妇高潮在线观看 | 中文字幕免费播放 | 高清中文字幕 | 国产一级a毛片视频爆浆 | 91精品一区二区在线观看 | 久久视频精品 | 久久国产乱 | 99亚洲天堂 | 男女靠逼app | 欧美在线一| 亚洲精品视频第一页 | 欧美日韩伦理一区 | 麻豆精品视频在线观看免费 | 亚洲精品视频网址 | www.五月天 | 激情视频久久 | 久久不色 | 91九色国产视频 | 免费一级片视频 | 人人舔人人 | 欧美日韩高清在线 | 亚洲高清视频一区二区三区 | 久草电影在线观看 | 四虎在线免费观看 | 中文字幕大全 | 久久调教视频 | 成人黄色中文字幕 | 四虎影视成人精品国库在线观看 | 欧美激情综合色 | 欧美网站黄色 | 亚洲人成人天堂h久久 | 国产亚洲va综合人人澡精品 | 91久久久久久久一区二区 | 97热视频 | 久久好看| 亚洲综合视频在线播放 | 激情五月在线观看 | 欧美日韩中文字幕综合视频 | 亚洲一级片在线观看 | 91网页版免费观看 | 国产高清不卡在线 | 精品国产乱码久久久久久1区二区 | 精品久久久国产 | 久久狠狠一本精品综合网 | 爱射综合 | 国产破处在线播放 | 久久久久久高潮国产精品视 | 久久精品视频2 | 天天射夜夜爽 | 久久69精品 | 成人在线视频论坛 | 97理论片 | 国产精品h在线观看 | 欧美极品少妇xbxb性爽爽视频 | 97香蕉久久超级碰碰高清版 | 国产亚洲精品成人 | 国产精品久久久久9999 | 最近中文字幕视频完整版 | 人人澡人 | 九九免费精品视频在线观看 | 久久成人毛片 | 午夜美女福利直播 | 久久情网 | 69性欧美| 麻豆视频在线观看免费 | 涩涩网站在线观看 | 91免费黄视频 | 国产91精品一区二区麻豆亚洲 | 日韩videos| 2024国产精品视频 | 免费精品人在线二线三线 | 可以免费观看的av片 | 高清一区二区三区av | 亚洲一区二区观看 | 香蕉视频网站在线观看 | 国产在线精品视频 | 亚洲精品女 | 天天摸天天干天天操天天射 | 色五月成人 | 国产第一二区 | 国内精品久久久久久久久久久 | 最近2019年日本中文免费字幕 | 久久久久久久影视 | 亚洲午夜大片 | 日韩在线观看影院 | 夜夜操天天干 | 欧美性极品xxxx娇小 | av电影免费在线看 | 亚洲欧美在线综合 | 成人国产综合 | 91久久久久久久一区二区 | 热久精品 | 亚洲视频免费在线看 | 人人玩人人添人人澡超碰 | 99爱这里只有精品 | 久久五月天婷婷 | 婷婷久久一区 | 亚洲男女精品 | 正在播放国产91 | 一区二区三区高清在线观看 | 久久久一本精品99久久精品 | 中文成人字幕 | 国产精品自在线 | 韩国三级在线一区 | 国产精品久久久久三级 | 亚洲视频 在线观看 | 久久精品视频在线观看免费 | 黄色录像av | 日韩一区精品 | 特级西西444www大胆高清无视频 | 欧美一级特黄高清视频 | 国产精品一区二区久久精品爱微奶 | 美女在线免费观看视频 | 亚洲男男gaygay无套同网址 | av在线官网 | 欧美色就是色 | 成人欧美亚洲 | 久久国产精品99久久久久久老狼 | 99免费在线观看视频 | 欧美激情精品久久久久 | 在线观看的av网站 | 精品久久久久_ | 久久国产精品99久久久久久进口 | 免费黄色在线网站 | 色婷婷在线播放 | 国产露脸91国语对白 | 黄色免费观看视频 | av看片在线 | 国产一级黄色片免费看 | 久草视频看看 | 久草精品视频在线播放 | 日韩二区在线观看 | 亚洲综合色播 | 久草在线电影网 | 西西人体www444 | 免费人成在线观看网站 | 成人在线观看网址 | 国产黄色精品网站 | 国产精品不卡一区 | 亚洲a免费 | 天天曰视频| 丁香婷婷深情五月亚洲 | 99 色| 国产在线一区观看 | 国产精品99久久免费观看 | 国内精品免费 | 91mv.cool在线观看 | 精品国产亚洲一区二区麻豆 | 国产精品女人久久久 | 天天操天天弄 | 五月婷婷影院 | 丁香花在线视频观看免费 | 四川妇女搡bbbb搡bbbb搡 | 91丨九色丨91啦蝌蚪老版 | 97精品国产97久久久久久粉红 | 国产一区电影在线观看 | 激情影音先锋 | 久久夜色精品国产欧美乱 | 久久综合婷婷国产二区高清 | 国产成人在线免费观看 | 久久久久久久国产精品视频 | 免费69视频 | 欧美影院久久 | 色诱亚洲精品久久久久久 | 国产精品黄色影片导航在线观看 | 久久99热精品这里久久精品 | 亚洲黄色激情小说 | 91精品视频在线免费观看 | 91视频麻豆视频 | 久久激情网站 | 色综合天天干 | 成年人国产视频 | 久久公开视频 | 亚洲狠狠丁香婷婷综合久久久 | 日韩在线免费视频观看 | 久草免费在线视频观看 | 欧美视频国产视频 | 中文亚洲欧美日韩 | 在线精品视频免费播放 | 精品91久久久久 | 伊人国产视频 | 国产精品6 | www.超碰 | zzijzzij亚洲成熟少妇 | 欧美日韩国产一区二区三区 | 成人永久免费 | 久久久 精品 | 日韩三级视频在线观看 | 黄色成人小视频 | 日韩二区在线播放 | 99爱在线 | 久久精品视频观看 | 黄色成人av在线 | 亚洲视频电影在线 | 久久久国产精华液 | aaa免费毛片| 又黄又刺激又爽的视频 | 婷婷五天天在线视频 | 天天干天天干天天干天天干天天干天天干 | 欧美日韩一区二区三区在线观看视频 | 99视| 国产伦理久久精品久久久久_ | 国产自在线 | 欧洲av在线 | 久久精品资源 | 人人射人人爱 | 久久精品电影 | 色噜噜色噜噜 | 亚州成人av在线 | 天天摸夜夜操 | 欧美黄色成人 | 久久久久国产精品视频 | 日韩免费专区 | 午夜精品久久久久久久99 | 在线а√天堂中文官网 | 精品国产一区二区三区日日嗨 | 免费在线黄色av | 黄色一级影院 | 色婷婷www | 麻豆系列在线观看 | 91精品爽啪蜜夜国产在线播放 | 国产精品大尺度 | 精品在线一区二区三区 | 久久免费在线观看视频 | 国产高清视频在线免费观看 | 日本性xxxxx 亚洲精品午夜久久久 | 久久国产精品一区二区三区四区 | 黄色小网站在线 | 久久九九国产精品 | 日日夜夜综合网 | 免费福利在线 | 国产亚洲精品久久久久久 | 精品亚洲男同gayvideo网站 | 欧美精品久久久久久久久老牛影院 | 狠狠色丁香婷婷综合最新地址 | 在线观看日本高清mv视频 | 六月丁香激情综合 | 九九精品在线观看 | 国产麻豆精品久久 | 在线成人免费电影 | 成人一级片免费看 | 欧美大片第1页 | 99婷婷狠狠成为人免费视频 | 91精品一区在线观看 | 国产美女久久 | 国产一级久久久 | 草久久av | 国产在线 一区二区三区 | 99视频国产在线 | 91麻豆免费版 | 人人澡av | 精品久久久久久久久久久院品网 | 伊人影院在线观看 | 国产黄色理论片 | 美女网站视频免费都是黄 | 日韩有码欧美 | 美女视频一区二区 | 热99在线 | 久久少妇| 免费国产亚洲视频 | 一区二区三区免费看 | 久久久久国产一区二区三区四区 | 色多多在线观看 | 九九热1| 国产视频中文字幕 |