亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

利用python控制Autocad:pyautocad方式

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

發現pyautocad模塊:可以用python控制autocad的包。今天把文檔中的重點內容摘錄出來,以后繪圖、計算大工程量、或者識別施工圖的時候時候也許可以用到。

一、連接cad

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

from pyautocad import Autocad, APointacad = Autocad(create_if_not_exists=True)acad.prompt('Hello, Autocad from Pythonn')print acad.doc.Name

第一行:自動連接上cad,只要cad是開著的,就創建了一個<pyautocad.api.Autocad> 對象。這個對象連接最近打開的cad文件。

如果此時還沒有打開cad,將會創建一個新的dwg文件,并自動開啟cad軟件(貼心)

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

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

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

可以利用ActiveX interface,python中儲存的autocad對象中保存了一些可以簡化操作的自動化操作(可以迭代對象、搜索對象等等)

三、用acad.model 對象繪制簡單圖形

acad.model對象是用來在圖形中添加圖元的,先來做一個簡單的功能,在兩點之間畫線,以一個點為圓心畫圓

# 已經導入 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、循環中的第一行用于添加一個Text,參數:(u’%s’ % text, x, y)

如果后面不需要操作AddText對象的話,只是實現在cad中創建一個Text并不一定要創建變量,直接調用acad.model.AddText()方法就可以做到了。

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

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

嘗試過可以使用的:addPolyLine(

練練手:

用遞歸程序寫一個在cad中畫一個螺旋圖,寫的有點??攏?/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)

畫出來是這個樣子的,還是挺好玩的

利用python控制Autocad:pyautocad方式

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

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

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

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

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

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

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

pyautocad還提供了一個比較

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

訪問對象的屬性

以下內容文檔中貌似沒有寫,探究一下:

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

# 屬性/方法 第一種形式(可以直接調用)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圖元的屬性和方法是分明存在的,但是應該怎么才能get或者set這些屬性呢?

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

這些公有屬性應該是可以調用的,下面是一些例子:

1、調用move方法(set)

text.move(APoint(0,0), APoint(100,100)) #( 原點,相對原點的位置)

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

2、訪問layer屬性(setter、getter)

print text.layer # 0

就提取出了text.layer的值,如果想要改變text對象的layer,直接賦值即可(給layer變量復制的layer名字必須已經存在,否則會報錯)

text.layer = 'new layer'print text.layer# new layer

3、提取PolyLine的各個頂點(很有用)

# 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個元素構成第一個坐標, 3、4個元素構成第二個坐標

以上操作證明了確實可以通過調用對象的公有屬性來操作cad中的對象,但是麻煩的是,由于這些方法都是ctype的,dir()這些方法無法得知具體應該輸入那些參數和參數的類型,有待解決…

如果實在沒有找到這些方法的文檔說明,就只好一個一個試出來使用方法了

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

以上這篇利用python控制Autocad:pyautocad方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 精品久久九九 | 国内精品久久久久久麻豆 | 一级片免费视频 | 亚洲美女网站 | 国产成人亚洲日本精品 | 国产视频手机在线观看 | 欧美激情整片a级 | 亚洲小说春色综合另类网蜜桃 | 中文字幕第13亚洲另类 | 国产精品资源手机在线播放 | 久久精彩视频 | 91在线视频| 成人激情站 | 亚洲性色综合图区图片 | 美国黄色a级片 | 国产精品国产福利国产秒拍 | 免费看国产一级片 | 蝌蚪视频91 | 国产成人综合95精品视频免费 | 在线免费观看国产 | 亚欧精品一区二区三区四区 | 国产高清在线a视频大全 | 日韩3级| 国产一区二区三区美女图片 | 日本一级毛片视频在线看 | 国产精品反差婊在线观看 | 国产一级特黄全黄毛片 | 久久久国产精品免费 | zoofilia杂交videos新人妖 | 在线免费视频一区二区 | 最新精品视频在线观看 | 国产成人福利在线视老湿机 | 一级午夜视频 | 日韩一区二区在线视频 | 久久精品久久久久久久久人 | 中文字幕一区二区三区在线播放 | 1024在线视频国产在线播放 | 国产欧美日韩精品a在线观看高清 | 女18一级大黄毛片免费女人 | 美日韩精品 | 国产高清美女一级a毛片久久w |