Анализ небольшой части кода

Автор Тема: Анализ небольшой части кода  (Прочитано 6781 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн xMICROFONxАвтор темы

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
День добрый. Пытаюсь перевести проект VBA на .net, привожу часть кода (смысл прост, создаем блок "Obrazec" и добавляем его в определение вновь созданного блока "Scvajina").Прошу помощи в решении проблемы ) А так же буду премного благодарен  если подскажете как при определении блока задать базовую точку (точку вставки).В VBA было нечто похожее на : "Set blockObj = ThisDrawing.Blocks.Add(insertionPnt, "Obrazec")".
 
Код - vb.net [Выбрать]
  1. Public Sub RectangleAndSolid()
  2.  
  3.         Dim Doc As Document = Application.DocumentManager.MdiActiveDocument
  4.         Dim CurDb As Database = Doc.Database
  5.  
  6.         Using Trans As Transaction = CurDb.TransactionManager.StartTransaction()
  7.             Dim BlockObj As BlockTableRecord = New BlockTableRecord
  8.             BlockObj.Name = "Obrazec"
  9.             Dim blockTable As BlockTable = Trans.GetObject(CurDb.BlockTableId, OpenMode.ForRead)
  10.  
  11.             If (blockTable.Has("Obrazec")) = False Then
  12.                 With blockTable
  13.                     .UpgradeOpen()
  14.                     .Add(BlockObj)
  15.                 End With
  16.                 Trans.AddNewlyCreatedDBObject(BlockObj, True)
  17.                 Dim SolidObj As Solid = New Solid(New Point3d(0, 2, 0), New Point3d(2, 2, 0), New Point3d(0, 0, 0), New Point3d(2, 0, 0))
  18.                 BlockObj.AppendEntity(SolidObj)
  19.                 Trans.AddNewlyCreatedDBObject(SolidObj, True)
  20.             End If
  21.             ' ....................................................
  22.             Trans.Commit()
  23.         End Using
  24.     End Sub
  25.  
  26.     Public Sub VstBk()
  27.         Dim Doc As Document = Application.DocumentManager.MdiActiveDocument
  28.         Dim CurDb As Database = Doc.Database
  29.         Dim PointP(0 To 2) As Double
  30.  
  31.         Using Trans As Transaction = CurDb.TransactionManager.StartTransaction()
  32.             Dim KolBlock As BlockTableRecord = New BlockTableRecord
  33.             KolBlock.Name = "Scvajina"
  34.             Dim blockTable As BlockTable = Trans.GetObject(CurDb.BlockTableId, OpenMode.ForWrite)
  35.             blockTable.Add(KolBlock)
  36.             Trans.AddNewlyCreatedDBObject(KolBlock, True)
  37.  
  38.             PointP(0) = PointP(0) + 2
  39.             PointP(1) = 0 - PointP(1) * 10
  40.             PointP(2) = 0
  41.  
  42.             Dim BlockObj As BlockTableRecord = New BlockTableRecord
  43.             BlockObj.Name = "Obrazec"
  44.             Dim blockRef As BlockReference = New BlockReference(New Point3d(PointP), BlockObj.ObjectId)
  45.             BlockObj.AppendEntity(blockRef)
  46.             Trans.AddNewlyCreatedDBObject(blockRef, True)
  47.  
  48.             Trans.Commit()
  49.         End Using
  50.     End Sub
« Последнее редактирование: 08-05-2017, 20:49:28 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Анализ небольшой части кода
« Ответ #1 : 08-05-2017, 20:50:44 »
xMICROFONx,
Приветствую на форуме!
Обрати внимание на то, как следует форматировать код на нашем форуме (указано у меня в подписи).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Анализ небольшой части кода
« Ответ #2 : 08-05-2017, 20:59:51 »
А так же буду премного благодарен  если подскажете как при определении блока задать базовую точку (точку вставки).В VBA было нечто похожее на : "Set blockObj = ThisDrawing.Blocks.Add(insertionPnt, "Obrazec")".
 
Задаётся при помощи свойства Origin, т.е. BlockTableRecord.Origin
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн xMICROFONxАвтор темы

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Re: Анализ небольшой части кода
« Ответ #3 : 08-05-2017, 21:09:24 »
Александр Ривилис,  За базовую точку спасибо, все работает. Форматирование учту... ) Осталось разобраться что напутано с транзакциями и таблицами блоков...

Отмечено как Решение xMICROFONx 08-05-2017, 21:52:27

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Анализ небольшой части кода
« Ответ #4 : 08-05-2017, 21:26:08 »
Ошибка в этих строках:
Код - vb.net [Выбрать]
  1.             Dim BlockObj As BlockTableRecord = New BlockTableRecord
  2.             BlockObj.Name = "Obrazec"
  3.             Dim blockRef As BlockReference = New BlockReference(New Point3d(PointP), BlockObj.ObjectId)
  4.             BlockObj.AppendEntity(blockRef)
Здесь нужно не новую BlockTableRecord создавать, а найти BlockTableRecord, которая соответствует имени "Obrazec"
Т.е.:
Код - vb.net [Выбрать]
  1. Dim blockRef As BlockReference = New BlockReference(New Point3d(PointP), blockTable("Obrazec"))
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн xMICROFONxАвтор темы

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Re: Анализ небольшой части кода
« Ответ #5 : 08-05-2017, 21:52:20 »
Александр Ривилис,  Спасибо за ответ, проблема решена.