Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Phil от 08-07-2019, 09:12:36

Название: Выбор файлового фильтра по умолчанию для метода GetFileForSave
Отправлено: Phil от 08-07-2019, 09:12:36
Доброго времени суток! Использую метод GetFileForSave для запроса имени сохраняемого файла. Предлагаю сохранение в двух форматах: dwg и dxf. Мне нужно что бы по умолчанию диалоговое окно, вызываемое методом использовало всегда формат dwg. Однако оно запоминает последний выбранный фильтр и при следующем вызове использует его. Установка индекса фильтра перед вызовом метода игнорируется. Как побороть такое поведение метода?

Код - vb.net [Выбрать]
  1.         '' Определение локальных постоянных и переменных
  2.         Const acACAD2000 As String = "AutoCAD 2000/LT2000"
  3.         Const acDwgFilter As String = "Чертеж " & acACAD2000 & " (*.dwg)|*.dwg"
  4.         Const acDxfFilter As String = acACAD2000 & " DXF (*.dxf)|*.dxf"
  5.  
  6.         '' Определение параметров запроса ИМЕНИ ФАЙЛА
  7.         Dim prmtFileNameRes As PromptFileNameResult
  8.         Dim prmtFileNameOpt As PromptSaveFileOptions = New PromptSaveFileOptions("")
  9.  
  10.         prmtFileNameOpt.AllowUrls = False
  11.         prmtFileNameOpt.Message = "Укажите имя экспортного файла"
  12.         prmtFileNameOpt.Filter = acDwgFilter & "|" & acDxfFilter
  13.         prmtFileNameOpt.FilterIndex = 0
  14.         prmtFileNameOpt.InitialFileName = acExportFullName
  15.  
  16.         '' Запрос имени файла
  17.         prmtFileNameRes = acEditor.GetFileNameForSave(prmtFileNameOpt)
Название: Re: Выбор файлового фильтра по умолчанию для метода GetFileForSave
Отправлено: Дмитрий Загорулькин от 08-07-2019, 13:53:17
Это такая особенность данного инструмента. В "родных" командах AutoCAD оно ведёт себя точно так же. Как кардинальное решение - можно использовать другой диалог получения файла для сохранения, например из Windows Forms (https://docs.microsoft.com/ru-ru/dotnet/api/system.windows.forms.savefiledialog?view=netframework-4.8).
Название: Re: Выбор файлового фильтра по умолчанию для метода GetFileForSave
Отправлено: Дмитрий Загорулькин от 08-07-2019, 14:02:38
А вообще, подозреваю, что можно этим управлять, если изменять значение в реестре. Думаю, что это где-то тут:
HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\RXX.X\ACAD-XXXX:XXX\Profiles\<<[PROFILENAME]>>\Dialogs\Сохранение чертежа
Название: Re: Выбор файлового фильтра по умолчанию для метода GetFileForSave
Отправлено: Привалов Дмитрий от 08-07-2019, 15:48:34
Установка индекса фильтра перед вызовом метода игнорируется. Как побороть такое поведение метода?
Ради эксперимента попробуй:
1. сначала установить InitialFileName, а затем Filter и FilterIndex. Иногда порядок свойств и методов имеет значение.
2. в InitialFileName передай имя с расширением файла "xxx.dwg" вдруг реагирует.
3. попробуй вариант строки фильтра, без FilterIndex с https://www.keanw.com/2009/10/implementing-a-quick-saveas-command-in-autocad-using-net.html (https://www.keanw.com/2009/10/implementing-a-quick-saveas-command-in-autocad-using-net.html)
 opts.Filter = "Drawing (*.dwg)|*.dwg"
 может (*.dwg) указывает на значение по умолчанию

Название: Re: Выбор файлового фильтра по умолчанию для метода GetFileForSave
Отправлено: Привалов Дмитрий от 08-07-2019, 16:10:38
opts.Filter = "Drawing (*.dwg)|*.dwg"
Вот еще пример.  http://www.arch-pub.com/QSAVE_10624689.html

PromptSaveFileOptions opts = new PromptSaveFileOptions("Save Drawing As");
opts.Filter = "Drawing (*.dwg)";
PromptFileNameResult pr = ed.GetFileNameForSave(opts);

Возможно "Drawing (*.dwg)" указывает значение по умолчанию, а "|*.dwg|*.dxf" добавляет выбор расширений.
Название: Re: Выбор файлового фильтра по умолчанию для метода GetFileForSave
Отправлено: Phil от 09-07-2019, 08:52:24
1. сначала установить InitialFileName, а затем Filter и FilterIndex. Иногда порядок свойств и методов имеет значение.
2. в InitialFileName передай имя с расширением файла "xxx.dwg" вдруг реагирует.
В данном случае, к сожалению, порядок значения не имеет...

Возможно "Drawing (*.dwg)" указывает значение по умолчанию, а "|*.dwg|*.dxf" добавляет выбор расширений.
В том то и дело, что выскакивает последний использованный фильтр. Причем, он запоминает не использованное расширение, а именно индекс последнего использованного расширения в списке фильтров (а не само расширение).
Строка "Drawing (*.dwg)" задает лишь название фильтра в списке фильтров, сам фильтр идет следующей позицией через разделитель "|". Значение по умолчанию здесь не задается. В Windows.Forms оно задается специальным свойством DefaultExt. В данном же методе, к сожалению, такое свойство недоступно.