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

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


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 пользователей

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




  • Сообщения

    • AlexKaz
      Код для scilab/matlab/octave.
    • Jesse
      посмотрел. По дефолту нормировка DFT идёт на 1/sqrt(N), где N - число отсчётов. Сделал нормировку на 1/N Получил амплитуду теперь меньше единицы.... у вас там maxima)) да и контекст долго читать. вы нормируете на логарифм от числа отсчётов?)
    • AlexKaz
      Стр. 89-90 https://elib.pstu.ru/docview/6701 1/(2*Pi) - это корректировка оси абсцисс, а не ординат.
    • Борман
      Если так то да. Я про статически-эквивалентный метод говорил там выше.
    • gudstartup
      @gudi продублировали ответы по теме а зачем неясно....
    • ANT0N1DZE
      Упрощенный план действий: Начните со стр. 155 https://www.utgt73.ru/uploads/biblioteka/fizika 10.pdf Если будет вращаться быстро и не в вакууме, то надо будет учесть "парус" этого тела, там сопротивление газа зависит от скорости движения. Это уже примерно 1 курс университета (тоже гуглится спокойно). 
    • MagicNight
      Заметил такую особенность, что в PowerMill v6 (возможно и в других тоже) происходит следующее... Создаю NC-файл и туда сбрасываю траектории (около 10-15 на разные фрезы), на выходе некоторые траектории не прописывает вкл охлаждения. То есть в графе Охлаждение на одну из 10-15 траекторий пишет НЕТ, на всех остальных -Стандартное (то есть да) Получается, что из, условно десяти траекторий, одна или две прописываются без включения СОЖ. Но что интересно по отдельности программы выходят с включенной СОЖ, всегда! Не могу понять зависимость с этим. Кто-нибудь сталкивался с этим?
    • ЮрЮрыч
      Вам нужно просто общее количество или оптимальную раскладку для резки наподобии нестинга?
    • Jesse
      да. Забыл добавить. Я там в тестовом примере ещё сверху шум накинул небольшой амплитуды, в 10 раз меньше чем основной сигнал. Если шум убрать, то получится что амплитуда дискретного фурье спектра растёт примерно в sqrt(N2/N1) раз, где N2 - число отсчётов для правого графика, а N1 - для левого. Но не суть.. Мой главный вопрос как получить "рабочую", правильную амплитуду DFT, которую можно было бы вбить в прогу?   не, у меня более простой второй вариант) вот когда скажут заморочиться с ансамблем и случайными процессами, тогда и будуда и комиссии если что-то подобное пробубнить, то мне точно прилетит..   Harmonic Response. На резонанс проверить.   вот сейчас только в голову пришло! Там ведь поправочные коэффы в DFT используются! Типа 1/sqrt(2*Pi) чё т такое. Пойду курить вольфрам
    • Orchestra2603
      Я, честно скажу, не знаю как на практике это проходит, что в нормах пишут и т.д. Стоит задача провести вероятностный анализ (вероятност ьпревышения пределеа текучести, например), или надо просто посчитать динамику на одну вот эту вот историю ускорений, и все? Второй вариант проще, но по-правильному, наверное надо, как в первом варианте.   а какой анализ вы хотите делать?   Если больше отсчетов по частоте, то повышается разрешение в частотной области, и просто пик становится более резким. В предельном случае будет просто одно значение в районе частоты действия силы, а вокруг него везде нули. Но, когда разрешение падает, то амплитуда с пика "сползает" и "растекается" на соседние частоты. Но сама сумма в силу равенства Парсеваля, как вы правильно сказали,  должна быть такой же.   Это очень странно. Впечатление такое, что как будто где-то какой-то косяк с БПФ. Если в начале во времени был синус с амплитудой 1, то на спектр еможет быть 1 (если однсторонний спектр), либо 1/2, если двухстронний спектр. Может, оконная функция какая-то странная? Надо разбираться...  Так а если он задаст на уровне земли как кинематическое возбуждение опорного контура? Вроде же норм... Или речб о том, чтобы убрать из модели опорную конструкцию, на которой держится оборудовнаие?
×
×
  • Создать...