Тема: Как получить контур области?

Задача: на чертеже заданы области заранее не известной формы и размера (границы заданы линиями и дугами), необходимо по щелчку мыши внутри области получать полилинию, которая совпадает с границами области.
   Примерно так это делает Hatch, но я не понял, как программо повторить этот фокус с указанием точки внутри региона - нашел только вариант с выбором кривых, его ограничивающих, но это, сами понимаете, не очень удобно.
   У кого какие соображения на этот счет есть?

Re: Как получить контур области?

> GreyHound
Попробуй как будет работать, проверял
не шибко в А2007 только

Option Explicit
' witchcrafted by Fatty
Sub Ch_Example_Create_Boundary()
     Dim oPline As AcadLWPolyline
     Dim oCount As Long
     Dim point2D As Variant
     Dim poinStr As String
     Dim retPnt As Variant
     Dim kWord, xStr, yStr As String
     On Error GoTo SayMeAbout
     With ThisDrawing
          .SetVariable "CMDECHO", 0
          .SetVariable "HPGAPTOL", 5#
          .SetVariable "OSMODE", 0
          kWord = " >> Specify internal point >> "
          .Utility.InitializeUserInput 128
          retPnt = .Utility.GetPoint(, kWord)
          xStr = Replace(CStr(retPnt(0)), ",", ".", 1, vbTextCompare)
          yStr = Replace(CStr(retPnt(1)), ",", ".", 1, vbTextCompare)
          poinStr = xStr & "," & yStr
          .SendCommand "_-boundary" & vbCr & poinStr & vbCr & vbCr
          DoEvents
          Dim pfSset As AcadSelectionSet
          Dim oEnt As AcadEntity
          Set pfSset = .PickfirstSelectionSet
          pfSset.Clear
          pfSset.Select acSelectionSetLast
          If pfSset.Count = 1 Then
               Set oEnt = pfSset.Item(0)
               If TypeOf oEnt Is AcadLWPolyline Then
                    Set oPline = oEnt
                    ' edit this polyline here, i.e. change color:
                    oPline.color = acMagenta
               End If
          End If
          .SetVariable "CMDECHO", 1
          .SetVariable "OSMODE", 687
          .Regen True
     End With
SayMeAbout:
     If Err.Number <> 0 Then
          MsgBox Err.Description
     End If
End Sub

~'J'~

Re: Как получить контур области?

все завязано на команде 'boundary'. Однако это не очень хороший вариант. Если контур не будет замкнут (на очень небольшую величину) полилиния все равно будет построена.И вместо одного контура получиться два контрура.

Re: Как получить контур области?

> shlon
Обрати внимание на эту строку:

SetVariable "HPGAPTOL", 5#

~'J'~

Re: Как получить контур области?

> Fatty
поставил значение 0. Не замкнутый контур все равно обрисовывает полилинией

Re: Как получить контур области?

> shlon
Из Help:
HPGAPTOL System Variable
     Concepts     Procedures     Commands
Type:  Real
Saved in:  Registry
Initial value:  0
Treats a set of objects that almost enclose an area as a closed hatch boundary. The default value, 0, specifies that the objects enclose the area, with no gaps. Enter a value, in drawing units, from 0 to 5000 to set the maximum size of gaps that can be ignored when the objects serve as a hatch boundary.

Позволяет игнорировать незамкнутые контуры
~'J'~

Re: Как получить контур области?

2Fatty
Респект. Именно то, что нужно. Сам бы я до такого еще месяц доходил, а наших программеров помочь уговаривал еще пол года (они мне хором говорили, что это в принципе невозможно).

Re: Как получить контур области?

> GreyHound
Да какой из меня программер, натырил
везде по форумам и всех делов
Успехов :^)
~'J'~