Копирование PropertySet

Автор Тема: Копирование PropertySet  (Прочитано 2088 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 102
  • Карма: 1
Копирование PropertySet
« : 28-07-2021, 15:08:47 »
Добрый день.
Подскажите как скопировать PropertySet из другого чертежа в текущий. Идея такая, есть чертеж-шаблон в котором определены таблицы со свойствами PropertySet
Нужно их скопировать. Я не понимаю что поставить в строке Dim destDictId1 As ObjectId = destDb1.MLeaderStyleDictionaryId
Или вообще идея не правильная

Код - vb.net [Выбрать]
  1. Dim sourceFileName As String = Path.Combine(NameFullPatch, NameFile)
  2.         Dim sourceDb As Database = New Database(False, True)
  3.         sourceDb.ReadDwgFile(sourceFileName, FileShare.Read, True, String.Empty)
  4.         Dim sourceTr As Transaction = sourceDb.TransactionManager.StartTransaction()
  5.         Using sourceTr
  6.             Dim sourceBtr As BlockTableRecord = sourceTr.GetObject(sourceDb.CurrentSpaceId, OpenMode.ForRead, False)
  7.             For Each id As ObjectId In sourceBtr
  8.                 Dim ent As Autodesk.AutoCAD.DatabaseServices.Entity = sourceTr.GetObject(id, OpenMode.ForRead, False) 'открываем объект на чтение
  9.                 If ent.Handle.ToString Like StrHandle Then
  10.                     Dim acDoc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
  11.                     Dim destDb1 As Database = acDoc.Database
  12.                     Dim destDictId1 As ObjectId = destDb1.[color=orange]MLeaderStyleDictionaryId[/color]
  13.                     Dim setIds As ObjectIdCollection = Autodesk.Aec.PropertyData.DatabaseServices.PropertyDataServices.GetPropertySets(ent)
  14.                     Dim ObjColID As ObjectIdCollection = New ObjectIdCollection
  15.                     For Each psId As ObjectId In setIds
  16.                         ObjColID.Add(psId)
  17.                     Next
  18.                     Dim iMap1 As IdMapping = New IdMapping()
  19.                     destDb1.WblockCloneObjects(ObjColID, destDictId1, iMap1, DuplicateRecordCloning.Replace, False)
  20.                     Exit For
  21.                 End If
  22.             Next
  23.             sourceTr.Commit()
  24.         End Using

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 12967
  • Карма: 1666
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Копирование PropertySet
« Ответ #1 : 28-07-2021, 16:32:57 »
destDb1.MLeaderStyleDictionaryId
А это причем здесь?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 102
  • Карма: 1
Re: Копирование PropertySet
« Ответ #2 : 28-07-2021, 17:16:32 »
Да вообще не причем, я и прошу помочь, что вместо этой строчки написать, не могу разобраться

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 12967
  • Карма: 1666
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Копирование PropertySet
« Ответ #3 : 28-07-2021, 18:07:55 »
PropertySets Definitions содержатся в словаре "AEC_PROPERTY_SET_DEFS" в NOD (т.е. в словаре, у которого ObjectId равен Database.NamedObjectsDictionaryId). Теоретически их можно скопировать с помощью WblockCloneObjects. Но я совсем не уверен, что копирование будет корректным. Вообще WblockCloneObjects хорошо работает только с объектами AutoCAD, но не с объектами вертикальных приложений.
Попробуй метод Autodesk.Aec.ApplicationServices.Utility.CloningHelper(). Он описан здесь: https://adndevblog.typepad.com/aec/2012/08/importexport-styles-fromto-another-drawing-in-net-.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 102
  • Карма: 1
Re: Копирование PropertySet
« Ответ #4 : 06-08-2021, 15:46:26 »
Александр подскажите пожалуйста, как мне rxClass определить?
Код - vb.net [Выбрать]
  1. helpme.Clone(sourceDb, destDb1, setIds, dictStyle.RecordType, True)
dictStyle.RecordType - что мне подставить для PropertySet?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 12967
  • Карма: 1666
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Копирование PropertySet
« Ответ #5 : 06-08-2021, 16:15:45 »
dictStyle.RecordType - что мне подставить для PropertySet?
Думаю что:
Код - C# [Выбрать]
  1. RXClass.GetClass(typeof(/*Autodesk.Aec.PropertyData.DatabaseServices.*/ PropertySet));
Код - vb.net [Выбрать]
  1. RXClass.GetClass(GetType(Autodesk.Aec.PropertyData.DatabaseServices.PropertySet))
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 12967
  • Карма: 1666
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Копирование PropertySet
« Ответ #6 : 06-08-2021, 16:51:20 »
Впрочем возможно нужно с PropertySetDefinition, а не c PropertySet
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 102
  • Карма: 1
Re: Копирование PropertySet
« Ответ #7 : 06-08-2021, 16:54:12 »
Спасибо, вроде в первом приближении работает

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 12967
  • Карма: 1666
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Копирование PropertySet
« Ответ #8 : 06-08-2021, 16:56:05 »
Захаров Максим,
Было бы очень неплохо, если бы ты привёл кусок кода - как пример для тех, кто будет искать решение аналогичной задачи.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Захаров МаксимАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 102
  • Карма: 1
Re: Копирование PropertySet
« Ответ #9 : 06-08-2021, 16:59:56 »
Да конечно, только надо еще по тестить, и напишу