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

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

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

Оффлайн Dimaill

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #165 : 20-04-2018, 12:04:53 »
Добрый день!

Подскажите пожалуйста по моей проблеме:
Посмотрел видео урок "16. AutoCAD VBA. Пакетная печать блоков-форматов"
Скопировал себе код, создал блок для печати. Названия блоков в коде VBA и самом блоке совпадают. Параметры печати проверил-совпадают.
Ничего более не менял в коде, запускаю, выбираю рамкой блоки для печати (более 1 блока).
В результате на печать выводится 1 лист pdf.
В чем может быть проблема?
(Даже пробовал делать все как у автора: те же названия блоков, места для печати и т.д.) Итог один-печатается только 1 блок.

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

  • Administrator
  • *****
  • Сообщений: 8566
  • Карма: 1045
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #166 : 20-04-2018, 12:18:10 »
В результате на печать выводится 1 лист pdf.
Посмотрел код - он должен формировать столько pdf-файлов (не листов в файле, а именно файлов), сколько выбрано блоков с правильным именем.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Dimaill

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #167 : 20-04-2018, 12:23:55 »
Все верно, должно напечататься столько файлов pdf сколько выбрано блоков с именем указанном в коде. Так вот я выбираю например 3 блока, печатается 1 файл. И сколько бы я не выбрал одинаковых блоков- печатается только 1.

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

  • Administrator
  • *****
  • Сообщений: 8566
  • Карма: 1045
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #168 : 20-04-2018, 15:20:54 »
Все верно, должно напечататься столько файлов pdf сколько выбрано блоков с именем указанном в коде. Так вот я выбираю например 3 блока, печатается 1 файл. И сколько бы я не выбрал одинаковых блоков- печатается только 1.
Запусти под отладчиком и посмотри что происходит. Подозреваю, что у тебя BACKGROUNDPLOT не установлена в 0: https://knowledge.autodesk.com/ru/support/autocad/learn-explore/caas/CloudHelp/cloudhelp/2017/RUS/AutoCAD-Core/files/GUID-713029B7-B5AC-4860-BE2E-74878D418EA4-htm.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Dimaill

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #169 : 20-04-2018, 15:32:07 »
Помогло, спасибо Вам) Печатает как сумасшедший)

Оффлайн Dimaill

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #170 : 20-04-2018, 16:50:47 »
Подскажите пожалуйста.
Хочу присвоить имени листа атрибут блока, чтобы как то идентифицировать напечатанное. Что я делаю не так? Только не пинайте сильно. Я не разбираюсь в VBA. Все происходит наощупь (пытаюсь разобраться)

Код - Visual Basic [Выбрать]
  1. ' 3. Печать заданных блоков в пдф
  2. Sub PlotByBlocks()
  3.  
  4.     Dim objEnt As AcadEntity
  5.     Dim objBRef As AcadBlockReference
  6.     Dim blockRef As AcadBlockReference
  7.     Dim pt1 As Variant
  8.     Dim pt2(0 To 1) As Double
  9.     Dim i As Integer
  10.    
  11.     ' Создаем выбор рамкой
  12.    On Error Resume Next
  13.     ThisDrawing.SelectionSets("SS").Delete
  14.     Set ss = ThisDrawing.SelectionSets.Add("SS")
  15.     ss.SelectOnScreen
  16.    
  17.     ' Работаем, если имя блока А1
  18.    For Each objEnt In ss
  19.     If objEnt.ObjectName = "AcDbBlockReference" Then
  20.     Set objBRef = objEnt
  21.         If objBRef.EffectiveName = "_ЛИСТ" Then
  22.             pt1 = objBRef.InsertionPoint
  23.             pt1 = ThisDrawing.Utility.TranslateCoordinates(pt1, acWorld, acDisplayDCS, False)
  24.             ReDim Preserve pt1(0 To 1)
  25.             pt2(0) = pt1(0) + 841
  26.             pt2(1) = pt1(1) + 594
  27.         End If
  28.         att = blockRef.GetAttributes
  29.                      For i = LBound(att) To UBound(att)
  30.                          If att(i).TagString = "№" Then
  31.                          PolyPlot "C:\Users\dilyasov\Desktop\PDF\Лист" + CStr(att(№)), pt1, pt2
  32.                          End If
  33.                      Next
  34.      End If
  35.      Next
  36.    
  37. End Sub
  38.  
« Последнее редактирование: 20-04-2018, 17:31:05 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 8566
  • Карма: 1045
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #171 : 20-04-2018, 17:32:15 »
Dimaill
Прочитай у меня в подписи по поводу форматирования кода на нашем форуме и соблюдай это правило!
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 8566
  • Карма: 1045
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #172 : 20-04-2018, 17:38:00 »
Не проверял, но думаю, что вместо:
Код - Visual Basic [Выбрать]
  1.   PolyPlot "C:\Users\dilyasov\Desktop\PDF\Лист" + CStr(att(№)), pt1, pt2
должно быть:
Код - Visual Basic [Выбрать]
  1.   PolyPlot "C:\Users\dilyasov\Desktop\PDF\Лист" + CStr(att(i).TextString), pt1, pt2
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн serega374

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #173 : 08-07-2018, 06:17:43 »
Добрый день! А как проверить что ячейка Exel пустая? пробовал "" и 0 не помогает. В Excel VBA есть  метод isEmpty(). Но в автокаде он не работает
Код - Visual Basic [Выбрать]
  1. For NumRowsExel = 1 To 100 ' цикл в котором определяю начальную строку таблицы АФУ
  2. dataString = Cells(NumRowsExel, NumColumnExel) ' переменная в которой храню значение текущей ячейки, NumColumnExel=1
  3. If dataString = "Сектора" Then ' проверяю ключевое слово "Сектора" - начало таблицы АФУ
  4. RowsBeginTableAFU = NumRowsExel ' номер строки начала таблицы АФУ
  5. End If
  6. Next
  7.  
  8. For NumRowsExel = RowsBeginTableAFU To 100 ' цикл в котором определяю конечную строку таблицы АФУ
  9. dataString = Cells(RowsBeginTableAFU, NumColumnExel) ' переменная в которой храню значение текущей ячейки, NumColumnExel=1
  10. If dataString = "" Then ' проверяю пуста ли ячейка, если да
  11. RowsEndTableAFU = NumRowsExel - 1 ' вычисляю номер строки конца таблицы АФУ
  12. GoTo 1 ' и выхожу за пределы цикла
  13. End If
  14. Next
  15.  
  16. 1
  17. NumRowsTable_AFU = RowsEndTableAFU - RowsBeginTableAFU ' вычисляю число строк таблицы АФУ
  18. NumColumnTable_AFU = 1 ' число столбцов
  19. Set New_Table_AFU = ThisDrawing.ModelSpace.AddTable(BasePointTable, NumRowsTable_AFU, NumColumnTable_AFU, 50, 50) ' вставляю таблицу
  20. End Sub
  21.  

И каким образом заполнить вставленную  таблицу в автокаде значениями из exel, не могу найти метод

Оффлайн serega374

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #174 : 08-07-2018, 07:18:28 »
метод isEmpty(). Но в автокаде он не работает
Извините работает
Код - Visual Basic [Выбрать]
  1. x = RowsBeginTableAFU ' номер строки начала таблицы
  2. Do While IsEmpty(Cells(x, NumColumnExel)) = False ' пока не пуста
  3. x = x + 1' увеличиваем
  4. Loop
  5. RowsEndTableAFU = x ' если пуста записываем предыдущее х как номер строки конца таблицы АФУ
  6. NumRowsTable_AFU = RowsEndTableAFU - RowsBeginTableAFU ' вычисляю число строк таблицы АФУ

Оффлайн vsb

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #175 : 17-08-2018, 06:57:54 »
Здравствуйте!
Изучив уроки, написал небольшую программку по выводу чертежей из модели в pdf файлы. Большое спасибо автору. Решил добавить возможность настройки способа вывода и качества из секции "ВЭкраны с раскрашиванием" окна вывода на Печать из Модели. Но не смог найти какие системные переменные или свойства объектов возможно использовать для реализации этой задачи. Прошу подсказать каким образом можно это сделать или где почитать об этом. Извините за возможное неправильное использование терминов, так как уровень в программировании начальный. Система Windows 8.1, Autocad 2012.

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 274
  • Карма: 40
  • Skype: vildar82
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #176 : 17-08-2018, 08:05:32 »
Про визуальный стиль:
у объекта видового экрана (ViewportTableRecord) есть свойство визуальный стиль VisualStyleId (DBVisualStyle), а у него есть Type.
Вроде это оно.

Оффлайн vsb

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #177 : 17-08-2018, 10:36:52 »
Большое спасибо, будем разбираться.
 :)