autoCAD 创建对象 使用面域 创建图案填充
創建對象
在 AutoCAD 中經常有多種不同的方法可以創建相同的圖形對象。雖然 .NET API 沒有提供同樣的創建對象的組合,但是它除為每一個對象類型都提供一個基本的對象構造函數外,也提供了對象構造函數的許多重載版本。
例如,在 AutoCAD 中創建圓有四種不同方法:
- (1) 通過指定圓心和半徑、
- (2) 通過定義直徑的兩點、
- (3) 通過定義圓周的三點或
- (4) 通過兩個切點和一個半徑。
- 但是,在 .NET API 中只提供了兩種創建圓的方法。一個方法不接受任何參數,而第二個需要一個中心點,圓的法線方向和半徑。
注意使用 New 關鍵字創建對象,然后使用 Add 或 AppendEntity 追加到父對象中,使用哪個方法要根據使用的是容器(符號表或字典) 還是塊表記錄對象。
為新對象指定默認屬性值
當創建一個新圖形對象后,應該調用新對象的 SetDatabaseDefaults 方法。 SetDatabaseDefaults 方法根據在當前文檔的數據庫中定義的當前圖元的值設置下列各項圖元的屬性值。
- Color
- Layer
- Linetype
- Linetype scale
- Lineweight
- Plot style name
- Visibility
確定父對象
創建直線
創建曲線對象
創建 Point 對象
創建實體填充區域
使用面域
創建圖案填充
確定父對象
圖形對象被添加到塊表記錄(BlockTableRecord)對象中,像模型或圖紙空間。用戶通過塊表對象引用代表模型和圖紙空間的塊。如果想在當前空間代替在指定空間中工作,可以從當前數據庫的 CurrentSpaceId 屬性獲得當前空間的 ObjectId。
模型或圖紙空間的塊表記錄的 ObjectID 可以使用 DatabaseServices 命名空間下的 SymbolUtilityServices 類的屬性或 GetBlockModelSpaceId 和 GetBlockPaperSpaceId 方法從塊表對象中獲得。
訪問模型空間、圖紙空間或當前空間
下列示例演示如何訪問與模型空間、圖紙空間或當前空間相關聯的塊表記錄。一旦塊表記錄被引用,一個新的直線將被添加到塊表記錄中。
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry Imports Autodesk.AutoCAD.EditorInput<CommandMethod("AccessSpace")> _ Public Sub AccessSpace()'' 獲得當前文檔和數據庫 Get the current document and databaseDim acDoc As Document = Application.DocumentManager.MdiActiveDocumentDim acCurDb As Database = acDoc.Database''啟動一個事務 Start a transactionUsing acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()'' 以只讀方式打開塊表 Open the Block table for readDim acBlkTbl As BlockTableacBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)'' 以只讀方式打開塊表記錄 Open the Block table record for readDim acBlkTblRec As BlockTableRecord'' 請求打開哪一個表記錄 Request which table record to openDim pKeyOpts As PromptKeywordOptions = New PromptKeywordOptions("")pKeyOpts.Message = vbLf & "Enter which space to create the line in "pKeyOpts.Keywords.Add("Model")pKeyOpts.Keywords.Add("Paper")pKeyOpts.Keywords.Add("Current")pKeyOpts.AllowNone = FalsepKeyOpts.AppendKeywordsToMessage = TrueDim pKeyRes As PromptResult = acDoc.Editor.GetKeywords(pKeyOpts)If pKeyRes.StringResult = "Model" Then'' 從塊表獲得模型空間的 ObjectID Get the ObjectID for Model space from the Block tableacBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _OpenMode.ForWrite)ElseIf pKeyRes.StringResult = "Paper" Then'' 從塊表記錄獲得圖紙空間的ObjectID Get the ObjectID for Paper space from the Block tableacBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.PaperSpace), _OpenMode.ForWrite)Else'' 從數據庫中獲得當前空間的ObjectID Get the ObjectID for the current space from the databaseacBlkTblRec = acTrans.GetObject(acCurDb.CurrentSpaceId, _OpenMode.ForWrite)End If'' 創建一條起點為2,5 終點為 10,7 的直線 Create a line that starts at 2,5 and ends at 10,7Dim acLine As Line = New Line(New Point3d(2, 5, 0), _New Point3d(10, 7, 0))acLine.SetDatabaseDefaults()'' 添加新對象到塊表記錄和事務中 Add the new object to the block table record and the transactionacBlkTblRec.AppendEntity(acLine)acTrans.AddNewlyCreatedDBObject(acLine, True)'' 保存新的直線到數據庫中 Save the new line to the databaseacTrans.Commit()End Using End Sub創建直線
直線是 AutoCAD 中最基本的對象。用戶可以創建各種直線—單一直線、帶圓弧和不帶圓弧的多線段。通常,可以通過指定坐標點來繪制直線。直線被創建后,它會從圖形數據庫繼承當前設置,像圖層、線型和顏色。
若要創建直線,可以創建下列任一個對象的新實例:
- Line
- 創建一個直線。
- Polyline
- 創建二維輕量多段線
- MLine
- 創建多線
- Polyline2D
- 創建二維多段線
- Polyline3D
- 創建三維多段線
創建直線對象
本例添加一條起點為(5,5,0),終點為(12,3,0)的直線到模型空間。
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry<CommandMethod("AddLine")> _ Public Sub AddLine()'' 獲得當前文檔和數據庫 Get the current document and databaseDim acDoc As Document = Application.DocumentManager.MdiActiveDocumentDim acCurDb As Database = acDoc.Database''啟動一個事務 Start a transactionUsing acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()'' 以只讀方式打開塊表 Open the Block table for readDim acBlkTbl As BlockTableacBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)'' 以寫方式打開模型空間塊表記錄 Open the Block table record Model space for writeDim acBlkTblRec As BlockTableRecordacBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _OpenMode.ForWrite)'' 創建一條起點為(5,5,0),終點為(12,3,0)的直線 Create a line that starts at 5,5 and ends at 12,3Dim acLine As Line = New Line(New Point3d(5, 5, 0), _New Point3d(12, 3, 0))acLine.SetDatabaseDefaults()'' 添加新對象到塊表記錄和事務中 Add the new object to the block table record and the transactionacBlkTblRec.AppendEntity(acLine)acTrans.AddNewlyCreatedDBObject(acLine, True)'' 保存新對象到數據庫中 Save the new object to the databaseacTrans.Commit()End Using End Sub創建多段線對象
本例添加使用二維坐標(2,4)、(4,2) 和 (6,4)創建的一條有兩個直線段的輕量多段線到模型空間中。
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry<CommandMethod("AddLightweightPolyline")> _ Public Sub AddLightweightPolyline()'' 獲得當前文檔和數據庫 Get the current document and databaseDim acDoc As Document = Application.DocumentManager.MdiActiveDocumentDim acCurDb As Database = acDoc.Database''啟動一個事務 Start a transactionUsing acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()'' 以只讀方式打開塊表 Open the Block table for readDim acBlkTbl As BlockTableacBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)'' 以寫方式打開模型空間塊表記錄 Open the Block table record Model space for writeDim acBlkTblRec As BlockTableRecordacBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _OpenMode.ForWrite)'' 創建一條有兩段的多段線 Create a polyline with two segments (3 points)Dim acPoly As Polyline = New Polyline()acPoly.SetDatabaseDefaults()acPoly.AddVertexAt(0, New Point2d(2, 4), 0, 0, 0)acPoly.AddVertexAt(1, New Point2d(4, 2), 0, 0, 0)acPoly.AddVertexAt(2, New Point2d(6, 4), 0, 0, 0)'' 添加新對象到塊表記錄和事務中 Add the new object to the block table record and the transactionacBlkTblRec.AppendEntity(acPoly)acTrans.AddNewlyCreatedDBObject(acPoly, True)'' 保存新對象到數據庫中 Save the new object to the databaseacTrans.Commit()End Using End Sub創建曲線對象
用戶可以使用 AutoCAD 創建各種曲線對象,包括樣條曲線、螺旋線、圓、圓弧和橢圓。所有的曲線都在當前 UCS 的 XY 平面上創建。
若要創建曲線,可以創建下面任一個對象的新實例:
- Arc
- 使用給定的中心點,半徑,起始和終止角度創建圓弧。
- Circle
- 使用給定的中心點和半徑創建圓。
- Ellipse
- 使用給定的中心點,長軸點,和半徑比創建橢圓。
- Spline
- 創建一個二次或三次的曲線曲面的非均勻有理B樣條(非均勻 B 樣條曲線)曲線。
- Helix
- 創建一個二維或三維的螺旋線對象。
創建圓對象
創建圓弧對象
創建樣條曲線對象
創建圓對象
本例在模型空間中創建一個中心點在 (2,3,0) ,半徑為4.25 的圓。
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry<CommandMethod("AddCircle")> _ Public Sub AddCircle()'' 獲得當前文檔和數據庫 Get the current document and databaseDim acDoc As Document = Application.DocumentManager.MdiActiveDocumentDim acCurDb As Database = acDoc.Database''啟動一個事務 Start a transactionUsing acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()'' 以只讀方式打開塊表 Open the Block table for readDim acBlkTbl As BlockTableacBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)'' 以寫方式打開模型空間塊表記錄 Open the Block table record Model space for writeDim acBlkTblRec As BlockTableRecordacBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _OpenMode.ForWrite)'' 創建一個中心點在 (2,3,0) ,半徑為4.25 的圓 Create a circle that is at 2,3 with a radius of 4.25Dim acCirc As Circle = New Circle()acCirc.SetDatabaseDefaults()acCirc.Center = New Point3d(2, 3, 0)acCirc.Radius = 4.25'' 添加新對象到塊表記錄和事務中 Add the new object to the block table record and the transactionacBlkTblRec.AppendEntity(acCirc)acTrans.AddNewlyCreatedDBObject(acCirc, True)'' 保存新對象到數據庫中 Save the new object to the databaseacTrans.Commit()End Using End Sub創建圓弧對象
本例在模型空間中創建一個中心點在 (6.25,9.125,0),半徑為6,起始角度為1.117(64度),終點角度為3.5605(204度)的圓弧。
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry<CommandMethod("AddArc")> _ Public Sub AddArc()'' 獲得當前文檔和數據庫 Get the current document and databaseDim acDoc As Document = Application.DocumentManager.MdiActiveDocumentDim acCurDb As Database = acDoc.Database''啟動一個事務 Start a transactionUsing acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()'' 以只讀方式打開塊表 Open the Block table for readDim acBlkTbl As BlockTableacBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)'' 以寫方式打開模型空間塊表記錄 Open the Block table record Model space for writeDim acBlkTblRec As BlockTableRecordacBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _OpenMode.ForWrite)'' 創建一個中心點在 (6.25,9.125,0),半徑為6,起始角度為1.117(64度),終點角度為3.5605(204度)的圓弧。 Create an arc that is at 6.25,9.125 with a radius of 6, and'' starts at 64 degrees and ends at 204 degreesDim acArc As Arc = New Arc(New Point3d(6.25, 9.125, 0), _6, 1.117, 3.5605)acArc.SetDatabaseDefaults()'' 添加新對象到塊表記錄和事務中 Add the new object to the block table record and the transactionacBlkTblRec.AppendEntity(acArc)acTrans.AddNewlyCreatedDBObject(acArc, True)'' 保存新對象到數據庫中 Save the new object to the databaseacTrans.Commit()End Using End Sub創建樣條曲線對象
本例在模型空間中創建一個使用三個點 (0, 0, 0), (5, 5, 0), 和 (10, 0, 0)創建的圓。樣條曲線的起始和終止切向為(0.5, 0.5, 0.0)。
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry<CommandMethod("AddSpline")> _ Public Sub AddSpline()'' 獲得當前文檔和數據庫 Get the current document and databaseDim acDoc As Document = Application.DocumentManager.MdiActiveDocumentDim acCurDb As Database = acDoc.Database''啟動一個事務 Start a transactionUsing acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()'' 以只讀方式打開塊表 Open the Block table for readDim acBlkTbl As BlockTableacBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)'' 以寫方式打開模型空間塊表記錄 Open the Block table record Model space for writeDim acBlkTblRec As BlockTableRecordacBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _OpenMode.ForWrite)'' 定義樣條曲線的固定點 Define the fit points for the splineDim ptColl As Point3dCollection = New Point3dCollection()ptColl.Add(New Point3d(0, 0, 0))ptColl.Add(New Point3d(5, 5, 0))ptColl.Add(New Point3d(10, 0, 0))''從點(0.5,0.5,0)獲得三維矢量 Get a 3D vector from the point (0.5,0.5,0)Dim vecTan As Vector3d = New Point3d(0.5, 0.5, 0).GetAsVector'' Create a spline through (0, 0, 0), (5, 5, 0), and (10, 0, 0) with a'' start and end tangency of (0.5, 0.5, 0.0)Dim acSpline As Spline = New Spline(ptColl, vecTan, vecTan, 4, 0.0)acSpline.SetDatabaseDefaults()'' 添加新對象到塊表記錄和事務中 Add the new object to the block table record and the transactionacBlkTblRec.AppendEntity(acSpline)acTrans.AddNewlyCreatedDBObject(acSpline, True)'' 保存新對象到數據庫中 Save the new object to the databaseacTrans.Commit()End Using End Sub創建 Point 對象
Point 對象非常有用,例如,可將 Point 對象用作捕捉的節點或者偏移對象的參考點。可以相對于屏幕或采用絕對單位來設置點的樣式和大小。
數據庫對象的 Pdmode 和 Pdsize 屬性控制 Point 對象的外觀。PDMODE 值 0、2、3 和 4 指定要通過點繪制的圖形。值為 1 時表示不顯示任何圖形。
?
在上述值上加上 32、64 或 96 表示除了繪制通過點的圖形以外,還在點的周圍繪制形狀:
?PDSIZE 控制點圖形的尺寸,PDMODE 值為 0 和 1 時除外。如果設置為 0,則點圖形的高度是圖形區高度的 5%。正的 PDSIZE 值指定點圖形的絕對尺寸。負值將解釋為視口大小的百分比。重生成圖形時將重新計算所有點的大小。
更改 PDMODE 和 PDSIZE 后,現有點的外觀將在下次重新生成圖形時改變。
創建 Point 對象并更改其外觀
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry<CommandMethod("AddPointAndSetPointStyle")> _ Public Sub AddPointAndSetPointStyle()'' 獲得當前文檔和數據庫 Get the current document and databaseDim acDoc As Document = Application.DocumentManager.MdiActiveDocumentDim acCurDb As Database = acDoc.Database''啟動一個事務 Start a transactionUsing acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()'' 以只讀方式打開塊表 Open the Block table for readDim acBlkTbl As BlockTableacBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)'' 以寫方式打開模型空間塊表記錄 Open the Block table record Model space for writeDim acBlkTblRec As BlockTableRecordacBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _OpenMode.ForWrite)'' 在模型空間中創建一個坐標為(4,3,0)的點 Create a point at (4, 3, 0) in Model spaceDim acPoint As DBPoint = New DBPoint(New Point3d(4, 3, 0))acPoint.SetDatabaseDefaults()'' 添加新對象到塊表記錄和事務中 Add the new object to the block table record and the transactionacBlkTblRec.AppendEntity(acPoint)acTrans.AddNewlyCreatedDBObject(acPoint, True)'' 在圖形中設置所有點對象的樣式 Set the style for all point objects in the drawingacCurDb.Pdmode = 34acCurDb.Pdsize = 1'' 保存新對象到數據庫中 Save the new object to the databaseacTrans.Commit()End Using End Sub創建實體填充區域
用戶可以創建用某種顏色填充的三角形和四邊形的區域。要更快地得到結果,請在關閉 FILLMODE 系統變量時創建這些區域,然后再打開 FILLMODE 以填充完成的區域。
創建四邊形實體填充區域時,第三點和第四點的次序將決定其形狀。
前兩點定義了多邊形的一條邊。第三點定義在第二點的對角處。如果第四點設置為等于第三點,則會創建一個填充三角形。
創建一個實體填充對象?
下面示例使用坐標 (0,0,0)、(5,0,0)、(5,8,0) 和 (0,8,0) 在模型空間中創建四邊形實體(蝴蝶結)。它也使用坐標(10, 0, 0), (15, 0, 0), (10, 8, 0)和 (15, 8, 0)創建一個矩形形狀的四邊形實體。
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry<CommandMethod("Add2DSolid")> _ Public Sub Add2DSolid()'' 獲得當前文檔和數據庫 Get the current document and databaseDim acDoc As Document = Application.DocumentManager.MdiActiveDocumentDim acCurDb As Database = acDoc.Database''啟動一個事務 Start a transactionUsing acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()'' 以只讀方式打開塊表 Open the Block table for readDim acBlkTbl As BlockTableacBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)'' 以寫方式打開模型空間塊表記錄 Open the Block table record Model space for writeDim acBlkTblRec As BlockTableRecordacBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _OpenMode.ForWrite)'' Create a quadrilateral (bow-tie) solid in Model spaceDim ac2DSolidBow As Solid = New Solid(New Point3d(0, 0, 0), _New Point3d(5, 0, 0), _New Point3d(5, 8, 0), _New Point3d(0, 8, 0))ac2DSolidBow.SetDatabaseDefaults()'' 添加新對象到塊表記錄和事務中 Add the new object to the block table record and the transactionacBlkTblRec.AppendEntity(ac2DSolidBow)acTrans.AddNewlyCreatedDBObject(ac2DSolidBow, True)'' Create a quadrilateral (square) solid in Model spaceDim ac2DSolidSqr As Solid = New Solid(New Point3d(10, 0, 0), _New Point3d(15, 0, 0), _New Point3d(10, 8, 0), _New Point3d(15, 8, 0))ac2DSolidSqr.SetDatabaseDefaults()'' 添加新對象到塊表記錄和事務中 Add the new object to the block table record and the transactionacBlkTblRec.AppendEntity(ac2DSolidSqr)acTrans.AddNewlyCreatedDBObject(ac2DSolidSqr, True)'' 保存新對象到數據庫中 Save the new object to the databaseacTrans.Commit()End Using End Sub?
?使用面域
面域是用戶從稱為環的閉合形狀創建的二維閉合區域。環是由直線和不自交的曲線組成的封閉邊界。環可以是直線、輕量優化多段線、2維和3維多段線,圓、圓弧、橢圓、橢圓弧、樣條曲線、三維面、寬線和實體的組合。
組成環的對象必須是閉合的,或者是通過與其他對象共享端點而形成閉合的區域。所有這些對象還必須共面(在同一個平面上)。組成面域的環必須定義為對象的數組。
創建面域
面域是被添加到塊表記錄對象中的,它是通過創建一個面域的實例然后把它追加到塊表記錄的。在將面域添加到塊表記錄中前,需要根據對象創建一個封閉環。CreateFromCurves 函數通過輸入的對象數組組成的每一個封閉環創建面域。CreateFromCurves 方法返回和需要一個 DBObjectCollection 對象。
AutoCAD 將閉合的二維和平面三維多段線轉換為獨立的面域,然后轉換形成閉合平面環的多段線、直線和曲線。如果有兩條以上的曲線共用一個端點,得到的面域可能是不確定的。所以,在使用 CreateFromCurves 方法時,實際可能會創建多個面域。用戶需要追加每一個創建的面域到塊表記錄對象中去。
創建一個簡單的面域
本例創建從一個簡單的圓中創建一個面域。
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry<CommandMethod("AddRegion")> _ Public Sub AddRegion()'' 獲得當前文檔和數據庫 Get the current document and databaseDim acDoc As Document = Application.DocumentManager.MdiActiveDocumentDim acCurDb As Database = acDoc.Database''啟動一個事務 Start a transactionUsing acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()'' 以只讀方式打開塊表 Open the Block table for readDim acBlkTbl As BlockTableacBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)'' 以寫方式打開模型空間塊表記錄 Open the Block table record Model space for writeDim acBlkTblRec As BlockTableRecordacBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _OpenMode.ForWrite)'' 在內存中創建圓 Create an in memory circleUsing acCirc As Circle = New Circle()acCirc.SetDatabaseDefaults()acCirc.Center = New Point3d(2, 2, 0)acCirc.Radius = 5'' 添加圓到對象數組中 Adds the circle to an object arrayDim acDBObjColl As DBObjectCollection = New DBObjectCollection()acDBObjColl.Add(acCirc)'' 根據每一個閉合環計算面域 Calculate the regions based on each closed loopDim myRegionColl As DBObjectCollection = New DBObjectCollection()myRegionColl = Region.CreateFromCurves(acDBObjColl)Dim acRegion As Region = myRegionColl(0)'' 添加新對象到塊表記錄和事務中 Add the new object to the block table record and the transactionacBlkTblRec.AppendEntity(acRegion)acTrans.AddNewlyCreatedDBObject(acRegion, True)'' Dispose of the in memory object not appended to the databaseEnd Using'' 保存新對象到數據庫中 Save the new object to the databaseacTrans.Commit()End Using End Sub創建組合面域
可以通過查找面域或三維實體的差集、并集或交集來創建組合面域。然后可以拉伸或旋轉組合面域以創建復雜的實體。要創建組合面域,請使用 BooleanOperation 方法。
減去面域
當從某個面域減去另一個面域時,需要從第一個面域調用 BooleanOperation 方法。這是要從中減去其他面域的的面域。例如,要計算地板需要鋪多少地毯,需要從地板空間的外部邊界調用 BooleanOperation 方法,并將不需要鋪地毯的區域如柱子和柜臺作為 Boolean 參數列表中的對象。
并集面域
要獲得并集面域,可以調用 BooleanOperation 方法并在操作中輸入常量 用戶可以按任意次序組合面域來形成并集面域。
查找兩個面域的交集
要查找兩個面域的交集,請使用常量 BooleanOperationType.BoolIntersect。可以按任意次序組合面域來計算這些面域的交集。
創建組合面域
本例從兩個圓創建兩個面域,然后用大的面域減去小的面域以創建一個輪形圖。
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry<CommandMethod("CreateCompositeRegions")> _ Public Sub CreateCompositeRegions()'' 獲得當前文檔和數據庫 Get the current document and databaseDim acDoc As Document = Application.DocumentManager.MdiActiveDocumentDim acCurDb As Database = acDoc.Database''啟動一個事務 Start a transactionUsing acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()'' 以只讀方式打開塊表 Open the Block table for readDim acBlkTbl As BlockTableacBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)'' 以寫方式打開模型空間塊表記錄 Open the Block table record Model space for writeDim acBlkTblRec As BlockTableRecordacBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _OpenMode.ForWrite)'' 在內存中創建兩個圓 Create two in memory circlesDim acCirc1 As Circle = New Circle()acCirc1.SetDatabaseDefaults()acCirc1.Center = New Point3d(4, 4, 0)acCirc1.Radius = 2Dim acCirc2 As Circle = New Circle()acCirc2.SetDatabaseDefaults()acCirc2.Center = New Point3d(4, 4, 0)acCirc2.Radius = 1'' 添加圓到對象數組中 Adds the circle to an object arrayDim acDBObjColl As DBObjectCollection = New DBObjectCollection()acDBObjColl.Add(acCirc1)acDBObjColl.Add(acCirc2)'' 根據每一個閉合環計算面域 Calculate the regions based on each closed loopDim myRegionColl As DBObjectCollection = New DBObjectCollection()myRegionColl = Region.CreateFromCurves(acDBObjColl)Dim acRegion1 As Region = myRegionColl(0)Dim acRegion2 As Region = myRegionColl(1)'' 從面域2減去面域1 Subtract region 1 from region 2If acRegion1.Area > acRegion2.Area Then'' 從大的一個中減去小的面域 Subtract the smaller region from the larger oneacRegion1.BooleanOperation(BooleanOperationType.BoolSubtract, acRegion2)acRegion2.Dispose()'' 添加遇終的面域到數據庫中 Add the final region to the databaseacBlkTblRec.AppendEntity(acRegion1)acTrans.AddNewlyCreatedDBObject(acRegion1, True)Else'' 從大的一個中減去小的面域 Subtract the smaller region from the larger oneacRegion2.BooleanOperation(BooleanOperationType.BoolSubtract, acRegion1)acRegion1.Dispose()'' 添加遇終的面域到數據庫中 Add the final region to the databaseacBlkTblRec.AppendEntity(acRegion2)acTrans.AddNewlyCreatedDBObject(acRegion2, True)End If'' 不追加對象到數據庫中直接從內存中銷毀 Dispose of the in memory objects not appended to the databaseacCirc1.Dispose()acCirc2.Dispose()'' 保存新對象到數據庫中 Save the new object to the databaseacTrans.Commit()End Using End Sub創建圖案填充
圖案填充是可以使用某種圖案來填充圖形的封閉邊界。
在創建圖案填充時,不是在開始的時候指定要填充的區域。首先必須創建 Hatch 對象。完成后,可以指定外部環,這是圖案填充最外面的邊界。然后繼續指定圖案填充中可能存在的所有內部環。
創建 Hatch 對象
創建 Hatch 對象時,需要指定填充圖案類型、填充圖案名和關聯性。一旦創建 Hatch 對象,就無法再更改其關聯性。
要創建 Hatch 對象,請創建一個新的對象實例,然后使用 AppendEntity 方法將其添加到塊表記錄對象中去。
關聯圖案填充
用戶可以創建關聯的或非關聯的圖案填充。關聯的圖案填充鏈接到它們的邊界并且會在邊界改變時自動更新,而非關聯的圖案填充則獨立于它們的邊界。
要使圖案填充具有關聯性,請將創建的圖案填充對象的關聯特性設置為TRUE。若要使圖案填充不關聯,請將“關聯”特性設置為FALSE。
hatch 關聯性必須在添加填充環前設置。如果 Hatch 對象是非關聯性的,那么可以通過設置 Associative 屬性為 TRUE 讓其再次關聯然后添加填充環。
指定填充圖案的類型和名稱
AutoCAD 提供了實體填充的五十多種行業標準填充圖案。填充圖案可用于亮顯圖形的特定特征或區域。例如,圖案可以幫助區分三維對象的組成部分,或者表示組成對象的材質。
可以使用 AutoCAD 附帶的圖案或外部圖案庫中的圖案。
要指定唯一的圖案,用戶必須在創建 Hatch 對象時輸入圖案的類型和名稱。圖案類型指定在何處查找圖案名稱。輸入圖案類型時,可以使用以下常量:
HatchPatternType.PreDefined
從 acad.pat 文件中定義的圖案名中進行選擇。
HatchPatternType.UserDefined
用當前線型定義直線圖案。
HatchPatternType.CustomDefined
從 PAT 而不是 acad.pat 文件中選擇圖案名。
輸入圖案名稱時,名稱必須對由圖案類型指定的文件有效。
定義填充邊界
一旦 Hatch 對象被創建,就可以添加圖案填充邊界。邊界可以是直線、圓弧、圓、二維多段線、橢圓、樣條曲線和面域的任意組合。
添加的第一個邊界必須是外邊界,即用于定義圖案填充最外面的邊界。要添加外部邊界,請使用添加環的類型為 HatchLoopTypes.Outermost 常量的 AppendLoop 方法。
一旦外邊界被定義,就可以繼續添加另外的邊界。添加內部邊界請使用帶 HatchLoopTypes.Default 常量的 AppendLoop 方法。
內邊界定義圖案填充內的孤島。Hatch 對象處理這些孤島的方式取決于 HatchStyle 屬性的設置。HatchStyle 屬性可以設置為以下狀態:
?
| HatchStyle.Normal |
| 指定標準的樣式,即普通。此選項從最外面的區域邊界向內進行圖案填充。如果 AutoCAD 遇到內部邊界,將停止填充,直到遇到另一個內部邊界。這是 HatchStyle 屬性的默認設置。 |
| HatchStyle.Outer |
| 僅填充最外面的區域。此樣式也是從最外面的區域邊界向內進行圖案填充,但是遇到內部邊界時會關閉圖案填充并且不再打開。 |
| HatchStyle.Ignore |
| 忽略內部結構。此選項使圖案填充通過所有的內部對象。 |
定義完圖案填充之后,必須先對其進行計算,然后才能顯示。請使用 EvaluateHatch 方法完成此任務。
創建 Hatch 對象
本例在模型空間中創建關聯的圖案填充。創建圖案填充后,可以修改與圖案填充關聯的圓的大小。圖案填充將自動改變以匹配圓的當前大小。
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry<CommandMethod("AddHatch")> _ Public Sub AddHatch()'' 獲得當前文檔和數據庫 Get the current document and databaseDim acDoc As Document = Application.DocumentManager.MdiActiveDocumentDim acCurDb As Database = acDoc.Database''啟動一個事務 Start a transactionUsing acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()'' 以只讀方式打開塊表 Open the Block table for readDim acBlkTbl As BlockTableacBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)'' 以寫方式打開模型空間塊表記錄 Open the Block table record Model space for writeDim acBlkTblRec As BlockTableRecordacBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _OpenMode.ForWrite)'' 創建一個圓對象作為圖案填充的封閉邊界 Create a circle object for the closed boundary to hatchDim acCirc As Circle = New Circle()acCirc.SetDatabaseDefaults()acCirc.Center = New Point3d(3, 3, 0)acCirc.Radius = 1'' 添加新的圓對象到塊表記錄和事務中 Add the new circle object to the block table record and the transactionacBlkTblRec.AppendEntity(acCirc)acTrans.AddNewlyCreatedDBObject(acCirc, True)'' 添加圓到一個 ObjectID 數組中去 Adds the circle to an object id arrayDim acObjIdColl As ObjectIdCollection = New ObjectIdCollection()acObjIdColl.Add(acCirc.ObjectId)'' 創建圖案填充對象并添加到塊表記錄中 Create the hatch object and append it to the block table recordDim acHatch As Hatch = New Hatch()acBlkTblRec.AppendEntity(acHatch)acTrans.AddNewlyCreatedDBObject(acHatch, True)'' Set the properties of the hatch object'' Associative must be set after the hatch object is appended to the '' block table record and before AppendLoopacHatch.SetDatabaseDefaults()acHatch.SetHatchPattern(HatchPatternType.PreDefined, "ANSI31")acHatch.Associative = TrueacHatch.AppendLoop(HatchLoopTypes.Outermost, acObjIdColl)acHatch.EvaluateHatch(True)'' 保存新對象到數據庫中 Save the new object to the databaseacTrans.Commit()End Using End Sub總結
以上是生活随笔為你收集整理的autoCAD 创建对象 使用面域 创建图案填充的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: retina屏 适配问题
- 下一篇: 手机闪存速度排行_内置UFS2.1:小米