Последние сообщения

Последние сообщения

Страницы: [1] 2 3 ... 10
1
Использовать Map 3D -> Стили
2
Atomohod
Забыл написать самое главное. Если пойдёшь по пути программного создания блоков, то код разрастётся неимоверно и никто на этом форуме не сможет тебе с ним помочь - никто не будет тратить кучу времени на чтение полотнищ бессмысленного кода.
Так что блоки должны быть созданы вручную средствами AutoCAD и хранится в отдельном файле (файлах).
3
Я сомневаюсь между двумя вариантами решения:
Ну первый вариант выглядит (IMHO) лучше. Только вот удастся ли это сделать - вот в чем вопрос. Начни с отдельного метода для вставки конкретного блока, затем второго, а дальше уже сможешь сообразить что можно выделить в базовый класс и имеет ли смысл это делать.
4
AutoCAD .NET API / Re: GripsOverrule vs DEMANDLOAD
« Последний ответ от Александр Ривилис 19-07-2018, 00:16:11 »
В итоге я сделал вот такую конструкцию:
Если выбрано несколько ручек, то base.MoveGripPointsAt(entity, grips, offset, bitFlags) будет выполнятся несколько раз (столько раз, сколько не твоих ручек).
5
Каких-то указаний и рекомендаций в доках по API я не нашел
И не найдете. Это не относится к AutoCAD API - это принципы ООП и варианты исполнения. Понятие "лучший вариант" тут может вообще быть неуместно, так как это зависит от опыта и стилистики программиста
6
AutoCAD .NET API / Re: GripsOverrule vs DEMANDLOAD
« Последний ответ от Александр Пекшев aka Modis 18-07-2018, 23:48:50 »
Проблема была именно при растягивании за ручки. Хотел сейчас воспроизвести проблему и... не получилось. И тут я вспомнил, что недавно вносил изменения в метод MoveGripPointsAt из-за другой проблемы. Я не думал, что между ними есть связь, но теперь понимаю, что есть! Проблема была в том, что при наличии моего плагина происходил фатал автокада при перетягивании ручек обычного динамического блока. Причем не всех ручек и не всех блоков.
Я пол вечера убил на банальный перебор вариантов этого метода, пока методом тыка не нашёл рабочий вариант. Вариант, который фаталил, выглядел так:
Код - C# [Выбрать]
  1. public override void MoveGripPointsAt(Entity entity, GripDataCollection grips, Vector3d offset, MoveGripPointsFlags bitFlags)
  2. {
  3.     try
  4.     {
  5.             // Проходим по коллекции ручек
  6.             foreach (GripData gripData in grips)
  7.             {
  8.                 // Приводим ручку к моему классу
  9.                 var gripPoint = gripData as BreakLineGrip;
  10.                 // Проверяем, что это та ручка, что мне нужна.
  11.                 if (gripPoint != null)
  12.                 {
  13.                     // my code
  14.                 }
  15.                 else base.MoveGripPointsAt(entity, grips, offset, bitFlags);
  16.             }
  17.     }
  18.     catch (Exception exception)
  19.     {
  20.         ExceptionBox.Show(exception);
  21.     }
  22. }
Фаталило на 15 строке
В итоге я сделал вот такую конструкцию:
Код - C# [Выбрать]
  1. public override void MoveGripPointsAt(Entity entity, GripDataCollection grips, Vector3d offset, MoveGripPointsFlags bitFlags)
  2. {
  3.     try
  4.     {
  5.         if (IsApplicable(entity))
  6.         {
  7.             // Проходим по коллекции ручек
  8.             foreach (GripData gripData in grips)
  9.             {
  10.                 // Приводим ручку к моему классу
  11.                 var gripPoint = gripData as BreakLineGrip;
  12.                 // Проверяем, что это та ручка, что мне нужна.
  13.                 if (gripPoint != null)
  14.                 {
  15.                     // my code
  16.                 }
  17.                 else base.MoveGripPointsAt(entity, grips, offset, bitFlags);
  18.             }
  19.         }
  20.         else base.MoveGripPointsAt(entity, grips, offset, bitFlags);
  21.     }
  22.     catch (Exception exception)
  23.     {
  24.         ExceptionBox.Show(exception);
  25.     }
  26. }
И проблема ушла. Видимо, проблема с DEMANDLOAD тоже ушла

Как бы глупо не выглядел этот код, содержащий, как казалось бы, несколько ненужных строк - он является единственным рабочем. Во всех других вариантах (а я много их попробовал) либо возникал фатал, либо не работал предпросмотр при перетягивании за ручки (и моих объектов и/или динамических блоков)
7
Здравствуйте!

Прошу подсказать какой вариант реализации на ваш взгляд лучше.

Задача: нужно создать блоки с атрибутами для простановки условных обозначений.

Различия-каждый тип блока позиции должен иметь свою форму(геометрическую), свой слой, разный тип линий, разный набор атрибутов и свое имя для каждого типа(Block1, Block2 ...).
Сходства-каждый из этих типов позиций служит для указания позиции на чертеже и хранения информации.

Я сомневаюсь между двумя вариантами решения:

1 Создать класс ItemMark как базовый. В нем создать поля, общие для всех типов блока позиции, и общие методы GetInsertPointFromUser и SetCurrentItemNumber. Создавать классы для других типов блоков и наследовать в каждом из них ItemMark, используя его поля и методы и расширяя его функциональность специфическими для каждого нового класса методами.

2 Создать единый класс для всех типов позиций, а все различия между типами блоков позиций учесть за счет внутренней логики (много разных if (){}).

Каких-то указаний и рекомендаций в доках по API я не нашел.
8
AutoCAD .NET API / Re: GripsOverrule vs DEMANDLOAD
« Последний ответ от Александр Ривилис 18-07-2018, 23:31:45 »
Просто так проверить и что-то там найти не получится)) Или ставить плагин и пробовать с ним, или просто поверить мне, что вот такой случай имел место быть. Кстати, я потом больше не проводил экспериментов
Я готов тебе поверить, так как даже VisualLisp умудряется наследить прокси-объектами (постоянные реакторы). Просто было бы интересно понять каким образом это происходит в твоём случае.
Исключение eNotAllowedForThisProxy происходит при выполнении каких-то действий твоего плагина? Если да, то каких?
9
AutoCAD .NET API / Re: GripsOverrule vs DEMANDLOAD
« Последний ответ от Александр Пекшев aka Modis 18-07-2018, 23:27:05 »
Где 200 прокси объектов, причем связанных с твоей программой?
Так речь шла не о моих примитивах. Моих там как раз нет, потому-что пользователь их и не мог создать. Точнее - мог только создать и ничего потом не мог сделать. Без плагина мои примитивы будут просто анонимными блоками с расширенными данными.
А 200 штук наверное было из-за того, что скорее всего он прислал "урезанный" вариант файла.

Просто так проверить и что-то там найти не получится)) Или ставить плагин и пробовать с ним, или просто поверить мне, что вот такой случай имел место быть. Кстати, я потом больше не проводил экспериментов
10
AutoCAD .NET API / Re: GripsOverrule vs DEMANDLOAD
« Последний ответ от Александр Ривилис 18-07-2018, 23:20:28 »
Интересно бы глянуть на dwg-файл
Файл прикладываю. В нём ничего особенного не найдете
И уточни на какой (какие) примитивы ты настроил GripsOverrule
BlockReference
Ничего не понял. При DEMANDLOAD равном 2 в чертеже находится три прокси-объекта, из них два прокси-примитива.



И это WIPEOUT'ы. Где 200 прокси объектов, причем связанных с твоей программой?
Страницы: [1] 2 3 ... 10