Вставка блока с помощью .NET не использует пути поиска файлов для поиска файлов - PullRequest
0 голосов
/ 19 июня 2019

В этой папке определены два блока:

D: \ Мои документы \ My AutoCAD \ Blocks

Блоки:

  • COORD_CROSS.DWG
  • COORD2D.DWG

В Autocad путь поиска файлов задается следующим образом:

Files Search Path

Blocks

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

Тем не менее, я обнаружил, что с .NET я должен префикс пути.Например:

if (!acBlkTbl.Has("COORD2D"))
{
    _AcDb.Database blkDb = new _AcDb.Database(false, true);
    blkDb.ReadDwgFile("D:\\My Documents\\My AutoCAD\\Blocks\\COORD2D" + ".DWG", 
                     System.IO.FileShare.Read, true, "");
    acCurDb.Insert("COORD2D", blkDb, true);
}
blkRecId = acBlkTbl["COORD2D"];

Я не хочу указывать путь.Я хочу, чтобы он нашел его, потому что он находится в поддерживаемых путях поиска.Так какой шаг я пропускаю?

1 Ответ

1 голос
/ 19 июня 2019

Я нашел эту полезную ссылку .Это было для VB, но я смог принять принцип:

if (!acBlkTbl.Has("COORD2D"))
{
    _AcDb.Database blkDb = new _AcDb.Database(false, true);
    string blockPath = _AcDb.HostApplicationServices.Current.FindFile("COORD2D.DWG",
                            acCurDb, _AcDb.FindFileHint.Default);
    blkDb.ReadDwgFile(blockPath, System.IO.FileShare.Read, true, "");
    acCurDb.Insert("COORD2D", blkDb, true);
}
blkRecId = acBlkTbl["COORD2D"];

Мне пришлось использовать команду FindFile.


Sidenote

Один из ответов здесь гласит:

AcDbDatabase::readDwgFile() ожидает, что аргумент имени файла будет полным путем. не выполняет поиск по любым путям поиска, чтобы найти файл.

Используйте AcDbHostApplicationServices::findFile(), чтобы найти файл и получить полный путь перед вызовом readDwgFile().

...