Форум пользователей Visio
http://visio.getbb.ru/

При сохранении "улетают" координаты шейпов
http://visio.getbb.ru/viewtopic.php?f=6&t=1261
Страница 1 из 1

Автор:  Zergling [ 18 дек 2017, 17:51 ]
Заголовок сообщения:  При сохранении "улетают" координаты шейпов

Здравствуйте, имеется файл "Макросы Visio" который я подключаю в качестве набора элементов к чертежу и запускаю из него макрос "ТР" (он должен бросать выноски на контура тёплого пола с информацией о номере распределителя, номере контура, длине трубы, длине гофры). Столкнулся с проблемой при повторном запуске макроса после сохранения и изменения чертёжа(перетаскивал точки линий которыми рисовл трубы) выноски не попали на контура и область выделения некоторых фигур, предположительно измененных "съехала" что видно на скрине. Возможно корень проблемы лежит вне плоскости программирования. Я работаю с визио недавно, как и с vba и не знаю в каком двигаться в плане поиска решения проблемы буду рад любой помощи. Файлы приложил архивом.

Вложения:
.rar [1.34 Mб]
Скачиваний: 83
Visio.vsd [171 Кб]
Скачиваний: 122

Автор:  Tumanov [ 18 дек 2017, 20:18 ]
Заголовок сообщения:  Re: При сохранении "улетают" координаты шейпов

А программиста уже уволили...? :)
Я посмотрел слегка, но ничего утешительного. Большой чертеж. Большой макрос.
Что именно улетает - не нашел.
Макрос не выполняется. При попытке запуска дает ошибку. Натыкается на шейп, у которого отсутствует строка с нужными Shape Data. И их действительно нет.
То есть либо макрос TP должен запускаться не первым, а с какой-то предысторией, либо на нужных листах...
Короче, быстро отладить чужую программу с непонятными функциями явно не получится.

Автор:  nbelyh [ 19 дек 2017, 01:33 ]
Заголовок сообщения:  Re: При сохранении "улетают" координаты шейпов

+1. Нужен автор кода (тот, кто писал эти макросы).
IMHO, стороннему человеку за реальное время разобраться практически невозможно.

Автор:  Tumanov [ 19 дек 2017, 12:30 ]
Заголовок сообщения:  Re: При сохранении "улетают" координаты шейпов

Цитата:
стороннему человеку за реальное время разобраться практически невозможно

Не, ну если программа уж очень нужна, то в принципе разобраться можно. Это же VBA, а не двоичка.
Но естественно, это уже не такой вопрос, который в форуме решается. Нужно будет и время, и деньги, и прикладник, который представляет, как программой пользоваться и что считается ошибкой. Или спецификация требований.

Автор:  Zergling [ 19 дек 2017, 16:16 ]
Заголовок сообщения:  Re: При сохранении "улетают" координаты шейпов

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

Автор:  Zergling [ 19 дек 2017, 16:34 ]
Заголовок сообщения:  Re: При сохранении "улетают" координаты шейпов

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

Автор:  Tumanov [ 19 дек 2017, 19:21 ]
Заголовок сообщения:  Re: При сохранении "улетают" координаты шейпов

В идеале нужно бы максимально облегчить чертеж. Так, чтобы осталось только проблемное место и не было ничего лишнего.
2. Хорошо бы показать, о каком именно шейпе идет речь, чтобы не приходилось его искать среди нескольких сотен.
3. Что такое "точка шейпа"?
4. На каком листе это происходит - на всех?
Я, например, просто не знаю, куда смотреть. Можно ли как-то воспроизвести ситуацию?

Автор:  Zergling [ 20 дек 2017, 12:40 ]
Заголовок сообщения:  Re: При сохранении "улетают" координаты шейпов

Спасибо что пытаетесь помочь. Убрал все лишнее. Переделал макрос, вроде должно быть более наглядно понятно. Под "точкой шейпа" я подразумевал добавление узла в центр существующей ломанной линии, или его перестановка. Происходит это на всех листах. Переосмыслил проблему: Неверно вычисляются абсолютные координаты точек излома LineMass(i, 1); LineMass(i, 2); Я пытаюсь находить их как смещение x,y в Geometry 1 ShapeSheet по номеру точки излома относительно центра фигуры("PinX"; "PinY"). И когда я вношу изменения в линию при повторном открытии файла (двигаю её точки или добавляю новые) "съезжает" рамка выделения фигуры в месте с "PinX" и "PinY" а в LineMass(i, 1) и LineMass(i, 2) попадают непонятные мне значения. Буду весьма признателен если подскажете как мне получить абсолютные координаты точки излома линни.

Вложения:
.vsd [1.53 Mб]
Скачиваний: 109
Visio.vsd [126 Кб]
Скачиваний: 115

Автор:  Tumanov [ 20 дек 2017, 13:28 ]
Заголовок сообщения:  Re: При сохранении "улетают" координаты шейпов

А вы не хотите переделать этот шейп?
Как мне кажется, проблемы в конструкции.
Вам обязательно нужно, чтобы этот шейп был OneD? Какая цель этим достигается?

Автор:  Zergling [ 20 дек 2017, 16:59 ]
Заголовок сообщения:  Re: При сохранении "улетают" координаты шейпов

Можно и переделать в этом проблемы нету, только я не совсем понял что надо переделать... Что за OneD? Для чего он используется? И самое главное как переделать? Если я правильно понимаю исходя из того что смог прочитать на сайте мелкомягких по поводу этого свойства мне достаточно изначально создать линию с тремя точками и задать ей необходимые данные так?

Автор:  Tumanov [ 20 дек 2017, 18:19 ]
Заголовок сообщения:  Re: При сохранении "улетают" координаты шейпов

Шейпы бывают одномерные (линии, имеют начало и конец) и двумерные (имеют ширину и высоту, но нет начала и конца).
Многие ячейки шейп-листа связаны формулами (даже по умолчанию). И формулы по умолчанию у 1D и 2D шейпов - разные.
Ваш шейп по-сути 2D, то есть некий многоугольник. А записан как линия. Поэтому формулы ведут себя по -другому, более сложно для восприятия.
И если никакие алгоритмические задумки не требуют 1D поведения, то Вам лучше объявить этот шейп как 2D. Возможно, сразу исчезнут все глюки.
Скорее всего для изменения такого шейпа достаточно выполнить над ним Shape / Operation / Join.

Автор:  Tumanov [ 20 дек 2017, 18:25 ]
Заголовок сообщения:  Re: При сохранении "улетают" координаты шейпов

Вот так

Вложения:
join.gif
join.gif [ 222.16 Кб | Просмотров: 855 ]

Автор:  Zergling [ 20 дек 2017, 18:50 ]
Заголовок сообщения:  Re: При сохранении "улетают" координаты шейпов

Спасибо большое, визуально вроде помогло быструю проверку на ошибки тоже прошло завтра протестирую на исходном чертеже и отпишусь. :D

Автор:  Zergling [ 21 дек 2017, 19:20 ]
Заголовок сообщения:  Re: При сохранении "улетают" координаты шейпов

Данные при переводе шейпа по предложенному способу должны удаляться? Если да, то нельзя ли сделать это без потери данных через таблицу ShapeSheet (база у нас довольно большая). Или возможно это я что-то делаю неправильно?

Автор:  Tumanov [ 21 дек 2017, 19:51 ]
Заголовок сообщения:  Re: При сохранении "улетают" координаты шейпов

При таком способе шейп становится другим. Данные из него должны исчезнуть.
Через ShapeSheet можно сделать практически все. Значит скорее всего и это можно. Но я бы за такое не взялся. Скорее можно попробовать данные скопировать. То есть сделать такое же преобразование программно с переносом данных.
А сколько там данных? 4 строчки Shape Data или координаты перегибов тоже где-то используются?
Или какая-то связь с внешними данными?

Автор:  Zergling [ 22 дек 2017, 11:07 ]
Заголовок сообщения:  Re: При сохранении "улетают" координаты шейпов

Понятно, да координаты перегибов использовались для нахождения длинны, но я уже придумал как относительно быстро переделать мастера. Спасибо, с новыми мастерами все работает как надо. Осталось только написать макрос перерисовки старых шейпов новыми мастерами, на форуме случаем нету никаких подобных наработок?

Автор:  Tumanov [ 22 дек 2017, 17:39 ]
Заголовок сообщения:  Re: При сохранении "улетают" координаты шейпов

Если просто скопировать свойства, то можно заглянуть в раздел "Склад полезных макросов". Вот например, viewtopic.php?f=15&t=1047
Вот заменой шейпа наверно тяжелее будет, потому что со старого шейпа тяжело взять координаты. У него ведь изображение совсем не там находится.
Но если по одному шейпу, то можно выделять очередной шейп и макросом создавать новый, например, всегда в точке 0,0. Потом руками двигать куда нужно.
То есть селектировали шейп, вызвали макрос. Макрос сохранил свойства в массиве, преобразовал шейп, записал в новый шейп свойства из массива.
Само же преобразование - что-то типа
ActiveWindow.Selection.Join
Set NewShape = ActiveWindow.Selection(1)
-----------
Похоже, на координаты смотреть не надо, так как новый шейп после Join будет точно на месте старого.

Автор:  Гость [ 26 дек 2017, 16:26 ]
Заголовок сообщения:  Re: При сохранении "улетают" координаты шейпов

Спасибо

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/