Перейти к публикации

Запись свойст компонентов сборки


hztp_serg

Рекомендованные сообщения

Как средствами SW Api имея ссылку на сборку, Path компоненты и имя конфигурации найти этот компонент и поменять значение нужного нам свойства, например "Наименование"? Натолкните на мысль.

Бльошое спасибо!

Ссылка на сообщение
Поделиться на других сайтах


Натолкнуть - это просто...

Берёте макрос по записи свойств (либо найти по Поиску, либо в теме "<noindex>Сделай свою работу в Solidworks эффективнее</noindex>") и начинаете его потрошить....

Ссылка на сообщение
Поделиться на других сайтах

Как средствами SW Api имея ссылку на сборку, Path компоненты и имя конфигурации найти этот компонент и поменять значение нужного нам свойства, например "Наименование"? Натолкните на мысль.

Бльошое спасибо!

C#

private static void AddProperties(IComponent2 pComponent)

		{

			object[] objChildren = (object[])pComponent.GetChildren();

			int length = objChildren.Length;

			string strFildName = "Наименование";

			for (int i = 0; i < length; i++)

			{

				IComponent2 swComponent = (IComponent2)objChildren[i];

				string strNameConfig = swComponent.ReferencedConfiguration;

				IModelDoc2 swModel = swComponent.IGetModelDoc();

				IModelDocExtension swModelExt = swModel.Extension;

				ICustomPropertyManager swPrpMgr = swModelExt.get_CustomPropertyManager(strNameConfig);

				object[] objNames = (object[])swPrpMgr.GetNames();

				if (objNames == null)

					swPrpMgr.Add2(strFildName, (int)swCustomInfoType_e.swCustomInfoText, "QQ");



				bool bres = false;

				for (int j = 0; j < objNames.Length; j++)

				{

					string strFildTemp = (string)objNames[j];

					if(strFildTemp.ToLower().Equals(strFildName))

					{

						bres = true;

						break;

					}

				}

				if(bres)

					swPrpMgr.Set(strFildName, "QQ"); // меняем

				else

					swPrpMgr.Add2(strFildName, (int)swCustomInfoType_e.swCustomInfoText, "QQ");// добавляем, если нет такого свойства



				int iSaveError = (int)swFileSaveError_e.swGenericSaveError;

				int iSaveWarning = (int)swFileSaveWarning_e.swFileSaveWarning_RebuildError;

				bres = swModel.Save3((int)swSaveAsOptions_e.swSaveAsOptions_Silent, ref iSaveError, ref iSaveWarning);	

				

			}

		}
C++ addins к SW (dll)

STDMETHODIMP CAddPrp::MenuCallback(void)

{

	HRESULT hres;

	IModelDoc2 *swModel = NULL;

	hres = iSwApp->get_IActiveDoc2(&swModel);

	if(swModel == NULL)

		return S_FALSE;

	long docType;

	hres = swModel->GetType(&docType);

	if(docType != swDocASSEMBLY)

		return S_FALSE;

	IConfiguration *swConfigAsm = NULL;

	hres = swModel->IGetActiveConfiguration(&swConfigAsm);

	

	IComponent2 *swRootComponent = NULL;

	hres = swConfigAsm->IGetRootComponent2(&swRootComponent);

	

	int count;

	hres = swRootComponent->IGetChildrenCount(&count);

	IComponent2 **pArrComp = new IComponent2*[count];

	ZeroMemory(pArrComp, count * sizeof(IComponent2*));

	hres = swRootComponent->IGetChildren(pArrComp);

	for(int i = 0; i < count; i++)

	{

		IComponent2 *swComponent = pArrComp[i];

		if(swComponent == NULL)

			continue;

		BSTR bstrConfigName; // имя конфигурации, для закладки Configuration Specif в свойствах модели. Для закладки Custom должна быть пустая строка

		hres = swComponent->get_ReferencedConfiguration(&bstrConfigName);

		IModelDoc2 *swModelComp = NULL;

		hres = swComponent->IGetModelDoc(&swModelComp); // получаем указатель на модель компонента

		IModelDocExtension *swModelExt = NULL;

		hres = swModelComp->get_Extension(&swModelExt);

		

		ICustomPropertyManager *swPrpMgr = NULL;

		//bstrConfigName = L""; вариант для закладки Custom (пустая строка)

		hres = swModelExt->get_CustomPropertyManager(bstrConfigName, &swPrpMgr);

		BSTR fieldName = L"ASD"; // наименование вашего свойства;

		

		long countPrp;

		hres = swPrpMgr->get_Count(&countPrp);

		BSTR *pNames = new BSTR[countPrp];

		hres = swPrpMgr->IGetNames(countPrp, pNames);

			bool bres = false;

		

		// циклом проверяем, существует ли уже такое свойство в модели	

		for(int j = 0; j < countPrp; j++)

		{

			BSTR bstrName = pNames[j];

			int compare = wcscmp(bstrName, fieldName);

			if(compare == 0)

			{

				bres = true;

				break;

			}

		}

		long lres;

		VARIANT_BOOL bresult;

		if(bres)

		{

			// если свойство уже есть, то меняем значение его

			BSTR valueRes = L"QQQWW";

			hres = swPrpMgr->Set(fieldName, valueRes, &lres); // присваиваем свойству новое значение			

		}

		else

		{

		// если нет нужного свойства то добавляем его						

			BSTR valueRes = L"QQQWW";

			hres = swPrpMgr->Add2(fieldName, swCustomInfoText, valueRes, &lres);

		}

		

		// обязательный вызов функции Save3, иначе при сохранении сборки, свойства в модели могут быть не сохранены	

		long lErrors, lWarnings;

		hres = swModelComp->Save3(swSaveAsOptions_Silent, &lErrors, &lWarnings, &bresult);

		delete[] pNames;

	}

	

	return S_OK;

}
Ссылка на сообщение
Поделиться на других сайтах

У меня почему-то выполнение строки

hres = swModelExt->get_CustomPropertyManager(bstrConfigName, &swPrpMgr);
выдаёт ошибку

get_CustomPropertyManager: не является членом "SldWorks::IModelDocExtension"
поискал в help-е, тоже такой функции нет. Может это от вресии зависит, у меня SW2009 sp4.1?
Ссылка на сообщение
Поделиться на других сайтах

У меня почему-то выполнение строки

hres = swModelExt->get_CustomPropertyManager(bstrConfigName, &swPrpMgr);
выдаёт ошибку

get_CustomPropertyManager: не является членом "SldWorks::IModelDocExtension"
поискал в help-е, тоже такой функции нет. Может это от вресии зависит, у меня SW2009 sp4.1?

Это из справки для SW2008. Для COM-интерфейса удобнее пользоваться ей, кроме новых функций. Начиная с SW2009 и далее Help для API заточен под .NET

Syntax (OLE Automation)



Retval = ModelDocExtension.CustomPropertyManager ( ConfigName ) (VB Get property)



Retval = ModelDocExtension.GetCustomPropertyManager ( ConfigName ) (C++ Get property)



Input:

 (BSTR) ConfigName

 Name of configuration

 

Output:

 (LPCUSTOMPROPERTYMANAGER) Retval

 



Syntax (COM)



status = ModelDocExtension->get_CustomPropertyManager ( ConfigName, &Retval )



Input:

 (BSTR) ConfigName

 Name of configuration

 

Output:

 (LPCUSTOMPROPERTYMANAGER) Retval

 Pointer to CustomPropertyManager object

 

Return:

 (HRESULT) status

 S_OK if successful
В SW2009SP3.0 эта функция работает. Про четвертый сервис пак, ничего сказать не могу.
Ссылка на сообщение
Поделиться на других сайтах

В SW2009SP3.0 эта функция работает. Про четвертый сервис пак, ничего сказать не могу.

Да, в версии SW2009 SP4.1, интерфейс IModelDocExtension уже не содержит метод GetCustomPropertyManager. Почему они так сделали? Надо искать новые варианты решения.

Интерфейс IModelDocExtension в версии SW2009 SP4.1

IModelDocExtension : IDispatch

{

	//

	// Raw methods provided by interface

	//



	  virtual HRESULT __stdcall get_Document (

		/*[out,retval]*/ struct IModelDoc2 * * ModelDoc ) = 0;

	  virtual HRESULT __stdcall GetMassProperties (

		/*[in]*/ long Accuracy,

		/*[in,out]*/ long * Status,

		/*[out,retval]*/ VARIANT * Retval ) = 0;

	  virtual HRESULT __stdcall IGetMassProperties (

		/*[in]*/ long Accuracy,

		/*[in,out]*/ long * Status,

		/*[out,retval]*/ double * MPropsData ) = 0;

	  virtual HRESULT __stdcall InsertDwgOrDxfFile (

		/*[in]*/ BSTR FileName,

		/*[out,retval]*/ VARIANT_BOOL * Retval ) = 0;

	  virtual HRESULT __stdcall PrintOut (

		/*[in]*/ long FromPage,

		/*[in]*/ long ToPage,

		/*[in]*/ long Copies,

		/*[in]*/ VARIANT_BOOL Collate,

		/*[in]*/ BSTR Printer,

		/*[in]*/ BSTR PrintFileName ) = 0;

	  virtual HRESULT __stdcall SelectByID (

		/*[in]*/ BSTR Name,

		/*[in]*/ BSTR Type,

		/*[in]*/ double X,

		/*[in]*/ double Y,

		/*[in]*/ double Z,

		/*[in]*/ VARIANT_BOOL Append,

		/*[in]*/ long Mark,

		/*[in]*/ struct ICallout * Callout,

		/*[out,retval]*/ VARIANT_BOOL * Retval ) = 0;

	  virtual HRESULT __stdcall IGet3rdPartyStorageStore (

		/*[in]*/ BSTR SubStorageName,

		/*[in]*/ VARIANT_BOOL IsStoring,

		/*[out,retval]*/ IUnknown * * Retval ) = 0;

	  virtual HRESULT __stdcall IRelease3rdPartyStorageStore (

		/*[in]*/ BSTR SubStorageName,

		/*[out,retval]*/ VARIANT_BOOL * Status ) = 0;

	  virtual HRESULT __stdcall get_UsePageSetup (

		/*[out,retval]*/ long * WhichOne ) = 0;

	  virtual HRESULT __stdcall put_UsePageSetup (

		/*[in]*/ long WhichOne ) = 0;

	  virtual HRESULT __stdcall get_AppPageSetup (

		/*[out,retval]*/ struct IPageSetup * * Retval ) = 0;

	  virtual HRESULT __stdcall GetSectionProperties (

		/*[in]*/ VARIANT Sections,

		/*[out,retval]*/ VARIANT * Retval ) = 0;

	  virtual HRESULT __stdcall IGetSectionProperties (

		/*[in]*/ long Count,

		/*[in]*/ IUnknown * * Sections,

		/*[out,retval]*/ double * Retval ) = 0;

	  virtual HRESULT __stdcall CreateMassProperty (

		/*[out,retval]*/ struct IMassProperty * * Retval ) = 0;

	  virtual HRESULT __stdcall GetCoordinateSystemTransformByName (

		/*[in]*/ BSTR NameIn,

		/*[out,retval]*/ struct IMathTransform * * Retval ) = 0;

	  virtual HRESULT __stdcall SetMaterialPropertyValues (

		/*[in]*/ VARIANT Material_property_values,

		/*[in]*/ long Config_opt,

		/*[in]*/ VARIANT Config_names ) = 0;

	  virtual HRESULT __stdcall ISetMaterialPropertyValues (

		/*[in]*/ double * Material_values,

		/*[in]*/ long Config_opt,

		/*[in]*/ long Config_count,

		/*[in]*/ BSTR * Config_names ) = 0;

	  virtual HRESULT __stdcall GetMaterialPropertyValues (

		/*[in]*/ long Config_opt,

		/*[in]*/ VARIANT Config_names,

		/*[out,retval]*/ VARIANT * Material_values ) = 0;

	  virtual HRESULT __stdcall IGetMaterialPropertyValues (

		/*[in]*/ long Config_opt,

		/*[in]*/ long Config_count,

		/*[in]*/ BSTR * Config_names,

		/*[out,retval]*/ double * Material_values ) = 0;

	  virtual HRESULT __stdcall PrintOut2 (

		/*[in]*/ VARIANT PageArray,

		/*[in]*/ long Copies,

		/*[in]*/ VARIANT_BOOL Collate,

		/*[in]*/ BSTR Printer,

		/*[in]*/ BSTR PrintFileName ) = 0;

	  virtual HRESULT __stdcall IPrintOut2 (

		/*[in]*/ long ArraySize,

		/*[in]*/ long * PageArray,

		/*[in]*/ long Copies,

		/*[in]*/ VARIANT_BOOL Collate,

		/*[in]*/ BSTR Printer,

		/*[in]*/ BSTR PrintFileName ) = 0;

	  virtual HRESULT __stdcall GetPersistReference (

		/*[in]*/ IDispatch * DispObj,

		/*[out,retval]*/ VARIANT * PersistId ) = 0;

	  virtual HRESULT __stdcall GetPersistReferenceCount (

		/*[in]*/ IDispatch * DispObj,

		/*[out,retval]*/ long * Count ) = 0;

	  virtual HRESULT __stdcall IGetPersistReference (

		/*[in]*/ IDispatch * DipsObj,

		/*[in]*/ long Count,

		/*[out,retval]*/ unsigned char * PersistId ) = 0;

	  virtual HRESULT __stdcall GetObjectByPersistReference (

		/*[in]*/ VARIANT PersistId,

		/*[out,retval]*/ IDispatch * * DispObj ) = 0;

	  virtual HRESULT __stdcall IGetObjectByPersistReference (

		/*[in]*/ long Count,

		/*[in]*/ unsigned char * PersistId,

		/*[out,retval]*/ IDispatch * * DispObj ) = 0;

	  virtual HRESULT __stdcall GetStream (

		/*[in]*/ long StreamType,

		/*[out]*/ VARIANT_BOOL * ReadOnly,

		/*[out,retval]*/ IUnknown * * DocStream ) = 0;

	  virtual HRESULT __stdcall ReleaseStream (

		/*[in]*/ long StreamType,

		/*[out,retval]*/ VARIANT_BOOL * Status ) = 0;

	  virtual HRESULT __stdcall GetLastFeatureAdded (

		/*[out,retval]*/ struct IFeature * * FeatObj ) = 0;

	  virtual HRESULT __stdcall IMultiSelect (

		/*[in]*/ long Count,

		/*[in]*/ IUnknown * * Objects,

		/*[in]*/ VARIANT_BOOL AppendFlag,

		/*[in]*/ struct ISelectData * Data,

		/*[out,retval]*/ long * Retval ) = 0;

	  virtual HRESULT __stdcall MultiSelect (

		/*[in]*/ VARIANT Objects,

		/*[in]*/ VARIANT_BOOL AppendFlag,

		/*[in]*/ IDispatch * Data,

		/*[out,retval]*/ long * Retval ) = 0;

	  virtual HRESULT __stdcall GetParameterValue (

		/*[in]*/ BSTR DimName,

		/*[in]*/ long Reserved,

		/*[out,retval]*/ double * Value ) = 0;

	  virtual HRESULT __stdcall SetParameterValue (

		/*[in]*/ BSTR DimName,

		/*[in]*/ double Value,

		/*[in]*/ long Reserved,

		/*[out,retval]*/ long * Status ) = 0;

	  virtual HRESULT __stdcall MoveOrCopy (

		/*[in]*/ VARIANT_BOOL Copy,

		/*[in]*/ long NumCopies,

		/*[in]*/ VARIANT_BOOL KeepRelations,

		/*[in]*/ double BaseX,

		/*[in]*/ double BaseY,

		/*[in]*/ double BaseZ,

		/*[in]*/ double DestX,

		/*[in]*/ double DestY,

		/*[in]*/ double DestZ ) = 0;

	  virtual HRESULT __stdcall RotateOrCopy (

		/*[in]*/ VARIANT_BOOL Copy,

		/*[in]*/ long NumCopies,

		/*[in]*/ VARIANT_BOOL KeepRelations,

		/*[in]*/ double BaseX,

		/*[in]*/ double BaseY,

		/*[in]*/ double BaseZ,

		/*[in]*/ double DestX,

		/*[in]*/ double DestY,

		/*[in]*/ double DestZ,

		/*[in]*/ double Angle ) = 0;

	  virtual HRESULT __stdcall ScaleOrCopy (

		/*[in]*/ VARIANT_BOOL Copy,

		/*[in]*/ long NumCopies,

		/*[in]*/ double BaseX,

		/*[in]*/ double BaseY,

		/*[in]*/ double BaseZ,

		/*[in]*/ double Scale ) = 0;

	  virtual HRESULT __stdcall ApplyTexture (

		/*[in]*/ long Scale,

		/*[in]*/ double Angle,

		/*[in]*/ BSTR TextureFilename,

		/*[in]*/ VARIANT_BOOL BlendColor,

		/*[out,retval]*/ VARIANT_BOOL * Status ) = 0;

	  virtual HRESULT __stdcall RemoveTexture (

		/*[out,retval]*/ VARIANT_BOOL * Status ) = 0;

	  virtual HRESULT __stdcall RemoveMaterialProperty (

		/*[in]*/ long Config_opt,

		/*[in]*/ VARIANT Config_names,

		/*[out,retval]*/ VARIANT_BOOL * Retval ) = 0;

	  virtual HRESULT __stdcall IRemoveMaterialProperty (

		/*[in]*/ long Config_opt,

		/*[in]*/ long Config_count,

		/*[in]*/ BSTR * Config_names,

		/*[out,retval]*/ VARIANT_BOOL * Retval ) = 0;

	  virtual HRESULT __stdcall RemoveModelColorizer (

		/*[in]*/ IDispatch * PInterface ) = 0;

	  virtual HRESULT __stdcall InstallModelColorizer (

		/*[in]*/ IDispatch * PInterface ) = 0;

	  virtual HRESULT __stdcall HasDesignTable (

		/*[out,retval]*/ VARIANT_BOOL * Retval ) = 0;

	  virtual HRESULT __stdcall ListExternalFileReferences (

		/*[out]*/ VARIANT * ModelPathName,

		/*[out]*/ VARIANT * ComponentPathName,

		/*[out]*/ VARIANT * Feature,

		/*[out]*/ VARIANT * DataType,

		/*[out]*/ VARIANT * Status,

		/*[out]*/ VARIANT * RefEntity,

		/*[out]*/ VARIANT * FeatCom,

		/*[out]*/ long * ConfigOption,

		/*[out]*/ BSTR * ConfigName ) = 0;

	  virtual HRESULT __stdcall ListExternalFileReferencesCount (

		/*[out,retval]*/ long * Retval ) = 0;

	  virtual HRESULT __stdcall IListExternalFileReferences (

		/*[in]*/ long NumRefs,

		/*[out]*/ BSTR * ModelPathName,

		/*[out]*/ BSTR * CompPathName,

		/*[out]*/ BSTR * Feature,

		/*[out]*/ BSTR * DataType,

		/*[out]*/ long * Status,

		/*[out]*/ BSTR * RefEntity,

		/*[out]*/ BSTR * FeatComp,

		/*[out]*/ long * ConfigOption,

		/*[out]*/ BSTR * ConfigName ) = 0;

	  virtual HRESULT __stdcall UpdateExternalFileReferences (

		/*[in]*/ long ConfigOption,

		/*[in]*/ BSTR ConfigName,

		/*[in]*/ long UpdateStatus ) = 0;

	  virtual HRESULT __stdcall get_NeedsRebuild (

		/*[out,retval]*/ VARIANT_BOOL * VbNeedsRebuild ) = 0;

	  virtual HRESULT __stdcall InsertSurfaceFinishSymbol3 (

		/*[in]*/ long SymType,

		/*[in]*/ long LeaderType,

		/*[in]*/ double LocX,

		/*[in]*/ double LocY,

		/*[in]*/ double LocZ,

		/*[in]*/ long LaySymbol,

		/*[in]*/ long ArrowType,

		/*[in]*/ BSTR MachAllowance,

		/*[in]*/ BSTR OtherVals,

		/*[in]*/ BSTR ProdMethod,

		/*[in]*/ BSTR SampleLen,

		/*[in]*/ BSTR MaxRoughness,

		/*[in]*/ BSTR MinRoughness,

		/*[in]*/ BSTR RoughnessSpacing,

		/*[out,retval]*/ struct ISFSymbol * * LpSfSymbolDisp ) = 0;

	  virtual HRESULT __stdcall InsertDatumTargetSymbol2 (

		/*[in]*/ BSTR Datum1,

		/*[in]*/ BSTR Datum2,

		/*[in]*/ BSTR Datum3,

		/*[in]*/ short AreaStyle,

		/*[in]*/ VARIANT_BOOL AreaOutside,

		/*[in]*/ double Value1,

		/*[in]*/ double Value2,

		/*[in]*/ BSTR ValueStr1,

		/*[in]*/ BSTR ValueStr2,

		/*[in]*/ VARIANT_BOOL ArrowsSmart,

		/*[in]*/ short ArrowStyle,

		/*[in]*/ short LeaderLineStyle,

		/*[in]*/ VARIANT_BOOL LeaderBent,

		/*[in]*/ VARIANT_BOOL ShowArea,

		/*[in]*/ VARIANT_BOOL ShowSymbol,

		/*[out,retval]*/ struct IDatumTargetSym * * LpDatumTargetSymDisp ) = 0;

	  virtual HRESULT __stdcall GetTexture (

		/*[in]*/ BSTR Config_name,

		/*[out,retval]*/ struct ITexture * * Retval ) = 0;

	  virtual HRESULT __stdcall SetTexture (

		/*[in]*/ BSTR Config_name,

		/*[in]*/ struct ITexture * TextureIn,

		/*[out,retval]*/ VARIANT_BOOL * Retval ) = 0;

	  virtual HRESULT __stdcall RemoveTexture2 (

		/*[in]*/ BSTR Config_name,

		/*[out,retval]*/ VARIANT_BOOL * Retval ) = 0;

	  virtual HRESULT __stdcall CreateTexture (

		/*[in]*/ BSTR MatName,

		/*[in]*/ double Scale,

		/*[in]*/ double Angle,

		/*[in]*/ VARIANT_BOOL Blend,

		/*[out,retval]*/ struct ITexture * * POut ) = 0;

	  virtual HRESULT __stdcall GetObjectByPersistReference2 (

		/*[in]*/ VARIANT PersistId,

		/*[out]*/ long * ErrorCode,

		/*[out,retval]*/ IDispatch * * DispObj ) = 0;

	  virtual HRESULT __stdcall IGetObjectByPersistReference2 (

		/*[in]*/ long Count,

		/*[in]*/ unsigned char * PersistId,

		/*[out]*/ long * ErrorCode,

		/*[out,retval]*/ IDispatch * * DispObj ) = 0;

	  virtual HRESULT __stdcall GetAnnotationCount (

		/*[out,retval]*/ long * Retval ) = 0;

	  virtual HRESULT __stdcall GetAnnotations (

		/*[out,retval]*/ VARIANT * Retval ) = 0;

	  virtual HRESULT __stdcall IGetAnnotations (

		/*[in]*/ long NumAnnotations,

		/*[out,retval]*/ struct IAnnotation * * Retval ) = 0;

	  virtual HRESULT __stdcall get_ViewDisplayRealView (

		/*[out,retval]*/ VARIANT_BOOL * VbRealView ) = 0;

	  virtual HRESULT __stdcall put_ViewDisplayRealView (

		/*[in]*/ VARIANT_BOOL VbRealView ) = 0;

	  virtual HRESULT __stdcall InsertAnnotationFavorite (

		/*[in]*/ BSTR BstrFileName,

		/*[in]*/ double X,

		/*[in]*/ double Y,

		/*[in]*/ double Z,

		/*[out,retval]*/ struct IAnnotation * * LpAnnotation ) = 0;

	  virtual HRESULT __stdcall InsertAttachment (

		/*[in]*/ BSTR FileName,

		/*[in]*/ VARIANT_BOOL Linked,

		/*[out,retval]*/ VARIANT_BOOL * Result ) = 0;

	  virtual HRESULT __stdcall DeleteAttachment (

		/*[in]*/ BSTR FileName,

		/*[out,retval]*/ VARIANT_BOOL * Result ) = 0;

	  virtual HRESULT __stdcall GetAttachmentCount (

		/*[out,retval]*/ long * Retval ) = 0;

	  virtual HRESULT __stdcall GetAttachments (

		/*[out]*/ VARIANT * LinkedVar,

		/*[out,retval]*/ VARIANT * Retval ) = 0;

	  virtual HRESULT __stdcall IGetAttachments (

		/*[in]*/ long NumAttachments,

		/*[out]*/ VARIANT_BOOL * LinkedArr,

		/*[out,retval]*/ BSTR * Retval ) = 0;

	  virtual HRESULT __stdcall GetSectionProperties2 (

		/*[in]*/ VARIANT Sections,

		/*[out,retval]*/ VARIANT * Retval ) = 0;

	  virtual HRESULT __stdcall IGetSectionProperties2 (

		/*[in]*/ long Count,

		/*[in]*/ IUnknown * * Sections,

		/*[out,retval]*/ double * Retval ) = 0;

	  virtual HRESULT __stdcall SelectByID2 (

		/*[in]*/ BSTR Name,

		/*[in]*/ BSTR Type,

		/*[in]*/ double X,

		/*[in]*/ double Y,

		/*[in]*/ double Z,

		/*[in]*/ VARIANT_BOOL Append,

		/*[in]*/ long Mark,

		/*[in]*/ struct ICallout * Callout,

		/*[in]*/ long SelectOption,

		/*[out,retval]*/ VARIANT_BOOL * Retval ) = 0;

	  virtual HRESULT __stdcall CreateOLEObject (

		/*[in]*/ long Aspect,

		/*[in]*/ VARIANT Position,

		/*[in]*/ VARIANT Buffer,

		/*[out]*/ long * ErrorCode,

		/*[out,retval]*/ struct ISwOLEObject * * LpOleObject ) = 0;

	  virtual HRESULT __stdcall ICreateOLEObject (

		/*[in]*/ long Aspect,

		/*[in]*/ double * Position,

		/*[in]*/ long ByteCount,

		/*[in]*/ unsigned char * Buffer,

		/*[out]*/ long * ErrorCode,

		/*[out,retval]*/ struct ISwOLEObject * * LpOleObject ) = 0;

	  virtual HRESULT __stdcall GetOLEObjectCount (

		/*[in]*/ long Options,

		/*[out,retval]*/ long * OleObjectCount ) = 0;

	  virtual HRESULT __stdcall GetOLEObjects (

		/*[in]*/ long Options,

		/*[out,retval]*/ VARIANT * VbOleObjects ) = 0;

	  virtual HRESULT __stdcall IGetOLEObjects (

		/*[in]*/ long Options,

		/*[in]*/ long OleObjectCount,

		/*[out]*/ struct ISwOLEObject * * LpOleObjects ) = 0;

	  virtual HRESULT __stdcall InsertCamera (

		/*[out,retval]*/ struct ICamera * * Retval ) = 0;

	  virtual HRESULT __stdcall GetCameraCount (

		/*[out,retval]*/ long * Retval ) = 0;

	  virtual HRESULT __stdcall GetCameraById (

		/*[in]*/ long CameraId,

		/*[out,retval]*/ struct ICamera * * Retval ) = 0;

	  virtual HRESULT __stdcall InsertObjectFromFile (

		/*[in]*/ BSTR FilePath,

		/*[in]*/ VARIANT_BOOL CreateLink,

		/*[in]*/ long Aspect,

		/*[in]*/ double XPos,

		/*[in]*/ double YPos,

		/*[in]*/ double ZPos,

		/*[out,retval]*/ struct ISwOLEObject * * LpOleObj ) = 0;

	  virtual HRESULT __stdcall AddComment (

		/*[in]*/ BSTR Text,

		/*[out,retval]*/ struct IComment * * Retval ) = 0;

};
Ссылка на сообщение
Поделиться на других сайтах

Нашол только одну функцию, которая возвращает указатель на ICustomPropertyManager, это

IFeature : IDispatch

{

	  virtual HRESULT __stdcall get_CustomPropertyManager (

		/*[out,retval]*/ struct ICustomPropertyManager * * Retval ) = 0;

}
У меня вопрос, можно ли эту задачу решать не через IModelDoc а через IFeature? Или это будет неправельно?
Ссылка на сообщение
Поделиться на других сайтах

В Help для API SW2009 по IModelDocExtension::CustomPropertyManager сказано:

SolidWorks.Interop.sldworks Namespace > IModelDocExtension Interface : CustomPropertyManager Property (IModelDocExtension) 

 Visual Basic (Declaration) 

 Visual Basic (Usage) 

 C# 

 C++/CLI ConfigName 

Name of configurationGets the custom properties for this document or configuration. 

.NET Syntax

Visual Basic (Declaration)   

Overridable ReadOnly Property CustomPropertyManager( _

   ByVal ConfigName As String _

) As CustomPropertyManager

 



Visual Basic (Usage) Copy Code 

Dim instance As IModelDocExtension

Dim ConfigName As String

Dim value As CustomPropertyManager

 

value = instance.CustomPropertyManager(ConfigName)

 



C#   

virtual CustomPropertyManager CustomPropertyManager( 

   string ConfigName

) {get;}

 



C++/CLI   

virtual property CustomPropertyManager^ CustomPropertyManager {

   CustomPropertyManager^ get(String^ ConfigName);

}

 



NOTE: See Differences Between Unmanaged C++ and C++/CLI Code. 

Parameters

ConfigName 

Name of configuration

Return Value

ICustomPropertyManager object

получается интерфейс IModelDocExtension содержит метод который возвращает указатель на ICustomPropertyManager. Но я из своего приложения VS2008 ATL-проект С++ (dll) немогу увидить. Неужели некоторые функции SW2009 Api заточены чисто под .NET? Тогда надо подключать SolidWorks.Interop.sldworks?

Ссылка на сообщение
Поделиться на других сайтах

получается интерфейс IModelDocExtension содержит метод который возвращает указатель на ICustomPropertyManager. Но я из своего приложения VS2008 ATL-проект С++ (dll) немогу увидить. Неужели некоторые функции SW2009 Api заточены чисто под .NET? Тогда надо подключать SolidWorks.Interop.sldworks?

Попробуйте воспользоваться старыми функциями интерфейса IModelDoc2, если они еще "живые" в SW2009SP4

STDMETHODIMP CAddPrp::MenuCallback(void)

{

	try

	{

		HRESULT hres;

		IModelDoc2 *swModel = NULL;

		hres = iSwApp->get_IActiveDoc2(&swModel);

		if(swModel == NULL)

			return S_FALSE;

		long docType;

		hres = swModel->GetType(&docType);

		if(docType != swDocASSEMBLY)

			return S_FALSE;

		IConfiguration *swConfigAsm = NULL;

		hres = swModel->IGetActiveConfiguration(&swConfigAsm);

		

		IComponent2 *swRootComponent = NULL;

		hres = swConfigAsm->IGetRootComponent2(&swRootComponent);

		

		int count;

		hres = swRootComponent->IGetChildrenCount(&count);

		IComponent2 **pArrComp = new IComponent2*[count];

		ZeroMemory(pArrComp, count * sizeof(IComponent2*));

		hres = swRootComponent->IGetChildren(pArrComp);

		for(int i = 0; i < count; i++)

		{

			IComponent2 *swComponent = pArrComp[i];

			if(swComponent == NULL)

				continue;

			BSTR bstrConfigName; // имя конфигурации, для закладки Configuration Specif в свойствах модели. Для закладки Custom должна быть пустая строка

			hres = swComponent->get_ReferencedConfiguration(&bstrConfigName);

			IModelDoc2 *swModelComp = NULL;

			hres = swComponent->IGetModelDoc(&swModelComp); // получаем указатель на модель компонента

			

			//bstrConfigName = L""; //вариант для закладки Custom (пустая строка)

			bool bres = false;

			

			BSTR fieldName = L"ASDF"; // наименование вашего свойства;

			long countPrp;

			hres = swModelComp->GetCustomInfoCount2(bstrConfigName, &countPrp);

			BSTR *pNames = new BSTR[countPrp];

			hres = swModelComp->IGetCustomInfoNames2(bstrConfigName, pNames); 

			

			// циклом проверяем, существует ли уже такое свойство в модели	

			for(int j = 0; j < countPrp; j++)

			{

				BSTR bstrName = pNames[j];

				int compare = wcscmp(bstrName, fieldName);

				if(compare == 0)

				{

					bres = true;

					break;

				}

			}

			long lres;

			VARIANT_BOOL bresult;

			if(bres)

			{

				// если свойство уже есть, то меняем значение его

				BSTR valueRes = L"QQQWWEEWQ";

				hres = swModelComp->put_CustomInfo2(bstrConfigName, fieldName, valueRes);		

			}

			else

			{

			// если нет нужного свойства то добавляем его						

				BSTR valueRes = L"QQQWWEE";

				hres = swModelComp->AddCustomInfo3(bstrConfigName, fieldName, swCustomInfoText, valueRes, &bresult);

			}

			

			// обязательный вызов функции Save3, иначе при сохранении сборки, свойства в модели могут быть не сохранены	

			long lErrors, lWarnings;

			hres = swModelComp->Save3(swSaveAsOptions_Silent, &lErrors, &lWarnings, &bresult);

			

			delete[]pNames;			

		}

		delete[] pArrComp;

	}

	catch(...){}

	

	return S_OK;

}
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

  • Сообщения

    • Viktor2004
      Я пробовал считывать так. Выпаял микросхему памяти из модуля, затем купил CF карту с таким же контроллером. Выпаял оттуда микросхему на 128Mb она была на месте "0" и впаял вместо нее микросхему с модуля. https://market.yandex.ru/product--karta-pamiati-cfg8b51mkazws-zaveb-tdk-512-mb/109304488?sku=102980643607&uniqueId=45170721&do-waremd5=G3-wTXG-Bm2zCvteY2KyaA&resale_goods=resale_resale&resale_goods_condition=resale_excellent Так как контроллеры совпадают, GBDriver RA8 программой WINHEX я снял образ с карты. Там уже все блоки были на своих местах. Только вряд ли вам это поможет. На 31i-A такое бы еще прокатило, а на 31i-B в системе появился файл SYS CNTL. Он генерится как на основе загружаемого софта, так и на основе ID-номера контроллера GBDriver. Так что побитно скопированная микросхема у меня работать не стала.
    • gudstartup
      @ДмитрийКм образ с плохого фром модуля у вас явно поврежден так что его на работоспособность можете не рассчитывать. надо считывать системные файлы с хорошего станка @ДмитрийКм если с хорошего 32i фром модуль не дадут то надо искать  файлы вашего по отдельно. но учитывая сложности с бэкапом системы у современных вряд ли они имеются в чистом виде.
    • a_schelyaev
      Убедиться в том, что "учет гидростатики" работает, можно на примере со свободной конвекцией. Сделали проект с "коробкой": справа стенка горячая, слева холодная, снизу и сверху - адиабатика. Если моделировать без учета гидростатики, то мы опять же видим "гидростатический" столб, и видим, что воздух движется в результате нагрева в поле действия силы тяжести: Если же включить "учет гидростатики", то гидростатического столба мы не видим, давление практически постоянно. Однако по векторам мы видим, что движение идет, то есть все работает так же, как и в первом случае, только решатель оперирует другими значениями давления.   Как итог - накатали заявку в следующей версии выводить "Давление+гидростатика", чтобы все было наглядно и не приходилось эти умозрительные эксперименты проводить.   В документации смысл фразы не в том, что давление не нужно задавать, а в том, что при задании его значений не нужно учитывать гидростатический перепад. Если вход находится сверху, а выход снизу, то давления на них будут отличаться за счет гидростатики. И вот при использовании "учета" не нужно высчитывать, сколько составит перепад и прибавлять/вычитать из него нужные значения. Это может так же помогать на вертикальных границах входа/выхода. У нас в FlowVision есть туториал с нефтью: там сбоку вертикальная входная граница. В проекте включен учет гидростатики и стоит просто полное давление 0. Если же учет отключить, то придется задавать на этой границе значение через формулу, которая учитывает гидростатику, пример вот здесь:    
    • a_schelyaev
      Модель k-e, т.к. Y+=<1 в Компасе сейчас недостижим. Поэтому не нужно качаться на папе, он не для этого вешался.
    • Guhl
      @Viktor2004 под стук колес лучше думает. Проводница молодая снует туда-сюда...
    • gudstartup
      помните как в анекдоте про л.и. - иде я нахожусь!  до остановки поезда осталось пять минут....
    • hlibhlib
      Как рас и навсегда во всех траекториях отключить визуализацию Планов перехода???  
    • maxx2000
      @Богоманшин Игорь G93 сугубо для поворотных осей G94 обычная минутная подача G95 не представляю как её применять для фрезерных циклов, ибо это подача мм на оборот
    • Viktor2004
      Вечером я напишу вам одну идею, щас я в поезде Посмотрите какой контроллер GBDriver у вас на плате. Его точное название
    • gudstartup
      раньше так и было но потом их перенесли в from и хранятся надежнее и выделять под программы можно разный объем при помощи опций а также статическое озу такого объема сильно дорогая вещь системные файлы вы накидывать не сможете с проводочками лучше не рисковать много ошибок может при записи возникнуть  даже если вам удастся выделить нужные системные файлы из вашего raw образа и проверить их контрольные суммы то как вы собираетесь их в чпу записать? @ДмитрийКм
×
×
  • Создать...