swGenericSaveError при использовании SolidWorks API для сохранения сборки как детали (C ++)

Я пытаюсь использовать реализацию API C ++ для сохранения сборки (.SLDASM) как документа детали (.SLDPRT), но я продолжаю получать swGenericSaveError.

Используя следующий код:

void guardarModelo()
{
//Guardar como part
wchar_t exportedfilename[MAX_PATH], assemblyname[MAX_PATH], *pext, *pname;
long error = 0, warning = 0;
VARIANT_BOOL result = 0;
CComPtr<IModelDocExtension> swExtension; //Extension (formato de fichero)
swUserPreferenceIntegerValue_e part = swSaveAssemblyAsPartOptions; //Opciones de part

//Arreglamos la extension y la ubicacion del fichero
wcscpy(exportedfilename, filename);
pext = wcsrchr(exportedfilename, L'\\') + 1;
wcscpy(pext, L"-modelo\\");
CreateDirectory(exportedfilename, NULL);

wcscpy(assemblyname, filename);
pname = wcsrchr(assemblyname, L'\\') + 1;
pext = wcsrchr(assemblyname, L'.');
wcsncpy(pext, L".SLDPRT\0", 8);
wcscat(exportedfilename, pname);

CComBSTR sFileName(exportedfilename);

swModel->get_Extension(&swExtension);

//swApp->SetUserPreferenceIntegerValue(part, swSaveAsmAsPart_AllComponents, &result);
swExtension->SetUserPreferenceInteger(swSaveAssemblyAsPartOptions, swDetailingNoOptionSpecified, swSaveAsmAsPart_AllComponents, &result);

swExtension->SaveAs(sFileName, swSaveAsCurrentVersion, swSaveAsOptions_Silent, NULL, &error, &warning, &result);

if (error == 0)
wcout << "Modelo completo guardado como part." << endl;
else
wcout << "ERROR " << error << " guardando modelo completo como part." << endl;

}

Код работает нормально при экспорте сборки в двоичный файл Parasolid (.x_b):

void exportarModelo()
{
//Exportar a parasolid
wchar_t exportedfilename[MAX_PATH], assemblyname[MAX_PATH], *pext, *pname;
long error = 0, warning = 0;
VARIANT_BOOL result = 0;
CComPtr<IModelDocExtension> swExtension; //Extension (formato de fichero)
swUserPreferenceIntegerValue_e parasolid = swParasolidOutputVersion; //Opciones de Parasolid//Arreglamos la extension y la ubicacion del fichero
wcscpy(exportedfilename, filename);
pext = wcsrchr(exportedfilename, L'\\') + 1;
wcscpy(pext, L"-modelo\\");
CreateDirectory(exportedfilename, NULL);wcscpy(assemblyname, filename);
pname = wcsrchr(assemblyname, L'\\') + 1;
pext = wcsrchr(assemblyname, L'.');
wcsncpy(pext, L".x_b\0", 5);
wcscat(exportedfilename, pname);CComBSTR sFileName(exportedfilename);

swModel->get_Extension(&swExtension);//Elegir version de Parasolid y guardar
swApp->SetUserPreferenceIntegerValue(parasolid, swParasolidOutputVersion_150, &result);swExtension->SaveAs(sFileName, swSaveAsCurrentVersion, swSaveAsOptions_Silent, NULL, &error, &warning, &result);if (error == 0)
wcout << "Modelo completo exportado a Parasolid." << endl;
else
wcout << "ERROR " << error << " exportando modelo completo a Parasolid." << endl;}

У кого-нибудь есть идеи, почему это не работает? Есть ли альтернативный способ сохранить все компоненты сборки в одном документе детали?

0

Решение

Нашел решение. Ключ должен использовать ActivateDoc3 способ активировать загруженную сборку перед сохранением документа. Это заботится о swGenericSaveError и прекрасно работает.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]