eInvalidExtents RealDWG

Автор Тема: eInvalidExtents RealDWG  (Прочитано 9083 раз)

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

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

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
eInvalidExtents RealDWG
« : 04-01-2017, 12:49:32 »
Всем привет!!!
С наступившим 2017 годом!
Желаю всем добра, успехов и благополучия во всем!

Устал от выходных. Сегодня уже решил поработать.
Вот столкнулся с такой проблемкой.
Когда я открываю базу чертежа через функцию Database.ReadDwgFile(...)
то чтение свойства (Entity as DbText).GeometricExtents выдает исключение eInvalidExtents.

У меня такое подозрение, что свойство GeometricExtents
связано с контекстом графического устройства (hDC),
а т.к. база просто читается, а сам dwg-файл не загружается
в графическую среду AutoCAD, то и свойство не может быть возвращено.

метод открытия базы
Код - vb.net [Выбрать]
  1.     Public Function OPEN_DATABASE(dwgFileName As String) As Database
  2.         Dim db As Database = Nothing
  3.         Dim acadHost As New DwgHost
  4.         Try
  5.             db = New Database
  6.         Catch ex As Exception
  7.             Return Nothing
  8.         End Try
  9.         HostApplicationServices.WorkingDatabase = db
  10.         Try
  11.             db.ReadDwgFile(dwgFileName, IO.FileShare.ReadWrite, False, Nothing)
  12.             Return db
  13.         Catch ex As System.Exception
  14.             MsgBox("Не могу прочесть данные из файла " & dwgFileName & vbCr & ex.Message)
  15.             db.Dispose()
  16.             Return Nothing
  17.         End Try
  18.     End Function
  19.  
  20.     Public Class DwgHost
  21.         Inherits HostApplicationServices
  22.         Public Sub New()
  23.             RuntimeSystem.Initialize(Me, 1033)
  24.         End Sub
  25.         Protected Overrides Sub Finalize()
  26.             RuntimeSystem.Terminate()
  27.             MyBase.Finalize()
  28.         End Sub
  29.         Public Overrides Function FindFile(fileName As String, _
  30.                                            database As CAD_DBS.Database, _
  31.                                            hint As CAD_DBS.FindFileHint) As String
  32.             Return ""
  33.         End Function
  34.     End Class


метод чтения таблицы примитивов:
Код - C# [Выбрать]
  1.         static void acadnet_load_Texts(Database db) {
  2.             if (db != null)  {
  3.                 using (Transaction tr = db.TransactionManager.StartTransaction())  {
  4.                     BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
  5.                     BlockTableRecord ms = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  6.                     BlockTableRecordEnumerator enu = ms.GetEnumerator();
  7.                     enu.Reset();
  8.                     while (enu.MoveNext()) {
  9.                         DBObject obj = tr.GetObject(enu.Current, OpenMode.ForWrite);
  10.                         if (obj is DBText) {
  11.                             Extents3d Ext3d = (obj as DBText).GeometricExtents; // В этой строке исключение eInvalidExtents
  12.                         }
  13.                     }
  14.                     tr.Commit();
  15.                 }
  16.             }
  17.         }

Тестовая команда
Код - vb.net [Выбрать]
  1. <CommandMethod("TXT_LOAD")> _
  2.         Public Sub COMM_DWG_LOAD()
  3.             Dim db As Database = OPEN_DATABASE("C:\File.dwg")
  4.             If db IsNot Nothing Then
  5.                 acadnet_load_Texts(db)
  6.            End If
  7.         End Sub


« Последнее редактирование: 04-01-2017, 15:22:05 от Алексей (IdeaSoft) »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: eInvalidExtents RealDWG
« Ответ #1 : 04-01-2017, 13:59:52 »
Такое исключение возникает для пустых текстов, определений атрибутов (они наследники DBText), атрибутов блоков. Проверь тоже самое в AutoCAD - думаю, что будет тоже самое исключение.
« Последнее редактирование: 04-01-2017, 16:53:56 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: eInvalidExtents RealDWG
« Ответ #2 : 04-01-2017, 14:25:36 »
Такое исключение возникает для пустых текстов, определений атрибутов (они наследники DBText), атрибутов блоков. Проверь тоже самое в AutoCAD - думаю, что будет тоже самое исключение.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: eInvalidExtents RealDWG
« Ответ #3 : 04-01-2017, 14:27:34 »
возникает для пустых текстов

В том то и дело, что я проверил текст не пустой.
А если файл открыт в среде AutoCAD такого исключения
не возникает всех работает хорошо.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: eInvalidExtents RealDWG
« Ответ #4 : 04-01-2017, 16:53:16 »
А если файл открыт в среде AutoCAD такого исключения
не возникает всех работает хорошо.
Я имел в виду не открывать в редакторе AutoCAD, а также, как и в RealDWG, открыть в AutoCAD через Database.ReadDwgFile.
P.S.: У меня нет лицензии RealDWG, поэтому с ним я помочь не смогу и тебе придётся или создавать case в ADN DevHelp и писать в Tech Soft 3D (http://www.techsoft3d.com/)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: eInvalidExtents RealDWG
« Ответ #5 : 04-01-2017, 17:11:07 »
Кстати, вместо метода GeometricExtents можешь попробовать метод Bounds.

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Александр Ривилис 05-01-2017, 18:08:01

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: eInvalidExtents RealDWG
« Ответ #6 : 04-01-2017, 17:20:21 »
У меня такое подозрение, что свойство GeometricExtents
связано с контекстом графического устройства (hDC),
а т.к. база просто читается, а сам dwg-файл не загружается
в графическую среду AutoCAD, то и свойство не может быть возвращено.
Возможно, хотя и маловероятно. Скорее другое - ненаходится файл шрифта. В AutoCAD бывает аналогичная ситуация. Возможно если ты переопределишь для DwgHost метод FindFile так, чтобы он мог возвращать путь к файлу шрифта, а не пустую строку, то это может помочь.
Пример DwgHost: http://adndevblog.typepad.com/autocad/2012/05/fentons-recommended-hostapplicationservices-implementation-for-realdwg-net.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: eInvalidExtents RealDWG
« Ответ #7 : 05-01-2017, 11:17:19 »
Я еще обратил внимание на то что для в оном файле работает хорошо,
а в другом - с ошибкой.
Буду разбираться дальше.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: eInvalidExtents RealDWG
« Ответ #8 : 05-01-2017, 11:21:30 »
Скорее другое - ненаходится файл шрифта
Да, действительно не найден файл шрифта RUSSIAN_1251.shx
Сейчас попробую заменить другим шрифтом или или вставить файл шрифта в папку ..\Fonts

Функция
public SizeF MeasureString(string text, Font font)
Связанна же со шрифтом.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: eInvalidExtents RealDWG
« Ответ #9 : 05-01-2017, 11:59:43 »
Спасибо, действительно причина была в шрифте.
После того как добавил шрифт. Все заработало.


Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: eInvalidExtents RealDWG
« Ответ #10 : 05-01-2017, 12:11:43 »
Только мне нужно было по такой схеме тестовую команду TXT_LOAD сделать

Код - C# [Выбрать]
  1.     // 1) Запомнить текущую базу активного документа
  2.     Database old_db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
  3.      // 2) создать базу и присвоить ее рабочей    
  4.     Database db = new Database();
  5.     HostApplicationServices.WorkingDatabase = db;
  6.     // 3) открыть базу    
  7.     db.ReadDwgFile(...);
  8.     // 4) ... поработать с ней
  9.     db.Dispose();
  10.     // 5) Вернуть обратно
  11.     HostApplicationServices.WorkingDatabase = old_db;

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: eInvalidExtents RealDWG
« Ответ #11 : 05-01-2017, 18:07:35 »
Спасибо, действительно причина была в шрифте.
После того как добавил шрифт. Все заработало.
Так и отметим.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: eInvalidExtents RealDWG
« Ответ #12 : 08-01-2017, 03:09:39 »
В продолжение этой темы. У меня такой Вопрос.
Шрифт RUSSIAN_1251.shx в папку c:\windows\Fonts устанавливается конечно же не будет.

А есть ли аналог этого шрифта для ОС Windows?