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

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

ну в VBA затрахаешься сортировку делать (в смысле писать).

 

Ну эта.. Все придумано за нас..

 

https://www.yandex.ru/yandsearch?clid=9582&text=%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0%20%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%BE%D0%B2%20VBA&lr=54&redircnt=1471439491.1

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


Все придумано за нас
 

А теперь я))

public List<PartPropertiesModel> SuperTable { get; set; }
...
var Sorted = SuperTable.OrderBy(r => r.Designation).OrderBy(f => f.Name);
Ссылка на сообщение
Поделиться на других сайтах

скромно напишу, что сортировать еще охота по нескольким параметрам, или даже сортировать структуры, по группе параметров в них.

Ссылка на сообщение
Поделиться на других сайтах
сортировать структуры
 Создавайте классы со свойствами и листами классов. не надо структуры. Как сортировать - написал выше в сообщении.
Ссылка на сообщение
Поделиться на других сайтах
Что значит сортировку? Куда результат будет выводиться?

в столбец ТС там где имя, тип , дата и тд.. можно вывести и др параметры.. Верся солида выводится скриптом.  масса и обозначения/наименования и сортируются все фаилы при нажатии. Вот хочу геометрию туда же.. есть же какие то значения по которым можно определить что "выдавить " нажали и размер этого действия..

 

 

я имею ввиду не обновление свойств, а фильтрацию. К примеру: список щитов отдельный список , профиль-1 отдельный список, профиль-2 отдельный, и.т.п.
post-12000-1366120579_thumb.jpg
на фото "отфильтровано" по обозначению. моно по наименованию, по имени, массе, и любым другим полям что записано ! Список не нужен.. тебе список то нужен чтоб в нем искать ? правильно понял?
Изменено пользователем Maik812
Ссылка на сообщение
Поделиться на других сайтах

МЫ же тут обсуждаем методы автоматизации через АПИ - а не кто как делает. А чо как отсортировать - это у каждого свои 5 способов найдутся. Всё это можно делать и в экселе. Только всё это ананизм.

Я веду к тому, чтобы после выполнения моделей, у меня автоматом создавались таблицы, по типам сечения, потом по типам обработки, потом отдельно таблица сборочных узлов, и всякая доп информация. Короче смысл в том, чтобы привести рабочую документацию к тому виду, что требует производство.

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

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

ну тогда  писать нужно понятно... а чтоб автоматом все при создании новой детали, то нужно сделать с начало руками, а опосля создать из них  (сохранить как шаблон) деталь и чертежный документ.

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

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

 

Беру из хелпа пример "Set Material Example (VBA)" или "Set Material Property Name Example (VBA)".

 

Из родной солидовской базы материал меняется нормально..

А вот мой самодельный материал, находящеся в базе "Настроенный пользователем материал" присваивать не хочет..

Это глюк или так было задумано?? И как можно обойти??

 

Ну еще вопрос.. можно ли програмно подключать библиотеки, те которые "Tools->Reference"??

А то выдает "Error accessing the system registry"..

Видимо, из-за отсутствия админских прав..

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

https://blogs.msdn.microsoft.com/pranavwagh/2006/08/30/how-to-load-win32-dlls-dynamically-in-vba/

самодельный материал ... присваивать не хочет..

Сделайте магию, поместите файл базы материалов в ту же папку, где и дефолтная база. (См. настройки-месторасположение файлов - Базы данных материалов)

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

 

У меня такая же первая мысль была..Но:

 

Видимо, из-за отсутствия админских прав..

 

Хотя, потом вспомнил, что права на папку солида мне дали, когда я штриховку свою добавлял..

Переместил базу в нужную папку, но чуда не произошло..

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

В базе материал был записан как "MisMaterial| Сталь12х18Н10Т ГОСТ 5632-72"..(наследие "Материалы и Сортаменты" компаса)..

Однако, если вставке в текст макроса такой записи материал не менялся.. Как и при попытке установить материал "Сталь12х18Н10Т ГОСТ 5632-72"..

Все решилось ручным редактированием файла базы.. "MisMaterial| Сталь12х18Н10Т ГОСТ 5632-72" заменил на "Сталь12х18Н10Т ГОСТ 5632-72"..

 

ЗЫ. Кодировка базы материалов UTF-16 LE. При попытке считать макросом (Open .. For Input AS #1) сплошные кракозябры..

ЗЗЫ. При перемещении базы материалов "Настроенный пользователем материал" в другую папку, солид воссоздает на старом месте базу с таким именем, правда всего с одним материалом..

ЗЗЗЫ. "Материалы и Сортаменты" семантика сильно напоминают "Материалы и Сортаменты" компаса..

Ссылка на сообщение
Поделиться на других сайтах
Все решилось ручным редактированием файла
 Собсна, основополагающая люой автоматизации, это унификация шаблонов. Т.е. сначала всё надо настроить как положено, а потом уже API-ть. Проверено опытом.
Кодировка базы материалов UTF-16 LE

Быстрый гугл выдал это:

Sub Encode2()
Const sPath As String = "c:\folder1\Product Master.txt"
Const SetChar As String = "UTF-8"
With CreateObject("ADODB.Stream")
.Open
.LoadFromFile sPath ' Loads a File
.Charset = SetChar ' sets stream encoding (UTF-8)
.SaveToFile sPath, 2 ' adSaveCreateOverWrite
.Close
End With
End Sub
Ссылка на сообщение
Поделиться на других сайтах

Привет.
Это модель, создан с более старой версией Solidworks (2014)
Можно ли с помощью VBA установить "Create Cut Lists Automatically" и "Update Automatically"?

Я искал, но ничего не нашел.

 

post-53017-0-10006700-1474634937.jpeg

post-53017-0-51224900-1474634945.jpeg

post-53017-0-58776700-1474634953.jpeg

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

 

Видел другой вариант.. Буду пробовать..

 

Еще забыл ЗЗЗЗЫ.. В "месторасположение файлов - Базы данных материалов" первая в списке - папка на рабочем сервере (только для чтения), а при получении макросом списка баз материалов, пишет путь к папке содила в Program files...

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

Плохо искал

https://forum.solidworks.com/message/507593

https://forum.solidworks.com/message/14761

https://forum.solidworks.com/message/580504

https://forum.solidworks.com/message/658778#comment-658778


путь к папке содила
поместите файл базы материалов в ту же папку, где и дефолтная база
  :smile:  Вот так запрограммировали, что аж где-то жёстко прошито.
Ссылка на сообщение
Поделиться на других сайтах
  • 3 недели спустя...
Быстрый гугл выдал это:
Sub Encode2()
Const sPath As String = "c:\folder1\Product Master.txt"
Const SetChar As String = "UTF-8"
With CreateObject("ADODB.Stream")
.Open
.LoadFromFile sPath ' Loads a File
.Charset = SetChar ' sets stream encoding (UTF-8)
.SaveToFile sPath, 2 ' adSaveCreateOverWrite
.Close
End With
End Sub

 

Че-то какую кодировку не напишешь, все в UTF-8 переводит.. Т.е. AkelPad пишет UTF-8, а Bred3 UTF-16..

И все равно получаются краказябры.. Макрос даже до конца файл не считывает, переходит дальше..

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

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

 

   

using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swcommands;
using SolidWorks.Interop.swconst;
using System.Diagnostics;
using System.Runtime.InteropServices;
 
 
namespace soldworkstest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        SldWorks swApp;
        IModelDoc2 swModel;
 
        private void button1_Click(object sender, EventArgs e)
        {
            Process[] processes = Process.GetProcessesByName("SLDWORKS");
            foreach(Process process in processes)
            {
                process.CloseMainWindow();
                process.Kill();
            }
            Guid myGuid1 = new Guid("0D825E02-9000-4D82-B4AB-D6BDC2872797");
            object processsw = System.Activator.CreateInstance(System.Type.GetTypeFromCLSID(myGuid1));
 
            swApp = (SldWorks)processsw;
            swApp.Visible = true;
 
            swApp.NewPart();
 
            swModel = swApp.IActiveDoc2;
 
            swModel.Extension.SelectByID2("Спереди", "PLANE", 0, 0, 0, false, 0, null, 0); //выбираем плоскость
            swModel.SketchManager.InsertSketch(true); //вызываем редактор эскизов
            swModel.ClearSelection2(true);  //очищаем выбор в редакторе эскизов
 
            swModel.SketchManager.CreateCircle(0, 0, 0, 0.071106, 0.031713, 0); //создаем окружность
            swModel.ClearSelection2(true);  //очищаем
 
            swModel.Extension.SelectByID2("Arc1", "SKETCHSEGMENT", 0, 0, 0, false, 0, null, 0); //выбираем окружность
            swModel.FeatureManager.FeatureExtrusion2(true, false, false, 0, 0, 0.03, 0.01, false, false, false, false, 1.74532925199433E-02, 1.74532925199433E-02, false, false, false, false, true, true, true, 0, 0, false); //вытягиваем
            
            swModel.Extension.SelectByID2("", "FACE", -2.89926496987505E-02, 2.36574859687835E-02, 0, false, 0, null, 0);  //косяк
            swModel.SketchManager.InsertSketch(true);
            swModel.ClearSelection2(true);
 
            swModel.SketchManager.CreateCircle(0, 0, 0, 0.036135, 0.044276, 0);
            swModel.ClearSelection2(true);
 
            swModel.Extension.SelectByID2("Arc1", "SKETCHSEGMENT", 0, 0, 0, false, 0, null, 0);
            swModel.FeatureManager.FeatureCut3(true, false, false, 0, 0, 0.03, 0.03, false, false, false, false, 1.74532925199433E-02, 1.74532925199433E-02, false, false, false, false, false, true, true, true, true, false, 0, 0, false);
 
 
          
 
 
 
            swModel.SaveAs3("C:\\1.sldprt", 0, 2);
 
            swApp.ExitApp();
            swApp = null;
 
        }
            
    }
}
 

 

на строку, выделенную красным ругается (отверстие вырезать нехочет)

Необработанное исключение типа "System.Runtime.InteropServices.COMException" в soldworkstest.exe

что не так?

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

данный пример уже обсуждался здесь

 данный пример является тем же самым для "программиста" что и для конструктора не полностью определённый эскиз.  :smile:

Вы что хотите получить? Знания: тогда надо переделывать. Опыт: тогда надо самому поразбираться где что не так и с отладчиком.

Вот эти 2 строчки убрать

Guid myGuid1 = new Guid("0D825E02-9000-4D82-B4AB-D6BDC2872797");

object processsw = System.Activator.CreateInstance(System.Type.GetTypeFromCLSID(myGuid1));

 

и вместо них вставить одну

object processsw = System.Activator.CreateInstance(Type.GetTypeFromProgID("SldWorks.Application"));

 

Эту тоже убрать. Открывается окно, чёта-там делается и закрывается. Зачем его отображать то тогда? )))

swApp.Visible = true;

 

Про это вообще отдельный разговор. Этот код когда-нибудь навернётся )))

swApp.NewPart();

 

Ага, вот прям все взяли и разрешили писать в корневую папку  :smile:

swModel.SaveAs3("C:\\1.sldprt", 0, 2);

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

Доброго времени.

 

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

Активную конфигурацию получить - легко, а это что-то никак не могу найти...

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

состояния отображения

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

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

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

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

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

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

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

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

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

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

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




  • Сообщения

    • Harley
      извините,  #501=#16*#17, конечно же, читать как #5=#6+#16*#17
    • Harley
      @Vomkin А вообще... я сижу на работе, и мне скучно (настолько, что позволил себе пару банок пива), так что держите :) Строки, которые я изменил или добавил - выделены жирным, если важно, и курсивом, если неважно (Вы же эти цифры тоже от балды взяли). Привожу упрощённый вариант.   O0253(PROG-NERG)#501=0(NACHALO-X) #2=0(NACHALO-Y)#3=-500(SHIRINA-LISTA)#4=-250(DLINA-LISTA)#5=100500(TOLSHINA-ZAGOTOVKI)#6=0,001(TOLSHINA-FIKSATORA)#7=50(DIAMETR-FREZI)#8=#7/4(SMESHENIE-OT-NOLYA-PO-X)#9=#4-[#7/2](PEREBEG-PO-Y)#10=#7/2.2(PEREKRITIE-OBRATNOGO-HODA-PO+X)#11=#2+[#7/2](PEREBEG-PO+Y)#12=0.7*#7(PEREKRITIE-70)#16= 0,971 (тот шаг, который Вы сами посчитаете нужным задать, ЗАВИСИТ ЖЕ от толщины детали, от её габаритов (или у вас подсосиновик? я так вакуумный зажим называю) от фрезы, от материала, от станка...) #17=FUP[[#5-#6]/#16]  (считаем количество шагов по Z, которое нужно сделать, чтобы доехать с #5 до #6, в стиле "лучше перебдеть, чем недобдеть", иначе было бы FIX) #501=#16*#17 (считаем новую стартовую точку, опять же в том же стиле)#13=#7/2N1T3M6G0G90G55X#1Y#13 G43Z50H3S500M13WHILE[#5GT#6]DO1 #1=#501#5=#5-#16IF[#5LT#6]THEN#5=#6 (в эти две строки не вмешиваюсь, но скрипя душу)G1Z#5F1000WHILE[#1GT#3]DO2(без обид, пожалуйста, но тут у Вас такая чушь...  работает - и ладно, не моё дело)END2END1G0Z50M15 G0G53G49Z-100G0G53Y-50M30     Если стойка младше MF - обязательно прогнать в тестовом режиме. Не из-за того, что я кракозябры написал, а из-за того, что Fanuc'овская математика непредсказуема. Если есть графика - прогоните в ней, в покадровом режиме убедитесь, что работает нормально и в итоге и по X и по Z приезжает куда надо.  
    • Ветерок
      Я поинтересовался И выяснилось, что да, работает не так. Но, тем не менее, в самом эскизе и без всяких измерений и уравнений.
    • ART
      @Ветерок @maxx2000 Два знатока NX.    Не выходя из эскиза ->menu->edit->divide curve->выбрать вашу линию->нужный вам метод деления. Соответственно все параметры будут в таблице переменных там сможете их менять. 
    • malvi.dp
      Удалось таки воспроизвести этот диалог если в параметрах тела сетки установить одну или обе галочки Если же галочки снять, то макрос отрабатывает без диалога, а вот если вручную открыть файл, то выскакивает такое окно: В этом случае нужно просто установить отметку "Больше не отображать сообщение" и оно больше не будет донимать.
    • kinovari
      Приветствую благородных господ данного форума.   Возникла непреодолимая проблема в работе связки манупулятора и станка на sinumerik one.  Срочно требуется добыть SINUMERIK STEP 7 TOOLBOX V18.1 для tia portal. Может кто поделиться? Заранее благодарю! Заодно хотелось бы узнать, можно ли как либо из NC обратиться в программе ко входу PLC? например вход I014.4, написать скрипт проверки готовности данного входа. Спасибо!
    • Александр1979
      Вам вручную нужно создать текстовый файл optiondata.txt такого формата:  
    • Александр1979
      Сигнал пропуска, обычно подключается ко входу PMC X4.7, но можно настроить и на другой вход. Используется для подключения сигнала с датчиков привязки заготовки, инструмента. 
    • maxx2000
      чего тебе тут непонятно?
    • maxx2000
      а какие ещё варианты отрезков бывают, разве что в форме котика  можно образмерить все участки и наложить на них ограничение равенства, если частей больше чем две то задать через формулу "размер= общая длина/число частей"
×
×
  • Создать...