mrazzzb

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

ID: 1   Опубликовано: (изменено)

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

            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

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


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

ID: 2   Опубликовано: (изменено)

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

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 и выбирать от туда, определенную деталь.

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


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

ID: 5   Опубликовано: (изменено)

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 пользователю понравилось это

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


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

ID: 7   Опубликовано: (изменено)

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

Писал вот так, но 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 пользователей

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

  • реклама

  • Реклама

  • Ближайшие события

    Предстоящих событий не найдено
  • Дни рождения сегодня

    1. Aflon
      Aflon
      (52 года)
    2. andyboryssenko
      andyboryssenko
      (44 года)
    3. Arman
      Arman
      (40 лет)
    4. IBV
      IBV
      (60 лет)
    5. Maclay77
      Maclay77
      (40 лет)
    Просмотреть все