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

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

Еще можно, как вариант, посмотреть, в том числе, и в сторону GetDrawingComponent.

Сам не пробовал пока.

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


1 час назад, brigval сказал:

Посмотрел малость.

Когда вы выходите на Body, то как бы заходите внутрь детали и просматриваете Features детали.

Изнутри детали компонент сборки не получить, на верх не выйти.

Поэтому Entity.GetComponent будет всегда Null

Чтобы Entity выдал компонент сборки, изображенной на виде, этот Entity должен быть примитивом (линией, поверхностью, вершиной или swViewEntityType_SilhouetteEdge), видимым на виде чертежа.

Поэтому, задача может быть такой - от штриховки перейти к примитивам вида.

Как это выполнить пока не понятно.

Есть такой интерфейс ISldWorks::IsSame  сравнивает два объекта - вроде можно проверять (сравнивать) Feature и определять Component2. Но это сходу и без должной проверки ....

Изменено пользователем nicomed
Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, brigval сказал:

Посмотрел малость.

Когда вы выходите на Body, то как бы заходите внутрь детали и просматриваете Features детали.

Изнутри детали компонент сборки не получить, на верх не выйти.

Поэтому Entity.GetComponent будет всегда Null

Чтобы Entity выдал компонент сборки, изображенной на виде, этот Entity должен быть примитивом (линией, поверхностью, вершиной или swViewEntityType_SilhouetteEdge), видимым на виде чертежа.

Поэтому, задача может быть такой - от штриховки перейти к примитивам вида.

Как это выполнить пока не понятно.

И чтобы этот Entity выдал компонент сборки на чертеже надо выбрать элементы этого компонента (Face, Edge, Vertex...) мышкой.

Далее часть рабочего кода.

Скрытый текст

        private void cmdOK_Click(object sender, EventArgs e)
        {
            SldWorks swApp = GetActiveSolidWorks();
            if (swApp == null)
                return;
            ModelDoc2 swModel = swApp.IActiveDoc2;
            if (swModel == null)
                return;
            int docType = swModel.GetType();
            if(docType != (int)swDocumentTypes_e.swDocDRAWING)
                return;
            DrawingDoc swDrawing = swModel as DrawingDoc;
            SelectionMgr swSelMgr = swModel.ISelectionManager;
            int selCount = swSelMgr.GetSelectedObjectCount();
            if (selCount != 2)
                return;

            SwView swView = null;
            SwEntity swEntity = null;

            for (int i = 1; i <= selCount; i++)
            {
                swSelectType_e selType = (swSelectType_e)swSelMgr.GetSelectedObjectType2(i);
                switch (selType)
                {
                    case swSelectType_e.swSelDRAWINGVIEWS:
                        swView = swSelMgr.GetSelectedObject5(i) as SwView;
                        break;
                    case swSelectType_e.swSelFACES:
                    case swSelectType_e.swSelEDGES:
                    case swSelectType_e.swSelVERTICES:
                        swEntity = swSelMgr.GetSelectedObject5(i) as SwEntity;
                        break;
                }

            }
            if (swView == null)
                return;
            if (swEntity == null)
                return;
            DrawingComponent swDrwComponent = swEntity.GetDrawingComponent(swView);
            if (swDrwComponent == null)
                return;
            string nameComponent = swDrwComponent.Name;
            Component2 swComponent = swDrwComponent.Component;
            
            // далее рабочий код
            // ===================
        }

 

А через FaceHatch компонент на чертеже получить не получиться.

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, nicomed сказал:

Есть такой интерфейс ISldWorks::IsSame  сравнивает два объекта - вроде можно проверять (сравнивать) Feature и определять Component2. Но это сходу и без должной проверки ....

Функцией

GetVisibleComponents

получить все видимые компоненты вида, потом в каждом компоненте, в его детали, сравнением проверить наличие Body из штриховки.  Думаю, может сработать.

Компонент, Body которого совпадает с Body из штриховки и будет искомым.

Изменено пользователем brigval
Ссылка на сообщение
Поделиться на других сайтах
30 минут назад, brigval сказал:

Функцией




GetVisibleComponents

получить все видимые компоненты вида, потом в каждом компоненте, в его детали, сравнением проверить наличие Body из штриховки.  Думаю, может сработать.

Компонент, Body которого совпадает с Body из штриховки и будет искомым.

Я для себя нарисовал такой алгорим (ужасны до безбразия, но раз горничной не видно ...):

1) Сразу получаем из сборки список всех компоненов и навешиваем им куда-нить шаблон для штриховки ( пока без сортировки сварная или нет, сейчас хотя бы просто соотнести компоненты и их виды на чертеже).

2) Проходя по всем видам чертежа определяем виды где IView :: GetFaceHatchedCount > 0 ;

3) В выбраном виде выбираем компоненты  методом  GetVisibleComponents ;

4) (Тут начинается ужас) Проходим циклом вида:

Скрытый текст

object[] vF = view.GetVisibleEntities2(c, (int)swViewEntityType_e.swViewEntityType_Face);

                if( vF == null )
                {
                    // типа нет граней
                }
                else
                {

                 foreach (Face2 f in vF)
                    {
                        swModel.ClearSelection2(true);

                        Body2 bf = f.GetBody();
                        Feature ff = bf.GetFeatures()[0];
                        Entity en = (Entity)ff;
                        if (view.GetFaceHatchCount() > 0)
                        {
                            foreach (FaceHatch fh in view.GetFaceHatches())
                            {

                                Face2 ffh = fh.Face;
                                double[] nf = ffh.Normal;
                                if (nf[1] != -1) // отсекаем часть лишних FaceHatch но у меня условие может быть не совсем корретно (там 3 координаты нормали )
                                {

                                    Body2 bfh = ffh.GetBody();
                                    Feature fefh = bfh.GetFeatures()[0];
                                    Entity ent = (Entity)fefh;

                                    int same = swApp.IsSame(en, ent); // сравниваем Entity из списка компонентов и выбранный по FaceHatch

                                    if(same == 1)
                                    {
                                        fh.UseMaterialHatch = false;
                                        fh.Angle = d_angle; // угол, или что там мы привязали в п.1
                                    }

                                }
                            }
                        }
                    }
                }
            }  // по количеству закрывающих скобочех, если не угадал, то извините....

Что-то такое.

 

З.Ы. там еще надо добавить в начале кода, сделаю чуть позже, извините. Но принцип такой...

 

Изменено пользователем nicomed
Ссылка на сообщение
Поделиться на других сайтах
1 час назад, nicomed сказал:

Я для себя нарисовал такой алгорим (ужасны до безбразия, но раз горничной не видно ...):

1) Сразу получаем из сборки список всех компоненов и навешиваем им куда-нить шаблон для штриховки ( пока без сортировки сварная или нет, сейчас хотя бы просто соотнести компоненты и их виды на чертеже).

2) Проходя по всем видам чертежа определяем виды где IView :: GetFaceHatchedCount > 0 ;

3) В выбраном виде выбираем компоненты  методом  GetVisibleComponents ;

4) (Тут начинается ужас) Проходим циклом вида:

Что-то такое.

 

З.Ы. там еще надо добавить в начале кода, сделаю чуть позже, извините. Но принцип такой...

 

На С не программирую, поэтому читать сложно. Но принцип понятен.

Время, наверное, у Солида может много уходить, особенно если сборка большая.

Но это уже второй вопрос.

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

Первый выезд "чугуниевого", а, скорее из чего-то и палок, велосипеда.

Почему-то не хочет работать с обычными разрезами - глючит - вылетает может попортить сам чертеж, но если на чертеже вырывы, местные виды со штриховками, то вроде немного фунциклирует.

 

Исходники и в bin/debug  есть exe-шник.

HatchManager.zip

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, nicomed сказал:

Первый выезд "чугуниевого", а, скорее из чего-то и палок, велосипеда.

Почему-то не хочет работать с обычными разрезами - глючит - вылетает может попортить сам чертеж, но если на чертеже вырывы, местные виды со штриховками, то вроде немного фунциклирует.

 

Исходники и в bin/debug  есть exe-шник.

HatchManager.zip 85 \u041a\u0431 · 0 скачиваний

Поздравляю!

Выскочила ошибка. Послал в личку.

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

Может, кто-то в курсе?

Чертежный вид в сборочном чертеже.

Нахожу в нем нужный компонент. Считываю видимые вершины, концы линий изображающих компонент. Нахожу координаты вершин.

Теперь вопрос.

Относительно чего, какого нуля, эти координаты?

Выяснил, что не относительно нуля сборочного чертежа, не относительно исходной точки в сборке...

Относительно чего они могут быть?

Задача такая - найти координаты вершин отностительно нуля чертежа.

 

Изменено пользователем brigval
Ссылка на сообщение
Поделиться на других сайтах
1 час назад, brigval сказал:

Может, кто-то в курсе?

Чертежный вид в сборочном чертеже.

Нахожу в нем нужный компонент. Считываю видимые вершины, концы линий изображающих компонент. Нахожу координаты вершин.

Теперь вопрос.

Относительно чего, какого нуля, эти координаты?

Выяснил, что не относительно нуля сборочного чертежа, не относительно исходной точки в сборке...

Относительно чего они могут быть?

Задача такая - найти координаты вершин отностительно нуля чертежа.

 

Вроде как нуля вида.

3 часа назад, nicomed сказал:

Первый выезд "чугуниевого", а, скорее из чего-то и палок, велосипеда.

Почему-то не хочет работать с обычными разрезами - глючит - вылетает может попортить сам чертеж, но если на чертеже вырывы, местные виды со штриховками, то вроде немного фунциклирует.

 

Исходники и в bin/debug  есть exe-шник.

HatchManager.zip 85 \u041a\u0431 · 2 скачивания

Только что то долго код обрабатывал. 4 вида, на трех штриховка. 20 видимых компонентов на виде.

P.S. Меня больше убили свойства FaceHatch. FaceHatch.Angle введен в SW2003, а FaceHatch.HatchScope в SW2020. 17 лет чтобы была возможность программно менять принадлежность штриховки к виду, телу, региону или компоненту!!!!

Ссылка на сообщение
Поделиться на других сайтах
23 минуты назад, Shvg сказал:

Вроде как нуля вида.

Не проходит. Нижний угол вида показывает 71 под курсором, а  почти рядом вершина программно - 160. (

Изменено пользователем brigval
Ссылка на сообщение
Поделиться на других сайтах
16 минут назад, brigval сказал:

Не проходит. Нижний угол вида показывает 71 под курсором, а  почти рядом вершина программно - 160. (

Да, я был не прав. Похоже, что на видах (StandartView, ProjectedView, AuxiliaryView) ноль - это ноль сборки, а в SectionView надо учитывать координаты линии разреза. То есть, если линия разреза проходит, допустим строго вертикально по координате х =50, то на разрезе все вершины, которые попали в разрез будут иметь  х = 50, остальные в координатах сборки. Так я понял.

Ссылка на сообщение
Поделиться на других сайтах
51 минуту назад, Shvg сказал:

Только что то долго код обрабатывал. 4 вида, на трех штриховка. 20 видимых компонентов на виде.

P.S. Меня больше убили свойства FaceHatch. FaceHatch.Angle введен в SW2003, а FaceHatch.HatchScope в SW2020. 17 лет чтобы была возможность программно менять принадлежность штриховки к виду, телу, региону или компоненту!!!!

С  учетом возможностей открытого API в этом направлении, я такое и подозревал. Что мешает ввести в тот же IFace  интерфейс IsFaceHatch или подобное ? Или внятное получение компонента из самого FaceHatch-а ? Хотя подозреваю в закрытой части API что-то такое будет....

Да что плакаться про новое, если в старые метки видов во Вспомогательных видах так до сих пор не работают....

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Shvg сказал:

Да, я был не прав. Похоже, что на видах (StandartView, ProjectedView, AuxiliaryView) ноль - это ноль сборки, а в SectionView надо учитывать координаты линии разреза. То есть, если линия разреза проходит, допустим строго вертикально по координате х =50, то на разрезе все вершины, которые попали в разрез будут иметь  х = 50, остальные в координатах сборки. Так я понял.

Координаты вершины в точке 0,0 сборки не равны координатам 0,0 полученным программно с вида чертежа. И разница очень существенная. Вот и интересно, что показывают X,Y. 

А вот Z в сборке у меня совпадает с Z с чертежа.

 

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

 День добрый!

Прошу помощи общественности.

Во вложении заготовка программы, которая, на данный момент, читает компоненты из сборки в отдельный список (dictionary).

Затем на каждом виде читает список DrawingComponent (вопрос не в нем, просто читает для общей масы информации).

После читает список видимых компонентов (Component2) и с соотносит каждый из этих компонентов с компонентами из dictionary.

Если вид без разреза, то тот способ что я применил работает, если есть разрезы или вырывы - то ах!

Теперь вопрос:

 Что надо вписать в код, что бы в результатх фраз: "не найден" не было ? (ориентировочное место правок помечено в коде)

 

З.Ы. cо спецификациями SW не работал ни разу, поэтому, просьба, делать поправку на мою дикость в этом вопросе.

З.Ы.Ы. во вложении так же моя тестова сборка (что бы была понятна заложенная глубина вхождений).

  версия программы - SW2019 sp5

 

 hatch.zip

Изменено пользователем nicomed
Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, nicomed сказал:

День добрый!

Прошу помощи общественности.

 

 Вопрос пока снят. Решил через : AssemblyDoc :: GetComponentByName().

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

Господа, есть ли люди готовые написать API под следующую задачу:

1. Есть спецификация панелей в экселе, в которой записаны следующие данные - № п/п; Длина; Ширина; Маркировка (вырезается номер на станке лазерной резки); количество.

2. Соответственно, у деталей отличаются длина, ширина и гравировка. Но гибы на всех панелях одинаковые.

3. Нужно скормить приложению таблицу, а на выходе получить модели  и чертежи в солид воркс, развертки в .dxf в название dxf должно быть  указанно количество

4. Желательно что наименование каждой панели соответствовало определённому правилу. 

 

Хотелось бы понять стоимость такого  приложения, и время необходимое на его разработку.

Надеюсь никаких  правил форума я не нарушил )) 

Ссылка на сообщение
Поделиться на других сайтах
29 минут назад, PinkAshes сказал:

Господа, есть ли люди готовые написать API под следующую задачу:

1. Есть спецификация панелей в экселе, в которой записаны следующие данные - № п/п; Длина; Ширина; Маркировка (вырезается номер на станке лазерной резки); количество.

2. Соответственно, у деталей отличаются длина, ширина и гравировка. Но гибы на всех панелях одинаковые.

3. Нужно скормить приложению таблицу, а на выходе получить модели  и чертежи в солид воркс, развертки в .dxf в название dxf должно быть  указанно количество

4. Желательно что наименование каждой панели соответствовало определённому правилу. 

 

Хотелось бы понять стоимость такого  приложения, и время необходимое на его разработку.

Надеюсь никаких  правил форума я не нарушил )) 

похоже справится обычная таблица параметров в Excel

Ссылка на сообщение
Поделиться на других сайтах
55 минут назад, PinkAshes сказал:

Господа, есть ли люди готовые написать API под следующую задачу:

1. Есть спецификация панелей в экселе, в которой записаны следующие данные - № п/п; Длина; Ширина; Маркировка (вырезается номер на станке лазерной резки); количество.

2. Соответственно, у деталей отличаются длина, ширина и гравировка. Но гибы на всех панелях одинаковые.

3. Нужно скормить приложению таблицу, а на выходе получить модели  и чертежи в солид воркс, развертки в .dxf в название dxf должно быть  указанно количество

4. Желательно что наименование каждой панели соответствовало определённому правилу. 

 

Хотелось бы понять стоимость такого  приложения, и время необходимое на его разработку.

Надеюсь никаких  правил форума я не нарушил )) 

 

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

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

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

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

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

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

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

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

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

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

    • tompsongun



  • Сообщения

    • Аверьянов Николай
      помогите пжл. какие существуют разрешающие параметры для прямого программирования угла через А? пример проги:    G0X0 G1Z0F0.5 X100. X120.,A10. дело не в запятой перед "А" и не в точках после цифр.   и не в том, что станок старый или в нём есть ось А. дело именно в параметрах, в которых есть бит, ноль или единица, --- разрешение данного программирования   
    • gudstartup
      и что? а сколько станок зарабатывает за месяц  он же у вас в 3 смены пашет или он воздух фрезерует? время-деньги и это знают все самое главное в ремонте станков это его оперативность если оборудование будет стоять потому что сервис и ваше омтс  просто подумать хочет то скоро будет   надо думать о том что кушать модульный и блочный ремонт для производства это лучший вариант для бесперебойной работы и исполнения заказов .   идеи вам были предложены . отсутствие опыта компенсируется наличием схемы которую вы назвали элементарной.  
    • Torin
      Есть вопрос по Лоцману, а где он хранит данные? К примеру в Windchill это vaults, а тут где?
    • Guhl
      Точно, я был неправ Разрешение дает сигнал с оптопары, которую, как я сейчас вспоминаю, включает падение напряжение на диоде в звене постоянного тока
    • Alexey8107
      Чем это плохо? А то что станок стоит, так что ему делать? На данный момент да, сижу с блоком разбираюсь и плохого ничего в этом не вижу, в отличие от вас... А параллельно еще решаю десяток задач, в том числе и по заказу нового блока. Кстати, этот блок в сборе стоит 640 000, силовая плата 320, сигнальная плата 180, IGBT модули по 27 каждый, тиристорный блок 17. Почти все есть в наличии. И да, на Али это все можно купить гораздо дешевле, но без каких либо гарантий, привезти с Китая проблема даже окольными путями и у нас на заводе этой хренью никто страдать не будет. Так что ОМТС проверяет контрагента... То, что я чего то не пишу, это не означает что я этого не делаю, вы сами писали о том, что я слишком много пишу. По вашей просьбе сокращаю.  Мы уже говорили на эту тему. Я не спрашиваю, что у меня сломалось и дайте мне ответ что. Я знаю что сломался PSM, так как SPM работает, если ему подкинуть заведомо исправный PSM, описываю симптомы и спрашиваю Чувствуете разницу?  Вот и сижу разбираюсь, пока решается вопрос с новым. Вот лично я не вижу ничего в этом плохого. Лично мне это интересно, делаю заметки на будущее для себя и выкладываю в открытый доступ(видимо тоже не хорошо), может кому-то будет полезно. Да, я хоть и инженер электронщик, но всего знать просто невозможно, так что простите что вот таких элементарных для вас вещей не знал, что на IGBT модулях тут собран и выпрямитель и рекуператор одновременно
    • gudstartup
      постоянно оно не фигачит так как есть сигнал разрешения импульсы никогда не приходят постоянно а имеют определенную длительность и фазу относительно напряжения прикладываемого между a и к
    • maxx2000
      конечно есть, apt это  cldata в котором к траекториям может быть добавлено и описание геометрии. 
    • gudi
      там же виндовс  или я ошибаюсь? 
    • Guhl
      Там есть неуправляемый мост на диодах и мост на тиристорах для рекуперации Тиристоры молотят постоянно. Не могу сказать в какой именно момент приходит импульсы на открытие - в начале полуволны или в около ее пика, но зажигание на тиристорах я видел и когда рекуперация не происходила Если вы открыли тиристор, то закроется он только тогда, когда через него прекратится ток, поэтому неважно постоянно приходят импульсы или нет. То есть если даже вы открыли тиристор в момент превышения постоянки, то закрыть вы его все равно не сможете так просто    
    • gudstartup
      они открываются тогда когда напряжение на шине dc выше допустимого иначе они будут вам просто так dc линию просаживать даже когда она в номинале а зачем это надо ? а я понял  чтобы на dc линии дополнительные пульсации создавать  вам может схему привести или вы сами найдете? @Guhl у вас не зародилась в голове мысль зачем ставить управляемый вентиль если он всегда сливает. угол уэ управления меняется можете проверить на ваших любимых древних приводах
×
×
  • Создать...