1 938 сообщений в этой теме
5 часов назад, Кузнецов Антон сказал:

Здравствуйте! Подскажите, пожалуйста! Создал макрос, который создаёт нужный мне текст заметки и вставляет её в чертёж.

Координаты положения заметки (например: myAnnotation.SetPosition(0.2, 0.25, 0)) в макросе не прописаны, поэтому точкой вставки заметки

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

Как в макросе достать координаты этой последней точки. Хочу использовать их в написании другого макроса.

Можно попробовать метод GetSelectionPoint2 интерфейса ISelectionMgr.

 

Поделиться сообщением


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


В ‎14‎.‎09‎.‎2018 в 21:36, Shvg сказал:

Можно попробовать метод GetSelectionPoint2 интерфейса ISelectionMgr.

Спасибо. Странно только, что в чертеже, если не выбрана какая-либо точка или объект, координата "z" не ровно "0", а очень

близкая к нулю цифра.

Поделиться сообщением


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

Здравствуйте! Подскажите, а есть какой-нибудь метод (функция, не знаю, как правильно называется), без кучи кода, чтобы сохранить BOM в Excel? Что-нибудь вроде BomSaveExcel. )))

Поделиться сообщением


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

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

 

Поделиться сообщением


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

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

Поделиться сообщением


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

Можете не учитывать мое мнение, но мне не кажется это удобным - делать exe'шники. Так, находясь в среде SW, Вам доступны все функции, как SW, так и WIN, плюс возможность в динамике что-нибудь подправить в коде. Опять же, "кнопочки" на панельке можете зарядить или менюшку какую в UserForm сотворить. Зачем exe - не понимаю?

Поделиться сообщением


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

с чего начать копать в данном направлении? 

Как вариант Microsoft Visual Studio. В нем пишите код со всеми процедурами и функциями, компилируете в запускаемый файл. Там есть свои тонкости. Можно выбрать язык программирования vb, c# и т.д. Если Вы выбрали exe, то нужно будет подключаться к запущенной сессии sw (чего не нужно делать в vba). В интернете много информации, правда один очень полезный сайт перестал недавно фунциклировать. В хэлпе к api solidworks тоже есть информация с примерами.

Изменено пользователем MUXALblCH
1 пользователю понравилось это

Поделиться сообщением


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

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

 

Надо писать не на VBA, а на VB или C..

 

8 часов назад, v-david сказал:

Можете не учитывать мое мнение, но мне не кажется это удобным - делать exe'шники.

 

У @streamdown , например, другое мнение..

1 пользователю понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 20.09.2018 в 23:42, MUXALblCH сказал:

чего не нужно делать в vba

эммм...

Set swApp = Application.SldWorks

А это что по вашему))) оно всё хитро там скрыто, но без подключения к процессу (посылая всякие команды через Win API) - это уже НЕ VBA

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 20.09.2018 в 23:42, MUXALblCH сказал:

чего не нужно делать в vba

@streamdown , это да. Перефразирую... Что в vba сделать проще, с меньшим количеством строк кода... vba ограничен в возможностях визуального оформления, но при грамотном подходе даёт возможность решить огромное количество задач.(иной раз с помощью более опытных коллег :drinks:)

Изменено пользователем MUXALblCH

Поделиться сообщением


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

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

 

Есть основной модуль макроса, запускающий форму. В этом модуле ошибки легко отлавливаются оператором OnError.

Но если ошибка возникает в коде формы, выскакивает дебаг, а я хотел бы чтобы появлялось сообщение с кодом ошибки для пользователя и закрытие макроса.

Модуль формы работает по событиям, событий много (куча Public Sub и End Sub) и в код каждого события пихать OnError наверно не правильно.

Может есть какая возможность в коде формы написать один раз OnError, как в Sub main()?

Поделиться сообщением


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

Всем привет!

 

Подключаемый модуль с функциями естественного алфавитно-цифрового сравнения двух строковых переменных.

 

Неожиданно выяснилось, что в VBA нет метода естественного сравнения текстовых переменных.
Поиски способа сравнения были долгими и нудными, так как я начинающий.
Болт М10 при любом сравнении всегда оказывается меньше Болт М5. Что, на мой взгляд правильно, но не естественно для нужд конструктора.
Что бинарное сравнение, что текстовое в VBA всегда ставят М10 меньше М5.
Поэтому было применено правило:
Если нужно рубить, но нет топора – начинаем изобретать топор!
В итоге, на свет появилась функция CompareString().
Для удобства функция была перемещена в отдельный модуль.
Этот модуль можно подключать к любому макросу, в котором потребуется естественное сравнение.


Формат обращения к модулю:

Dim result As Integer
Dim string1 As String
Dim string2 As String
result = CompareStringModule.compareStrings(string1, string2)
If result <>= 0 Then

 

Если result >0 то string1< string2
Если result <0 то string1> string2
Если result =0 то string1= string2

 

Передаваемые значения: Текстовые переменные string1, string2

 

Возвращаемые значения: Result как число

 

Для тестов и разбора прилагается макрос, в котором можно менять значения переменных и макрос будет сортировать их по естественному возрастанию. Работу смотрим в Immediate.
Сам модуль в экспортном варианте для импорта в проекты.

 

CompareStringTest.swp

CompareStringModule.bas

1 пользователю понравилось это

Поделиться сообщением


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

Поиски способа сравнения были долгими и нудными, так как я начинающий.
Болт М10 при любом сравнении всегда оказывается меньше Болт М5. Что, на мой взгляд правильно, но не естественно для нужд конструктора.

Поискав ещё немного вы поймёте, что конструктору в сущности всё равно.

 

В 23.09.2018 в 11:56, alek77 сказал:

Но если ошибка возникает в коде формы, выскакивает дебаг, а я хотел бы чтобы появлялось сообщение с кодом ошибки для пользователя и закрытие макроса.

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

1 пользователю понравилось это

Поделиться сообщением


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

Подскажите пожалуйста решение ситуации:

Запускаем макрос, начинает работать форма и управляющие в ней кнопки. При этом окно солида остается активным, и пользователь может кликать и по кнопкам формы и по элементам окна солида. Как сделать так, что пока работает макрос и не нажата кнопка "выход" формы, пользователь не мог кликнуть ничего в окне солида кроме кнопок формы?

Поделиться сообщением


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

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

Функции работы с окнами.txt

1 пользователю понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 10.10.2018 в 21:30, alek77 сказал:

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

Вы имеете в виду модальный и не модальный режим работы окна?

Поделиться сообщением


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

модальный и не модальный режим Us.формы скорее? Нет, я имею ввиду конкретное управление физическим положением и состоянием окна процесса, свернуть, убрать в невидимое пространство (за пределы экрана), сделать его постоянно на переднем плане и т.д. У Вас же рабочих процессов в компе тысячи полторы, Вы же не видите их все, так же? Ну и выбросите Ваш SW за борт монитора. Это пока самое простое, что приходит в голову. Если я что-то не то предлагаю, то скорее всего не так понял проблему. Вы функцию doevents что ли задействовали?

 

Поделиться сообщением


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

@alek77 , какую задачу пытаетесь решить?

P.S.

На всякий случай:

Скрытый текст

Модальные и немодальные формы

 
 

При разработке графического интерфейса важным является понятие модального и немодального окна. Модальное окно не позволяет, если оно открыто, временно переключиться на работу с другим окном данного приложения. Выйти из модального окна можно, только закрыв его. Немодальные окна допускают параллельную работу в разных окнах приложения. Форма называется модальной или немодальной в зависимости от того, какое у нее окно. Тип открываемого окна зависит от того, какой метод для открытия формы используется. Метод Show() открывает форму как немодальную, а метод ShowDialog() – как модальную. Название метода отражает основное назначение модальных форм – они предназначены для организации диалога с пользователем, и пока диалог не завершится, покидать форму не разрешается.

Если переменная frm хранит ссылку на объект класса производного от Form, то после вызова метода frm.Show() выполнение программы сразу переходит к следующему оператору. При вызове метода frm.ShowDialogO переход к следующему оператору программы произойдет только после закрытия формы frm. Следующий пример показывает создание формы (объект с именем MyFormClass) и ее отображение на экране:

MyFormClass frm = new MyFormClass();

frm.Show();

Другим отличием этих методов является то, что метод Show() не возвращает никакого значения при завершении работы, а метод ShowDialogQnpH завершении возвращает в качестве результата одно из значений перечисления DialogResult. Перечисление DialogResult является списком идентификаторов, поясняющих причину закрытия диалога. К основным значениям этого перечисления относятся:

• ОК – работа с формой завершилась успешно (пользователь выполнил требуемую задачу);

• Cancel – работа с формой завершилась неуспешно (пользователь не выполнил требуемую задачу);

• Yes – пользователь ответил утвердительно на заданный вопрос;

• No – пользователь ответил отрицательно на заданный вопрос.

Для того чтобы форма вернула значение DialogResult, ее свойству

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

Предположим, что в приложении нужно выполнить ввод номера телефона пользователя. Для этого создается форма, которая имеет текстовое поле (TextBox) ввода и две кнопки (Button); на одной написано "Сохранить", а на другой – "Отменить". Тогда, если свойству DialogResult кнопки с надписью "Сохранить" задать значение DialogResult.OK, а свойству DialogResult кнопки с надписью "Отменить" задать значение DialogResult.Cancel, то, если одну из них нажать, форма становится невидимой (но не уничтожается) и в качестве результата возвращается одно из заданных значений. Отметим, что форма не уничтожается, а просто свойству Visible задается значение false. Это делается для того, чтобы можно было получить введенные пользователем данные с помощью свойств класса формы. В результате описания свойства данной диалоговой формы для номера телефона родительская форма может получить значение, а уже затем вызвать метод Close() для закрытия формы. Ниже приведено описание данной диалоговой формы:

 

class Phone : Form {

TextBox txtPN = new TextBox();

Button btnOK = new Button();

Button btnCancel = new Button();

public Phone() {// конструктор

Text = "Введите номер телефона.";

Size = new Size(180, 120);

txtPN.Location = new Point(10,10);

txtPN.Size = new Size(150,10);

btnOK.Location = new Point(10,40);

btnOK.Text = "Сохранить";

btnOK.DialogResult = DialogResult.OK;

btnCancel.Location = new Point(90,40);

btnCancel.Text = "Отменить";

btnCancel.DialogResult = DialogResult.Cancel;

Controls.AddRange( new ControlQ {txtPN, btnOK, btnCancel});

}

public string PhoneNumber {// свойство класса

get {return txtPN.Text;}

set {txtPN.Text = value;}

>

}

Отметим, что обработчики событий для кнопок не задаются, т. к. для них заданы свойства DialogResult, и форма будет становиться невидимой после их нажатия. В классе также описано единственное добавленное свойство PhoneNumber. Ниже показан пример вызова данного Phone диалога: string s;

Phone frm = new Phone(); //создаем экземпляр диалога

frm.ShowDialog(); // показываем диалог

if (frm.DialogResult == DialogResult.OK)

{s = "Номер телефона " + frm.PhoneNumber;} else if (frm.DialogResult == DialogResult.Cancel)

{ s = "Номер телефона не введен.";} frm.Close();

 

Изменено пользователем MUXALblCH

Поделиться сообщением


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

Создайте аккаунт или войдите для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

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

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



  • Реклама

  • Сообщения

    • AlexKaz
        Но работа с историческими фактами - это полдела. Вторая половина - анализ причин событий. Ничего, что страна, её народы пыталась выжить, последними слабыми силами опрокинуть готовящихся к захвату страны агрессоров? И не по собственной прихоти пары управленцев проводились репрессии всякой сволочи, которые мешали строить государство и развивать промышленность? Да, есть невинные жертвы. Они есть всегда. А теперь сравните, если сможете, количество невинных жертв с количеством нарко и алко трупов на кладбищах за последние 30 лет. Россия практически всегда была небогатой страной со слабой промышленностью, когда чуть ли не любую мелочь покупали за бугром. Наверное, поэтому и сейчас её массировано топят чтобы она навсегда забыла про времена, когда она была сильно, и снова насадили на зарубежный пром. Для забугорных "партнёров" ваши стоны - это практическое воплощение  очередного бизнеса-плана. Всего лишь бизнес, ничего личного.
    • AlexKaz
      LOL, Шта? Вы, уважаемый, ни одного исторического факта не привели в дискуссии. Исторический факт - это исторические источники, которые Вы читать не удосуживаетесь. Это архивные документы, это сопоставление воспоминаний, это газетные статьи тех времён, это судебные расследования, дела которых и сейчас лежат на хранении. Докапываться до истин - это работа историков, но не инженеров. Если Вы считаете, что можете меня осадить, транслируя в мою сторону "своё уникальное собственное видение ситуации" - то, к сожалению, Вы ошибаетесь в точке опоры. Мнение Ваше сформировано СМИ и теми авторами, которые в 90-е и 2000-е вылезали из под лавки, поднимая волну хайпа на волне мнимой либерализации. Часть этих самых авторов тупо спонсировали зарубежные организации, одна из которых - "Мемориал". Доспонсировались чуть ли не до полной остановки собственной промышленности и выпиливания инженерных кадров в стране. Поэтому на этом форуме запрещается обсуждать историю, потому что лично Вы работать с историческими документами не умеете, и отличать вброс от ценных данных не умеете, а чушь из СМИ прогнозируемо приводит к срачу.
    • vedzevul
      Создавал сборку методом сверху вниз, основываясь на составе изделия, когда дошел до момента, где мне необходимо сделать массив компонента ( а именно колосника) возникает неприятный момент, массив делается, но компоненты массива теряют цвет и отображают эскиз, хотя когда я делал саму деталь, то эскиз я убрал на слой и скрыл его. Подскажите пожалуйста, как можно исправить ситуацию? 
    • rachinskiyalek
    • Пахоруков Максим
      Задумали купить бу 260. Есть специалист посмотреть станок и сделать заключение за деньги само собой.
    • SAPRonOff
      могу рассказать про сопряжения T-FLEX DOCs и ТФ КАД + Компас. Лоцман не поддерживает вроде бы интеграцию с ТФ КАД, только на уровне хранения файлов.
    • Dm75
      Vc250-280, Ap2mm, подача на врезке 0.1мм/об, проточка 0.3-0.32 . пластина сандвик сплав 4325 кажется, резец 25*25 с внутренним прижимом за отверстие , машина была хорошая неудолбаная пума280. Изначально надеялись на непрерывное резание туда-сюда на рекомендованных режимах (они выше), но уперлись в стружку. На ст3 ломаться не хочет, закручивается на резце и соседних инструментах. Поэтому врезка прямая( так не наматывает, хоть и нагрузка выше и пластинка начинает подсвистывать) , проточка, подъем полшага, отъезд от стенки, отлет в верх на несколько сантиметров над деталью, при этом скопившейся ком стружки падает. Или останов по М1. И тд. Написал подпрограмму-макрос. Муторно конечно, но... Этой же пластиной и нержавеку резал 110м/мин. А в Вашем случае надо бы получше узнать возможности станка,  у того кто на нем работает например. Можно тупо поставить проходной резец и поиграть с режимами, вылетами, глубиной реза . посмотреть нагрузки и  когда возникают вибрации.
    • Skinwalker
      Хорошо. Тут об инженерах вроде писали... 1945 год, Победа. 1961 - полет человека в космос. 15 лет всего по календарю не прошло. В разоренной войной стране. И чо мы имеем после нескольких десятков последних лет? Кто тут плачется про уровень инженеров с компьютерами? В космос человека на арифмометрах и логарифмических линейках запустили. Давайте посчитаем, сколько благополучно отправилось на тот свет людей на территории б. СССP в "святые 90-ые годы". При полном отсутствии войн с внешним агрессором, во времена разгула оголтелой демократии. Сколько было уничтожено в бывших республиках физически, сколько было вынужденных переселенцев. Сколько померло от голода и недостатка врачебной помощи, в абсолютно мирное время. "Не вписались в рынок". Как бы общие цифры будут тоже весьма немаленькие, не единицы. До каких пор все на Сталина валить будем? Семьдесят лет уже прошло...Не, я понимаю, проведем декоммунизацию и запануем. Далеко за примерами ходить не надо, они перед глазами.
    • valeo-ua
      Разве мы выпали из правил форума? Один доказывал что кнутом можно достичь много чего. Мы ему в ответ - исторические факты о бесчеловечности этого метода.  О том, что не дай бог кому еще раз отведать той "радости" рабского труда в обмен за похлебку и возможность прожить еще немного.  Многие молодые видят в истории только результат. Но даже не догадываются каким методом он достигнут. И сколько людей при этом загнали в землю. Посмотрите на тот сайт - список там уже больше 3-х миллионов, подтвержденных архивными документами. А сколько еще было?  Почитайте записи их группы в фейсбук. Там делают выборки особо "ярких" моментов. Про  ваалам, например. С выкладками архивов кого когда и сколько.  Не политика это. Это - история. Многие фильмы того времени теперь по другому смотрятся.  Как-то так...
    • syncomp
      Огромное спасибо! Об осевом припуске забыл! Все правильно. Траектория глубже идет.