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

DukereD

макрософил
Топикстартер
Сообщения
462
Реакции
114
Подскажите как мне при работе инструмента отображать подобный эффект, когда тягаешь линию или объект, остается прежние границы(линии) объекта и новые линии с крусором перемещаются. это же не простая отрисовка объекта?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 189
Реакции
10 844
Никак
Это средствами скриптинга невозможно
 

DukereD

макрософил
Топикстартер
Сообщения
462
Реакции
114

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 189
Реакции
10 844
А как вы себе реализацию подобного представляли? Обработчик, навешенный на перемещение объекта или как?
 

lev

Модератор
20 лет на форуме
Сообщения
2 145
Реакции
2 071
Некоторые рисуют-стирают, рисуют-стирают
 

DukereD

макрософил
Топикстартер
Сообщения
462
Реакции
114
А как вы себе реализацию подобного представляли? Обработчик, навешенный на перемещение объекта или как?
так а в чем сложность. оставляем видимый старый объект и при перемещении объекта он виртуально строит линии в зависимости от курсора. не думаю что на это понадобится 100% процессорных ресурсов. даже если вручную строить и удалять элемент ) просто думал есть стандартный способ
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 189
Реакции
10 844

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 189
Реакции
10 844

lev

Модератор
20 лет на форуме
Сообщения
2 145
Реакции
2 071
Угу. В зависимости от положения курсора.
Там потом в 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
Понятно, что вместо кружка можно и линии строить
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 189
Реакции
10 844

lev

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

DukereD

макрософил
Топикстартер
Сообщения
462
Реакции
114
в общем суть такая. хочу сделать редактирование кривой, но не изменяя длины самой линии. чтобы потянул за узел и остальные узлы следом согласно "физике"
 
Последнее редактирование модератором:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 189
Реакции
10 844
Ну если у вас вариант Льва будет нормально работать, значит идея не такая уж и фантастическая, насколько я себе представлял, можно допилить и до вашего случая
 
  • Спасибо
Реакции: DukereD