Как стать автором
Обновить

Комментарии 6

Отличная статья.
Большое спасибо за ссылку на перевод примеров.
Как опытный пользователь AutoCAD скажу, если дважды щелкнуть на колесико мыши, то масштаб чертежа изменится таким образом, чтобы были видны все элементы чертежа.
Хотелось бы узнать про то, как искать на чертеже существующие примитивы, например, на определенном слое или цвете.
Как обычно буду ждать следующей статьи.
Сайт с переводом основал и поддерживает Андрей Бушман ( Hwd ), я просто привел ссылки.)

Про поиск элементов я тогда напишу как-нибудь. Насколько я помню, когда я озадачился этой проблемой, мне помог вот этот пост несравненного Kean Walmsley.
Задача поиска всех объектов на слое решается элементарно. А вот с поиском всех элементов заданного цвета дела обстоят посложнее — не помню, доводилось ли мне такое делать. Поищу в коде.

Спасибо за отзыв!
Элементарно Виктор.
    List<TypedValue> allBlocks = new List<TypedValue>();
    allBlocks.Add(new TypedValue((short)DxfCode.Start, "INSERT"));
    allBlocks.Add(new TypedValue((short)DxfCode.LayoutName, "Model"));

    allBlocks.Add(new TypedValue(-4, "<AND"));
    allBlocks.Add(new TypedValue((short)DxfCode.ColorName, "какой-нибудь цвет"));
    allBlocks.Add(new TypedValue(-4, "AND>"));

    allBlocks.Add(new TypedValue(-4, "<OR"));
    allBlocks.Add(new TypedValue((short)DxfCode.ColorName, "какой-нибудь цвет2"));
    allBlocks.Add(new TypedValue(-4, "OR>"));

    SelectionFilter allBlocksFilter = new SelectionFilter(allBlocks.ToArray());
    PromptSelectionResult prResult= Acad.Document.Editor.SelectAll(allBlocksFilter);
    if (prResult.Status == PromptStatus.OK)
    {
    }

Это так навскидку, смотрите SelectionFilter.
Если вы отрываете объект ForWrite то его нужно закрыть Close. Для наглядности лучше использовать, что-то что возвращает PromptStatus, не забывая про CurrentUserCoordinateSystem, а лучше пример с Jig.
Спасибо за комментарий!
Честно говоря, настолько далеко мои знания не распространяются. PromptStatus я использовал нечасто (в основном когда работал с вводом пользователя), а с CurrentUserCoordinateSystem и Jig не работал никогда.)
По поводу закрытия объектов: дело в том, что я не использую Open() напрямую, а открываю элемент из транзакции с помощью метода GetObject(), и дальше она сама заботится о закрытии объектов. Закрывать открытые в транзакции объекты методом Close() нельзя.
Действительно, ошибся.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории