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

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

Получается так, что примитивы эскиза, в частности дуги,  не имеют свойства длины. И её надо вычислять. Это так?

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


Здравствуйте,
 
Можно находить через кривые (ICurve::GetLength), где ICurve->ISketchSegment::GetCurve, но кривые  у примитивом неусеченные (untrimmed). Поэтому их изначально нужно усекать на конечных точках методом ICurve::TrimCurve, а для этого у каждого примитива нужно брать такие ::StartPoint/::EndPoint
 
Второй вариант использовать инструмент IMeasure. Вот пример, который работает для выделенного сегмента и выводит сообщение о длине в метрах
 
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSelMgr As SldWorks.SelectionMgr

Sub main()

    Set swApp = Application.SldWorks
        
    Set swModel = swApp.ActiveDoc
    
    Set swSelMgr = swModel.SelectionManager
    
    Dim swSeg(0) As SldWorks.SketchSegment
    
    Set swSeg(0) = swSelMgr.GetSelectedObject6(1, -1)
    
    Dim swMeasure As SldWorks.Measure
    
    Set swMeasure = swModel.Extension.CreateMeasure()
    swMeasure.Calculate swSeg
    
    Dim length As Double
    length = swMeasure.length
    
    If length = -1 Then
        length = swMeasure.ArcLength
    End If
    
    MsgBox length
        
End Sub
 

 

artem_cad, streamdown, поведайте по каким источникам изучаете VBA SW?

 

Мне пока удалось найти только  Automating SolidWorks with VBA от CADSharp LLC.

В природе есть ещё литература по VBA SW?

 

В основном это справка SolidWorks API, Других ресурсов я не находил. SolidWorks предоставляет достаточно хороший вводный курс SolidWorks API Fundamentals, но он доступен только через реселлера. В моей подписи есть пару ссылок на мои ресурсы, также официальный форум SolidWorks. В группе можно писать на русском, а насчет видео, оно на английском и в основном для языка c#, но если есть интерес, то могу добавить русские субтитры.
 
~A.
 
Ссылка на сообщение
Поделиться на других сайтах
~A.
 ах вооот что за Артём  :smile:  Приятно видеть специалиста такого уровня на редком русскоязычном форуме по API SW.
Ссылка на сообщение
Поделиться на других сайтах

Добрый день.

Всем огромное спасибо за помощь, кто отозвался на мои темы.

Написал макрос который перебрает все ссылки сборки заходит в них и переписывает свойства списка вырезов в свойства файла в закладку конфигурация. Все работает идеально.

Остался один не решенный вопрос.

Подскажите как открыть файл в фоновом режиме (что бы он не выводился на экран). А то при переборе и открытии всех деталей сборки. Они все поочереди выводятся на экран а потом закрывается, это конечно все происходит очень быстро. Но хотелось бы избавится от этого.

Вот часть кода для открытия

 

Set Part = swApp.ActivateDoc2(pgFileNames(i), False, longstatus)
Set swModel2 = swApp.ActiveDoc
Ссылка на сообщение
Поделиться на других сайтах

Добрый День,

Вам в данном случае нет необходимости открывать файлы. Неоходимо только убедиться, что Ваши компоненты полностью оперделены: Component2::GetSuppression=swComponentResolved. Если так, то можно брать указатель на модель через IComponent2::GetModelDoc2 и уже в нем перебирать дерево. Также можете перебирать дерево непосредственно в контексте сборки. Необходимо поменять IModelDoc2::FirstFeature на IComponent2::FirstFeature.

 

РЕДАКТИРОВАНО. Вспомнил, что Вы собираете файлы по путям, а не из дерева. Но в таком случае, они уже тоже загружены, только невидимы. Можете либо получить указатель по имени: SldWorks::GetOpenDocumentByName либо вызвать 

 

swApp.DocumentVisible False, swDocumentTypes_e.swDocPART
swApp.OpenDoc6 ...
swApp.DocumentVisible False, swDocumentTypes_e.swDocPART

Я бы посоветовал использовать ISldWorks::OpenDoc6 вместо ActivateDoc. Если докумен находиться в режиме lightweight, то этот способ загрузит документ, иначе он просто подключится к уже загруженному.

 

~A.

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

 

Здравствуйте,
 
Можно находить через кривые (ICurve::GetLength), где ICurve->ISketchSegment::GetCurve, но кривые  у примитивом неусеченные (untrimmed). Поэтому их изначально нужно усекать на конечных точках методом ICurve::TrimCurve, а для этого у каждого примитива нужно брать такие ::StartPoint/::EndPoint
 
Второй вариант использовать инструмент IMeasure. Вот пример, который работает для выделенного сегмента и выводит сообщение о длине в метрах
....

 

В основном это справка SolidWorks API, Других ресурсов я не находил. SolidWorks предоставляет достаточно хороший вводный курс SolidWorks API Fundamentals, но он доступен только через реселлера. В моей подписи есть пару ссылок на мои ресурсы, также официальный форум SolidWorks. В группе можно писать на русском, а насчет видео, оно на английском и в основном для языка c#, но если есть интерес, то могу добавить русские субтитры.
 
~A.
 

 

Спасибо, Артём!

 

Получается так, что один и тот же примитив (дуга на пример) может быть как  "Arc" и "Curve"?

:blink: .  Может я  не так понял?

Ещё вопрос. В примерах кода, которые я пока смотрел, используются выделенные до запуска макроса объекты, будь то объекты модели  или примитивы эскиза. Интересно, а можно выделять примитивы эскиза во время работы макроса? То есть мы первоначально выделяем группу дуг, которые образуют осевую шланга, а потом нужно указать дугу, длину которой желаем изменять так, что бы суммарная длина выбранных дуг соответствовала заданной. Такое возможно?

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

 ах вооот что за Артём  :smile:  Приятно видеть специалиста такого уровня на редком русскоязычном форуме по API SW.

 

Спасибо за такую оценку :smile: . А форум, пожалуй, единственный русскоязычный ресурс (да, и еще Ваш сайт). И я должен сказать по активности может посоперничать с официальным форумом SolidWorks.

 

Спасибо, Артём!

 

Получается так, что один и тот же примитив (дуга на пример) может быть как  "Arc" и "Curve"?

:blink: .  Может я  не так понял?

 

 

Примитивы типа SketchArc, SketchLine, SketchPrabola…  - это модель, которая определяет «внешний вид» объекта (например цвет), а ICurve – это математическое представление. Точно так же как и кромка – это внешний вид (IEdge), а ICurve – математика.  Т.е., когда вы видите окружность на чертеже – это SketchArc, но все его данные (положение, начальные точки, радиус) описаны в интерфейсе ICurve.

 

Ещё вопрос. В примерах кода, которые я пока смотрел, используются выделенные до запуска макроса объекты, будь то объекты модели  или примитивы эскиза. Интересно, а можно выделять примитивы эскиза во время работы макроса? То есть мы первоначально выделяем группу дуг, которые образуют осевую шланга, а потом нужно указать дугу, длину которой желаем изменять так, что бы суммарная длина выбранных дуг соответствовала заданной. Такое возможно?

 

Да можно. Но тут будет необходимо добавлять форму, чтобы макрос мог остановиться. К сожалению сообщения типа MsgBox будет блокировать окно SolidWorks и Вы не сможете ничего выделить. Самый простой вариант – это сразу выделить несколько объектов и считать, что первый – дуга, которую нужно изменить, 2й до последнуго – группа дуг. Но лучше всего для такой задачи подойдет стандартная страница SolidWorks (можно создать свою страницу и использовать SelectionBox для выбора). Пример создания страницы: http://help.solidworks.com/2012/English/api/swpublishedapi/Create_PropertyManager_Page_Example_vb.htm.

 

~A.

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

Класс!

Огромное спасибо, Артём! 

 

Ещё вопрос. А можно ли узнать, что на примитив, на пример нашу дугу, наложен размер. И если можно выяснить, что наложенный размер это длины дуги, то варьировать его с целью подбора?

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

@@artem_cad, , на американском форуме спрашивал, там "послали" по неверному пути. Да и сам неверно нашёл решение.

Можно ли в Solidworks получить Face Center (Centroid) БЕЗ выделения поверхности?  Ибо очень ресурсозатратная операция, даже с выключенным EnableGraphicsUpdate. К примеру, я пробежкой нашёл нужную поверхность. У меня есть её объект, теперь надо найти центр поверхности.

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

Здравствуйте!

Подскажите пожалуйста, как при помощи макроса, вставить строку в таблицу спецификации?

Вроде все просто, но ничего не происходит...

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

Добрый День,

Вам в данном случае нет необходимости открывать файлы. Неоходимо только убедиться, что Ваши компоненты полностью оперделены: Component2::GetSuppression=swComponentResolved. Если так, то можно брать указатель на модель через IComponent2::GetModelDoc2 и уже в нем перебирать дерево. Также можете перебирать дерево непосредственно в контексте сборки. Необходимо поменять IModelDoc2::FirstFeature на IComponent2::FirstFeature.

 

РЕДАКТИРОВАНО. Вспомнил, что Вы собираете файлы по путям, а не из дерева. Но в таком случае, они уже тоже загружены, только невидимы. Можете либо получить указатель по имени: SldWorks::GetOpenDocumentByName либо вызвать 

 

swApp.DocumentVisible False, swDocumentTypes_e.swDocPART
swApp.OpenDoc6 ...
swApp.DocumentVisible False, swDocumentTypes_e.swDocPART

Я бы посоветовал использовать ISldWorks::OpenDoc6 вместо ActivateDoc. Если докумен находиться в режиме lightweight, то этот способ загрузит документ, иначе он просто подключится к уже загруженному.

 

~A.

Спасибо огромное.

Но я еще новичок. По вашему совету сделал но возникла другая проблема:

 

Вот код main

 

Sub main()
    Set swApp = _
    Application.SldWorks


    Set swModel = swApp.ActiveDoc
    boolstatus = swModel.EditRebuild3()
    openFileDr = swModel.GetPathName
    openFile = Replace(openFileDr, ".SLDDRW", ".SLDASM")
    Set swModelDoc = swApp.OpenDoc6(openFile, swDocASSEMBLY, swOpenDocOptions_Silent, "", errors, warnings)
    If errors > 0 Then
        MsgBox ("Файл чертежа должен иметь такое же имя как и файл сборки. Переименуйте файл чертежа или перейдите в общуюю сборку и перезапустите макрос")
        Exit Sub
    End If
        Set swModelDocExt = swModelDoc.Extension
    Set swPackAndGo = swModelDocExt.GetPackAndGo 'Get Pack and Go object
    namesCount = swPackAndGo.GetDocumentNamesCount
    status = swPackAndGo.GetDocumentNames(pgFileNames)
    If (Not (IsEmpty(pgFileNames))) Then
        For i = 0 To UBound(pgFileNames)
            det = InStr(pgFileNames(i), ".sldprt")
                If det > 0 Then
                    swApp.DocumentVisible False, swDocumentTypes_e.swDocPART


                    swApp.OpenDoc6 pgFileNames(i), swDocASSEMBLY, swOpenDocOptions_Silent, "", errors, warnings
                    'Set Part = swApp.ActivateDoc2(pgFileNames(i), False, longstatus)
                    
                    swApp.DocumentVisible False, swDocumentTypes_e.swDocPART
                    
                    Set swModel2 = swApp.ActiveDoc
                    ConfigName = GetCurrentConfigName()
                    CatList = ReadCatList()
                    swApp.CloseDoc pgFileNames(i)
                End If
        Next i
    End If
    statuses = swModelDocExt.SavePackAndGo(swPackAndGo) ' Pack and Go
    boolstatus = swModel.EditRebuild3()
End Sub


Function ReadCatList()
  
Set Part = swApp.ActiveDoc
Set sMgr = Part.SelectionManager
Set cpMgr = Part.Extension.CustomPropertyManager("")
boolstatus = Part.Extension.SelectByID2("Sheet<1>", "SUBWELDFOLDER", 0, 0, 0, False, 0, Nothing, 0)
boolstatus1 = Part.Extension.SelectByID2("Элемент списка вырезов1", "SUBWELDFOLDER", 0, 0, 0, False, 0, Nothing, 0)
Set myFeature = sMgr.GetSelectedObject6(1, 0)
If boolstatus = False And boolstatus1 = False Then
   Exit Function
End If
Set SMcpMgr = myFeature.CustomPropertyManager
.....
.....
.....
End Function
 
Перестали работать строки
boolstatus = Part.Extension.SelectByID2("Sheet<1>", "SUBWELDFOLDER", 0, 0, 0, False, 0, Nothing, 0)
boolstatus1 = Part.Extension.SelectByID2("Элемент списка вырезов1", "SUBWELDFOLDER", 0, 0, 0, False, 0, Nothing, 0)

Не получает доступ к элементам списка вырезов, при закрытом файле.

Подскажите как решить эту проблему.

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

@@artem_cad, , на американском форуме спрашивал, там "послали" по неверному пути. Да и сам неверно нашёл решение.

Можно ли в Solidworks получить Face Center (Centroid) БЕЗ выделения поверхности?  Ибо очень ресурсозатратная операция, даже с выключенным EnableGraphicsUpdate. К примеру, я пробежкой нашёл нужную поверхность. У меня есть её объект, теперь надо найти центр поверхности.

 

Попробовал сделать через временные тела и центр масс, получилось в среднем увеличить результативность в 2-4 раза. Ниже код, который я использовал. Причем странно, что операция по трансформации координат в сборке занимает половину времени, хотя это достаточно простая математика. Вы можете заменить следующий код на соответсвующие формулы по трансформации:

IMathPoint pt = mathUtils.CreatePoint(new double[] { prps[0], prps[1], prps[2] }) as IMathPoint;
pt = pt.MultiplyTransform(face.Value) as IMathPoint;

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

public void Main()
        {
            IModelDoc2 model = swApp.IActiveDoc2;
 
            double[] prps = null;
            System.DateTime start;
 
            //TEST-1
            StringBuilder res1 = new StringBuilder();
            start = System.DateTime.Now;
            IMathUtility mathUtils = swApp.IGetMathUtility();
            foreach (KeyValuePair<IFace2, IMathTransform> face in TraverseFaces())
            {
                IBody2 body = face.Key.CreateSheetBody() as IBody2;
                prps = body.GetMassProperties(0) as double[];
                //slow part (increases teh time in 1.5-2 times. May be replaced with matrix calculations)
                IMathPoint pt = mathUtils.CreatePoint(new double[] { prps[0], prps[1], prps[2] }) as IMathPoint;
                pt = pt.MultiplyTransform(face.Value) as IMathPoint;
                prps = pt.ArrayData as double[];
                //
                res1.AppendFormat(string.Format("{0}{1};{2};{3}", System.Environment.NewLine, prps[0], prps[1], prps[2]));
            }
 
            string time1 = string.Format("Time (Test1): {0}", System.DateTime.Now.Subtract(start).TotalMilliseconds);
 
            //TEST-2
            StringBuilder res2 = new StringBuilder();
            start = System.DateTime.Now;
 
            foreach (KeyValuePair<IFace2, IMathTransform> face in TraverseFaces())
            {
                (face.Key as IEntity).Select4(false, null);
                prps = model.Extension.GetSectionProperties2(
                face.Key) as double[];
 
                res2.AppendFormat(string.Format("{0}{1};{2};{3}", System.Environment.NewLine, prps[2], prps[3], prps[4]));
            }
 
            string time2 = string.Format("Time (Test2): {0}", System.DateTime.Now.Subtract(start).TotalMilliseconds);
 
            model.ClearSelection2(true);
        }
 
        private IEnumerable<KeyValuePair<IFace2, IMathTransform>> TraverseFaces()
        {
            IAssemblyDoc assm = swApp.IActiveDoc2 as IAssemblyDoc;
            object[] comps = assm.GetComponents(false) as object[];
 
            foreach (IComponent2 comp in comps)
            {
                IMathTransform xForm = comp.Transform2;
 
                object bodiesInfo;
                object[] bodies = comp.GetBodies3((int) swBodyType_e.swAllBodies, out bodiesInfo) as object[];
 
                foreach (IBody2 b in bodies)
                {
                    object[] faces = b.GetFaces() as object[];
 
                    foreach (IFace2 face in faces)
                    {
                        if (face.IGetSurface().IsPlane())
                        {
                            yield return new KeyValuePair<IFace2, IMathTransform>(face, xForm);
                        }
                    }
                }
            }
        }
 
        public SldWorks swApp;

Класс!

Огромное спасибо, Артём! 

 

Ещё вопрос. А можно ли узнать, что на примитив, на пример нашу дугу, наложен размер. И если можно выяснить, что наложенный размер это длины дуги, то варьировать его с целью подбора?

 

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

 

Вот пример, который находит к чему прикреплен выделенный размер. Теперь нужно сравнить эти элементы (vEnts) с исходным примитивом. Для Вашей задачи нужно перебрать все размеры (IFeature::GetFirstDisplayDimension, IDisplayDiemnsion::GetNext5)

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSelMgr As SldWorks.SelectionMgr
Dim swDispDim As SldWorks.DisplayDimension
Dim swAnn As SldWorks.Annotation

Sub main()

    Set swApp = Application.SldWorks
    
    Set swModel = swApp.ActiveDoc
    
    Set swSelMgr = swModel.SelectionManager
    
    Set swDispDim = swSelMgr.GetSelectedObject6(1, -1)
    
    Set swAnn = swDispDim.GetAnnotation
    
    Dim vEnts As Variant
    
    vEnts = swAnn.GetAttachedEntities3
    
    If IsEmpty(vEnts) Then
        MsgBox ("Dimension isn't linked!")
    End If
    
End Sub

~A.

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

Вот как раз это 

(face.Key as IEntity).Select4(false, null);

И давало очень продолжительное время при переборе.

 

Попробую, спасибо.

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

Кстати ещё вопрос. При переборе в сборке

(face.Key as IEntity).Select4(false, null);
 

Разве не надо GetCorrespondingEntity вызывать?

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

Кстати ещё вопрос. При переборе в сборке

 

 

 

Разве не надо GetCorrespondingEntity вызывать?

 

Не обязательно, так как IFace2 берется из компонентка в контексте сборки. GetCorresponding будeт нужен, если получать фэйсы в контексте детали, например: IComponent2::GetModelDoc2->IModelDoc2->...

 

Хотя странно, когда делаешь IFace2::CreateSheetBody, то тело возвращается в координатной системе детали, и поэтому его нужно трансформировать, хотя по логике должно быть в контексте сборки.

 

~A.

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

Спасибо огромное.

Но я еще новичок. По вашему совету сделал но возникла другая проблема:

 

Вот код main

 

Sub main()
    Set swApp = _
    Application.SldWorks


    Set swModel = swApp.ActiveDoc
    boolstatus = swModel.EditRebuild3()
    openFileDr = swModel.GetPathName
    openFile = Replace(openFileDr, ".SLDDRW", ".SLDASM")
    Set swModelDoc = swApp.OpenDoc6(openFile, swDocASSEMBLY, swOpenDocOptions_Silent, "", errors, warnings)
    If errors > 0 Then
        MsgBox ("Файл чертежа должен иметь такое же имя как и файл сборки. Переименуйте файл чертежа или перейдите в общуюю сборку и перезапустите макрос")
        Exit Sub
    End If
        Set swModelDocExt = swModelDoc.Extension
    Set swPackAndGo = swModelDocExt.GetPackAndGo 'Get Pack and Go object
    namesCount = swPackAndGo.GetDocumentNamesCount
    status = swPackAndGo.GetDocumentNames(pgFileNames)
    If (Not (IsEmpty(pgFileNames))) Then
        For i = 0 To UBound(pgFileNames)
            det = InStr(pgFileNames(i), ".sldprt")
                If det > 0 Then
                    swApp.DocumentVisible False, swDocumentTypes_e.swDocPART


                    swApp.OpenDoc6 pgFileNames(i), swDocASSEMBLY, swOpenDocOptions_Silent, "", errors, warnings
                    'Set Part = swApp.ActivateDoc2(pgFileNames(i), False, longstatus)
                    
                    swApp.DocumentVisible False, swDocumentTypes_e.swDocPART
                    
                    Set swModel2 = swApp.ActiveDoc
                    ConfigName = GetCurrentConfigName()
                    CatList = ReadCatList()
                    swApp.CloseDoc pgFileNames(i)
                End If
        Next i
    End If
    statuses = swModelDocExt.SavePackAndGo(swPackAndGo) ' Pack and Go
    boolstatus = swModel.EditRebuild3()
End Sub


Function ReadCatList()
  
Set Part = swApp.ActiveDoc
Set sMgr = Part.SelectionManager
Set cpMgr = Part.Extension.CustomPropertyManager("")
boolstatus = Part.Extension.SelectByID2("Sheet<1>", "SUBWELDFOLDER", 0, 0, 0, False, 0, Nothing, 0)
boolstatus1 = Part.Extension.SelectByID2("Элемент списка вырезов1", "SUBWELDFOLDER", 0, 0, 0, False, 0, Nothing, 0)
Set myFeature = sMgr.GetSelectedObject6(1, 0)
If boolstatus = False And boolstatus1 = False Then
   Exit Function
End If
Set SMcpMgr = myFeature.CustomPropertyManager
.....
.....
.....
End Function
 
Перестали работать строки
boolstatus = Part.Extension.SelectByID2("Sheet<1>", "SUBWELDFOLDER", 0, 0, 0, False, 0, Nothing, 0)
boolstatus1 = Part.Extension.SelectByID2("Элемент списка вырезов1", "SUBWELDFOLDER", 0, 0, 0, False, 0, Nothing, 0)

Не получает доступ к элементам списка вырезов, при закрытом файле.

Подскажите как решить эту проблему.

 

SelectById2 работает только с активным документом. А можете рассказать зачем Вы выделяете эти объекты? Я думаю можно сделать другим методом (перебором). Я не знаю Ваш код, но мог бы подсказать, как сделать по другому. Я бы не советовал пользоваться SelectById2 - с ним очень много проблем.

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

Здравствуйте!

Подскажите пожалуйста, как при помощи макроса, вставить строку в таблицу спецификации?

Вроде все просто, но ничего не происходит...

 

Здравствуйте, попробуйте метод TableAnnotation::InsertRow.

 

~A.

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

@@artem_cad, как человек, причастный (или когда-то) к SW Corp, расскажи пожалуйста:

http://cccp3d.ru/topic/27048-solidworks-api/page-24#entry705509

Так ли это? Получается что сам топик API SW - пиратство  :smile:

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

Хочу посмотреть значение размера эскиза таким кодом:

 
 
     For i = 1 To swSelMgr.GetSelectedObjectCount2(-1)
 
        If swSelMgr.GetSelectedObjectType3(i, -1) = swSelectType_e.swSelDIMENSIONS Then
            Dim swDispDim As SldWorks.DisplayDimension
            Set swDispDim = swSelMgr.GetSelectedObject6(i, -1)
 
            Dim swDim As SldWorks.Dimension
            Set swDim = swDispDim.GetDimension2(Empty)
 
            MsgBox swDim.GetValue3(swThisConfiguration, Empty)
       
        End If
    Next i
 
А он вместо значения размера показывает ошибку. Где я накосячил?
Изменено пользователем IgorT
Ссылка на сообщение
Поделиться на других сайтах

SelectById2 работает только с активным документом. А можете рассказать зачем Вы выделяете эти объекты? Я думаю можно сделать другим методом (перебором). Я не знаю Ваш код, но мог бы подсказать, как сделать по другому. Я бы не советовал пользоваться SelectById2 - с ним очень много проблем.

Цель макроса, перенести все данніе из свойства списка вырезов листового материала и сварной конструкции в свойства файла в закладку конфигурация. Дабы потом все эти данные использовать в спецификации.

Вот образец спецификации:

Полка ооснования СБ.PDF

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

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

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

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

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

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

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

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

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

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

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




  • Сообщения

    • Metal_Cutter
    • Jesse
      а если нет АЧХ, то можно ли воспользоваться этой методикой для отстройки оборудования от резонанса на собственной частоте f0? Ну т.е. задаться каким-нибудь уровнем демпфирования (скажем, 0.02), провести через три точки (f1, 0.707A); (f0, A); (f2, 0.707A) квадратичный интерполяц-й полином, и определить полосу пропускания [f1 .. f2] просто умножив 2*ξ*f0. И типа заявить "так и так, вне этого диапазона будет збс.. Внутри - не збс." Ну либо можно взять мЕньшую амплитуду..) Вы так делали?) Ну или кто-нибудь? Мне нужно как-то хитро обосновать отстройку от резонанса многоступенчатого центробежного насоса. В нормативке ничо нет..)  
    • Андрей67
      Где можно об этом почитать?
    • Guhl
      Ох, простите, я хотел автора процитировать, а процитировал вас @stoomb Нашли параметр 315#23?
    • ak762
      я не работал с Хаасом, но встречал "rapid move of two or more axes, the axis with the shorter distance will finish first." на других станках,    подача в rapid moves быстрее high speed feeds не менее 1.5 раза в единичном производстве переключение "rapid moves as high speed feeds" не критично, а уже даже в мелкосерийном это отражается на производительности  А картина в КАМ не означает что на станке будет абсолютно тоже самое, поэтому и существуют всякие дополнительные симуляторы НЦ кода для согласования реального станка с виртуальным. Странно что тс не замечал этого на протяжении длительного времени  
    • Нанософт разработка
      АО «Сибирский научно-исследовательский, конструкторский и проектный институт алюминиевой и электродной промышленности» («СибВАМИ») – генеральный проектировщик крупных российских металлургических заводов. Входит в состав объединенной компании «РУСАЛ» – ведущего игрока мировой алюминиевой отрасли. Институт работает с 1959 года, 10 апреля 2024-го он отметил свое 65-летие. АО «СибВАМИ» располагается в Иркутске и имеет пять обособленных подразделений в Красноярске, Братске, Новокузнецке, Саяногорске и Каменск-Уральском. Является многолетним пользователем САПР для разработки и оформления проектной документации в рамках создания новых производственных мощностей и технической модернизации действующих. Из этой статьи вы узнаете, почему еще в 2013 году руководство «СибВАМИ» решило заменить AutoCAD от американского поставщика Autodesk на российскую Платформу nanoCAD и после более чем десяти лет сотрудничества с «Нанософт» не планирует вести деятельность в сторонних САПР. Поставку лицензий и техническую поддержку на всех этапах внедрения осуществила компания «Макссофт-24», премьер- и фокус-партнер «Нанософт» по направлениям «Конструкции» и «Землеустройство».   Российской компании – российская САПР: доступно, надежно, перспективно Предпосылкой к поиску альтернативных САПР как зарубежного, так и российского производства стало для «СибВАМИ» изменение ценовой политики Autodesk в части перехода на годовые подписки и увеличение стоимости лицензий. Но уже на старте этой работы решено было рассматривать именно отечественные решения – в первую очередь с целью обеспечения безопасности. По результатам отбора институт отдал предпочтение Платформе nanoCAD от «Нанософт». Кроме очевидной выгоды по стоимости в сравнении с западным предшественником, специалистам «СибВАМИ» была важна совокупность критериев для сохранения высокой скорости повседневной работы: ·        поддержка *.dwg-формата; ·        знакомый интерфейс; ·        поддержка российских стандартов; ·        широкий набор программных инструментов.   Анастасия Пьянкина, начальник технического отдела АО «СибВАМИ»   «Для предприятия на момент замены САПР основным критерием отбора была стоимость, вторым – утилита “СПДС”. В AutoCAD она сложна и в целом не была востребована в работе. Мы самостоятельно создавали подпрограммные настройки для оформления чертежей, встроенными не пользовались. В nanoCAD эта функция понятна и по интерфейсу, и по применению; настроена на российские ГОСТы, то есть сложностей с ее использованием не возникает. Знаете, как говорят: “Чем круче джип, тем дальше идти за трактором”, зачем усложнять работу, если можно ее упростить».   Импортозамещение за «пятилетку» без срыва сроков реализации проектов Полноценное внедрение новой САПР в работу всех подразделений большого предприятия – дело не быстрое. В «СибВАМИ» это хорошо понимали, когда ставили себе цель полностью отказаться от работы в AutoCAD и установить Платформу nanoCAD на каждое рабочее место. Только такой вариант исключал неизбежные путаницу и конфликты чертежей при одновременной работе сразу в нескольких САПР, а значит и негативное влияние на динамику производственных процессов. Так в 2013 году стартовало поэтапное внедрение, начавшееся с головного офиса «СибВАМИ» в Иркутске и обособленного подразделения в Красноярске: 1.      Обследование тестовой группой. 2.      Выбор необходимого ПО. 3.      Обучение пользователей. 4.      Разворачивание рабочих мест. 5.      Адаптация инженеров к новой САПР и разработка стандарта предприятия. 6.      Введение в эксплуатацию.   Этап 1. Обследование тестовой группой На первом этапе была создана тестовая группа, которая включала в себя по два-три человека от каждого направления из технологического, строительного и общеинженерного отделов головного офиса и обособленного подразделения. Задача стояла протестировать всю линейку продуктов nanoCAD и отобрать для работы необходимое ПО от «Нанософт», которое охватывало бы все проектные потребности института. В течение года группа оценивала оформление, настройки и другие функции выбранных программ, попутно составляя перечень вопросов для консультаций со специалистами разработчика.     Анастасия Пьянкина, начальник технического отдела АО «СибВАМИ»     «На этом этапе очень помогали специалисты компании “Макссофт-24”, оперативно отвечали на все наши вопросы, связанные с тестированием и освоением функционала продуктовой линейки на базе nanoCAD. Не возникло явного отторжения продуктов, что дало импульс уверенно двигаться дальше».   Этап 2. Выбор необходимого ПО «СибВАМИ» – проектный институт полного цикла: он проводит комплекс работ по промышленному производству, в том числе разрабатывает головные образцы нового технологического оборудования, а также средств механизации и автоматизации различного назначения. По итогам тестирования и детального изучения продуктов «Нанософт» определились актуальные для задач института рабочие инструменты. Для головного подразделения в Иркутске ими стали Платформа nanoCAD c дополнительными модулями «СПДС» и «Механика», программы nanoCAD Стройплощадка, nanoCAD GeoniCS и nanoCAD BIM Электро. В обособленном подразделении развернули рабочие места с аналогичным набором решений за исключением модуля «Механика». Всего за 2014 год в обоих подразделениях было установлено 119 рабочих мест с сетевыми версиями продуктов nanoCAD. Для проверки соответствия и актуальности нормативных документов, указываемых в пояснительных записках и проектной документации, использовалась программа NormaCS, дистрибьютором которой является «Нанософт». Программа работает в связке с nanoCAD, а ее ключевое удобство состоит в том, что анализ информации происходит в Word-документе и все изменения выделяются автоматически.   Этап 3. Обучение пользователей После отбора ПО стартовало обучение персонала. Специалисты «Макссофт-24» проводили групповые и индивидуальные уроки в онлайн-формате с итоговой аттестацией слушателей. Параллельно инженеры института самостоятельно осваивали функционал САПР, используя встроенные подсказки в интерфейсе, а также участвовали в открытых публичных вебинарах, организованных разработчиком и партнером. Обратную связь после комплексного обучения и практической работы с продуктами собирали через опросы инженеров «СибВАМИ». Для полноценного внедрения выбранных продуктов специалисты компании «Макссофт-24» ежегодно встречались с инженерами «СибВАМИ», детально прорабатывая каждый вопрос функционала ПО. Обратная связь от пользователей анализировалась с разделением запросов на две категории: ·        задача решается штатным функционалом – нужно дополнительное обучение сотрудников; ·        задача не решается или решается с ошибками – требуется доработка программного продукта. На основе задач из второй категории составлялся план работ, который поступал программистам «Нанософт». Таким образом постепенно наращивался необходимый функционал.   Этап 4. Разворачивание рабочих мест Вооружившись базовыми знаниями о новой САПР, инженеры приступили к проектированию в линейке nanoCAD, консультируясь с группой технической поддержки из специалистов «Макссофт-24». Оперативное содействие разработчика и партнера помогало устранять возникающие ошибки в короткие сроки и без ущерба для производственного процесса. Каждый отдельный вопрос поступал в проработку для модернизации программы в ее очередной версии. Благодаря такому подходу новые сборки Платформы еще полнее отвечали конкретным потребностям пользователей.   Этап 5. Адаптация инженеров к новой САПР и разработка стандарта предприятия Новое ПО инженеры «СибВАМИ» приняли не сразу. Во-первых, опытные проектировщики были убеждены, что AutoCAD – бессменный лидер, монополист мирового рынка САПР, и достойных аналогов ему нет. Во-вторых, радикальная, в масштабах всего предприятия замена привычных программных инструментов проектирования могла сильно затормозить работу, не говоря уже о риске финансовых потерь при планировании и реализации проекта. Уверенный настрой руководства, его убежденность в стратегической правильности принятого решения, а также обоснованное мнение тестовой группы пользователей помогли убедить коллег-проектировщиков, что грядущие перемены – оправданная мера, которая в будущем убережет институт от больших сложностей.     Анастасия Пьянкина, начальник технического отдела АО «СибВАМИ»     «Освоение продуктов nanoCAD проходило постепенно, с полным погружением в каждый возникавший вопрос. Благодаря привычному интерфейсу и подсказкам инженеры быстро обучались, а спорные моменты решали все вместе. Коллеги были рады поделиться своим опытом, при этом ощущая мощную поддержку коллектива».     Инженеры института отметили следующие функции, которые помогли автоматизировать ряд задач по текущим проектам: ·        возможность оформления спецификации и любой таблицы с последующим их переводом в Excel – решается нажатием одной кнопки; ·        трассировка форматов jpeg – преобразование старых копий чертежей в векторный формат; ·        умная выноска – простая работа со слоями проекта; ·        работа с фильтрами – удобный поиск нужных элементов.           Пример чертежа общих данных участка складирования, выполненного в Платформе nanoCAD План и разрез участка складирования, выполненные в Платформе nanoCAD   За пять лет активной проектной работы в продуктах nanoCAD институт создал корпоративный стандарт, хотя изначально такая задача не ставилась. В стандарт вошли требования к единообразному оформлению чертежей (шрифты, высота текста для определенных элементов, толщина линий и т.д.). Также в нем представлены бизнес-процессы: от обмена заданиями между подразделениями до этапности выпуска проектной документации. На выходе получился не просто серьезный документ – сформировалась единая культура проектирования. Новые сотрудники не испытывали сложностей в работе с Платформой nanoCAD по утвержденному регламенту, а уже опытные специалисты, используя общепринятые шаблоны, тратили на оформление проектной документации гораздо меньше времени. Именно благодаря стандарту установилось полное и беспрепятственное взаимодействие между отделами.   Этап 6. Введение в эксплуатацию В настоящее время налажена стабильная работа со всеми задействованными в институте продуктами nanoCAD. При выходе очередной сборки ПО компьютеры пользователей не «зависают», как это случалось в начале внедрения, – обновление происходит гладко благодаря установке новой версии «поверх» предыдущей. Вопросов не возникает даже относительно проектов, созданных в зарубежных САПР. Бывают случаи, когда чертежи от иностранных партнеров приходят в редактируемом формате, но некорректно отображаются в продуктах nanoCAD. Такой проект проходит первичную аналитику и редактуру у инженеров «Макссофт-24». Если требуется более серьезная работа с «конфликтами», подключаются специалисты «Нанософт». «СибВАМИ» практикует регулярное повышение квалификации своих инженеров в работе с Платформой nanoCAD: раз в полгода проводятся вебинары по возможностям новейших версий продуктов разработчика. Результатом системного процесса внедрения и использования решений «Нанософт» в «СибВАМИ» стали успешно реализованные проекты. Так, проект Центрального административно-бытового комплекса полностью выполнен в nanoCAD.       Чертеж фасада здания административно-бытового комплекса, выполненный в Платформе nanoCAD       Построенное здание административно-бытового комплекса   Удобство работы по общепринятым стандартам проектирования в российской Платформе nanoCAD Кардинальная замена ПО в «СибВАМИ», привыкшем годами работать в продуктах зарубежных разработчиков, не только не оказала негативного воздействия на процесс проектирования, но и дала организации преимущества как пользователю российской САПР. После перехода на продукты линейки nanoCAD институт мог вернуться к проектированию в САПР иностранных разработчиков, но делать этого не стал. По словам сотрудников «СибВАМИ», для этого есть минимум две причины: 1) удобство использования российского продукта, подтвержденное на практике проектировщиками различных специальностей; 2) отсутствие необходимости переплачивать за функции, которые не задействованы в процессе работы над проектом. Платформа nanoCAD – это база, на которую можно установить именно те инструменты, которые будут востребованы на предприятии.   Надежда Худобердина, директор ООО «Макссофт-24»   «”СибВАМИ” – одно из первых крупных предприятий, масштабно внедривших Платформу nanoCAD на уровне всех подразделений в шести городах. Сегодня можно уверенно говорить об успехе этого проекта. В 2022 году количество лицензий Платформы nanoCAD уже составляло порядка 300 единиц, а общее число лицензий дополнительных модулей “СПДС” и “Механика” превысило две сотни. Отмеченное инженерами института удобство проектирования – следствие работы nanoCAD по российским стандартам. Не возникает спорных ситуаций при нормоконтроле проектной и рабочей документации, а затем и в процессе строительства».     Анастасия Пьянкина, начальник технического отдела АО «СибВАМИ» «В России запущен и активно идет процесс импортозамещения. Многолетнее сотрудничество наших компаний только подтверждает, что у российских разработчиков ПО достаточно потенциала, чтобы составить равную конкуренцию зарубежным производителям. Считаем “Нанософт” ответственным и надежным партнером, поскольку мы обеспечены всем необходимым функционалом и технической поддержкой для стабильной работы ПО».     О компании «Макссофт-24» «Макссофт-24» с 1991 года оказывает профессиональные услуги в области IT-сопровождения на всей территории Российской Федерации. Компания обеспечивает своих клиентов надежными инновационными решениями и сервисами, благодаря сотрудничеству с ведущими отечественными разработчиками высоких технологий. Среди основных направлений деятельности – внедрение САПР/ТИМ-решений от разработчика «Нанософт». Официальный сайт: www.maxsoft.ru   О компании «Нанософт» «Нанософт» – российский разработчик инженерного ПО: технологий автоматизированного проектирования (CAD/САПР), информационного моделирования (BIM/ТИМ) и сопровождения объектов промышленного и гражданского строительства (ПГС) на всех этапах жизненного цикла, а также сквозной цифровизации всех процессов в производстве. Флагманский продукт – Платформа nanoCAD – универсальная САПР для создания чертежей и 3D-моделей с прямой поддержкой *.dwg-формата. Миссия компании – формирование условий для массового оснащения российского рынка лицензионными, качественными и доступными отечественными программными продуктами. «Нанософт» помогает своим заказчикам достичь импортонезависимости в области инженерного ПО, что позволяет гарантированно защитить критически важную ИТ-инфраструктуру. Все программные продукты компании включены в Единый реестр российских программ для электронных вычислительных машин и баз данных. Официальный сайт: www.nanocad.ru  
    • Killerchik
      Совершенно верно. А возможность поворота на фото выше есть (прошу прощения, может спутаю оси) только в плоскостях ZX и XY. И сколько бы станок не крутил и не двигал всеми своими осями, ось шпинделя останется неперпендикулярна поверхности стола в плоскости ZY, что приведёт к описанным мною выше проблемам. Это не исправить никакой программной компенсацией.   Если в проблемной плоскости нет возможности физического поворота - то никак. Переместить условную точку можно в любую точку, а вот обеспечить правильное положение в пространстве физических осей так легко не получится.   Это не валидный пример для данной ситуации. Давайте его чуть изменим - револьверная голова повёрнута относительно оси главного шпинделя. Соответственно, оси приводных инструментов смотрят куда-то не туда и не параллельны оси главного шпинделя. И никакой программной компенсацией это не исправить.
    • Guhl
      Так вы пишете в одном месте отключить, а в другом включить Вот и непонятно Так включить или отключить? Вы же не писали что для проверки, а просто сказали отключить в теме с хх Задаю вам прямой вопрос, а вы мне ответить не можете  
    • nein
      Здравствуйте. Станок MIKRON UM 900 S TNC426. Если в программе много коротких перемещений, станок вибрирует и качество поверхности - плохое. Менял стратегию обработки - при более-менее длинных отрезках ситуация улучшается. Думаю, что почему-то станок делает остановки между кадрами.  Подскажите, пожалуйста, где в параметрах это можно проверить и исправить. Спасибо.
    • advocut
      @hlibhlib спасибо, стало понятнее. Наконец-то источник по операции Stock Model.
×
×
  • Создать...