> Александр Ривилис
Ничего подобного, регион создается, да
только расчлененный, как я и говорил
Imports System
Imports System.IO
Imports System.Collections
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.Interop
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.DatabaseServices
Imports graph = Autodesk.AutoCAD.GraphicsInterface
Imports Autodesk.AutoCAD.ApplicationServices
Imports AcDb = Autodesk.AutoCAD.DatabaseServices
Imports AcadApp = Autodesk.AutoCAD.ApplicationServices.Application
Imports AcGe = Autodesk.AutoCAD.Geometry
Imports AcRx = Autodesk.AutoCAD.Runtime
Public Class RegMan
<CommandMethod("UReg")> _
Public Shared Sub UnionRegions()
Dim doc As Document = AcadApp.DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
Dim ed As Editor = doc.Editor
Dim docLock As DocumentLock = doc.LockDocument
Dim tr As Transaction = doc.TransactionManager.StartTransaction()
Using tr
Dim bt As BlockTable = DirectCast(tr.GetObject(db.BlockTableId, OpenMode.ForRead), BlockTable)
Dim btr As BlockTableRecord = DirectCast(tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite), _
BlockTableRecord)
Dim objIdColl As ObjectIdCollection = SelectEntities(db, tr)
If objIdColl Is Nothing Then
Return
End If
Dim ColRegion As AcDb.DBObjectCollection = New AcDb.DBObjectCollection()
For Each oId As ObjectId In objIdColl
Dim entPLine As Entity = (CType(tr.GetObject(oId, OpenMode.ForRead, False), Entity))
Dim pLine As Polyline = (CType(entPLine, Polyline))
If pLine.Closed = False Then
Throw New AcRx.Exception(AcRx.ErrorStatus.WrongObjectType)
Else
Dim entArray() As Polyline = {pLine}
Dim regs() As Object = DirectCast(entArray, Object())
Dim dbColl As DBObjectCollection = New DBObjectCollection()
dbColl.Add(regs(0))
Dim myRegion As Region = CType(Region.CreateFromCurves(dbColl)(0), Region)
btr.AppendEntity(myRegion)
tr.AddNewlyCreatedDBObject(myRegion, True)
ColRegion.Add(myRegion)
End If
Next
Dim oReg As Region
oReg = DirectCast(ColRegion(0), Region)
'//MessageBox.Show(String.Format("Handle is: {0}", oReg.Handle))
For i As Integer = 1 To ColRegion.Count - 1
Dim oEnt As Region = DirectCast(ColRegion.Item(i), Region)
'//MessageBox.Show(String.Format("Handle is: {0}", oEnt.Handle))
oReg.BooleanOperation(AcDb.BooleanOperationType.BoolUnite, oEnt)
db.Dispose()
Next
'//MessageBox.Show(String.Format("Handle is: {0}", oReg.Handle))
tr.Commit()
ed.Regen()
End Using
docLock.Dispose()
End Sub
'// by Paul Richardson
Public Shared Function SelectEntities(ByVal db As Database, ByVal tr As Transaction) As ObjectIdCollection
Dim ed As Editor = AcadApp.DocumentManager.MdiActiveDocument.Editor
Dim opts As New PromptSelectionOptions()
opts.MessageForAdding = "Select the polylines to create regions: "
Dim psr As PromptSelectionResult = ed.GetSelection(opts)
If psr.Status <> Autodesk.AutoCAD.EditorInput.PromptStatus.OK Then
ed.WriteMessage(vbCr & "0 entities selected!")
Return Nothing
End If
Dim idc As New ObjectIdCollection()
For Each id As ObjectId In psr.Value.GetObjectIds()
idc.Add(id)
Next
Return idc
End Function
End Class
~'J'~