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

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

2 часа назад, Kelny сказал:

Присвойте переменной отвечающей за глобальные переменные в начале макроса NullString или "":

ВашаПеременная = NullString

 

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

 

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

Не сразу, но получилось)))))))

Ссылка на сообщение
Поделиться на других сайтах
  • 2 месяца спустя...


Встретил пример работы с файловой системой (VBA)

 

Dim fso As FileSystemObject
Set fso = New Scripting.FileSystemObject

 

Сам объект FileSystemObject описан в документации microsoft тут:

https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/filesystemobject-object

 

Проблема в том что вышеописанный пример не компилируется потому что надо добавить ссылку (меню Tools/References)

 

Подскажите пожалуйста как называется reference, которую надо добавить в проект чтобы появился  FileSystemObject ?
Полистал объекты Microsoft - не нашел, просто Scripting у меня так же нет

 

Пока использую работающий вариант - но он плох тем, что нет автодополнения

 

Set objFSO = CreateObject("Scripting.FileSystemObject")

 

2022-11-14_19-47-28.png

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

@g687 вроде вот так работает

 

 

SLDWORKS_CRyqyHpA08.png

 

-------------------------------

А не, во нашёл

 

SLDWORKS_pn3boTjfnJ.png

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

Встречается запись:

Debug.Print

 

Так и не нашел места - куда выводится вывод (VSTO отдельно не ставил, пользуюсь тем что дал Solidworks)

 

Есть ли в стандартном VBA для Solidworks какой то экран где можно посмотреть вывод Debug ?

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

@g687 Конечно :)

изображение.png

Появится окошечко внизу с одноименным названием, туда VBA Editor всё и выплевывает в процессе debug-а ;)

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

Подскажете, почему не могу запустить прогу из букваря солида? (Get Solid Bodies from Cut-list Folders and Get Custom Properties Example (C#)) ссылка. Дает код ошибки CS5001  Программа не содержит статического метода "Main", подходящего для точки входа.

Ссылки на dll sldworks, swcommands и swconst в проект вставил (vs22)...

 

using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
using System.Runtime.InteropServices;
using System;
using Microsoft.VisualBasic;
using System.Diagnostics;

namespace ConsoleApp5
{
    public partial class SolidWorksMacro
    {
        ModelDoc2 swPart;
        Feature swFeat;

        public void Main()
        {
            swPart = (ModelDoc2)swApp.ActiveDoc;
            Debug.Print("File: " + swPart.GetPathName());
            string ConfigName = null;
            ConfigName = swPart.ConfigurationManager.ActiveConfiguration.Name;
            Debug.Print("Active configuration name: " + ConfigName);
            swFeat = (Feature)swPart.FirstFeature();
            TraverseFeatures(swFeat, true, "Root Feature");

        }
...

 

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

public void Main()

А если попробовать: public static void Main() или static void Main()

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

Подскажете, почему не могу запустить прогу из букваря солида?

Так попробуйте другие примеры, везде люди, могли и ошибиться или запускать этот кусок из другого модуля и оно работало или используется другой тип проекта, где работает приведённый код. Или скопировать кусок кода процедуры/функции в работающий проект/код.

@Solan

Цитата

MainМетод необходим только при компиляции исполняемого файла, то есть при указании элемента Main или winexe параметра компилятора TargetType . следующие типы проектов Visual Studio по умолчанию указывают один из этих параметров:

  • Консольное приложение
  • Приложение ASP.NET Core
  • приложение WPF
  • приложение Windows Forms

https://learn.microsoft.com/ru-Ru/dotnet/csharp/misc/cs5001

а судя по вашему коду у вас как раз предполагается консольное приложение:

Цитата

namespace ConsoleApp5

 

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

2022-11-17_23-02-13.png

 

Помогите пожалуйста - никак не могу добраться до внутренностей сварной детали

Вроде бы как алгоритм прост, начинаешь перебор с FeatureManager с 

Set swFeat = swModel.FirstFeature()

Продолжаешь: Set swFeat = swFeat.IGetNextFeature

 

Как поймал  swFeat.GetTypeName2() = "WeldMemberFeat"  - это твоя труба и есть.

 

Дальше вроде бы как надо рыться в subFeature и перебирать его

Set swSubFeat = swFeat.GetFirstSubFeature

 

По факту на выходе я труб не увидал - видна почему то только плоскость и эскиз

 

Трубы 40X20X2(1) [WeldMemberFeat]  
    Плоскость1 [RefPlane]
    Эскиз11 [ProfileFeature]
chieldren count 0

 

Вывел Debug.Print "chieldren count " & swFeat.IGetChildCount - видно что детей нет.

 

Сделал предположение что трубы могут скрываться в CustomPropertyManager - их там тоже нет

 

Помогите пожалуйста найти трубы (8 штук)

 

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

Помогите пожалуйста - никак не могу добраться до внутренностей сварной детали

А если так?

https://help.solidworks.com/2010/english/api/sldworksapi/get_weldment_cut-list_feature_and_annotations_example_vb.htm

или общий поиск по справке:

https://help.solidworks.com/SearchEx.aspx?query=Cut Lists&version=2010&lang=english,enu&prod=api

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

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

 

Пока обошел другим способом - но интерес остался.

Ни один из опробованных способов не подошел

 

нужно получить все внутренние трубы

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

Так вот прям чтоб все не пробовал, но если ручками выделить в дереве (именно в дереве) в разделе "список вырезов" один элемент, то его можно найти и прочитать. Мне нужно было присваивать элементам дец.номера, делал так. Глубже не копал, не надо было. Если нужно, скину код

 

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

День добрый.

Вопрос косвенно связан с SW API:

Решал сам поковыряться в создании дополнения (add-in). Для создания форм решил попробовать WPF. В качестве родителя, от WPF, можно использовать или Window, или UserControl.

Столкнулся с такими проблемами:

1) Словари ресурсов приходится объявлять в каждом дочернем UserControl (т.е. механизм трансляции ресурсов от родителя к дочернему Control, как при использовании WPF Application не работает).

2) Не работает связь типа {x:Type ...} и {x:Static ...}, как в самих UserControl так и в словарях ресурсов .

Эти проблемы можно решить без больших "костылей", или переходить на другие механизмы рисования форм?

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

Словари ресурсов приходится объявлять в каждом дочернем UserControl

MergedDictionary. Да, так это работает))

 

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

Не работает связь типа {x:Type ...} и {x:Static ...}

Пример?

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

 

56 минут назад, streamdown сказал:

MergedDictionary. Да, так это работает))

После WPFApp - ужас!

 

57 минут назад, streamdown сказал:

Пример?

Ссылка на исходники ТЫЦ:

ветка dev.

Путь к словарю ресурсов: EditDimensionTaskView.Resources.Tempates.xaml ( 11 строка - объявление DataTemplate)

Путь к вью: EditDimensionTaskView.Views.ToleranceTypeSelector.xaml ( 40 строка - CommandParametr  ссылка  на  Enum).

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

День добрый.

Столкнулся с такой проблемой:

При пользовательском изменении значения размера, в линейном размере это значение можно получить при помощи: displayDimension.GetOverrideValue(). При работе с угловыми размерами - размер где-то хранит строковое значение, а по метод: GetOverrideValue()  возвращает 0.

Сам вопрос: Где искать в угловом размере измененное значение ?

 

ИЗМЕНЕНО: вопрос пока отменяется...

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

вопрос пока отменяется...

Значит ответ вероятно появился, тогда ответа в сообщении не хватает.

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

Значит ответ вероятно появился, тогда ответа в сообщении не хватает.

Какие-то ответы появились, а какие-то вопросы так и остались....

Начнем с того, что появилось ( по крайне мере - предварительно ):

 При работе в SW при переопределении значения размера, если введено некорректное значение, то при чтении этого размера через API  метод GetOverrideValue()  возвращает 0.  Под "корректным"  подразумевается значение, которое является вещественным числом.  У меня разделитель 'точка' ( с вариациями настроек разделителя целой и дробной частей я не игрался, так что тут не знаю какие могут быть вариации).

 Почему я заострил внимание на разделителе ( повторюсь - с настройками разделителя я ничего не делал, т.е. при их изменении картина может поменяться, но, это только часть наблюдения ), потому что при работе из интерфейса SW в качестве переопределяющего значения размеров можно ввести вообще все что угодно, но при, вроде как корректном значении размера, на чертеже мы видим наше переопределенное значение, а через API получаем 0.

С угловыми - также картина, только усугубленная разделителями градус/минута/секунда.

Т.е. для правильного переопределения значения размера угла отрисованного на чертеже в формате Г/М/С ( или Г/М ), все равно надо вводить значение в долях градуса.

 

Теперь перейдем к оставшимся вопросам: Где искать в размере измененное значение, которое получилось при некорректном вводе ( скорее всего какое-то текстовое поле, которое я не нашел )?

 

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

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

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

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

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

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

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

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

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

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

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



×
×
  • Создать...