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

利用python控制Autocad:pyautocad方式

 更新時(shí)間:2020年06月01日 10:36:43   作者:bsider  
這篇文章主要介紹了利用python控制Autocad:pyautocad方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

發(fā)現(xiàn)pyautocad模塊:可以用python控制autocad的包。今天把文檔中的重點(diǎn)內(nèi)容摘錄出來(lái),以后繪圖、計(jì)算大工程量、或者識(shí)別施工圖的時(shí)候時(shí)候也許可以用到。

一、連接cad

pyautocad包可以用任何版本的cad進(jìn)行操作,實(shí)際上接口都是一樣的。文檔中首先給出連接cad的代碼:

from pyautocad import Autocad, APoint
acad = Autocad(create_if_not_exists=True)
acad.prompt("Hello, Autocad from Python\n")
print acad.doc.Name

第一行:自動(dòng)連接上cad,只要cad是開(kāi)著的,就創(chuàng)建了一個(gè)<pyautocad.api.Autocad> 對(duì)象。這個(gè)對(duì)象連接最近打開(kāi)的cad文件。

如果此時(shí)還沒(méi)有打開(kāi)cad,將會(huì)創(chuàng)建一個(gè)新的dwg文件,并自動(dòng)開(kāi)啟cad軟件(貼心)

第二行:acad.prompt() 用來(lái)在cad控制臺(tái)中打印文字

第三行:acad.doc.Name儲(chǔ)存著cad最近打開(kāi)的圖形名

二、ActiveX interface(這個(gè)到底是什么東西)

可以利用ActiveX interface,python中儲(chǔ)存的autocad對(duì)象中保存了一些可以簡(jiǎn)化操作的自動(dòng)化操作(可以迭代對(duì)象、搜索對(duì)象等等)

三、用acad.model 對(duì)象繪制簡(jiǎn)單圖形

acad.model對(duì)象是用來(lái)在圖形中添加圖元的,先來(lái)做一個(gè)簡(jiǎn)單的功能,在兩點(diǎn)之間畫(huà)線(xiàn),以一個(gè)點(diǎn)為圓心畫(huà)圓

# 已經(jīng)導(dǎo)入 APoint 類(lèi)
p1 = APoint(0, 0)
p2 = APoint(50, 25)
for i in range(5):
  text = acad.model.AddText(u'Hi %s!' % i, p1, 2.5)
  acad.model.AddLine(p1, p2)
  acad.model.AddCircle(p1, 10)
  p1.y += 10

1、循環(huán)中的第一行用于添加一個(gè)Text,參數(shù):(u'%s' % text, x, y)

如果后面不需要操作AddText對(duì)象的話(huà),只是實(shí)現(xiàn)在cad中創(chuàng)建一個(gè)Text并不一定要?jiǎng)?chuàng)建變量,直接調(diào)用acad.model.AddText()方法就可以做到了。

2、acad.model.AddCircle(p1, 10) 畫(huà)圓,同理

3、可以嘗試更多的 addXxxx 方法,由于文檔中并沒(méi)有寫(xiě)輸入變量究竟是什么,慢慢嘗試吧

嘗試過(guò)可以使用的:addPolyLine(

練練手:

用遞歸程序?qū)懸粋€(gè)在cad中畫(huà)一個(gè)螺旋圖,寫(xiě)的有點(diǎn)啰嗦,

from pyautocad import Autocad, APoint

acad = Autocad(create_if_not_exists = True)
p = APoint(5, 0)

def recur(p, step, layer):
  if layer == 50:
    return
  p2 = next_p(p, layer, step)
  acad.model.AddLine(p, p2)
  layer += 1
  step += 5
  print step
  recur(p2, step, layer)

def next_p(p, i, step):
  x = p.x
  y = p.y
  if i % 4 == 0:
    x += step
  elif i % 4 == 1:
    y += step
  elif i % 4 == 2:
    x -= step
  elif i % 4 == 3:
    y -= step
  return APoint(x, y)
if __name__ == '__main__':
  recur(p, 0, 0)

畫(huà)出來(lái)是這個(gè)樣子的,還是挺好玩的

四、遍歷cad圖形對(duì)象以及訪(fǎng)問(wèn)/修改對(duì)象屬性

基本的遍歷圖形中所有圖元的方法:

for obj in acad.iter_objects():
  print obj.ObjectName
  # ObjectName 可以打印出對(duì)象的類(lèi)型

想要按類(lèi)型查找出所有某種圖元(如所有Text對(duì)象):

for text in acad.iter_objects('Text'): print text.TextString, text.InsertionPoint

或者也可以在類(lèi)型選擇時(shí)填入多種類(lèi)型,如:

for obj in acad.iter_objects(['Text', 'Line']): print obj.ObjectName

pyautocad還提供了一個(gè)比較

*文檔中特地說(shuō)明:按照類(lèi)型查找可以混淆大小寫(xiě),也可以只輸入類(lèi)型的一部分,比如查找”te”類(lèi)型就可以自動(dòng)匹配到text類(lèi)型,輸入”li“就自動(dòng)匹配到Ellipse和Line類(lèi)型,挺方便的吧~

訪(fǎng)問(wèn)對(duì)象的屬性

以下內(nèi)容文檔中貌似沒(méi)有寫(xiě),探究一下:

用dir(text)可以得出很多text下的屬性和方法:

# 屬性/方法 第一種形式(可以直接調(diào)用)
AddRef
Application
ArrayPolar
ArrayRectangular
AttachmentPoint
BackgroundFill
Copy
Database
Delete
Document
DrawingDirection
EntityName
EntityTransparency
EntityType
Erase
FieldCode
GetBoundingBox
GetExtensionDictionary
GetIDsOfNames
GetTypeInfo
GetTypeInfoCount
GetXData
Handle
HasExtensionDictionary
Height
Highlight
Hyperlinks
InsertionPoint
IntersectWith
Invoke
Layer
LineSpacingDistance
LineSpacingFactor
LineSpacingStyle
Linetype
LinetypeScale
Lineweight
Material
Mirror
Mirror3D
Move
Normal
ObjectID
ObjectID32
ObjectName
OwnerID
OwnerID32
PlotStyleName
QueryInterface
Release
Rotate
Rotate3D
Rotation
ScaleEntity
SetXData
StyleName
TextString
TransformBy
TrueColor
Update
Visible
Width


# 屬性/方法 第二種形式
_AddRef
_GetIDsOfNames
_GetTypeInfo
_IAcadEntity__com_ArrayPolar
_IAcadEntity__com_ArrayRectangular
_IAcadEntity__com_Copy
_IAcadEntity__com_GetBoundingBox
_IAcadEntity__com_Highlight
_IAcadEntity__com_IntersectWith
_IAcadEntity__com_Mirror
_IAcadEntity__com_Mirror3D
_IAcadEntity__com_Move
_IAcadEntity__com_Rotate
_IAcadEntity__com_Rotate3D
_IAcadEntity__com_ScaleEntity
_IAcadEntity__com_TransformBy
_IAcadEntity__com_Update
_IAcadEntity__com__get_EntityName
_IAcadEntity__com__get_EntityTransparency
_IAcadEntity__com__get_EntityType
_IAcadEntity__com__get_Hyperlinks
_IAcadEntity__com__get_Layer
_IAcadEntity__com__get_Linetype
_IAcadEntity__com__get_LinetypeScale
_IAcadEntity__com__get_Lineweight
_IAcadEntity__com__get_Material
_IAcadEntity__com__get_PlotStyleName
_IAcadEntity__com__get_TrueColor
_IAcadEntity__com__get_Visible
_IAcadEntity__com__get_color
_IAcadEntity__com__set_EntityTransparency
_IAcadEntity__com__set_Layer
_IAcadEntity__com__set_Linetype
_IAcadEntity__com__set_LinetypeScale
_IAcadEntity__com__set_Lineweight
_IAcadEntity__com__set_Material
_IAcadEntity__com__set_PlotStyleName
_IAcadEntity__com__set_TrueColor
_IAcadEntity__com__set_Visible
_IAcadEntity__com__set_color
_IAcadMText__com_FieldCode
_IAcadMText__com__get_AttachmentPoint
_IAcadMText__com__get_BackgroundFill
_IAcadMText__com__get_DrawingDirection
_IAcadMText__com__get_Height
_IAcadMText__com__get_InsertionPoint
_IAcadMText__com__get_LineSpacingDistance
_IAcadMText__com__get_LineSpacingFactor
_IAcadMText__com__get_LineSpacingStyle
_IAcadMText__com__get_Normal
_IAcadMText__com__get_Rotation
_IAcadMText__com__get_StyleName
_IAcadMText__com__get_TextString
_IAcadMText__com__get_Width
_IAcadMText__com__set_AttachmentPoint
_IAcadMText__com__set_BackgroundFill
_IAcadMText__com__set_DrawingDirection
_IAcadMText__com__set_Height
_IAcadMText__com__set_InsertionPoint
_IAcadMText__com__set_LineSpacingDistance
_IAcadMText__com__set_LineSpacingFactor
_IAcadMText__com__set_LineSpacingStyle
_IAcadMText__com__set_Normal
_IAcadMText__com__set_Rotation
_IAcadMText__com__set_StyleName
_IAcadMText__com__set_TextString
_IAcadMText__com__set_Width
_IAcadObject__com_Delete
_IAcadObject__com_Erase
_IAcadObject__com_GetExtensionDictionary
_IAcadObject__com_GetXData
_IAcadObject__com_SetXData
_IAcadObject__com__get_Application
_IAcadObject__com__get_Database
_IAcadObject__com__get_Document
_IAcadObject__com__get_Handle
_IAcadObject__com__get_HasExtensionDictionary
_IAcadObject__com__get_ObjectID
_IAcadObject__com__get_ObjectID32
_IAcadObject__com__get_ObjectName
_IAcadObject__com__get_OwnerID
_IAcadObject__com__get_OwnerID32
_IDispatch__com_GetIDsOfNames
_IDispatch__com_GetTypeInfo
_IDispatch__com_GetTypeInfoCount
_IDispatch__com_Invoke
_IUnknown__com_AddRef
_IUnknown__com_QueryInterface
_IUnknown__com_Release
_Invoke
_QueryInterface
_Release
__class__
__cmp__
__com_interface__
__ctypes_from_outparam__
__del__
__delattr__
__dict__
__doc__
__eq__
__format__
__getattr__
__getattribute__
__hash__
__init__
__map_case__
__metaclass__
__module__
__new__
__nonzero__
__reduce__
__reduce_ex__
__repr__
__setattr__
__setstate__
__sizeof__
__str__
__subclasshook__
__weakref__
_b_base_
_b_needsfree_
_case_insensitive_
_compointer_base__get_value
_idlflags_
_iid_
_invoke
_methods_
_needs_com_addref_
_objects
_type_
color
from_param
value

這些cad圖元的屬性和方法是分明存在的,但是應(yīng)該怎么才能get或者set這些屬性呢?

可以看到形如“_IAcadMText__com__set_Width”的私有屬性(現(xiàn)在我也不知道這些屬性能夠怎么利用,也許這個(gè)是句柄??不懂)。但是所有這些屬性中,可以直接調(diào)用的方法中大部分(在代碼區(qū)里的第一類(lèi)公有屬性中)是可以與之匹配的。

這些公有屬性應(yīng)該是可以調(diào)用的,下面是一些例子:

1、調(diào)用move方法(set)

text.move(APoint(0,0), APoint(100,100)) #( 原點(diǎn),相對(duì)原點(diǎn)的位置)

用這行代碼就可以將所有的text對(duì)象向右、向上平移100個(gè)單位

2、訪(fǎng)問(wèn)layer屬性(setter、getter)

print text.layer # 0

就提取出了text.layer的值,如果想要改變text對(duì)象的layer,直接賦值即可(給layer變量復(fù)制的layer名字必須已經(jīng)存在,否則會(huì)報(bào)錯(cuò))

text.layer = "new layer"
print text.layer
# new layer

3、提取PolyLine的各個(gè)頂點(diǎn)(很有用)

# for item in acad.iter_objects("PolyLine"):
  print item.Coordinates
'''
(-462.01707322354014, 719.8251441314151, 207.17175903027055, 1056.4031530064085, 389.6778054895749, 574.9096117303479, -143.80140284041954, 434.6687742615859, -326.30744929972207, -60.84885181138725, -564.9692056597924, 308.45202158973643, -327.4641724567995, 461.94033545845366, -593.0470534647193, 546.8614421365228, -616.4452718779175, 803.9696476627087)
'''
# 第1、2個(gè)元素構(gòu)成第一個(gè)坐標(biāo), 3、4個(gè)元素構(gòu)成第二個(gè)坐標(biāo)

以上操作證明了確實(shí)可以通過(guò)調(diào)用對(duì)象的公有屬性來(lái)操作cad中的對(duì)象,但是麻煩的是,由于這些方法都是ctype的,dir()這些方法無(wú)法得知具體應(yīng)該輸入那些參數(shù)和參數(shù)的類(lèi)型,有待解決…

如果實(shí)在沒(méi)有找到這些方法的文檔說(shuō)明,就只好一個(gè)一個(gè)試出來(lái)使用方法了

(補(bǔ)充:help(obj) 可以得到一些信息,但是好像還是沒(méi)有參數(shù)類(lèi)型信息。只能得到哪些obj的屬性可以set,哪些可以get等等)

以上這篇利用python控制Autocad:pyautocad方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python?Selenium無(wú)法打開(kāi)Chrome瀏覽器處理自定義瀏覽器路徑的問(wèn)題及解決方法

    Python?Selenium無(wú)法打開(kāi)Chrome瀏覽器處理自定義瀏覽器路徑的問(wèn)題及解決方法

    Python?Selenium控制Chrome瀏覽器的過(guò)程中,由于安裝的Chrome瀏覽器的版本找不到對(duì)應(yīng)版本的驅(qū)動(dòng)chromedriver.exe文件,下載了小幾個(gè)版本號(hào)的驅(qū)動(dòng)軟件都無(wú)法正常使用,下面通過(guò)本文介紹Python?Selenium無(wú)法打開(kāi)Chrome瀏覽器處理自定義瀏覽器路徑的問(wèn)題,需要的朋友可以參考下
    2024-08-08
  • Python元類(lèi)的進(jìn)階應(yīng)用深度探索

    Python元類(lèi)的進(jìn)階應(yīng)用深度探索

    這篇文章主要介紹了Python元類(lèi)的進(jìn)階應(yīng)用深度探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 使用 python pyautogui實(shí)現(xiàn)鼠標(biāo)鍵盤(pán)控制功能

    使用 python pyautogui實(shí)現(xiàn)鼠標(biāo)鍵盤(pán)控制功能

    pyautogui是一個(gè)可以控制鼠標(biāo)和鍵盤(pán)的python庫(kù),類(lèi)似的還有pywin32。這篇文章主要介紹了python中的pyautogui實(shí)現(xiàn)鼠標(biāo)鍵盤(pán)控制功能,需要的朋友可以參考下
    2019-08-08
  • pandas中使用數(shù)據(jù)透視表的示例代碼

    pandas中使用數(shù)據(jù)透視表的示例代碼

    本文主要介紹了pandas中使用數(shù)據(jù)透視表的示例代碼,主要包含pivot_table函數(shù)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • Python利用魔法方法玩轉(zhuǎn)對(duì)象

    Python利用魔法方法玩轉(zhuǎn)對(duì)象

    Python中魔法方法(magic method)其實(shí)就是那些被雙下劃線(xiàn)包圍的方法,這些魔法方法為類(lèi)添加了**“魔力”,讓我們可以在面向?qū)ο缶幊讨杏酶雍?jiǎn)潔的代碼來(lái)操作對(duì)象,下面我們就來(lái)具體了解一下如何利用魔法方法玩轉(zhuǎn)對(duì)象吧
    2023-12-12
  • Python使用numpy實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò)

    Python使用numpy實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò)

    這篇文章主要為大家詳細(xì)介紹了Python使用numpy實(shí)現(xiàn)BP神經(jīng)網(wǎng)絡(luò),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • python抓取最新博客內(nèi)容并生成Rss

    python抓取最新博客內(nèi)容并生成Rss

    本文給大家分享的是使用python抓取最新博客內(nèi)容并生成Rss的代碼,主要用到了PyRSS2Gen方法,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。
    2015-05-05
  • 關(guān)于Torch?torchvision?Python版本對(duì)應(yīng)關(guān)系說(shuō)明

    關(guān)于Torch?torchvision?Python版本對(duì)應(yīng)關(guān)系說(shuō)明

    這篇文章主要介紹了關(guān)于Torch?torchvision?Python版本對(duì)應(yīng)關(guān)系說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python之維度dim的定義及其理解使用方式

    Python之維度dim的定義及其理解使用方式

    這篇文章主要介紹了Python之維度dim的定義及其理解使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python的Django框架可適配的各種數(shù)據(jù)庫(kù)介紹

    Python的Django框架可適配的各種數(shù)據(jù)庫(kù)介紹

    這篇文章主要介紹了Python的Django框架可適配的各種數(shù)據(jù)庫(kù),簡(jiǎn)單總結(jié)為就是流行的幾種數(shù)據(jù)庫(kù)Python基本上全部能用XD 需要的朋友可以參考下
    2015-07-07

最新評(píng)論

将乐县| 遵化市| 卢湾区| 正镶白旗| 牙克石市| 巴马| 宝丰县| 荥经县| 临西县| 吉林省| 上栗县| 利川市| 竹溪县| 隆德县| 田阳县| 湘乡市| 铁岭市| 清徐县| 阿合奇县| 博野县| 板桥市| 依兰县| 陇西县| 双流县| 天长市| 花莲县| 吴川市| 丹东市| 上思县| 原平市| 濮阳县| 甘泉县| 延吉市| 阜城县| 法库县| 肥西县| 河池市| 林周县| 呼玛县| 邵东县| 绵竹市|