Тема: команда DONUT не получается?

Здравствуйте! Подскажите пожалуйста, почему не работает такой код:
Sub Donut()
Dim varStart As Variant
varStart = ThisDrawing.Utility.GetPoint(, vbCr & "Куда ставить?: ")
ThisDrawing.SendCommand ("_DONUT" & vbCr & "0" & vbCr & "100" & vbCr & varStart & vbCr)
End Sub
Заранее спасибо

Re: команда DONUT не получается?

> wl2000
Избегай SendCommand по возможности,
когда можно сделать что-то обычными методами

Option Explicit
Private Function DrawDonut(cp As Variant, erad As Double, irad As Double) As AcadLWPolyline
' erad - external radius
' irad - inner radius
If irad >= erad Then
MsgBox "External radius must be more than inner radius"
Exit Function
End If
Dim oPline As AcadLWPolyline
Dim pts(3) As Double
Dim ept(1) As Double
pts(0) = cp(0) - erad + (erad - irad) / 2
pts(1) = cp(1)
pts(2) = cp(0) + erad - (erad - irad) / 2
pts(3) = cp(1)
Set oPline = ThisDrawing.ModelSpace.AddLightWeightPolyline(pts)
oPline.Closed = True
oPline.SetWidth 0, erad - irad, erad - irad
oPline.SetWidth 1, erad - irad, erad - irad
oPline.SetBulge 0, 1#
oPline.SetBulge 1, 1#
oPline.color = acRed
oPline.Update
Set DrawDonut = oPline
End Function
Sub test()
Dim cp
cp = ThisDrawing.Utility.GetPoint(, vbCr & "Pick center point of donut: ")
Dim oPline As AcadLWPolyline
Set oPline = DrawDonut(cp, 200, 100)
End Sub

~'J'~

Re: команда DONUT не получается?

> wl2000
Если настаиваешь на SendCommand
то эта функция принимает в качестве аргументов
только строки:

Sub Donut()
Dim varStart As Variant
Dim strPoint As String
varStart = ThisDrawing.Utility.GetPoint(, vbCr & "Указать центр:")
strPoint = CStr(varStart(0)) & "," & CStr(varStart(1))
ThisDrawing.SendCommand ("_DONUT" & vbCr & "0" & vbCr & "100" & vbCr & strPoint & vbCr)
' команда будет выполняться многократно
' для завершения нажимай Enter или правую клавишу;
' если нужна одиночная вставка добавь:
'ThisDrawing.SendCommand Chr(27) & Chr(27) & Chr(27)
End Sub

~'J'~

Re: команда DONUT не получается?

Спасибо, fixo. Вы добры и оперативны как всегда.
Но при использовании кода в вашем втором сообщении DONUT не ставиться - инвалид поинт. Не может ли возникать ошибка из-за того, что для разделения целой и дробной части числа в VBA используется запятая, а в ACADе точка? Т.е. в строку ACADa отправляется, к примеру 0,123,0,345 (а нужно 0.123,0.345)...

Re: команда DONUT не получается?

> wl2000
Это бывает, у меня кстати точки а не запятые
Тогда замени на следующее:
s

trPoint = (Replace(CStr(varStart(0)),",",".") & "," & (Replace(CStr(varStart(1)),",",".")

Или можно использовать функцию Split
см. Help
~'J'~

Re: команда DONUT не получается?

Так работает. Спасибо