mrazzzb

API SOLIDWORKS Получить массу детали в сборке

Есть сборка, в которой не менее двух деталей, мне необходимо получить массу, объем и общую площадь поверхностей выбранной детали. Для этого первым делом нужно выбрать деталь для которой будем получат эти параметры, выбрал допустим в дереве конструирования, но почему то получаю сумму масс, объема и площади всех деталей в общем, а не определенной (выбранной в дереве конструирования). Получаю параметры так:         

            ModelDocExtension Extn;
            MassProperty MyMassProp;
            MyMassProp = ((MassProperty)(swDoc.Extension.CreateMassProperty()));
            Extn = swDoc.Extension;
            MyMassProp = Extn.CreateMassProperty();
            MyMassProp.UseSystemUnits = false;
            val = MyMassProp.Volume;//объем
            val = MyMassProp.SurfaceArea;//площадь
            val = MyMassProp.Mass;//масса

 

Изменено пользователем mrazzzb

Поделиться сообщением


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


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

using SolidWorks.Interop.sldworks;

using SolidWorks.Interop.swconst;

using System.Runtime.InteropServices;

using System;

 

namespace Macro1.csproj

{

    public partial class SolidWorksMacro

    {

 

        public class Components

        {

       public      ModelDoc2 model;

            public double mass;

        }

        public void Main()

        {

            System.Collections.Generic.List<Components> components = new System.Collections.Generic.List<Components>();

            SelectionMgr swselmgr;

            MassProperty MassProp;

             swselmgr =(SelectionMgr)swApp.IActiveDoc.SelectionManager;

            for (int SC = 1; SC <= swselmgr.GetSelectedObjectCount(); SC++)

            {

                Component2 swcomp = swselmgr.GetSelectedObjectsComponent3(SC, 0);

                if (swcomp != null)

                {

                    ModelDoc2 SelectedMod =(ModelDoc2) swcomp.GetModelDoc();

                    MassProp = (MassProperty)SelectedMod.Extension.CreateMassProperty();

                    Components Comp = new Components();

                    Comp.model = (ModelDoc2)swcomp.GetModelDoc();

                    Comp.mass = MassProp.Mass;

                    components.Add(Comp);

                }

 

            }

          

            foreach (Components cc in components)

            {

                string info =string.Format("{0} Mass:{1}", cc.model.GetPathName(),cc.mass.ToString());

 

                System.Windows.Forms.MessageBox.Show(info);

            }

         

        }

        /// <summary>

        ///  The SldWorks swApp variable is pre-assigned for you.

        /// </summary>

        public SldWorks swApp;

    }

}

 

Изменено пользователем streamdown
1 пользователю понравилось это

Поделиться сообщением


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


 

1 пользователю понравилось это

Поделиться сообщением


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

using SolidWorks.Interop.sldworks;

using SolidWorks.Interop.swconst;

using System.Runtime.InteropServices;

using System;

 

namespace Macro1.csproj

{

    public partial class SolidWorksMacro

    {

 

        public class Components

        {

       public      ModelDoc2 model;

            public double mass;

        }

        public void Main()

        {

            System.Collections.Generic.List<Components> components = new System.Collections.Generic.List<Components>();

            SelectionMgr swselmgr;

            MassProperty MassProp;

             swselmgr =(SelectionMgr)swApp.IActiveDoc.SelectionManager;

            for (int SC = 1; SC <= swselmgr.GetSelectedObjectCount(); SC++)

            {

                Component2 swcomp = swselmgr.GetSelectedObjectsComponent3(SC, 0);

                if (swcomp != null)

                {

                    ModelDoc2 SelectedMod =(ModelDoc2) swcomp.GetModelDoc();

                    MassProp = (MassProperty)SelectedMod.Extension.CreateMassProperty();

                    Components Comp = new Components();

                    Comp.model = (ModelDoc2)swcomp.GetModelDoc();

                    Comp.mass = MassProp.Mass;

                    components.Add(Comp);

                }

 

            }

          

            foreach (Components cc in components)

            {

                string info =string.Format("{0} Mass:{1}", cc.model.GetPathName(),cc.mass.ToString());

 

                System.Windows.Forms.MessageBox.Show(info);

            }

         

        }

        /// <summary>

        ///  The SldWorks swApp variable is pre-assigned for you.

        /// </summary>

        public SldWorks swApp;

    }

}

 

Отлично, очень хороший способ! Спасибо! Скажите пожалуйста, а как получить названия деталей из сборки, поместить их в Listbox и выбирать от туда, определенную деталь.

Поделиться сообщением


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

а как получить названия деталей из сборки

http://help.solidworks.com/2015/english/api/sldworksapi/traverse_assembly_at_component_and_feature_levels_using_recursion_example_csharp.htm

 

12 минуты назад, mrazzzb сказал:

поместить их в Listbox и выбирать от туда, определенную деталь.

ну, получить список имён и запихнуть в ListBox :biggrin:

жмакая на айтем листбокса делать SelectByID2 передавая в Name корректное имя компонента в соответствии со сборкой. Как получить корректное имя - ищите в указанной выше сообщениями теме, там уже рассматривалось.

Изменено пользователем streamdown
1 пользователю понравилось это

Поделиться сообщением


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

Вы мне скидывали пример нахождения крайних точек детали, скажите пожалуйста а можно ли получить крайние точки детали в сборке? (выбираю изначально в какой детали будем находить крайние точки, затем захожу в редактирование этой детали и уже находим крайние точки)

Писал вот так, но AssemblyDoc не содержит метод GetBodies2..

 

  private Body2 GetWorkingBody()
        {
            
            AssemblyDoc swAsmb = (AssemblyDoc)swDoc;
          //  PartDoc swPart = (PartDoc)swDoc;
            Object[] bodiesObjectArray = swAsmb.GetBodies2((int)swBodyType_e.swAllBodies, true);
           
            return (Body2)bodiesObjectArray[0]; 
        }

 

Изменено пользователем mrazzzb

Поделиться сообщением


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

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

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

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



  • Реклама

  • Сообщения

    • tm-ares
      Российские программы частично тут.
    • ILL
      А да, кстати, чуть не забыл.. Давненько @lobzik не радовал нас флеймовыми темами.. Финансирования не было??
    • Bully
      С точки зрения дубликатов да. Но про построение "правильной работы" - отдельная большая тема. И там уже обработка в сборке - лишь капля в море "правильности".   На всякий повторюсь ещё - я ни в коем случае не против. Если есть PLM/PDM (да хотя бы вообще какое-то стремление к выстроении работы между отделами/специалистами), то и однозначно за. Только большинство аргументов против обработки в самом файле выше высказаны абстрактно, в общем виде, не подумав о сравнении двух вариантов (т.е. чаще разницы нет).   PS Ладно, перестаю оффтопить :)
    • Борман
      Не важно когда и сколько читают.. важно КТО.
    • ILL
        У нас оба семестра на втором курсе.. Хотя мы ни разу не расчетчики..   А у нас добавились культурология, философия, психология и правоведение..
    • РоманВ
      Подскажите, есть ли более новая версия TuningSolidworks, чем 2010? Если нет, то как корректно поставить SW2018 с этим пакетом дополнений? Пробовал ставить, солид не подцепляет сам папки с шаблонами и прочим. Может быть ставить SW2010, чтобы корректно все ссылки подцепились, а потом накатывать обновлением 2018? Или может есть возможность где-то в файле прописать все пути для 2018 солида, чтобы он все подцеплял автоматически?
    • Bully
      три проекции не гарантия возможности изготовления. Бывают и такие "чертежи": Особенно при изменении того продукта, который "изготавливается десятилетиями и проблем не было".      PS А по теме - почему бы не прикрыть уже вопрос "проявлением политической воли"? Ясно, что такой темы не будет, поскольку только проблем администрации прибавится. Я уж не говорю о разборках с выливанием грязи, что не прибавит привлекательности ресурсу.
    • Slavdos
      добрый дабы не плодить тем никогда не сталкивался с задачей автоматизации в автокаде.  подскажете куда копать? есть МНОГО чертежей, с большим кол-вом исполнений.  когда контур одинаков, делаем таблицу исполнений в exel для SW а когда контуры по рисункам отличаются, выгоднее рисовать в автокаде НО недавно перешли от отверстий к полуотверстиям) ( элемент А). соответственно подрезать лишние элементы контура приходится вручную. что очень долго. как это можно автоматизировать?  
    • AlexKaz
      У нас было примерно так http://pstu.ru/files/file/uchplans/excel/fpmm/dpm/2016_12_01_fpmm_dpm_b_polnyy_.xls Т.е. сопромат начинается со 2-го курса. С советских времён мало что поменялось в этой программе. Начиная с этого года по слухам будет полный швах... Правда, сопромат выживет.
    • Кровососс
      Ниже, в течении сегодняшнего-завтрашнего сумеречного времени, будут выложены материалы для изучения глиссирующего режима студентами-философами-художниками.  Остальной материал, т.е. к материалу в снимках и анимации в ссылках выше я закрою доступ, а этот оставлю до глубокой осени, как образец для подражания невозможному изначально.