Тема: Почему при извлечения имени файла из TextStyleTableRecord даются странные результаты ?

Вроде разобрался со всем (громко сказано, ну во всяком случае с алгоритмом),написал прогу, запустил в 20 разных DWG файлах, созданых разными людьми на разных машинах, с целью проверить хоть минимально как работает. Прога производит некие дествия над содержимым. В 19 работет отменно а в 20-ом ну никак. Причем если я копирую содержимое этого файла в чистый ново-созданный, все нормально, работает. Проверил может где-то стоит kForRead вместо kForWrite, нет все вроде в норме. Может есть некие директивы которые запрещают изменение содержимого (типа только для чтения)б но тогда не понятно почему  если я произвожу изменения в "ручню" все  чудесно изменяется и файл прекрасно перезаписывается????

Re: Почему при извлечения имени файла из TextStyleTableRecord даются странные результаты ?

Draft_men пишет:

В 19 работет отменно а в 20-ом ну никак.

Это не разговор программиста с программистами, а жалобы на судьбу и желание переложить груз ответственности с со своей программы на AutoCAD. :)
1) Что такое "ну никик"?
2) Ну так вставь отладочную печать, запусти под отладчиком и пойми что у тебя "не так".
3) Думаешь, что здесь все волшебники и должны догадаться что у тебя за программа, что она делает, и т.д.?
4) Если хочешь получить ответ - формулируй задачу четко.

Re: Почему при извлечения имени файла из TextStyleTableRecord даются странные результаты ?

Формулирую точно, вот кусок кода отвечающий за извлечения имени файла из TextStyleTableRecord:

char *GetTextStyleName(AcDbObjectId tid)
{
    Acad::ErrorStatus es;
    char *name = NULL;
    AcDbTextStyleTableRecord *pTSTR = NULL;
    if ((es = acdbOpenAcDbObject((AcDbObject *&)pTSTR,tid,AcDb::kForRead)) == Acad::eOk) {
        pTSTR->fileName(name);
        pTSTR->close();
    }
    return name;
  }

но результаты весьма странные, один раз возврвщается просто имя другой раз весь путь целиком, один раз "uppercase" другой "lowercase"???

Re: Почему при извлечения имени файла из TextStyleTableRecord даются странные результаты ?

> Draft_men
Ничего загадочного не вижу. Так как что именно возвращается в документации не описано, то возвращаться может и то и другое.
Для TrueType шрифтов в любом случае должно возвращаться имя шрифта, а не путь.

Re: Почему при извлечения имени файла из TextStyleTableRecord даются странные результаты ?

Замечательно! Вот результат:
Style name: txt.shx
Style name: hebtxt
Style name: HEBTXT.SHX
Style name: hebtxt.shx
Style name: C:\r13\com\fonts\Sivan.shx
Style name: kaved.shx
Style name: MIRYL.SHX
Style name: TECHNO_M.SHX
Style name: MIRYM.shx
Однако каким же образом я тогда могу выбирать текст который принадлежит, скажем только к hebtxt.shx, если результат не предсказуем???

Re: Почему при извлечения имени файла из TextStyleTableRecord даются странные результаты ?

> Draft_men
1) Это в одном и том же чертеже?
2) Все ли текстовые стили реально используются в этом чертеже (т.е. есть тексты, которые имеют такой текстовый стиль)?
3) Это все текстовые стили или среди них есть стили форм (т.е. AcDbTextStyleTableRecord::isShapeFile() возвращает true)?

Re: Почему при извлечения имени файла из TextStyleTableRecord даются странные результаты ?

Это все текстовые стили которые используются в одном и том же чертеже. Есть строки текста которые используют каждый из этих текстов!

Re: Почему при извлечения имени файла из TextStyleTableRecord даются странные результаты ?

Хотя я не получил ответы на все поставленные мной вопросы, продолжим.
1) Судя по всему запись: Style name: hebtxt относится к текстовому стилю, который ссылается на TrueType шрифт hebtxt
2) Записи: Style name: HEBTXT.SHX и Style name: hebtxt.shx
ссылаются на один и тот же файл шрифта, но имя задано было видимо программно в разных регистрах.
Для интереса попробуй запустить в командной строке AutoCAD команду _.-style, создай ей два текстовых стиля и задай им имя шрифта в разных регистрах - как задаш так они и сохранятся в записи таблицы стилей.
3) Style name: C:\r13\com\fonts\Sivan.shx - судя по всему этот шрифт не лежит в путях доступа AutoCAD и был задан полный путь к нему.
Кроме того сильно подозреваю, что этот чертеж изначально был создан в одной из версий AutoCAD до R14.

Re: Почему при извлечения имени файла из TextStyleTableRecord даются странные результаты ?

> Александр Ривилис
Ответы:
1) что да - то да, совершенно верно, как это не странно, есть такой TrueType с таким же именем!
2) Точно, абсолютно!!!
3) Еще не выяснил, но полагаю что так оно и было!

Re: Почему при извлечения имени файла из TextStyleTableRecord даются странные результаты ?

> Draft_men
Как видишь ничего загадочного нет. :)