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

Sw Api: Как получить Drawingcomponent через Note?


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

Имеется: выбранное пользователем примечание.

Требуется: определить, к какому из компонентов это примечание привязано и получить свойства компонента.

Пробовал так:

получаем точку привязки примечания через Note.GetAttachPos;

используя эту точку выделяем компонент через SelectByID

ну и дальше работаем с выделенным компонентом.

Способ довольно шаткий (сработает или нет - зависит от масштаба), поэтому вопрос: нельзя ли добраться до DrawingComponent как-нибудь по-другому?

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


Я не пробывал,но попробуй так.

status = Note->IGetAnnotation ( &retval )

где

(LPANNOTATION) pAnnotation

затем status = pAnnotation->GetAttachedEntities2 ( &retval)

(VARIANT) retval

Pointer to an array of LPUNKNOWN objects

а потом через QueryInterface попытаться получить то, что нужно

ЗЫ: для SelectByID лучше использывать имя, а не координаты

Изменено пользователем TEM
Ссылка на сообщение
Поделиться на других сайтах
  • 4 года спустя...

Подскажите пожалуйста а как наоборот получить Note из выбранного DrawingComponent.

Много писать на эту тему, надо смотреть в справке API SW (то, что жирным выделенно):

...

Set owningComponent = SelMgr.GetSelectedObject5(2) <-- выбранный объект

Set swSelComp = owningComponent.GetComponent <-- собственно компонент

NameComp = swSelComp.name <-- имя компонента

...

А также :

"Annotation::GetSpecificAnnotation"

там пример есть.

Правда там ВСЕ `note` указанного компонента вычисляются,

потребуется, видимо, некоторая доп. обработка...

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

Подскажите пожалуйста а как наоборот получить Note из выбранного DrawingComponent.

Один из вариантов. Обойти все Note на виде, где выбрали DrawingComponent и проверить не принадлежат ли они этому DrawingComponent-у. Пример написан на C#, консоль. VS2005, SW2008. На C++ и VB аналогично.

using System;

using System.Collections.Generic;

using System.Text;

using SolidWorks.Interop.sldworks;

using SolidWorks.Interop.swconst;



namespace FindNote

{

	class Program

	{

		static void Main(string[] args)

		{

			List<INote> listNote = new List<INote>();



			ISldWorks swApp = new SldWorksClass();

			IModelDoc2 swModel = (IModelDoc2)swApp.IActiveDoc2;

			if (swModel == null)

				return;

			if (swModel.GetType() != (int)swDocumentTypes_e.swDocDRAWING)

				return;

			ISelectionMgr swSelMgr = (ISelectionMgr)swModel.ISelectionManager;

			int countObj = swSelMgr.GetSelectedObjectCount();

			if (countObj < 2)

				return;

			View swView = null;

			IEntity swEntity = null;

			for (int i = 1; i <= countObj; i++)

			{

				int selType = swSelMgr.GetSelectedObjectType2(i);

				switch (selType)

				{

					case ((int)swSelectType_e.swSelFACES):

					case ((int)swSelectType_e.swSelEDGES):

					case ((int)swSelectType_e.swSelSILHOUETTES):

						swEntity = (IEntity)swSelMgr.GetSelectedObject5(i);

						break;

					case((int)swSelectType_e.swSelDRAWINGVIEWS):

						swView = (View)swSelMgr.GetSelectedObject5(i);

						break;

				}				

			}

			if (swEntity == null)

				return;



			IDrawingComponent swDrawingComponent = (IDrawingComponent)swEntity.GetDrawingComponent(swView);

			// далее находим все Note принадлежащие вбранному компоненту и виду, где компонент находится

			INote swNote = (INote)swView.GetFirstNote();

			while (swNote != null)

			{

				IAnnotation swAnnot = (IAnnotation)swNote.IGetAnnotation();

				int count = swAnnot.GetAttachedEntityCount2();

				int[] objEntity = (int[])swAnnot.GetAttachedEntityTypes();

				if (objEntity == null)

				{

					swNote = (INote)swNote.IGetNext();

					continue;

				}

				int typeEntity;

				if (count == 1)

					typeEntity = objEntity[0];

				else

					typeEntity = objEntity[count - 1];

				swEntity = null;

				switch (typeEntity)

				{

					case (int)swSelectType_e.swSelFACES:

						IFace swFace = (IFace)swAnnot.IGetAttachedEntities();

						swEntity = (IEntity)swFace;						

						break;

					case (int)swSelectType_e.swSelEDGES:

						IEdge swEdge = (IEdge)swAnnot.IGetAttachedEntities();

						swEntity = (IEntity)swEdge;

						break;

					case (int)swSelectType_e.swSelVERTICES:

						IVertex swVertex = (IVertex)swAnnot.IGetAttachedEntities();

						swEntity = (IEntity)swVertex;

						break;

					default:

						swNote = (INote)swNote.IGetNext();

						continue;

				}



				IDrawingComponent swDrwComp = (IDrawingComponent)swEntity.GetDrawingComponent(swView);

				if (swDrawingComponent == swDrwComp)

					listNote.Add(swNote); // заполняем список нотами, которые принадлежат выбранному компоненту и виду

										  // и делаем с ним что хотим



				swNote = (INote)swNote.IGetNext();

			}

		}

	}

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

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

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

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

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

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

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

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

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

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

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




  • Сообщения

    • Demiurg
      Можете выложить свой шаюлон? Я попробовал, картинки выводятся, зависаний нет.  
    • Snake 60
      Не верная информация, видно зависит от железа. У меня не разблокировалось по умолчанию, помогло вот это видео - https://www.youtube.com/watch?v=vmbjWkmItBQ  
    • gudstartup
      @Alexey8107 а отдельное питание туда зачем приходит ? там явно не только трансформатор и фильтр
    • Alexey8107
      Да, я уже изучил те платы от старых ремонтов, там и судя по всему килоомный резистор в параллель обмотке стоит судя по всему(видимо нагрузочный, чтобы обмотка была нагружена всегда, и RC фильтр. Но не уверен на 100% что это обычный трансформатор тока, хотя все говорит об этом). На одной бахнули IGBT очень смачно, так что там не показатель, выгорело и управление ими. На двух 100% рабочие, там контроль напряжения в отвале, но трансы на 100 всего. Еще на одной, если не ошибаюсь шпиндельной, на 400. Там была проблема с рекуперацией. Так что тоже можно ориентироваться на их исправность.
    • mr_Voden
    • gudstartup
      @Alexey8107 подайте 24 в только на spm и посмотрите будет на нем 30 или нет если будет то для начала смотрите датчики тока на силовой плате    там внутри еще схемка есть для выдачи адекватного сигнала на схему контроля тока. если поставите не родной возможны сбои при работе шпинделя. в худшем случае может они окажуться исправны. сейчас не помню какой там уровень по аварии сравните с соседним модулем контроля тока их там 2. их питание тоже проверьте
    • Alexey8107
      Да, здесь я оговорился. Конечно же резисторы на контроль фаз. Тоже об этом думал, т.к. силовуха ну не имеет явных признаков неисправности, да и в принципе даже включается и работает. На данный момент от предыдущих ремонтов остались трансформаторы тока фанук A44L-0001-0165# на 100, 400 и 600 ампер. Причем номер у всех почему то одинаковый, а ампераж разный. Найти документацию на них я даже не пытался, это невозможно. Надо будет снять и проверить. Если кто знает, это обычный трансформатор тока или все таки какое-нибудь чудо на эффекте холла???
    • Kydes
      Пришлите свою почту, отправлю эти файлы 
    • gudstartup
      вот схема кабеля там еще линия esp есть и интерфейс по которому модули сообщают об ошибках сигнальная пара mifa xmifa возможно именно через него ваш psm получает инфу о том что на dc линии кз. возможно что инфа приходит и от spm но вы почему то исключаете замену psm spm целиком а ограничились платой управления
    • kanapello
×
×
  • Создать...