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

ADN Club => AutoCAD .NET API => Тема начата: RevitTormentor от 28-09-2017, 12:15:25

Название: События для размеров
Отправлено: RevitTormentor от 28-09-2017, 12:15:25
Добрый день.
Какие есть события у размеров? Может это одинаковые события для всех объектов на чертеже (не знаю как правильно они называются Entity вроде, Text Circle и пр.)

События типа Установлен, Добавлен, MouseEnter, MouseLeave и пр.
Применительно к размеру. Делаю создать размер, ставлю вторую точку, отпускаю кнопку мыши размер добавляется в базу и происходит событие DimensionAdded какое нибудь.

Код - C# [Выбрать]
  1.  AcDb.BlockTable bt = db.BlockTableId.GetObject(AcDb.OpenMode.ForRead) as AcDb.BlockTable;
  2.                     AcDb.BlockTableRecord ms = bt[AcDb.BlockTableRecord.ModelSpace].GetObject(AcDb.OpenMode.ForWrite) as AcDb.BlockTableRecord;
  3.                     ms.AppendEntity(circle);
  4.                     tr.AddNewlyCreatedDBObject(circle, true);

Например с кругом после ms.AppendEntity(circle); Круг отправляет событие что он добавлен в BlockTableRecord. и это можно отследить в каком нибудь методе
Код - C# [Выбрать]
  1. void BlockTableAdded(object sender){}

Есть такое как в WPF? Или надо добавить в базу, а потом снова открывать транзакцию и проверять добавился объект в базу или нет и считывать его параметры.

Непосредственно с размером, двигая у размера "ручку" требуется привязка к длине полилинии (или к одной совместной координате двух полилиний). Если нельзя привязаться непосредственно во время изменения размера, можно ли привязаться непосредственно после окончания изменения размера.
Спасибо
Название: Re: События для размеров
Отправлено: avc от 28-09-2017, 12:32:09
Много разных вопросов в одну кучу. Вы бы лучше написали что вы хотите получить в конечном счете
Название: Re: События для размеров
Отправлено: RevitTormentor от 28-09-2017, 12:39:20
Непосредственно с размером, двигая у размера "ручку" требуется привязка к длине полилинии (или к одной совместной координате двух полилиний). Если нельзя привязаться непосредственно во время изменения размера, можно ли привязаться непосредственно после окончания изменения размера.
Название: Re: События для размеров
Отправлено: avc от 28-09-2017, 13:06:57
Привязка к конечным точкам полилинии у пользователя и так есть, тут программировать нечего.
По событиям: у Document есть события CommandWillStart и CommandEnded а у Database есть ObjectModified . Можете их отловить, проверить что изменеия коснулись ваших размеров и модифицировать все что угодно сразу или потом по событию простоя.
У Dimension есть свойство DimensionText - записывайте туда любую строку.
WPF к теме отношения не имеет https://ru.wikipedia.org/wiki/Windows_Presentation_Foundation (https://ru.wikipedia.org/wiki/Windows_Presentation_Foundation)
Название: Re: События для размеров
Отправлено: Александр Ривилис от 28-09-2017, 13:07:33
Изучай: ARXDBG и MGDDBG - утилиты для анализа AutoCAD, чертежа и т.д. (http://adn-cis.org/forum/index.php?topic=7274.0)
Там включишь события (реакторы) и посмотришь какие срабатывают.
Скажу сразу, что специальных событий для размеров нет. Есть события для объектов и для базы.
Для базы:
(https://farm5.staticflickr.com/4387/37112153690_f80520648f_o.png)

Название: Re: События для размеров
Отправлено: avc от 28-09-2017, 13:12:10
И у самих объектов (размеров, линий и т.п. entity) никаких обработчиков событий нет - все только через Database или Document
Название: Re: События для размеров
Отправлено: RevitTormentor от 28-09-2017, 13:16:10
Там включишь события (реакторы)
Хотел отдельно вопрос задать про реактора - что это такое? Теперь не стану.
Спасибо Александр
Название: Re: События для размеров
Отправлено: Александр Ривилис от 28-09-2017, 13:41:15
И у самих объектов (размеров, линий и т.п. entity) никаких обработчиков событий нет - все только через Database или Document
А вот тут ты заблуждаешься:

(https://farm5.staticflickr.com/4375/37368804211_c8a4b513f6_o.png)

Название: Re: События для размеров
Отправлено: avc от 28-09-2017, 13:48:16
Упс. И в самом деле... Любопытно... И это будет работать после закрытия транзакции и диспоза объекта?
Название: Re: События для размеров
Отправлено: Александр Ривилис от 28-09-2017, 13:49:42
Упс. И в самом деле... Любопытно... И это будет работать после закрытия транзакции и диспоза объекта?
Раз любопытно - проверь! Только не вздумай в событиях объекта использовать транзакцию.
Название: Re: События для размеров
Отправлено: RevitTormentor от 28-09-2017, 13:53:09
Вроде там все события только для работы внутри транзакции. Модификация, Закрытие Открытие. Могу конечно и ошибаться :)
Название: Re: События для размеров
Отправлено: Александр Ривилис от 28-09-2017, 13:55:33
Могу конечно и ошибаться :)
Можешь. К объектам/примитивам можно обращаться вообще без транзакции. Пример: http://adn-cis.org/sozdanie-polyline3d-bez-ispolzovaniya-tranzakczii.html