Сообщество программистов Autodesk в СНГ

ADN Club => VBA => Тема начата: AndONE от 24-10-2017, 15:27:11

Название: Autocad: Перевод координат из ModelSpace в PaperSpace
Отправлено: AndONE от 24-10-2017, 15:27:11
Коллеги, добрый день.
Встала задача образмерить чертеж, который имеется в modelspace. На него сделаны 3 видовых экрана (3 проекции) в paperspace. Все координаты привязки в modelspace у меня есть, но я никак не могу понять как перевести координаты из мирового пространства в листовое. Помогите знаниями, пожалуйста.
(https://s1.postimg.org/6sm66tpy6j/image.png) (https://postimg.org/image/6sm66tpy6j/)
Название: Re: Autocad: Перевод координат из ModelSpace в PaperSpace
Отправлено: Александр Ривилис от 24-10-2017, 15:36:23
Должно быть что-то такое:
Код - Visual Basic [Выбрать]
  1. Dim pointPaperDCS As Variant
  2. pointPaperDCS = ThisDrawing.Utility.TranslateCoordinates(pointWCS, acWorld, acPaperSpaceDCS, False)
где pointWCS - координаты в мировой системе.
Название: Re: Autocad: Перевод координат из ModelSpace в PaperSpace
Отправлено: AndONE от 24-10-2017, 16:35:59
Большое спасибо за ответ. Пробую. Правда пока не понимаю, если в пространстве листа есть несколько видов, а в TranslateCoordinates никак не фигурирует привязка к ним, то как будет учитываться на каком из видовых экранов я хочу получить размер.
Если можно, объясните, пожалуйста.
Название: Re: Autocad: Перевод координат из ModelSpace в PaperSpace
Отправлено: Александр Ривилис от 24-10-2017, 16:43:11
Большое спасибо за ответ. Пробую. Правда пока не понимаю, если в пространстве листа есть несколько видов, а в TranslateCoordinates никак не фигурирует привязка к ним, то как будет учитываться на каком из видовых экранов я хочу получить размер.
Если можно, объясните, пожалуйста.
В том, который активен. Так что если тебе нужны точки с нескольких видовых экранов, то придётся между ними попереключаться.
Название: Re: Autocad: Перевод координат из ModelSpace в PaperSpace
Отправлено: Александр Ривилис от 24-10-2017, 17:09:52
Кстати, вот пример обратной процедуры, т.е. по точке в пространстве листа получение точки в пространстве модели:
http://jprdintprev.autodesk.com/adn/servlet/devnote?siteID=4814862&id=5411288&preview=1&linkID=4900509
Название: Re: Autocad: Перевод координат из ModelSpace в PaperSpace
Отправлено: AndONE от 24-10-2017, 19:36:00
Александр, благодарю! Полезнейшая информация!
Название: Re: Autocad: Перевод координат из ModelSpace в PaperSpace
Отправлено: Александр Ривилис от 24-10-2017, 20:45:17
Вот еще один вариант - это .NET, но оттуда можно кое-что почерпнуть: http://adndevblog.typepad.com/autocad/2014/11/from-model-space-to-paper-space.html
Там в частности используется функция acedTrans(), которая полный аналог Utility.TranslateCoordinates из VBA.
Название: Re: Autocad: Перевод координат из ModelSpace в PaperSpace
Отправлено: AndONE от 25-10-2017, 09:27:51
Спасибо за помощь!
Оххх, есть еще каверзный вопросик.
Я пишу программу на 1С, да бывает и такое)) И у меня нет типа "перечисления". Все перечисления я задаю порядковыми номерами. В случае с TranslateCoordinates получается такая строчка:

Т11 = ЭтотЧертеж.Utility.TranslateCoordinates (Т1, 0, 4, Ложь);

Но ругается на аргумент OCSNormal. Получается что системы координат в перечислении не в том же порядке, как даны в справке
acWorld
acUCS
acOCS
acDisplayDCS
acPaperSpaceDCS

Можно как-нибудь наверняка узнать какому номеру какое из перечислений соответствует?
Название: Re: Autocad: Перевод координат из ModelSpace в PaperSpace
Отправлено: Александр Ривилис от 25-10-2017, 11:04:15
Нумерация с 0 и acOCS последний (значение 4). Остальные вроде правильно - сейчас не могу проверить.

P.S.: Проверил. Точно:
Код - C++ [Выбрать]
  1. enum AcCoordinateSystem
  2.     {
  3.         acWorld = 0,
  4.         acUCS   = 1,
  5.         acDisplayDCS    = 2,
  6.         acPaperSpaceDCS = 3,
  7.         acOCS   = 4
  8.     }   AcCoordinateSystem;
  9.  
Название: Re: Autocad: Перевод координат из ModelSpace в PaperSpace
Отправлено: AndONE от 25-10-2017, 16:52:48
Для чистоты эксперимента решил сначала на VBA обкатать, но тоже проблема.

Код - Visual Basic [Выбрать]
  1. Private Sub CommandButton1_Click()
  2.  
  3. ThisDrawing.MSpace = True
  4.  
  5. Dim pt1, pt2, pt3 As Variant
  6. pt1 = ThisDrawing.Utility.GetPoint(, "Point1") 'Выбираю точку в PaperSpace с активным видом (низ стакана)
  7. pt2 = ThisDrawing.Utility.GetPoint(, "Point2") 'Выбираю точку в PaperSpace с активным видом (верхстакана)
  8.  
  9. ThisDrawing.MSpace = False
  10.  
  11. pt3 = ThisDrawing.Utility.GetPoint(, "33") 'выбираю точку в  PaperSpace с выключенным видовым экраном, это будет точка выноски текста
  12.  
  13. pt11 = ThisDrawing.Utility.TranslateCoordinates(pt1, acWorld, acPaperSpaceDCS, False)
  14. pt22 = ThisDrawing.Utility.TranslateCoordinates(pt2, acWorld, acPaperSpaceDCS, False)
  15.  
  16. ThisDrawing.MSpace = False
  17. Dim R As AcadDimAligned
  18. R = ThisDrawing.PaperSpace.AddDimAligned(pt11, pt22, pt3)
  19. End Sub
  20.  

В результате появляется размер на столько большой, что не умещается в paperspace.
Подскажите, что не так делаю?
Название: Re: Autocad: Перевод координат из ModelSpace в PaperSpace
Отправлено: Александр Ривилис от 25-10-2017, 18:06:11
Похоже, что примеры ты не смотрел.
Из первого примера видно, что нужно по два преобразования для каждой точки (в примере обратная последовательность):
1. acWorld -> acDisplayDCS
2. acDisplayDCS -> acPaperSpaceDCS
Название: Re: Autocad: Перевод координат из ModelSpace в PaperSpace
Отправлено: AndONE от 26-10-2017, 09:34:31
На самом деле смотрел, но это не очевидно, не из справки, не из первого примера, где Вы предложили сразу конвертировать из Мировых в Листовые.

Тем не менее, Вы правы, требуется сначала перевести мировые с включенным вьюпортом в дисплейные, потом выключить вьюпорт, а только потом конвертировать их в листовые. Тут получается комбинаторика из возможных вариантов, и вчера весь день комбинируя, я пробовал с промежуточными дисплейными, но выключал вьюпорт после последней конвертации, что не давало нужный результат.
Своей подсказкой Вы сократили количество вариантов до минимума и почти сразу получилось.
Огромной Вам спасибо за поддержку!
Название: Re: Autocad: Перевод координат из ModelSpace в PaperSpace
Отправлено: Александр Ривилис от 26-10-2017, 10:44:48
На самом деле смотрел, но это не очевидно, не из справки, не из первого примера, где Вы предложили сразу конвертировать из Мировых в Листовые.
Что ты хочешь - склероз. :-) Про двойную конвертацию забыл. Только углубившись в материал удалось вспомнить этот нюанс.