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

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

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

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #15 : 24-08-2016, 12:30:39 »
Ну, 2009х64 тем не менее отработал корректно... Установленного 2012х64 нет, проверить не на чем :(
Я проверил в AutoCAD 2012 SP2 x64. Код работает нормально, хотя очень тормозит перед запросом указания точки.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #16 : 24-08-2016, 12:33:00 »
Такая же беда. Правда, я не удивлен: http://adn-cis.org/autocad,-vba-i-proizvoditelnost.html
Все, что сказано - личное мнение.

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

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

Оффлайн ediczr2012Автор темы

  • ADN OPEN
  • Сообщений: 31
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #17 : 24-08-2016, 13:08:37 »
Заранее прошу прощения, я только изучаю VBA.

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

Причина не выполнения скрипта VBA из урока №4:

Код - Visual Basic [Выбрать]
  1. pp = ThisDrawing.Utility.GetPoint (, "Укажите точку вставки блока:")

связано с ошибкой компонентов операционной системы Windows 7 (-2147418113 (8000FFFF)    Разрушительный сбой.)
Описание по ошибке в статьях:
https://support.microsoft.com/ru-ru/kb/187942
https://support.microsoft.com/ru-ru/kb/303737
https://support.microsoft.com/ru-ru/kb/243349

Причина:
Сохранение курсоров, или иными словами, не закрывает их, не является SQL Server или ANSI SQL по умолчанию. Спецификацией OLE DB не указывать значение по умолчанию для этих свойств, поскольку это поведение можно изменить для поставщик.
Обработчик курсоров, однако сохранение курсоров.

Переделанный код VBA:

Код - Visual Basic [Выбрать]
  1. Sub InsertBlock()
  2.     Dim blockRef As AcadBlockReference
  3.     Dim name As String
  4.     Dim pp As Variant
  5.     Dim insPnt(0 To 2) As Double
  6.     ' кординаты вточки втавки блока
  7.    insPnt(0) = 0
  8.     insPnt(1) = 0
  9.     insPnt(2) = 0
  10.     ' Вставка блока
  11.    name = "ИмяБлока"
  12.     Set blockRef = ThisDrawing.ModelSpace.InsertBlock(insPnt, name, 1, 1, 1, 0)
  13.  
  14. End Sub



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


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

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #18 : 24-08-2016, 14:12:35 »
Переделанный код VBA:
Это не решение вопроса с выбором точки вставки. Тем более, ты не можешь знать, где еще проявятся подобные штуки. Поэтому я бы посоветовал тебе задуматься над переходом на более свежий софт, в частности AutoCAD поновее.

Оффлайн ediczr2012Автор темы

  • ADN OPEN
  • Сообщений: 31
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #19 : 24-08-2016, 14:17:12 »
Порекомендуй какой софт autoCAD поставить ?
Поддержку VBA  ставить отдельно придется 

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

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #20 : 24-08-2016, 14:22:11 »
Off-Topic: показать
Порекомендуй какой софт autoCAD поставить ?
Ну очевидно же, что все зависит от того, что ты используешь в придачу к AutoCAD и параметров твоего компа. Я бы ставил AutoCAD2017x64 и Windows10x64.

Поддержку VBA  ставить отдельно придется 
А вот это совсем не проблема. Скачал - установил.

Оффлайн ediczr2012Автор темы

  • ADN OPEN
  • Сообщений: 31
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #21 : 24-08-2016, 14:23:43 »
Хорошо учту. :)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #22 : 24-08-2016, 18:15:53 »
А вот это совсем не проблема. Скачал - установил.
Если это не глобальная проблема системы ediczr2012. Тут возможны варианты...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ZaurbekA

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #23 : 25-09-2016, 01:24:20 »
Доброго времени суток!
Максим, большое тебе спасибо уроки!
Позволь спросить несколько вопросов (и прошу прощения, если они покажутся глупыми - программирую в первый раз в жизни):
1. Если, к примеру, у нас несколько блоков, считывающих значения из Экселя, то как реализовать это в коде?
(то место, где мы задаем имя блока: name = "ИмяБлока")
2. Если изменяемых атрибутов несколько (вот тут - If att(i).TagString = "АТРИБУТ" Then), то мы просто несколько раз повторяем эту строку с разными тэгами?
3. Мы разобрали пример того, как вставлять новый блок, а как изменять тот, который уже существует на чертеже?
4. В одной из тем тут на форуме ты упомянул о книге "autocad vba joe sutphin" - можно ли ее где-нибудь найти?
Спасибо еще раз!

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

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #24 : 25-09-2016, 01:48:17 »
1. Если, к примеру, у нас несколько блоков, считывающих значения из Экселя, то как реализовать это в коде?
(то место, где мы задаем имя блока: name = "ИмяБлока")
Смотря, каким образом тебе нужно их вставлять. ZaurbekA, давай конкретный пример.
2. Если изменяемых атрибутов несколько (вот тут - If att(i).TagString = "АТРИБУТ" Then), то мы просто несколько раз повторяем эту строку с разными тэгами?
Да, конечно. Ты вот попробуй.
3. Мы разобрали пример того, как вставлять новый блок, а как изменять тот, который уже существует на чертеже?
Нужно использовать селекшн сет:
Код - Visual Basic [Выбрать]
  1. On Error Resume Next
  2.     ThisDrawing.SelectionSets("SS").Delete
  3.     Set ss = ThisDrawing.SelectionSets.Add("SS")
  4.     ss.SelectOnScreen
  5.     For Each objEnt In ss
  6.     Set objBRef = objEnt
  7.     With objBRef
  8.         If .IsDynamicBlock = True Then
  9.         Props = .GetDynamicBlockProperties
  10.             For Index = LBound(Props) To UBound(Props)
  11.                 Set oProp = Props(Index)
  12.                ' Что-то делаем со свойствами блока
  13.            Next
  14.         End If
  15.     End With
  16.     Next
  17. If Not ss Is Nothing Then
  18. ss.Delete
Это фрагмент кода! Но, если ты начинающий, то лучше всего все разбирать на конкретном примере.
4. В одной из тем тут на форуме ты упомянул о книге "autocad vba joe sutphin" - можно ли ее где-нибудь найти?
Книга есть в общем доступе:
https://dwg.ru/dnl/1640

Оффлайн ZaurbekA

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #25 : 27-09-2016, 00:14:20 »
Смотря, каким образом тебе нужно их вставлять. ZaurbekA, давай конкретный пример.
А, я, честно говоря, думал создать файл с блоками, например несколько схем рам с эпюрами (я преподаю строймех) и изменять из в соответствии с расчетами в Эксель.
А если вставлять, то, наверное, как в твоем уроке - InsertBlock. Или я не понял вопроса?
Нужно использовать селекшн сет:
Удивительно, но у меня получилось.
Книгу скачал. Спасибо, но тут у меня еще один вопрос, скорей не вопрос, а совет что-ли твой спросить хочу (извини, если длинно получится):
Моя цель  - овладеть возможностями динамических блоков и их связью с Экселем (Маткадом) в том уровне (для меня космическом - без шуток) в каком они представлены в твоих видео (ЖБК и особенно в "Эпюре материалов" - до сих пор вспоминаю то удивление, которое ощутил при первом просмотре - мое искреннее восхищение!).
Так вот - мне не хочется становится программистом (да простят меня форумчане!), вникать в тонкие аспекты и сделать код оптимальным, красивым, логичным и прочее, поскольку при просмотре твоих видео, я понял, что мое владение динамическими блоками...в общем, нет моего владения ими - даже понять. как работаю твои блоки оказалось для меня непосильным (если вдруг надумаешь делать уроки, я первый ученик буду - честно), значит - вот основной фронт познавательной работы - динамические блоки, макросы типа твоих Автокад хаков, оптимизация процесса проектирования.
А вот и сам вопрос - что из программирования и самое главное в какой мере, мне следует изучить (может есть какие-то разделы каких-то книг, которое следует прочитать или есть видео, блоги и т.п. - ведь помимо Autocad VBA, ты рекомендовал еще "Язык макрокоманд и создание кнопок") для того, чтобы достичь моей цели? Опыт и последовательность твоего познания что-ли.
p.s. понимаю заведомую глупость такой постановки вопроса (и суть), поскольку изучая что-то по-настоящему, хочется знать как можно больше и лучше, просто овладение именно этим багажом знаний на данный момент и есть для меня "больше и лучше")
Спасибо еще раз.

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #26 : 27-09-2016, 00:40:14 »
Off-Topic: "Позволю себе влезть" • показать
Если хочется из одного продукта управлять другим продуктом, то варианта 2: либо заказывать софт, либо самостоятельно его разрабатывать. В первом случае если что не так - жди, пока автор подключится, вспомнит и теде. Во втором - рано или поздно начнешь соображать, где "тонкое" место. И сможешь исправить.
Из литературы я бы в первую очередь использовал прежде всего справку и форум. Без шуток :) Сверхсерьезные книги типа "Совершненный код" и тому подобное, что рекомендует Андрей Бушман - для начала, думаю, будут тяжеловаты.
Все, что сказано - личное мнение.

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

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

Оффлайн ZaurbekA

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #27 : 27-09-2016, 00:52:44 »
либо самостоятельно его разрабатывать.
дык, я ж этого и боюсь! :-)
а "управлять" это как-то уж через чур громко звучит - всего только то, что Максим Маркевич проделывает со своими блоками. Спасибо за ответ! Справкой пользуюсь как могу и форумом, как видите , тоже :-).

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

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #28 : 27-09-2016, 01:25:24 »
А, я, честно говоря, думал создать файл с блоками, например несколько схем рам с эпюрами (я преподаю строймех) и изменять из в соответствии с расчетами в Эксель.
А если вставлять, то, наверное, как в твоем уроке - InsertBlock. Или я не понял вопроса?
Придумай простую задачу (вот совсем простую с самыми простыми рамами), сделай скрины и грамотно ее сформулируй. Тогда я тебе смогу помочь!
ЖБК и особенно в "Эпюре материалов" - до сих пор вспоминаю то удивление, которое ощутил при первом просмотре - мое искреннее восхищение!
Спасибо. Я рад, что ты оценил.. Именно эпюру материалов. Конкретно в эпюре материалов - скорей сложный блок, чем сложный код (код примитивен).
если вдруг надумаешь делать уроки, я первый ученик буду - честно
Видео уже есть, но это в лс. Не по теме.
понимаю заведомую глупость такой постановки вопроса (и суть), поскольку изучая что-то по-настоящему, хочется знать как можно больше и лучше, просто овладение именно этим багажом знаний на данный момент и есть для меня "больше и лучше")
Понимаю твой вопрос и не считаю его глупым, хоть и советую тебе немного успокоиться и не суетиться. :)
Здесь я согласен полностью с Алексеем Куликом.
Ты для себя уже решил, что тебе помогут динамические блоки + VBA AutoCAD.
Насчет изучения VBA - это справка и форум, и пробовать-пробовать-пробовать (все примеры, что найдешь, надо пробовать и разбирать). Хочу отметить, что, по сути, моих уже уроков достаточно, чтобы делать что-то типа эпюры материалов.
Насчет динамических блоков - это снова справка, форум и пробовать-пробовать-пробовать.
В общем, рецепт на все случаи жизни. :D
ZaurbekA, тебе проще, есть люди типа меня, которые помогут. Ты только формулируй правильно задачи. ;)


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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #29 : 27-09-2016, 08:24:57 »
ZaurbekA, вот если хочешь - тебе достаточно простая задачка: сделать дин.блок, растягивающийся по двум направлениям (горизонталь - вертикаль). Ну типа прямоугольника. Вставить блок в пространство модели. Через VBA внутри AutoCAD установить значения дин.параметрам этого блока.
Задача посложнее: дин.параметры сделать с ограничениями нижнего и верхнего пределов, опять через VBA установить новые значения. Попытаться установить заведомо невозможные значения. Придумать, как обойти такую проблему
Задача еще посложнее: один из дин.параметров сделать дискретным (т.е. возможные значения 50, 100, 150 ... 500) и попытаться ему установить значение, например, 146. Придумать, как обойти такую проблему.
Вот как-то так примерно ;)
Все, что сказано - личное мнение.

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

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