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

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
Ссылка на сообщение
Поделиться на других сайтах
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
Ссылка на сообщение
Поделиться на других сайтах

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

Писал вот так, но 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
Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

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

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

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

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

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




  • Сообщения

    • andref
      @gudstartup  ну если есть PCU50  то все гораздо проще: подключаем к нему мышь , клаву и монитор, загружаемся в Windows и выставляем там  нужный IP (надеюсь что он известен). А вот если 840Dsl без PCU50 , то да... Хотя может просто сетевые разъемы  перепутали  
    • Kate KAUS
      Инжиниринговая компания, специализирующаяся на проектировании морских портов и терминалов приглашает в команду Ведущего/главного инженера-проектировщика ПОС. Чем предстоит заниматься: Разработка разделов проектной документации ПОС согласно ПП№87; Анализ проектной и исходно-разрешительной документации, используемой в качестве данных для составления раздела ПОС Составление ведомостей объемов работ разделов ПОС; Выдача заданий и исходных данных для смежных отделов; Обеспечение увязки принятых решений с проектными решениями других разделов (частей) проекта; Принятие основных технических решений, их обоснование, согласование и защита в органах экспертизы. Разработка основных технических решений на период строительства объектов (ППР, ОПР, строительные решения); Обеспечение соответствия разрабатываемой документации стандартам, техническим условиям, заданию на проектирование.   Требования: Высшее профильное образование (строительное); Опыт не менее 3 лет по специализации ПОС, ППР; Знание требований, предъявляемых к оформлению проектной документации; Умение качественно и в срок выполнять поставленные задачи; Опыт работ на строительных площадках приветствуется; Опыт прохождения согласований проектной документации; Знание ПК на уровне уверенного пользователя: (AutoCAD, Adobe Acrobat PRO, MS Office : Word, Excel, выполнение расчетов в программах).   Мы предлагаем: Трудоустройство согласно ТК РФ Пятидневную рабочую неделю с 9:00 до 18:00 Все социальные гарантии, ДМС Полностью официальную заработную плату, уровень готовы обсуждать с успешным кандидатом Динамично развивающаяся компания, комфортный офис   г. СПб м. Василеостровская, зп от 100 000-140 000р.   Контакты: eksmirnova@kaus-group.ru ТГ @Kate_Kaus  
    • Maks Horhe
      Все ок, работает. Спасибо, только пересчитывает подачи, как отключить пересчет, работать с постоянной подачей? Есть аналог cftcp Siemens? Или надо лезть в параметры?
    • Anat2015
      Боюсь, что не смогу вам помочь, тему прочитал. Я давно уже на административной работе, технические нюансы не помню. Думаю, вам тут помогут.
    • gudstartup
      придется вам вооружиться access my machine выкачать образ cf и там отредактировать сетевые настройки или если образ есть то залить его для восстановления
    • andref
      на фото у вас не стойка а TCU (Thin Client Unit) Посмотрите в шкафу, вот примерно такой блок есть? PCU50.3
    • gudstartup
      кто вам сказал такую чушь? компенсационные импульсы чпу выдает всегда хоть пр полнозамкнутом хоть полузамкнутом контуре а это чего такое поясните? @ope@gusarm.ru а вообще по правильному надо весь контур перенастраивать при помощи svg
    • luzinvn
    • gudstartup
      @ope@gusarm.ru если нет ничего можете тут посмотреть в servo tune какие обороты у х и y при одинаковой линейной скорости если конечно редукторы тоже одинаковые поменяйте veloc gain 100+*
    • luzinvn
      Проверте ошибку шага винта (таблицу), так как при линейках она не нужна, а при позиционировании по датчику винта нужна. 
×
×
  • Создать...