国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

利用python控制Autocad:pyautocad方式

瀏覽:53日期:2022-07-23 16:24:00

發(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, APointacad = Autocad(create_if_not_exists=True)acad.prompt('Hello, Autocad from Pythonn')print acad.doc.Name

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

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

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

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

二、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)之間畫線,以一個(gè)點(diǎn)為圓心畫圓

# 已經(jīng)導(dǎo)入 APoint 類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ì)象的話,只是實(shí)現(xiàn)在cad中創(chuàng)建一個(gè)Text并不一定要?jiǎng)?chuàng)建變量,直接調(diào)用acad.model.AddText()方法就可以做到了。

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

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

嘗試過可以使用的:addPolyLine(

練練手:

用遞歸程序?qū)懸粋€(gè)在cad中畫一個(gè)螺旋圖,寫的有點(diǎn)??攏?/p>

from pyautocad import Autocad, APointacad = 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)

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

利用python控制Autocad:pyautocad方式

四、遍歷cad圖形對(duì)象以及訪問/修改對(duì)象屬性

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

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

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

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

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

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

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

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

訪問對(duì)象的屬性

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

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

# 屬性/方法 第一種形式(可以直接調(diào)用)AddRefApplicationArrayPolarArrayRectangularAttachmentPointBackgroundFillCopyDatabaseDeleteDocumentDrawingDirectionEntityNameEntityTransparencyEntityTypeEraseFieldCodeGetBoundingBoxGetExtensionDictionaryGetIDsOfNamesGetTypeInfoGetTypeInfoCountGetXDataHandleHasExtensionDictionaryHeightHighlightHyperlinksInsertionPointIntersectWithInvokeLayerLineSpacingDistanceLineSpacingFactorLineSpacingStyleLinetypeLinetypeScaleLineweightMaterialMirrorMirror3DMoveNormalObjectIDObjectID32ObjectNameOwnerIDOwnerID32PlotStyleNameQueryInterfaceReleaseRotateRotate3DRotationScaleEntitySetXDataStyleNameTextStringTransformByTrueColorUpdateVisibleWidth# 屬性/方法 第二種形式_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_colorfrom_paramvalue

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

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

這些公有屬性應(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、訪問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í)可以通過調(diào)用對(duì)象的公有屬性來(lái)操作cad中的對(duì)象,但是麻煩的是,由于這些方法都是ctype的,dir()這些方法無(wú)法得知具體應(yīng)該輸入那些參數(shù)和參數(shù)的類型,有待解決…

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

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

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

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 淳安县| 稻城县| 安顺市| 景东| 景宁| 玉山县| 余干县| 龙岩市| 双峰县| 偃师市| 田东县| 星子县| 东安县| 石渠县| 辽阳市| 屏东市| 五河县| 澎湖县| 涡阳县| 眉山市| 开化县| 陆川县| 虹口区| 霍邱县| 铜鼓县| 彝良县| 玛沁县| 天柱县| 娱乐| 富平县| 武川县| 牙克石市| 永春县| 平邑县| 沭阳县| 漯河市| 阿拉善左旗| 乌苏市| 武夷山市| 江达县| 宜城市|