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

Есть сборка в Sw 2003. Необходимо достать пути всех её компонентов...


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

Есть сборка в SW 2003. Необходимо достать пути всех её компонентов...

Как я понимаю, для этого есть метод Сomponent2.GetPathName(), но я никак не могу его вызвать,

потому что не знаю как "встать" на объект Сomponent2.

Проблема ещё в том, что програмирую на С++ (ВСВ6.0).

Пожалуйста помогите!

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


Get and Set Component's Suppression State Example (VB)

This example shows how to get and set the suppression state of a component.

'-----------------------------------------------

'

' Preconditions:

' (1) An assembly is open.

' (2) A component is selected.

'

' Postconditions: The selected component's suppression state is set to

' lightweight if the component is resolved.

'

'----------------------------------------------

Option Explicit

Public Enum swComponentSuppressionState_e

swComponentSuppressed = 0 ' Fully suppressed - nothing is loaded

swComponentLightweight = 1 ' Featherweight - only graphics data is loaded

swComponentFullyResolved = 2 ' Fully resolved - model is completely loaded

End Enum

Public Enum swSuppressionError_e

swSuppressionBadComponent = 0

swSuppressionBadState = 1

swSuppressionChangeOk = 2

swSuppressionChangeFailed = 3

End Enum

Sub main()

Dim swApp As SldWorks.SldWorks

Dim swModel As SldWorks.ModelDoc2

Dim swSelMgr As SldWorks.SelectionMgr

Dim swComp As SldWorks.Component2

Dim bRet As Boolean

Dim nRetVal As Long

Set swApp = Application.SldWorks

Set swModel = swApp.ActiveDoc

Set swSelMgr = swModel.SelectionManager

Set swComp = swSelMgr.GetSelectedObjectsComponent2(1)

Debug.Print "File = " & swModel.GetPathName

Debug.Print " Comp = " & swComp.Name2

Debug.Print " Path = " & swComp.GetPathName

Debug.Print " GetSuppression = " & swComp.GetSuppression

Debug.Print " IsSuppressed = " & swComp.IsSuppressed

nRetVal = swComp.setsuppression(swComponentLightweight)

End Sub

'----------------------------------------------------

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

2 Kelny

Он же пишет, что на C++ работатет!

2 DID

Help по SW API не смотрел?

Там же есть пример: "Traverse Assembly Example (C++ COM)".

Посмотри еще

"http://www.solidworks.com/pages/services/APIDownloads.html"

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

Он же пишет, что на C++ работатет!

<{POST_SNAPBACK}>

А какая разница на чем писать, алгоритм то один, объявил потом используешь, полагаю будет что-то вроде этого:

// -------------------------------------------------------------------



void APITestFunction()



{

	HRESULT								 hr = S_OK;



	CComPtr <ISldWorks>					 pSldWorks;

	CComPtr <IModelDoc2>					pModel;

	CComQIPtr <SelectionMgr>					pSelMgr;

	CComQIPtr <Component2>				pComp;

  

	// Connect to SolidWorks

	pSldWorks = TheApplication->GetSWApp();

	ASSERT(pSldWorks);



	hr = pSldWorks->get_IActiveDoc2(&pModel);

	ASSERT(pModel);



	hr = pModel->get_ISelectionManager( &pSelMgr);

	ASSERT(pSelMgr);



	hr = pSelMgr->IGetSelectedObjectsComponent2(1, &pComp);

	ASSERT(pComp);



	BSTR									sPartPath="";

	hr = pSelMgr->GetPathName ( &sPartPath);



return;

}



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

А какая разница на чем писать, алгоритм то один, объявил потом используешь, полагаю будет что-то вроде этого:

Ну я в С ни бум-бум, я в VB - там перебор происходит методом рекурсии (см. пример SW API) одной функцией (или процедурой) тут не обойдешся. Честно говоря, я не вижу другого подхода.

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

Наверное где-то так:

void CSW_TstDlg::OnBnClickedButton1()

{

	HRESULT hres;

	ISldWorksPtr swApp;

	swApp.GetActiveObject("SldWorks.Application");



	IModelDoc2Ptr swModel;

	hres = swApp->get_IActiveDoc2(&swModel);

	if(hres != S_OK)

	{

		 return;

	}



	IConfigurationPtr swConfig;

	hres = swModel->IGetActiveConfiguration(&swConfig);



	IComponentPtr swRootComponent;

	hres = swConfig->IGetRootComponent(&swRootComponent);



	VARIANT vChildren;

	hres = swRootComponent->GetChildren(&vChildren);



	SAFEARRAY* arrComp = V_ARRAY(&vChildren);

	LPDISPATCH* pDispComp = 0;



	long lHightIndex;

	long lCountComp;



	hres = SafeArrayAccessData(arrComp, (void**)&pDispComp);

	ASSERT(S_OK == hres);

	ASSERT(NULL != pDispComp);



	hres = SafeArrayGetUBound(arrComp, 1, &lHightIndex);

	ASSERT(S_OK == hres);



	lCountComp = lHightIndex + 1;

	for ( long i = 0; i < lCountComp; i++)

	{

		IComponentPtr  swComponent;

		swComponent = pDispComp[i];

		BSTR strPath;

		swComponent->GetPathName(&strPath);

		//................



	}



}

Правда код под VS2005 и SW2006. С Borland-ом к сожалению не знаком. Не забудь в InitInstance() вставить:

if(!AfxOleInit())

	{

		return FALSE;

	}
У меня это exe-файл. А если в сборке присутсвуют подсборкки, то рекурсия.
Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

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

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

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

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

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




  • Сообщения

    • gudstartup
      на новом хорошем станке все уже введено и термокомпенсации и питч ерроры и  точки трансформации но их почему то все равно нужно корректировать со временем даже без аварий а просто идет банальный износ описанных вами элементов  я вам тоже мануалы приводил но вы их игнорируете так и я не вижу ваших доказательств.
    • lem_on
      Правда скорее всего он этого не говорил и вообще не в этом контексте. 
    • gudstartup
      я не понял чего невозможно-  описать отклонение в точке оси b по осям x и y? поясните вашу мысль яснее
    • lem_on
      Вот это поворот!!!      А это по гульковски называется  - подлизнул. Знать надо! 
    • Killerchik
      Думаю да. Вы просто немного ошиблись и приписали @Guhl то, чего он не говорил, а именно     Да конечно это проще! Мне кажется, практически всегда проще. Но это банально не всегда возможно: пример ситуации, когда это невозможно, выше описал Виктор. Ещё разок: на новом хорошем станке никакая компенсация не заменяет ни станины с низкими внутренними напряжениями, ни качественных ШВП (если они в станке есть), ни направляющих постоянного сечения. Эти факторы, хорошая физическая геометрия и программные компенсации, прекрасно дополняют друг друга. К примеру, обеспечить механическую прямолинейность оси хотя бы в пару соток не супер трудно - а вот точнее уже полезно дожать программными компенсациями.
    • Guhl
      Аргументы - это мануалы, по которым я делал Нет, но это крайняя мера. Лучше править геометрию К тому же все эти компенсации требуют контроля, потому что условия окружающей среды меняются. А если у вас железо правильнон, то с ним ничего не случится Полезная компенсация - компенсация прогиба хобота и температурная компенсация длины шпинделя @gudstartup вы постоянно передёргивайте. Зачем? Еще и фантазируйте - приписывайте мне слова, которых я не произносил И не один раз Неспортивное поведение
    • gudstartup
      вот тут вас поддерживаю! @stoomb это должно вам помочь 315 параметр common switch bit 23 rapid ->hs feed RAPID -> HS FEED Enable the Linear Rapids feature  This parameter enables straight line rapid moves.  Normally, during a rapid move of two or more axes, the axis with the shorter distance will finish first.  When this parameter is set to 1, the control will treat rapid moves as high speed feeds, that is, all axes will complete their motion at the same time.   не там глядели маленько
    • maxx2000
      Это я к чему, к тому что надо ещё и использовать CAM который учитывает такие перемещения. "ты просто не умеешь их готовить". Если отбросить все специфичные макрокоманды, коими богаты не только ХААСЫ, то останется чистый и девственный G-код. Пост от ХААС всегда с гарантированным 100%результатом можно использовать как заготовку под любую стойку.
    • gudstartup
      А вы ни одного аргумента не привели как же вам можно верить? вас что расстреляют если вы параметрами геометрию поправите? вы живете в суровые  времена молота и наковальни и наверняка правите направляющие поджимом винтов  запихните в облако ваши  мануалы и не придется  в другой город ездить! сделайте шаг навстречу прогрессу и сохраните их а то вдруг с жесткого диска магнитная пыль осыпется.
    • WinoX
      Пробовал ставить самые первые драйвера за 14год и самые последние - безрезультатно  Удаление символа пробовал до создания этой темы  Пока такой лайфхак - после всех симуляций делаю шаг назад и включаю на самой маленькой скорости 
×
×
  • Создать...