Обсуждение видеоуроков AutoCAD VBA

Автор Тема: Обсуждение видеоуроков AutoCAD VBA  (Прочитано 156681 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Максим Маркевич

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #105 : 23-01-2017, 20:06:41 »
Да, но Props = как задать? это же не переменная. то есть я пробовала задать i, j, index, но этого оказалось мало.
А что это, если не переменная?
Очень легко :)
Вот здесь почитай про типы данных внимательно и все сразу станет ясно. А то ты совсем уже начинаешь бездумно спрашивать. Разбаловал я тебя!  :D

Оффлайн qaaz07

  • ADN OPEN
  • Сообщений: 17
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #106 : 23-01-2017, 21:25:22 »
Ну чтож, добавила и эти переменные, действительно все сработало. Правда поставила Variant.(а это не очень четко)).
Еще вместо умножения на единицу поставила Cdbl, так будет правильнее.


Оффлайн qaaz07

  • ADN OPEN
  • Сообщений: 17
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #107 : 23-01-2017, 21:28:11 »
Извините, вам запрещён просмотр содержимого спойлеров.

Оффлайн FocusNIK

  • ADN OPEN
  • Сообщений: 7
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #108 : 26-04-2017, 09:41:02 »
Добрый день. Начинаю изучение VBA AutoCAD. Хотел адаптировать Ваш код для своих нужд и столкнулся с проблемой. Не могу получить свойства InsertionPoint (GetConstantAttributes). Хочу проверить ширину атрибута, что бы она не вылезала за рамки, и если вылезает уменьшить масштаб текста.


Оффлайн Владимир П

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 3
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #109 : 26-04-2017, 13:11:40 »
А зачем же Вы исправили строку из примера в предыдущем сообщении
att = blockRef.GetAttributes       ?
надо вернуть как было... вернее, у Вас будет:
att=elem.GetAttributes
а уже получать свойства InsertionPoint (GetConstantAttributes)? (или какие еще) будете внутри цикла

Оффлайн FocusNIK

  • ADN OPEN
  • Сообщений: 7
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #110 : 26-04-2017, 13:34:18 »
А зачем же Вы исправили строку из примера в предыдущем сообщении
att = blockRef.GetAttributes       ?

Я выбираю атрибут постоянный, а это требует записи ".GetConstantAttributes". Но даже в непостоянных атрибутах данная запись выдает ошибку. С обычным текстом проходит. С атрибутом не проходит. Если вы считаете иначе, можете предложить корректировки в коде. Вставлю, покажу результат.

Оффлайн FocusNIK

  • ADN OPEN
  • Сообщений: 7
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #111 : 26-04-2017, 13:38:59 »
Код в работе, поэтому прошу не ругать за мусор.

Извините, вам запрещён просмотр содержимого спойлеров.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #112 : 26-04-2017, 13:47:43 »
Хочу проверить ширину атрибута, что бы она не вылезала за рамки, и если вылезает уменьшить масштаб текста.
Зачем для такого обращаться к InsertionPoint? Разве нет такого, как GetBoundnigBox? Ну, нечто типа
Код - Visual Basic [Выбрать]
  1.   Dim ent As AcadEntity
  2.   Dim minp As Variant, maxp As Variant, pickpt As Variant
  3.   ThisDrawing.Utility.GetEntity ent, pickpt
  4.   ent.GetBoundingBox minp, maxp
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн FocusNIK

  • ADN OPEN
  • Сообщений: 7
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #113 : 26-04-2017, 14:02:44 »
Зачем для такого обращаться к InsertionPoint? Разве нет такого, как GetBoundnigBox? Ну, нечто типа

Именно такой оператор ничего не выдает. Или я что неправильно понимаю?




Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #114 : 26-04-2017, 14:06:47 »
Посмотри на разницу в определении переменных minp (у тебя LB)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн FocusNIK

  • ADN OPEN
  • Сообщений: 7
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #115 : 26-04-2017, 14:23:11 »



Большое спасибо. Получилось решить проблему. Буду продолжать изучать ::) ::) ::)

Оффлайн Владимир П

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 3
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #116 : 26-04-2017, 14:46:12 »
Я выбираю атрибут постоянный, а это требует записи ".GetConstantAttributes".   
Но проверку
83.    If elem.HasAttributes = True Then
84.        att = elem.GetConstantAttributes
делаете на ВСЕ атрибуты... а если у Вас постоянных нет в блоке?

Цитировать
Но даже в непостоянных атрибутах данная запись выдает ошибку. С обычным текстом проходит. С атрибутом не проходит.
Непонятно, так на каком месте все-таки происходит ошибка? Какая "данная запись"? В куске где про ConstantAttributes, или там где про "непостоянные"?
Цитировать
Если вы считаете иначе, можете предложить корректировки в коде.    
Я бы предложил убрать совсем кусок со строки 82. до 97., а строки 86, 87, 95 перенес бы в верхний цикл
Делать еще один цикл отдельно по постоянным атрибутам не вижу смысла, если уже есть первый.
А att(i).TagString = "ШИФР" сделать редактируемым, зачем он нужен постоянный?

Оффлайн Владимир П

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 3
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #117 : 26-04-2017, 14:49:47 »
Получилось решить проблему.
А с нами поделиться?

Оффлайн FocusNIK

  • ADN OPEN
  • Сообщений: 7
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #118 : 26-04-2017, 16:31:58 »
Вот что получилось из рабочего, но не оформленного.
" If elem.HasAttributes = True Then" так, что бы можно было блочно скопировать из одного проекта без переписывания блока.
Понимаю, что правильнее переписать в один, но по первости так проще воспринимается.

Ошибку выдавала строка :LB(0)=att(i).InsertionPoint(0
с чем связана незнаю. Не удалось понять

Так же не получилось получить значения .TextAligmentPoint. Тоже ошибка была.


Извините, вам запрещён просмотр содержимого спойлеров.

Оффлайн Владимир П

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 3
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #119 : 26-04-2017, 18:07:05 »
Ошибку выдавала строка :LB(0)=att(i).InsertionPoint(0 с чем связана незнаю. Не удалось понятьТак же не получилось получить значения .TextAligmentPoint. Тоже ошибка была.
1.
GetAttributes Method (ActiveX)
Gets the attributes in the block reference.
RetVal = object.GetAttributes
Return Value (RetVal)
The array of AttributeReference objects.
2.
GetConstantAttributes Method (ActiveX)
Gets the constant attributes in the block or external reference.
RetVal = object.GetConstantAttributes
Return Value (RetVal)
The array of Attribute objects that are constant for the block reference.

При внимательном рассмотрении между двумя этими методами есть различия.
Возвращаемые объекты:
1. AttributeReference objects
и
2. Attribute objects