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

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

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




  • Сообщения

    • Viktor2004
      Данная система подразумевает покупку блока для каждого станка. Монтаж и настройку выездным специалистом. При чем блоки эксклюзивные. Больше такие нигде не продаются. Идет жесткая привязка и зависимость только от одного поставщика. Зачем так усложнять. Думаю есть вариант с подключением каждого станка просто проводом без лишних закупок. Только софт на компьютер
    • Sabadash
      Пилится на станке такое)
    • Sabadash
      Приветствую! В процессе отладки станка Росфрезер HM04STM, имеет автосмену на 12 позиций инструмента HSM Works выбран как основная CAM, так как позволяет завязывать управляющие стратегии напрямую на перестраиваемый исходник геометрии детали, завязанный на cборку в SW Станок модифицирован до 4  осей, на базе волнового редуктора и сервопривода Delta Стойка поддерживает непрерывную обработку под точение микро механики, учимся делать циклоидные сервоприводы. Сейчас в процессе отладки постпроцессора, за основу взят постпроцессор для Mach 3 Mill, так как ранее он использовался под  аналогичную обработку под управлением Rich Auto DSP A18   4 Ось уже работает вдоль Х оси Проблема возникла с некорректной работой дуговой интерполяции. В мануале написано что стойка поддерживает дуговую интерполяцию для каждой из плоскостей.   Однако при запуске сгенерированной УП стойка выдает ошибку недоспустимого радиуса дуги. В мануале так же упомянуто о таком поведении в пункте 5     В постпроцессоре дуговая интерполяция включена, но как ее переключить на описанное в мануале стойки пока не разобрался.   Постпроцессор в поцессе правок. Если кто подскажет пример реализации подобного, буду очень благодарен HM04STM.cps
    • agering53
      Здесь выложена кое какая информация по сетевой системе, о которой я сообщал выше.  1. Универсальная сетевая система IN-DNC: https://www.mediafire.com/file/5reascq3sppdbn1/IinDoc.zip/file 2. Видео ролики для системы IN-DNC: https://www.mediafire.com/file/jwz8wwozj4iig1b/IIN-DNC_Video.rar/file
    • openair1981
    • maxx2000
      @davidovka да её и нет, есть жёсткий тупняк, поиск волшебной кнопки и т.д., и т.п. Просто пора в отпуск.
    • davidovka
      Наверное не понял проблемы, в эскизе квадрат с одним размером
    • maxx2000
      Вот ещё вопрос. Концентрический массив. Почему массив, чтобы потом сделать массив по привязке.  Есть у кого то соображения как?    
    • A_1
      Будет ли выполнена команда GOTO в этом кадре? IF 1>2 AND 5<10 GOTO GLUECK Sinumerik: расширенное программирование  Промокод "ЛЕТО" продолжает действовать на этот курс, а также курсы Программирование станка с системой ЧПУ FANUC (и Sinumerik) Параметрическое программирование станков с ЧПУ FANUC
    • maxx2000
      @davidovka ахахахах, это шедевр. Просто шикарно. У меня просто культурный шок. Осталось допилить до полноценного нестинга 3D моделей и прощайте костыли с кучей прослоек из других программ. 
×
×
  • Создать...