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

Возможные функции солида.


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

To Mak82

Попробуйте заменить строки:

swSketchMgr.AddToDB = True
на строку

swModel.SetAddToDB True
а

swSketchMgr.AddToDB = False
на строку

swModel.SetAddToDB False

P.S. В API SW2007 заменяемых функций просто нет. По всей видимости происходит ошибка. У меня то SW2008. Проверить не могу. Попробуйте пройтись дебаггером.

Замена кодов ничего не дало.

А как называется кнопочка которая проверяет код на ошибки?

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

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


Замена кодов ничего не дало.

А как называется кнопочка которая проверяет код на ошибки?

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

Там не "кнопочка" а оператор: `

Option Explicit Statement называется

Including the Option Explicit statement at the beginning of a Visual Basic program forces you to declare variables

before they are used and assists in detecting errors in your code.

Example

In the following example, the Option Explicit statement forces you to declare swApp and retVal.

Additionally, early binding is used when declaring swApp.

'-------------------------------------------------------

Option Explicit

Dim swApp As SldWorks.SldWorks

Dim retVal As Long

Sub main()

Set swApp = Application.SldWorks

'retVal = swApp.CopyDocument("d:\samples\hotrod.sldprt", "c:\temp\hotrod.sldprt", "", "", swMoveCopyOptionsOverwriteExistingDocs)

Debug.Print retVal

End Sub

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

Замена кодов ничего не дало.

Жаль, конечно, но отрицательный результат - тоже результат.

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

Загружаете свой файл детали. Далее Tools->Macro->Edit, выбираете макрос. Появится окно редактора. Ставите курсор мыши на функцию

countPoint = swSketch.GetSketchPointsCount2()
и жмете F9, или на серенькой полоске напротив этой функции просто щелчок левой кнопки мыши. Должна появится коричневая точка (точка останова или Breakpoint)

Тоже свамое проделываем со строкой

typePoint = swSketchPoint.Type()
Далее Run->Run Sub/User Form или F5

Если все условия соблюдены, загружен документ детали и выбран эскиз в дереве, код выполнения должен остановится на первой точке останова (появится желтая полоска на строке). Далее жмем F8 (режим пошаговой отладки). Подводим мышь на переменную countPoint. На всплывающей подсказке должно появится значение этой переменной. Или на этой же переменной правая кнопка мыши и выбор Add Watch. В появившемся диадоговом окне жмем OK. В окне Watche (внизу редактора) появится эта переменная и ее значение. Если значение меньше или равно 0, то, увы, макрос ничего не сделает. Если же значение больше 0, то идем дальше до следующей точки останова (F8 или F5). То что мы делали раньше с переменной countPoint проделываем и с переменной typePoint. Она у меня настроена на значение 1 (swSketchPointType_User). Если же нет, то код не заходит в цикл и у вас ничего не строится. В этом случае правая кнопка мыши на swSketchPointType_User -> Definition и смотрите какая константа соответсвует вашему значению. И вместо swSketchPointType_User, поставте ваше значение или просто цифру или ее имя константы

Желаю удачи.

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

Немного разобрался насчет дебагера (если я прав) нашол вкладку в отладчике Debug->Step Into (F8). Ставлю курсор на функции Sub main () и начинаю давить F8 прохожу несколько строк дохожу до строки

Set swSketch = swSketchMgr.ActiveSketch

и потом курсор перескакивает на строку

End sub

пропуская все остальные строки.

Он даже не проходит логику которая должна высветить сообщение о том что не выбран эскиза в дереве конструирования.

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

и потом курсор перескакивает на строку

Да, у вас так и получится. К сожалению, это разница между API SW2008 и API SW2007. Поэтому замените эту строки:

Set swSketch = swSketchMgr.ActiveSketch
строкой
Set swSketch = swModel.GetActiveSketch2()
А еще ниже встретятся две строки
Set swSegmentFirst = swSketchMgr.CreateCircleByRadius(swSketchPoint.X, swSketchPoint.Y, 0#, dDim)

.....

Set swSegmentRest = swSketchMgr.CreateCircleByRadius(swSketchPoint.X, swSketchPoint.Y, 0#, dDim)
замените их соответсвенно на

Set swSegmentFirst = swModel.CreateCircleByRadius2(swSketchPoint.X, swSketchPoint.Y, 0#, dDim)

.....

Set swSegmentRest = swModel.CreateCircleByRadius2(swSketchPoint.X, swSketchPoint.Y, 0#, dDim)
Остальные функции в SW2007, вроде существуют. Но также пройдитесь дебагером.
Ссылка на сообщение
Поделиться на других сайтах

Приветствую всех форумчан.

Хочу поинтересоваться о возможности солида в следующем деле. В солид был конвертирован эскиз состоящий из множество хаотически расположеных точек в области определеного размера.

Если такая функци чтобы вокруг каждой точки создать окружноть одинакового диаметра?

....

Добрый день!

Очень глупый и дурацкий способ решения этой задачи имеется :unsure: . Но…. работает :smile: .

1. Создаем на плоскости эскиз с точками.

2. В сторонке от этого эскиза создаем на той же плоскости эскиз с окружностью нужного диаметра. Из этого эскиза создаем круглую поверхность при помощи «заполнить поверхность» или вытягиваем цилиндр (если не привыкли к поверхностям).

3. Из поверхности или цилиндра создаем «массив управляемый эскизом», в качестве управляющего эскиза выбирается эскиз с точками, а для копирования выбираем «копировать тела» и отмечаем круглую поверхность или цилиндр. Нажимаем ОК. Получается массив поверхностей или цилиндров (МНОГОТЕЛ!!!).

4. На все той же плоскости открываем эскиз. Открываем панель инструментов «Выбор элементов», нажимаем кнопку «фильтр для кромок». Рамкой выбираем поверхности или основания цилиндров (лучше сделать цилиндра подлиннее и повернуть графобласть так, чтобы рамкой захватились только по одному ребру с каждого цилиндра). Нажать «преобразование объектов». В эскиз будут скопированы все ребра-окружности центрами точнехонько в каждую тку.

5. Удалить все поверхности или тела «Удалить тело». Останутся только 2 эскиза – с точками и окружностями.

Okr_v_eskize.rar

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

Добрый день!

Очень глупый и дурацкий способ решения этой задачи имеется :unsure: . Но…. работает :smile: .

1. Создаем на плоскости эскиз с точками.

2. В сторонке от этого эскиза создаем на той же плоскости эскиз с окружностью нужного диаметра. Из этого эскиза создаем круглую поверхность при помощи «заполнить поверхность» или вытягиваем цилиндр (если не привыкли к поверхностям).

3. Из поверхности или цилиндра создаем «массив управляемый эскизом», в качестве управляющего эскиза выбирается эскиз с точками, а для копирования выбираем «копировать тела» и отмечаем круглую поверхность или цилиндр. Нажимаем ОК. Получается массив поверхностей или цилиндров (МНОГОТЕЛ!!!).

4. На все той же плоскости открываем эскиз. Открываем панель инструментов «Выбор элементов», нажимаем кнопку «фильтр для кромок». Рамкой выбираем поверхности или основания цилиндров (лучше сделать цилиндра подлиннее и повернуть графобласть так, чтобы рамкой захватились только по одному ребру с каждого цилиндра). Нажать «преобразование объектов». В эскиз будут скопированы все ребра-окружности центрами точнехонько в каждую тку.

5. Удалить все поверхности или тела «Удалить тело». Останутся только 2 эскиза – с точками и окружностями.

Этот метод предлагал один форумчанин в случайно дублировано мною теме.

То же вариант но когда много точек , вследствии большое количество объектов, комп начинает тармозить.

Да, у вас так и получится. К сожалению, это разница между API SW2008 и API SW2007. Поэтому замените эту строки:

Set swSketch = swSketchMgr.ActiveSketch
строкой
Set swSketch = swModel.GetActiveSketch2()
А еще ниже встретятся две строки
Set swSegmentFirst = swSketchMgr.CreateCircleByRadius(swSketchPoint.X, swSketchPoint.Y, 0#, dDim)

.....

Set swSegmentRest = swSketchMgr.CreateCircleByRadius(swSketchPoint.X, swSketchPoint.Y, 0#, dDim)
замените их соответсвенно на

Set swSegmentFirst = swModel.CreateCircleByRadius2(swSketchPoint.X, swSketchPoint.Y, 0#, dDim)

.....

Set swSegmentRest = swModel.CreateCircleByRadius2(swSketchPoint.X, swSketchPoint.Y, 0#, dDim)
Остальные функции в SW2007, вроде существуют. Но также пройдитесь дебагером.

Благодорю вас за помощь.

Все внесенные изменения дали положительный резульнат. Макрос работает как надо :clap_1:

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

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

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

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

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

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

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

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

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

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

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




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