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

Узнать габариты блока (VBA SW2008)


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

Всем доброго. Пишу для SW2008

Есть у меня некий блок загруженный методом MakeSketchBlockFromFile.

Задача - Узнать габариты этого блока, его ширину и длину

Начальную точку узнать легко классом InstancePosition.

Я задам на всякий случай этот вопрос на нескольких форумах (одна голова хорошо а две просто замечтательно), надеюсь это не идет вразрез правилам.

Заранее спасибо.

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


Всем доброго. Пишу для SW2008

Есть у меня некий блок загруженный методом MakeSketchBlockFromFile.

Задача - Узнать габариты этого блока, его ширину и длину

Начальную точку узнать легко классом InstancePosition.

Я задам на всякий случай этот вопрос на нескольких форумах (одна голова хорошо а две просто замечтательно), надеюсь это не идет вразрез правилам.

Заранее спасибо.

Какие-то у Вас вопросы немножко хитрые... Может шире поставите/обрисуете задачу: что Вы хотите получить?

- по габаритам блока: честно говоря не знаю. Если только перебирать (программно) входящие в блок примитивы и определять "крайние точки". Что блок из себя представляет? Может легче из него построить Тв. тело, а уж для него определить габариты?

Еще вариант: после создания блока, сразу проставить габаритные размеры :-)

- предыдущий вопрос решили - по отрисовки прямоугольников(там где их высота уменьшалась)?

У меня в SW2010-м что-то этот макрос чудеса творил. Но я вроде нашел устойчивое решение:

Macro_rect_01.zip

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

Вас вопросы немножко хитрые

:biggrin: Да уж есть такое слово в нашей букве.

что Вы хотите получить?

Есть файл блока SLDBLK. Я вставляю его на лист методом MakeSketchBlockFromFile. Теперь мне нужно его правый край выровнять по правому краю листа. Короче поместить его (инстанции) в правый нижний и верхний углы. Ка помешать я знаю, но хотелось бы еще уметь узнавать размер блока (ширину). Я тогда от ширины листа отниму ширину блока (и мне совсем не нужно знать сколько она, пусть некое свойство мне это посчитает) и получу координаты, куда блок тыкать.

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

Если только перебирать

Та не... Это... Ой-ой-ой как мне не хочется.

Может легче из него построить Тв. тело,

А заметки там не порвет? Они в блоке у меня к свойствам прицеплены.

Но я вроде нашел устойчивое решение:

...

sm.InferenceMode = False

Вот и мне конструктора прозрачно намекнули что это привязки срабатывают...

Пипец, с какого это!?

Я всегда думал что привязки используются для ручной работы, чтоб человеку было удобнее работать. Если я пишу программу я на 99% четко знаю все координаты, объектов, которые хочу отрисовать - зачем мне привязки?

Ох и Солид...

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

:biggrin: Да уж есть такое слово в нашей букве.

Есть файл блока SLDBLK. Я вставляю его на лист методом MakeSketchBlockFromFile. Теперь мне нужно его правый край выровнять по правому краю листа. Короче поместить его (инстанции) в правый нижний и верхний углы. Ка помешать я знаю, но хотелось бы еще уметь узнавать размер блока (ширину). Я тогда от ширины листа отниму ширину блока (и мне совсем не нужно знать сколько она, пусть некое свойство мне это посчитает) и получу координаты, куда блок тыкать.

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

Это про какую константу в программе Вы говорите? Не понял...

Та не... Это... Ой-ой-ой как мне не хочется.

Это понятно, что не хочется :-)

А заметки там не порвет? Они в блоке у меня к свойствам прицеплены.

Что значит "порвет"?

Вот и мне конструктора прозрачно намекнули что это привязки срабатывают...

Пипец, с какого это!?

Я всегда думал что привязки используются для ручной работы, чтоб человеку было удобнее работать. Если я пишу программу я на 99% четко знаю все координаты, объектов, которые хочу отрисовать - зачем мне привязки?

Ох и Солид...

А что Солид? Вы в начале работы вашей программы можете запросто отключить все привязки, а в конце восстановить "статус кво"...

Я как-то делал программку с отрисовкой эскиза и простановкой размеров, И вот когда прога ставит размер, появляется окошко с размером. Так пришлось программно отключать этот ввод размера. А в конце работы программы опять включать...

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

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

про какую константу

Я сейчас делаю так. Создал блок - померял его линейкой запомнил в уме - 100 мм ширина.

Потом когда вставляю пишу в программе мол

a=MathPointBlick.ArrayData

 a(0)=300-100 ' т.е 300 - это ширина листа минус ширина блока

 ...

 MathPointBlick.ArrayData=a

 ....
Вот 100 - это та константа которую я имел ввиду.

Что значит "порвет"?

Они у меня связаны с неким свойством документа, изменяя его, ф фактически меняю текст заметки.

Если я заметки превращу в твердое тельце, они разве будут изменять свой текст, если я изменю свойство?

Да и потом, разве на листе чертежа можно создавать твердое тело?

можете запросто отключить все привязки

Мне кажется это некошерным... Я конечно так и поступаю (теперь), но я бы руки Dasault'овцам за такое линейкой поотбивал...
Ссылка на сообщение
Поделиться на других сайтах

Я сейчас делаю так. Создал блок - померял его линейкой запомнил в уме - 100 мм ширина.

Потом когда вставляю пишу в программе мол

a=MathPointBlick.ArrayData

 a(0)=300-100 ' т.е 300 - это ширина листа минус ширина блока

 ...

 MathPointBlick.ArrayData=a

 ....
Вот 100 - это та константа которую я имел ввиду.

...

Тут можно поступить по другому:

- нарисовать ограничивающий прямоугольник, в который умещается весь блок. Привязываем линии этого прямоугольника к "крайним" точкам примитивов, входящих в блок. Образмериваем его. Т.е. имеем два р-ра: ширину и высоту. Переименовываем эти р-ры, допустим, в "W00..." и "H00...", т.е. добавляем префикс к имени соответствующего размера.

Помещаем этот прямоугольник и размеры на другой слой и выкл. этот слой.

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

Но тут у меня сомнения: как к этим линииям (прямоугольника) привязать примечание. А также, есть вероятность, что примечание, когда-то "вылезет" за габариты блока.

...

Они у меня связаны с неким свойством документа, изменяя его, ф фактически меняю текст заметки.

Если я заметки превращу в твердое тельце, они разве будут изменять свой текст, если я изменю свойство?

Да и потом, разве на листе чертежа можно создавать твердое тело?

...

Так Вы же все в тайне держали: что за блок, из чего он состоит, и вообще где он находится. Только вот недавно стало понятно, что это блок в чертеже...

...

Мне кажется это некошерным... Я конечно так и поступаю (теперь), но я бы руки Dasault'овцам за такое линейкой поотбивал...

Ну вот, сразу "линейкой"... А другой выход есть ли кроме такого? ИМХО нету...
Ссылка на сообщение
Поделиться на других сайтах

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

да... Согласен... Не айс.

Только вот недавно стало понятно, что это блок в чертеже...

Сорри, действительно стоило подробнее рассказать о блоке.

ИМХО нету

)))))

Ладно... Думаю тема исчерпана. Пока не горит так что буду обходится константой.

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

Вот еще раз перечитал фразу:

...мне нужно его правый край выровнять по правому краю листа...

Вы в курсе, что точку вставки блока можно переопределять? По умолчанию она расположена в левом нижнем углу, а можно ее перетащить в правый нижний или верхний угол блока. Тогда чтобы "выровнять блок по правому краю листа" не надо будет ничего считать/вычитать ширину, а смело тыкать куда нужно.

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

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

Опа!! Не знал...

Это случайно не первый параметр в MakeSketchBlockFromFile ?

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

Опа!! Не знал...

Это случайно не первый параметр в MakeSketchBlockFromFile ?

Ну да, он и есть.

Но я вообще-то имел ввиду другое: при "ручном" созданиии блока, после выбора примитивов, входящих в блок, точку вставки можно расположить в любом месте.

Хотя и перед вызовом метода:

"BlockDef= SketchManager.MakeSketchBlockFromFile ( InsertionPoint, Filename, LinkedToFile, Scale, Angle)", точку вставки тоже можно переопределить вызвав метод:

"MathPoint.ArrayData = arrayData",

где `arrayData` это массив (x,y,z) coordinates точки.

Если я тут не напутал... Вообщем через "MathPoint Object" надо все это делать...

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

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

Ага. Пища для "подумать"...

Спасибо покопаем в эту сторону :rule:

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

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

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

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

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

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

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

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

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

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

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




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