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

ADN Club => AutoCAD .NET API => Тема начата: bakaIIHX от 12-09-2014, 16:13:27

Название: AutoCad 2012. Как отследить появление нового примитива в текущем пространстве?
Отправлено: bakaIIHX от 12-09-2014, 16:13:27
Доброго времени суток. Прошу прощения что отвлекаю Вас, уверен что и так много работы, но не могли бы Вы мне помочь. Я в затруднительном положении, не могу понять можно ли осуществить программу которую я запланировал . Суть в том, что бы в автокаде рандомно генерировались простейшие примитивы после того как в его рабочем поле что либо появлялось. Осуществлять программу пытаюсь на С# Visual Studio. Первая задумка: все зависит от рабочего поля автокада. В момент появления, на пример примитива, на поле автокада срабатывает программа и рандомно в установленную область генерирует примитив. Вторая: так же привязывается к рабочему полю, но не генерирует новый примитив, а копирует и изменят уже существующий.

Если Вас не затруднит можете ответить на пару вопросов.
1) Возможна ли программа, которая срабатывает в момент события на поле автокад. Что нужно использовать?
2) Что нужно для генерации рандомных примитивов в автокад посредством С#.


Большое Вам спасибо.

Прочитай правила и измени название темы. /* Александр Ривилис */
Название: Re: Нужна помощь
Отправлено: Александр Ривилис от 12-09-2014, 16:34:33
Приветствую на форуме!
можно ли осуществить программу которую я запланировал .
Можно. Я не буду говорить о том, что сама по себе постановка задачи выглядит абсолютно бредово и лучше всего будет если ты уточнишь зачем это всё нужно.

Название: Re: Нужна помощь
Отправлено: Александр Ривилис от 12-09-2014, 16:39:37
1) Возможна ли программа, которая срабатывает в момент события на поле автокад. Что нужно использовать?
Нет такого понятия "поле AutoCAD". Есть текущий лист (Модель или один из Листов), есть текущий вид. О чем в данном случае идет речь непонятно. Один из вариантов - реагировать на добавление примитивов в  базу AutoCAD. Регистрировать факт добавления можно в событии Database.ObjectAppended. Но в этом событии не следует добавлять свои примитивы, т.к. есть большой шанс попасть в рекурсию.
2) Что нужно для генерации рандомных примитивов в автокад посредством С#.
Понять что такое это "рандомный примитив" - это в первую очередь.
Название: Re: Нужна помощь
Отправлено: bakaIIHX от 16-09-2014, 15:59:39
лучше всего будет если ты уточнишь зачем это всё нужно.

Это все часть проекта, в который меня не посвящали. Необходимо что бы написанная программа при появлении какого либо объекта на текущем листе рисовала простейщий примитив, только не каждый раз один, а разные.
Название: Re: Нужна помощь
Отправлено: Александр Ривилис от 16-09-2014, 16:12:17
1. Напоминаю о необходимости изменить название темы. В противном случае она будет удалена.
2. Не люблю играть в конспирологические игры. Если нет нормальной постановки задачи, то решить её невозможно.
3. Задавай вопросы по принципу "один вопрос - одна тема". Например: "Как можно отследить появление появление примитива в текущем пространстве?".
Название: Re: AutoCad 2012. Как отследить появление нового примитива в текущем пространстве?
Отправлено: Александр Ривилис от 16-09-2014, 16:22:35
Для того, чтобы отследить появление нового примитива нужно:
1) подписаться на событие Database.ObjectAppended
2) в обработчике этого события проверить, что добавленный объект - это примитив (Entity) и его свойство OwnerId равно свойству CurrentSpaceId текущей базы данных (чертежа)
Название: Re: AutoCad 2012. Как отследить появление нового примитива в текущем пространстве?
Отправлено: Андрей Бушман от 16-09-2014, 17:03:09
Прошу прощения что отвлекаю Вас, уверен что и так много работы, но не могли бы Вы мне помочь. Я в затруднительном положении, не могу понять можно ли осуществить программу которую я запланировал .
Чем меньше "воды" в тексте, тем лучше.
Цитировать
Суть в том, что бы в автокаде рандомно генерировались простейшие примитивы после того как в его рабочем поле что либо появлялось.
1. В AutoCAD примитивы бывают графическими (Entity) и неграфическими. Что ты в данном случае подразумевал под "примитивами"? Где должны генерироваться "рандомные" примитивы (что это за "установленая область" такая)?
2. Расшифруй, что ты подразумеваешь под "рандомно"? Произвольный графический примитив в произвольном месте текущего пространства?
3. Что ты подразумеваешь под "рабочим полем"? В AutoCAD под словом "поле" (Field) подразумевается совсем не то, что ты пытаешься использовать в своём лексиконе. Предполагаю, что под "рабочим полем" ты подразумеваешь текущее пространство: Model или Layout...

Цитировать
1) Возможна ли программа, которая срабатывает в момент события на поле автокад. Что нужно использовать?
По поводу "поля" написано выше. Использовать нужно соответствующий обработчик событий, в зависимости от того,  какое событие ты хочешь обработать.
Цитировать
2) Что нужно для генерации рандомных примитивов в автокад посредством С#.
По поводу "рандомных" написано выше. Каков вопрос, таков ответ: нужно написать программный код.

P.S. Задавая вопрос, используй терминологию, принятую в той области, по которой задаёшь его (если хочешь, чтобы тебя поняли и ответили), а не изобретай "сферических коней в вакууме". Если у тебя проблемы с кодом - выкладывай свой код и показывай проблемное место.
Название: Re: AutoCad 2012. Как отследить появление нового примитива в текущем пространстве?
Отправлено: bakaIIHX от 18-09-2014, 19:24:34
Приношу свои извинения. Работаю с этим не так давно, поэтому и несу бред сивой кобылы.
Название: Re: AutoCad 2012. Как отследить появление нового примитива в текущем пространстве?
Отправлено: bakaIIHX от 18-09-2014, 19:30:01
По поводу "рандомных" написано выше. Каков вопрос, таков ответ: нужно написать программный код.
Вы совершенно правы, мне необходимо сделать,что бы появлялся произвольный графический примитив в произвольном месте текущего пространства.