[CDR 2017-2021] Задать длину кривой

  • Автор темы Автор темы mnemonix
  • Дата начала Дата начала

mnemonix

ॐ मणि पद्मे हूँ
Топикстартер
Сообщения
652
Реакции
192
В Кореле, как мне кажется, нет функции задания длины кривой. Вопрос: можно ли это сделать макросом?
 
В Кореле, как мне кажется, нет функции задания длины кривой. Вопрос: можно ли это сделать макросом?
Что значит "задание длины кривой? Можно измерить длину кривой, посчитать коэффициент от заданной длины и смасштабировать кривую пропорционально на него. Или я неправильно понял хотелку?
 
Можно и так, но хочется без лишних движений задать требуемую длину и получить результат.
 
Наверное копать здесь, высчитывать коэффициент и назначать кривой.

Sub CurveLength()
Dim s As Shape
Set s = ActiveSelection.Shapes(1)
If s.Type = cdrCurveShape Then
MsgBox "The length of the curve is: " _
& vbCrLf & s.Curve.Length & " mm"
End If
End Sub
 
Наверное копать здесь, высчитывать коэффициент и назначать кривой.

Sub CurveLength()
Dim s As Shape
Set s = ActiveSelection.Shapes(1)
If s.Type = cdrCurveShape Then
MsgBox "The length of the curve is: " _
& vbCrLf & s.Curve.Length & " mm"
End If
End Sub
Да именно
 
и назначать кривой
как-то так ...
Код:
Sub CurveL()
Dim s As Shape
Dim x As Double, y As Double, k As Double
Dim dc As Double, dc2 As Double, L As String
ActiveDocument.Unit = cdrMillimeter

ActiveDocument.BeginCommandGroup "CurveL"
Set s = ActiveShape
If s.Type = cdrCurveShape Then
s.GetSize x, y
dc = s.Curve.length
L = InputBox("Curve Length = " & dc & " mm" _
& vbNewLine & _
"Set new Length")
If Len(L) = 0 Then Exit Sub Else dc2 = Val(L)
k = dc2 / dc
s.SetSize x * k, y * k
Else
MsgBox "Selected Shape Not Curve"
Exit Sub
End If
ActiveDocument.EndCommandGroup
End Sub
 
  • Спасибо
Реакции: Molodchik и mnemonix
В обновлении CorelDraw 24.2 в инструменте "Преобразовать" > "Размер" появилось дополнение, в том числе может делать и это
Анимация.gif

Может работать и с группой объектов... +видео пример
 
dastin, преогромное спасибо, коротко и изящно! Всё прекрасно работает. 'cooll)'
Добавил обводку hairline, ConvertToCurves и обработку, когда ничего не выделено.
Проверил, работает и с текстом.

Код:
Sub CurveL()
Dim s As Shape
Dim x As Double, y As Double, k As Double
Dim dc As Double, dc2 As Double, L As String
ActiveDocument.Unit = cdrMillimeter

    On error goto ErrHandler     
    ActiveSelection.Outline.Width = 0.0762
      
ActiveDocument.BeginCommandGroup "CurveL"
Set s = ActiveShape
  
    s.ConvertToCurves

If s.Type = cdrCurveShape Then
s.GetSize x, y
dc = s.Curve.length
L = InputBox("Curve Length = " & dc & " mm" _
& vbNewLine & _
"Set new Length")
If Len(L) = 0 Then Exit Sub Else dc2 = Val(L)
k = dc2 / dc
s.SetSize x * k, y * k
Else
MsgBox "Selected Shape Not Curve"
Exit Sub
End If
ActiveDocument.EndCommandGroup

        ErrHandler:
End Sub
 
Последнее редактирование: