| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Изменение отражённого состояния динамического блока

Изменение отражённого состояния динамического блока

Ответ
Поиск в этой теме
Непрочитано 22.03.2018, 22:16 #1
Изменение отражённого состояния динамического блока
Evgivachev
 
Регистрация: 04.03.2016
Сообщений: 5

Добрый вечер!
Подскажите, пожалуйста, как изменить отражённое состояние блока в с#?

Вот часть кода:
DynamicBlockReferencePropertyCollection dynBrefColl = br.DynamicBlockReferencePropertyCollection;
foreach (DynamicBlockReferenceProperty dynbrefProps in dynBrefColl)
{
if (dynbrefProps.PropertyName == "Отраженное состояние1")
dynbrefProps.Value = "Без отражения"; // Вылетает Autodesk.AutoCAD.Runtime.Exception: "eInvalidInput"
}
Просмотров: 5692
 
Непрочитано 23.03.2018, 06:48
#2
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


http://forum.dwg.ru/showthread.php?p=1718431
Boxa вне форума  
 
Автор темы   Непрочитано 23.03.2018, 21:48
#3
Evgivachev


 
Регистрация: 04.03.2016
Сообщений: 5


с этим разобрался (с помощью object[] values = dynbrefProps.GetAllowedValues(); )

Сейчас интересует как установить значение Расстояние в динамическом блоке?!?!?!
Evgivachev вне форума  
 
Непрочитано 23.03.2018, 22:50
#4
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


а до этого что писали?)
Сергей812 вне форума  
 
Автор темы   Непрочитано 23.03.2018, 23:05
#5
Evgivachev


 
Регистрация: 04.03.2016
Сообщений: 5


Код:
[Выделить все]
public class Draw
    {
        public Document adoc;
        public Database db;
        public Editor ed;
        public double X;
        public double Y;
        public Shield Shield;

        public Draw(int i, Shield shield)
        {
            adoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            db = adoc.Database;
            ed = adoc.Editor;
            X = 420 * i;
            Y = 0;
            Shield = shield;
        }

public void DrawModul()
        {
            for (int q = 0; q < Shield.Moduls.Count; q++)
            {

                string blockName = "Модуль";
                // начинаем транзакцию
                Transaction tr = db.TransactionManager.StartTransaction();
                using (tr)
                {

                    //***
                    // ШАГ 1 - создаем новую запись в таблице блоков (или получаем ID существующей)
                    //***
                    // открываем таблицу блоков на чтение
                    BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);

                    // проверяем, нет ли в таблице блока с таким именем
                    // если есть - используем его ID
                    ObjectId btrId;
                    if (bt.Has(blockName))
                    {
                        btrId = bt[blockName];
                    }
                    else
                    {
                        throw new System.Exception();
                    }

                    // ШАГ 3 - добавляем вхождение созданного блока на чертеж
                    //***
                    // открываем пространство модели на запись
                    BlockTableRecord ms = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                    // создаем новое вхождение блока, используя ранее сохраненный ID определения блока
                    BlockReference br = new BlockReference(Point3d.Origin, btrId);
                    br.Position = new Point3d(X, Y, 0);
                    // добавляем вхождение блока на пространство модели и в транзакцию
                    ms.AppendEntity(br);
                    tr.AddNewlyCreatedDBObject(br, true);

                    DynamicBlockReferencePropertyCollection dynBrefColl = br.DynamicBlockReferencePropertyCollection;

                    foreach (DynamicBlockReferenceProperty dynbrefProps in dynBrefColl)
                    {
                                                
                        if (dynbrefProps.PropertyName == "Расстояние7")
                                dynbrefProps.Value = "25";       // Вылетает Autodesk.AutoCAD.Runtime.Exception: "eInvalidInput" 
                    }
                    // фиксируем транзакцию
                    tr.Commit();
                }
          }
      }
}

Последний раз редактировалось Evgivachev, 24.03.2018 в 12:23.
Evgivachev вне форума  
 
Непрочитано 24.03.2018, 06:31
#6
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Судя по Вашим постам, код по ссылке Вы не смотрели... напрасно, там все это расписано, впрочем и отладчиком Вы не пользуетесь...
А по поводу ошибки (обоих ошибок, в первом и пятом сообщении), Вам же прямо сказано, "неправильный ввод", т.е. не надо методу, который на вход принимает вещественное число, пихать строку.

ЗЫю
Для правильного и красивого отображения кода, на страницах форума, предусмотрены соответствующие теги, считается хорошим тоном использовать эти теги:

Последний раз редактировалось Boxa, 24.03.2018 в 08:22. Причина: добавил (обоих ошибок, в первом и пятом сообщении)
Boxa вне форума  
 
Автор темы   Непрочитано 24.03.2018, 11:45
#7
Evgivachev


 
Регистрация: 04.03.2016
Сообщений: 5


.........а за код извините, не частый пользователь форума
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок.PNG
Просмотров: 28
Размер:	25.7 Кб
ID:	200521  
Evgivachev вне форума  
 
Непрочитано 24.03.2018, 12:14
#8
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


По поводу картинки: Те же грабли, только в профиль. Не надо методу, который на вход принимает вещественное число, пихать целочисленное.
Разберитесь наконец с типами данных и откройте отладчик.

C# не визуал басик, где такие фокусы проходят и автоматического приведения типов он, слава ТНБ, не делает.

Цитата:
Сообщение от Evgivachev Посмотреть сообщение
а за код извините, не частый пользователь форума
Никогда не поздно поправить.... кнопочка правка именно для этого и существует.
Boxa вне форума  
 
Автор темы   Непрочитано 24.03.2018, 12:22
#9
Evgivachev


 
Регистрация: 04.03.2016
Сообщений: 5


заменил 25 на 25.0. Заработато, спасибо!!
Отладчиком пользуюсь, у свойства Value показывает тип obj, поэтому всё это меня ввело в заблуждение!
Ещё раз спасибо!
Evgivachev вне форума  
 
Непрочитано 24.03.2018, 13:46
#10
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от Evgivachev Посмотреть сообщение
Отладчиком пользуюсь, у свойства Value показывает тип obj, поэтому всё это меня ввело в заблуждение!
Нда...
Boxa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Изменение отражённого состояния динамического блока

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение атрибутов динамического блока сразу на нескольких листах в файле чертежа Builder_Drew Динамические блоки 34 13.12.2022 17:15
Нужна помощь при вставке динамического блока [email protected] LISP 4 17.06.2016 10:53
Сброс динамического блока. Состояния видимости. pbiiii Динамические блоки 4 09.04.2016 16:09
При изменении масштаба динамического блока пропадает параметр remlin Динамические блоки 2 30.03.2014 16:55
Как с помощью lisp получить список всех состояний видимости динамического блока crosandr LISP 4 11.04.2012 22:33