Тема: выбор объектов внутри круга
помогите пожалуйста кусочком кода...
есть окружность, в ней в нутри есть различные примитивы.
надо их всех выбрать (только те, что полностью умещаются в границах окружности)
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → выбор объектов внутри круга
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
помогите пожалуйста кусочком кода...
есть окружность, в ней в нутри есть различные примитивы.
надо их всех выбрать (только те, что полностью умещаются в границах окружности)
ну поможите пожалуйста :)
ншел метод выбор внутри контура, контур точками...
Можно конечно круг разбивать на точки, и их в выбор засылать, но как то вроде не хоршо...
разные диаметры, разные "поля"
> ssn
Единственный метод - разбивать окружность
на сегменты и затем выбирать
А что тут плохого?
Можно разбить на достаточно большое количество
сегментов и использовать тот же метод что
ты нашел
~'J'~
> Fatty
Для образца:
''~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'' Function DivPoints(cent As Variant, rad As Double, num As Long) As Variant Dim varpt As Variant Dim ang As Double, delta As Double Dim pi As Double, i As Long, j As Long ReDim nodes(((num + 1) * 3) - 1) As Double pi = Atn(1#) * 4 delta = 360# / num ang = 0# For i = 0 To num ang = delta * i ang = (ang * pi) / 180 varpt = ThisDrawing.Utility.PolarPoint(cent, ang, rad) nodes(j) = CDbl(varpt(0)) nodes(j + 1) = CDbl(varpt(1)) nodes(j + 2) = CDbl(varpt(2)) j = j + 3 Next i DivPoints = nodes() End Function ''~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'' Sub test() Dim oent As AcadEntity Dim cir As AcadCircle Dim p On Error GoTo Error_Control ThisDrawing.Utility.GetEntity oent, p, vbCr & "Select circle" If TypeOf oent Is AcadCircle Then Set cir = oent Dim cp, r As Double, num As Long cp = cir.Center r = cir.Radius num = 256 Dim points() As Double points = DivPoints(cp, r, num) 'ThisDrawing.ModelSpace.AddPolyline points '// for debug only Dim sset As AcadSelectionSet Set sset = ThisDrawing.SelectionSets.Add("Dummy") sset.SelectByPolygon acSelectionSetWindowPolygon, points MsgBox "Selected: " & sset.Count & " objects" Else MsgBox "You missed or this isn't a circle" End If Exit_Here: ThisDrawing.SelectionSets("Dummy").Delete Exit Sub Error_Control: If Err.Number <> 0 Then MsgBox Err.Description End If Resume Exit_Here End Sub ''~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~''
~'J'~
> ssn
Ну ты блин даешь...
Набери 0.0 в редакторе
~'J'~
хорошая функция Utility.PolarPoint :)
а то я хотел эти точки получать через доп. построения (вращать линию и снимать точки пересечения с окружностью)
а примерно какое количество точек будет критично для устойчивой работы программы?
ещё вопрос.. надо бы его в отдельную ветку, но кажется где то это уже было, не могу найти...
про ТРИМ в ВБА
ха ха ха...
блин...
как то я... по поводу #..
косичок :)
ну да ладно, нам некого стесняться :)
ай.. чуть не забыл..
спасибо за пример. :)
ещё один глупый вопрос..
а чем тогад отличается 0 от 0.0 (0.#)?
блин, привык уже на форумах есть возможность править сообщения, тут как то нехорошо...
> ssn
Да собственно для типа Double можно ноль после
точки опускать, где это не нужно
Но, например, для Atn(1#) это как раз на месте
хотя можно объявлять число Pi как константу
скажем с 8-ю знаками после запятой, результат
будет допустимый
~'J'~
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → выбор объектов внутри круга
Форум работает на PunBB, при поддержке Informer Technologies, Inc