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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > C# Как осуществить поиск атрибутов по тегу?

C# Как осуществить поиск атрибутов по тегу?

Ответ
Поиск в этой теме
Непрочитано 06.06.2013, 16:09 #1
C# Как осуществить поиск атрибутов по тегу?
Sfinks7s1
 
VB, C++, C#, Java
 
Санкт-Петербург
Регистрация: 19.04.2013
Сообщений: 48

Поясню задачу.
Есть конструктор блоков с атрибутами.

Код:
[Выделить все]
public static void CreateStampAtribut(double x, double y, string text, double height, double widthFactor, double rotate, double oblique, string attrName, int blockName)
        {
            Database dbCurrent = Application.DocumentManager.MdiActiveDocument.Database;
            Editor edCurrent = Application.DocumentManager.MdiActiveDocument.Editor;
            using (Transaction trAdding = dbCurrent.TransactionManager.StartTransaction())
            {
                BlockTable btTable = (BlockTable)trAdding.GetObject(dbCurrent.BlockTableId, OpenMode.ForRead);
                string strBlockName = "attrBlk_" + System.Convert.ToString(blockName);
                try
                {     
                    if (btTable.Has(strBlockName))
                        edCurrent.WriteMessage("\nA block with this name already exist.");
                }
                catch
                {
                    edCurrent.WriteMessage("\nInvalid block name.");
                }
                AttributeDefinition adAttr = new AttributeDefinition();
                adAttr.Position = new Point3d(x,y,0);
                adAttr.WidthFactor = widthFactor;
                adAttr.Height = height;
                adAttr.Rotation = rotate;
                adAttr.Oblique = oblique;

                adAttr.Tag = attrName;
                
                BlockTableRecord btrRecord = new BlockTableRecord();
                btrRecord.Name = strBlockName;
                btTable.UpgradeOpen();

                ObjectId btrID = btTable.Add(btrRecord);
                trAdding.AddNewlyCreatedDBObject(btrRecord,true);

                btrRecord.AppendEntity(adAttr);
                trAdding.AddNewlyCreatedDBObject(adAttr,true);

                BlockTableRecord btrPapperSpace = (BlockTableRecord)trAdding.GetObject(btTable[BlockTableRecord.PaperSpace], OpenMode.ForWrite);

                BlockReference brRefBlock = new BlockReference(Point3d.Origin, btrID);

                btrPapperSpace.AppendEntity(brRefBlock);
                trAdding.AddNewlyCreatedDBObject(brRefBlock,true);

                //значение атрибута
                AttributeReference arAttr = new AttributeReference();
                arAttr.SetAttributeFromBlock(adAttr, brRefBlock.BlockTransform);
                arAttr.TextString = text;
                arAttr.Layer = "Z-TEXT";
                brRefBlock.AttributeCollection.AppendAttribute(arAttr);
                trAdding.AddNewlyCreatedDBObject(arAttr,true);
                
                trAdding.Commit();
            }
        }
Значения атрибутов берутся из базы данных при вставке штампа.

Код:
[Выделить все]
arAttr.TextString = text;
Теги атрибутов уникальны.

Код:
[Выделить все]
adAttr.Tag = attrName;
Проблема в том, что если в базе я меняю значения, то атрибуты, вставленные в чертёж своего значения сами-собой не изменят.) И придётся вставлять штамп заново, в этом случае всё будет корректно.
Как осуществить поиск в чертеже атрибутов, если теги уникальны??
Или как вообще осуществлять поиск элементов в чертежах?
Может кто поделится кусочком кода или ссылкой...
Просмотров: 4523
 
Непрочитано 06.06.2013, 16:38
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от Sfinks7s1 Посмотреть сообщение
...атрибуты, вставленные в чертёж своего значения сами-собой не изменят...
Естественно - на то они и аттрибуты. Если надо чтоб менялись во всех вхождениях - используй постоянные аттрибуты, ну или обрабатывай все вхождения.
Цитата:
Или как вообще осуществлять поиск элементов в чертежах?
Может кто поделится кусочком кода или ссылкой...
Судя по вопросу - приложенный Вами кусок кода Вы видимо просто "безумно скопипастили" - ибо в нем есть то что Вы спрашиваете.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 06.06.2013, 17:24
#3
Sfinks7s1

VB, C++, C#, Java
 
Регистрация: 19.04.2013
Санкт-Петербург
Сообщений: 48
Отправить сообщение для Sfinks7s1 с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Естественно - на то они и аттрибуты. Если надо чтоб менялись во всех вхождениях - используй постоянные аттрибуты, ну или обрабатывай все вхождения.

Судя по вопросу - приложенный Вами кусок кода Вы видимо просто "безумно скопипастили" - ибо в нем есть то что Вы спрашиваете.
Имеете в виду получение атрибута из блока?
Код:
[Выделить все]
arAttr.SetAttributeFromBlock(adAttr, brRefBlock.BlockTransform);
Я просто не совсем понимаю, как осуществлять обратный поиск по тегам атрибутов в созданных блоках. Требуется ли для этого возвращать или обращаться к Name блока и можно ли напрямую работать с аттрибутами независимо от блока.

Нашёл решение похожей задачи здесь:
http://through-the-interface.typepad...ng-a-sp-1.html

Последний раз редактировалось Sfinks7s1, 06.06.2013 в 17:29.
Sfinks7s1 вне форума  
 
Непрочитано 06.06.2013, 17:50
#4
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Можешь здесь посмотреть такой метод тоже
http://www.acadnetwork.com/topic-228.msg401.html#msg401
конкретно только подсчет блоков по атрибуту, остальное добавишь сам
Олег (jr.) вне форума  
 
Непрочитано 07.06.2013, 12:10
#5
trir


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


Цитата:
Проблема в том, что если в базе я меняю значения, то атрибуты, вставленные в чертёж своего значения сами-собой не изменят.
Ммм... А если использовать dbConnect?
trir вне форума  
 
Автор темы   Непрочитано 07.06.2013, 13:08
#6
Sfinks7s1

VB, C++, C#, Java
 
Регистрация: 19.04.2013
Санкт-Петербург
Сообщений: 48
Отправить сообщение для Sfinks7s1 с помощью Skype™


Цитата:
Сообщение от trir Посмотреть сообщение
Ммм... А если использовать dbConnect?
Я для взаимодействия с базой должен специальный интерфейс использовать, "оболочку" системы документооборота, а обращение напрямую к базе из внешнего приложение это нарушение безопасности. Так что dbConnect мне не подходит.
Sfinks7s1 вне форума  
 
Непрочитано 07.06.2013, 15:37
#7
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Sfinks7s1 Посмотреть сообщение
Я для взаимодействия с базой должен специальный интерфейс использовать, "оболочку" системы документооборота, а обращение напрямую к базе из внешнего приложение это нарушение безопасности. Так что dbConnect мне не подходит.
Может я чего не понял... Как это обычно делается: в СУБД создаётся профиль (login), которому назначаются определённые права, в частности - вызов минимального набора конкретных параметрических функций, нужных для работы внешнего приложения. Т.о. приложение чётко сидит в своей песочнице, дёргая только за те ниточки, которые ему выдал администратор. В чём тут может быть нарушение? Не знаю как с этим обстоят дела в "1Цэ", но в MS SQL Server (и не только в нём) это происходит именно так. Т.о. весь "специализированный интерфейс" сводится к созданию логина и назначению нужных прав. Всё остальное происходит стандартным способом, единым для всех современных СУБД. Поправьте, если я не прав...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > C# Как осуществить поиск атрибутов по тегу?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск скрытых атрибутов в динамических блоках dip Программирование 5 22.06.2012 11:43
Корректировка атрибутов блоков в нескольких чертежах AutoCAD из Excel superkot007 Программирование 14 20.10.2011 12:53
поиск среди атрибутов AutoCad 2004 baaba AutoCAD 3 09.08.2011 14:54
Извлечение атрибутов блока и вставка атрибутов в формулу andery AutoCAD 38 15.06.2009 02:39
Ошибочное масштабирование атрибутов дин.блока при копировании [N.S] AutoCAD 22 27.02.2008 10:58