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

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

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 пользователей

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



  • Сообщения

    • Рамон
      Можно в тексте вставить ссылку- свойство документа - последнее изменение с датой и временем.  
    • Павлуха
      Солиду не нравится несколько сопряжений, которые одинаково позиционируют деталь.
    • al0ner
      Это весьма удивило, когда заходишь в бутлодере в меню просмотра файлов, то файлы на цф видны, возможно при начале чтения или записи по дефолту стоит проверка уровня на wp.
    • advocut
      У нас чертежи версионируются, но бывает так, что внесли мелкое исправление, а версию не завели, потому как придётся натужно бегать и менять всё везде в системах учёта. Конструктору-то всё равно, а вот когда приходит программисту на исполнение один чертёж, оператору дают второй, а потом выясняется, что вообще нужно было по третьему — становится грустно. Решением проблемы вижу поле с датой и временем сохранения (хоть в привычных нам гггг-мм-дд:ч-м-с, хоть одним числом в UNIX ticks), чтобы знать, что эти два чертежа были сохранены в разное время и значит являются разными ревизиями и требуют тщательного изучения всех мелочей. Добавить в общий шаблон чертежа и забыть о проблеме. Есть идеи, как это можно сделать? На зарубежных чертежах поле Revision встречал.
    • Ninja
      зачем? у тебя же только диаметр отв. изменился и добавилась фаска. Вот их отдельно пересчитай. А остальное не трогай, оно же не изменялось! Выше показали как несколько проектов в одном можно сделать. Будет два проекта в одном. А в среднем остатке - то что нужно )))  
    • Madmax70
      раз форматирует карту, то шлейф рабочий, также программы с  cf нормально сбрасываются на стойку. под аналогичным я имею станок с такой же стойкой, такой же фирмы поставленный в одно и тоже время бутлоадер тоже такой же, начинка немного отличается, так как в этом станке сервоусилитель шпинделя и мотор fanuc на других реализовано управления мотор-шпинделем через частотный преобразователь сохранение файлов через system data save я не проверял карточка cf 2 гигабайта
    • lowboard
      Добрый день! Отлично, настроил. Спасибо, удобно  
    • rigrou
      Разобрался сам спустя время. В итоге для того, чтобы отображались исполнения 10 и более: 1. Нам нужно открыть меню настройка спецификаций и в количество исполнений прописать нужное количество исполнений. Нужно учесть, что -00 (нулевое) исполнение также учитывается и если нам необходимо нулевое+34 исполнений, то число исполнений в настройке спецификации нужно указать 35. 2. Даже если мы укажем количество исполнений более 10, то они сразу не будут отображаться. Чтобы они отображались нужно выбрать любой из разделов(документация/сборочные единицы/детали/стандартные...) в которых прописывается значение для "количество на исполнение" и перейти к его редактированию. В зависимости от количества исполнений, которые мы прописали в настройке спецификации, нам будет доступно 2 или более строк, в которые можно вписать значение для "количество на исполнение". Изначально первые 9 исполнений и нулевое исполнение отображаются, а чтобы отобразилось 10 исполнение или выше, нужно в поле (количества на исполнение) вписать любое значение для нужного нам исполнения.  Также нюанс, если исполнений много и мы не заполним значение в целой строке ни в одном из разделов, то это исполнениями не будут отображаться. (К примеру мы прописали значения для исполнений 0-9 и 21-34, а 10-20 оставили пустыми; исполнение с 10 по 20 не отобразятся). Достаточно указать значение лишь в одной из ячеек в строке, тогда будет отображаться весь блок исполнений данной строки. К примеру если исполнений не более 20, будут активны 2 строки; количество исполнение не более 30, то будет активно 3 строки. При этом если количество исполнений будет меньше, чем количество клеток в строке, лишние клетки будут закрыты для редактирования. Если непонятно в ячейки какого исполнения мы находимся, то снизу слева отображается название исполнения при редактировании значения этой ячейки.
    • Artas28
      Что значит ручками пересчитывать? так же  по новой все контура выбирать? опять проект с нуля?
    • sokolikkostya
      Разумеется. Полный ваш пакет макросов. Думаете дело не в шаблоне детали и в заданных для него свойствах? кстати, строку "Материал (сортамент)" уже заменил на просто "Материал", но увы, из за этого материал не стал ровнее работать в ОН.
×
×
  • Создать...