Показ промежуточной длины при выборе точки

Автор Тема: Показ промежуточной длины при выборе точки  (Прочитано 7167 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ldfoАвтор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Здравствуйте.

Создаю программу по вставке блоков (светильников). Суть следующая - есть динамический блок светильника, пользователь кликает по экрану, в этом месте вставляется светильник. Далее запрашивается следующая координата вставки блока и после того, как пользователь выбирает точку, вставляется следующий светильник, а между этими блоками отрисовывается линия.

Собственно, вопрос - каким образом можно показывать пользователю, какая длина будет у данной линии еще до момента выбора следующей точки вставки блока? По аналогии с тем, как это сделано в AutoCAD, например, при рисовании отрезков и прочих объектов (выбираем первую точку, а при перемещении курсора по экрану рисуется "прозрачный" отрезок и отображается его длина).
Надеюсь, понятно сформулировал, просто не знаю как про эти промежуточные размеры забить в Гугле (может, плохо искал).

На всякий случай прикрепляю основной метод.

Код - Visual Basic [Выбрать]
  1. Sub InsertBlock()
  2.  
  3.     On Error GoTo ErrorHandler
  4.    
  5.     Dim blockRef As AcadBlockReference
  6.     Dim name As String
  7.     Dim prevPoint, nextPoint As Variant
  8.     Dim tempNum As Integer
  9.    
  10.     name = "Проба_1светильник"
  11.     prevPoint = Null
  12.    
  13.     tempNum = InputBox("Введите номер")
  14.        
  15.     Do While True
  16.  
  17.         nextPoint = ThisDrawing.Utility.GetPoint(, "Укажите точку вставки")
  18.         Set blockRef = ThisDrawing.ModelSpace.InsertBlock(nextPoint, name, 1, 1, 1, 0)
  19.                
  20.         Call Increment(tempNum, blockRef)
  21.                
  22.         If (IsNull(prevPoint) = False) Then
  23.             Call DrawLine(prevPoint, nextPoint)
  24.         End If
  25.        
  26.         prevPoint = nextPoint
  27.         tempNum = tempNum + 1
  28.     Loop
  29.    
  30.     Exit Sub
  31.    
  32. ErrorHandler:
  33.     Exit Sub
  34.    
  35. End Sub

Отмечено как Решение ldfo 18-03-2022, 21:52:03

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Для того, чтобы это сделать нужно отказаться от VBA. Только ObjectARX (C++) или AutoCAD .NET API позволяют это сделать (используя Jig).
На VBA можно попробовать:
Код - Visual Basic [Выбрать]
  1. nextPoint = ThisDrawing.Utility.GetPoint(prevPoint, "Укажите точку вставки")
Но это конечно же не то.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ldfoАвтор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Александр Ривилис, Большое спасибо!

На самом деле, предложенный Вами вариант для VBA отлично подходит конкретно для моей задачи, мне стоило бы внимательнее изучать документацию по GetPoint().

Однако, странно, что, познакомившись с программированием под AutoCAD на VBA буквально пару дней назад, я уже начинаю подходить к каким-то ограничениям в, казалось бы, простых вещах.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Однако, странно, что, познакомившись с программированием под AutoCAD на VBA буквально пару дней назад, я уже начинаю подходить к каким-то ограничениям в, казалось бы, простых вещах.
Я бы рекомендовал изучать AutoCAD .NET API вместо VBA.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение