Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 28 мар 2024, 17:39

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Как узнать, что на месте фигуры прямоугольник находятся или
СообщениеДобавлено: 13 сен 2020, 18:19 
Не в сети
Постоянный участник
Аватара пользователя

Зарегистрирован: 13 авг 2020, 04:53
Сообщений: 87
Использую Visio c: 2000
Уровнь квалификации: начальный
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Встал вопрос в том,что нужно определить есть или нет определенные фигуры на месте фигуры прямоугольник например. Пока приходит на ум следующее: вычислить координаты прямоугольника(слой а),искать определенные фигуры(слои б,в и т.д, но у каждой еще идентификатор класса фигур=имени слоя фигуры ) в этих координатах. Если есть пример кода или замечания по общему алгоритму решения задачи то любая помощь приветствуется. В конечном итоге суть такова - из прямоугольников, в координатах которых нужно искать определенные фигуры, нужно брать данные фигуры и передавать в те фигуры которые попадут в массив координат прямоугольника.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как узнать, что на месте фигуры прямоугольник находятся или
СообщениеДобавлено: 13 сен 2020, 18:40 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Tumanov в сообщении #12418 писал(а):
У шейпа есть метод (SpatialNeighbors), позволяющий вернуть коллекцию шейпов перекрытых заданным шейпом. Значит можно написать макрос, который будет обходить все помещения и для каждого из них собирать шейпы, находящиеся внутри этого помещения. Он же сможет прописать нужное значение в нужное поле этих шейпов.
попробуйте поэкспериментировать с этим методом

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как узнать, что на месте фигуры прямоугольник находятся или
СообщениеДобавлено: 13 сен 2020, 19:34 
Не в сети
Постоянный участник
Аватара пользователя

Зарегистрирован: 13 авг 2020, 04:53
Сообщений: 87
Использую Visio c: 2000
Уровнь квалификации: начальный
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Цитата:
У шейпа есть метод (SpatialNeighbors), позволяющий вернуть коллекцию шейпов перекрытых заданным шейпом. Значит можно написать макрос, который будет обходить все помещения и для каждого из них собирать шейпы, находящиеся внутри этого помещения. Он же сможет прописать нужное значение в нужное поле этих шейпов.
попробуйте поэкспериментировать сэтим методом

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

в моем случае обошлось без Spatial а по координатам с помощью "форыча" , дальше уже что у кого взять и куда положить понятно :wall:
Содержимое спрятано под спойлер ↓
Спойлер:
Код:
Sub transact_rooms_name()
Dim shp, shp2 As Visio.Shape
Dim shps As Visio.Shapes
Dim shp_id, shp_id2 As String
Dim x0, x1, x2, x_delta, y0, y1, y2, y_delta As Integer
Dim vsoSelection, vsoSelection2 As Visio.Selection
Dim n_pom As String
Dim n As Integer
Set vsoSelection = Application.ActiveWindow.Page.CreateSelection(visSelTypeByLayer, visSelModeSkipSuper, "_помещение")
Application.ActiveWindow.Selection = vsoSelection
n = vsoSelection.Count
If n > 0 Then
For Each shp In vsoSelection
shp_id = shp.ID
x0 = shp.Cells("PinX").ResultIU
y0 = shp.Cells("PinY").ResultIU
x_delta = (shp.Cells("Width").ResultIU / 2)
y_delta = (shp.Cells("Height").ResultIU / 2)
x1 = x0 - x_delta
x2 = x0 + x_delta
y1 = y0 - y_delta
y2 = y0 + y_delta
n_pom = shp.Cells("Prop.N_pom").ResultStr("")
Debug.Print n_pom
Set shps = ActiveWindow.Page.Shapes
For Each shp2 In shps
shp_id2 = shp2.ID
If shp_id2 <> shp_id Then
  If (shp2.Cells("PinX") >= x1) And (shp2.Cells("PinX") <= x2) And (shp2.Cells("PinY") >= y1) And (shp2.Cells("PinY") <= y2) Then
    If shp2.RowExists(visSectionProp, n_pom, 0) Then
shp2.Cells("Prop.N_pom").FormulaU = Chr(34) & n_pom & Chr(34)
     End If
  End If
End If
Next
Next
End If
ActiveWindow.DeselectAll
End Sub


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB