[CDR 2017-2021] Виртуальная (временная) линия

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

DukereD

макрософил
Топикстартер
Сообщения
511
Реакции
132
Подскажите как мне при работе инструмента отображать подобный эффект, когда тягаешь линию или объект, остается прежние границы(линии) объекта и новые линии с крусором перемещаются. это же не простая отрисовка объекта?
 
Никак
Это средствами скриптинга невозможно
 
А как вы себе реализацию подобного представляли? Обработчик, навешенный на перемещение объекта или как?
 
Некоторые рисуют-стирают, рисуют-стирают
 
А как вы себе реализацию подобного представляли? Обработчик, навешенный на перемещение объекта или как?
так а в чем сложность. оставляем видимый старый объект и при перемещении объекта он виртуально строит линии в зависимости от курсора. не думаю что на это понадобится 100% процессорных ресурсов. даже если вручную строить и удалять элемент ) просто думал есть стандартный способ
 
Угу. В зависимости от положения курсора.
Там потом в Undo такая каша...


Вот под руку попался чей-то моргающий пример без стирания:
Код:
Public Type lpPoint
    x As Long
    y As Long
End Type

Public BC As Double, AC As Double, AB As Double

Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Public Declare Function GetCursorPos Lib "user32" (ByRef pos As lpPoint) As Boolean

Public Sub boostStart(Optional ByVal unDo$ = "")
   'Optimization = True
   EventsEnabled = False
   ActiveDocument.SaveSettings
   'ActiveDocument.PreserveSelection = False
   End Sub

Public Sub boostFinish()
   'ActiveDocument.PreserveSelection = True
   ActiveDocument.RestoreSettings
   EventsEnabled = True
   'Optimization = False
   Application.Refresh
   End Sub

Sub GreenEllipse()

  Dim p As lpPoint, x As Double, y As Double, l As Layer, sh As Shape, curX As Double, curY As Double, start

  boostStart

  GetCursorPos p
  ActiveDocument.ActiveWindow.ScreenToDocument p.x, p.y, x, y
  Set sh = ActiveLayer.CreateEllipse2(x, y, 0.2)


  sh.Fill.UniformColor.RGBAssign 0, 255, 0
  Application.Refresh

  Do While GetAsyncKeyState(vbKeyEscape) = 0

    DoEvents

    GetCursorPos p
    ActiveDocument.ActiveWindow.ScreenToDocument p.x, p.y, x, y
    sh.GetPosition curX, curY

    If curX <> x Or curY <> y Then

      sh.SetPosition x - 0.2, y + 0.2
      Application.Refresh
    End If

  Loop

  boostFinish

End Sub
Понятно, что вместо кружка можно и линии строить
 
Последнее редактирование:
Ну, это из древних закромов код (проапдейтил пост выше, не знаю, заметил ли ты изменения), через WinAPI работающий
А так можно и свои инструменты делать. Например: Making a Zig Zag Tool for CorelDRAW and Corel DESIGNER - Docs & Tutorials - Developer Area - CorelDRAW Community, надеюсь там уже всё сделано как надо (у меня не запустилось, но может кому повезёт)
 
Последнее редактирование:
  • Спасибо
Реакции: _MBK_ и DukereD
в общем суть такая. хочу сделать редактирование кривой, но не изменяя длины самой линии. чтобы потянул за узел и остальные узлы следом согласно "физике"
 
Последнее редактирование модератором:
Ну если у вас вариант Льва будет нормально работать, значит идея не такая уж и фантастическая, насколько я себе представлял, можно допилить и до вашего случая
 
  • Спасибо
Реакции: DukereD