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

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


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

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




  • Сообщения

    • DemonicCat
      а можете им поделиться?
    • Jesse
      Также по формуле Струхаля  хотел оценить насколько частота срыва вихрей с лопастей рабочего колеса находится близко к собственной частоте вала. Т.е. что-то вроде того   Вопрос в характерной длине. Вот в этих лекциях говорится, что надо брать что-то вроде длины дуги между лопастями. Т.е. это и будет получается наша характерная длина (k - число лопастей).   Т.е. в моём случае выделенный зеленым участок.   Вроде похоже на картинки из cfd те что выше кинул. Но всё же: никому не попадался источник по правильному выбору характерной размера/гидравлического диаметра? Обосновать хочитца!   p.s.: и тут блин тоже частота срыва вихрей близко получается к СЧ..)) Струхаль брал равным 0,2
    • gjkol
      Уважаемый, а что означает это НД/ВД или g75 Peck Grooving Cycle O.D. or I.D.   просто по моему опыту, когда знаешь расшифровку все становится понятее.  Заранее благодарен
    • mml35
      Я в любом случае благодарен, за потраченное на меня время.) Буду искать ошибки в уравнениях регионов.
    • Ветерок
      Я не знаком с вашими настройками, поэтому не могу сказать. У меня не так. А разбираться в ваших настройках нет никакого желания, уж извините.   Если деталь есть в разделе спецификации, а номер позиции не отображается, это странно. Надо разбираться с настройками спецификации. Может, там ещё какие условия прописаны.
    • mml35
      Про раздел спецификации понятно то, что в при создании файла (в каталоге Camozzi нет этого раздела и его нужно заполнить самостоятельно). Но на основании чего Creo вносит в параметры модели при создании например детали - вносит параметр  РАЗДЕЛ_СПЕЦИФИКАЦИИ - Детали. Потом я создаю так же резиновое кольцо и Creo в РАЗДЕЛ_СПЕЦИФИКАЦИИ - Стандартные детали? На основании чего она так решает. Может потому что нет обозначения-поставил все равно стандартное изделие. Может потому что нет чертежа - создал. Все равно стандартное изделие. Понятно, что можно в ручную изменить, но вопрос каков алгоритм, признак что Creo делает такую разноску?   И я так и не понял, почему в спецификации на этот импортированный штуцер нет номера ПОЗ (запрос rpt.index - стоит), хотя на чертеже позиция ставится? Где искать проблему?     
    • Ветерок
      На сайте производителя смотрели? Или вам нужны чертежи для серийного производства? Тогда точно к производителю :)
    • Ветерок
      Не важно как получена деталь. Номер позиции проставляется автоматически. А вот чтобы деталь попала в соответствующий раздел спецификации, у неё должен быть задан соответствующим образом параметр, который отвечает за раздел спецификации. Этот параметр может называться по-разному в зависимости от того, какими настройками пользуетесь. Например, этот параметр может называться TIP. На картинке в ответе выше этот параметр называется ТИП. Если на вашей картинке это РАЗДЕЛ_СПЕЦИФИКАЦИИ, то там нужно указать нужное значение. Это значение тоже может быть разным. К сожалению, в Крео нет единого стандарта. Каждый дилер (почти каждый) предлагал свои варианты, кроме того, на отдельных предприятиях могли быть совсем свои настройки.   В принципе, как фильтруются модели можно посмотреть в фильтрах соответствующего раздела таблицы спецификации.
    • butlug
      Точно не помню какой именно из параметров - но это параметры на созданный мной подшипник скольжения. В графе позиция у меня стоит запрос &rpt.index Спасибо за ответ. Но чаще всего есть только step и искать исходник сделанный в неизвестной программе через третьи руки перекупов по времени такое себе занятие на несколько дней... - проще уже самому расставить если их не сотни), а если это может сделать машина причем сгруппировав по диаметрам и глубинам - зачем людей по чем зря беспокоить непонятными вопросами)
    • david1920
      В личку смотрите
×
×
  • Создать...