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

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

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

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

  • Administrator
  • *****
  • Сообщений: 773
  • Карма: 121
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #30 : 27-09-2016, 08:25:50 »
И задача "высшего уровня": повторить все эти три шага, вызывая AutoCAD через MathCAD / Excel и "забирая" значения из каких-то переменных или ячеек ;)
Все, что сказано - личное мнение.

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

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

Оффлайн ZaurbekA

  • ADN OPEN
  • Сообщений: 4
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #31 : 27-09-2016, 13:07:32 »
Придумай простую задачу (вот совсем простую с самыми простыми рамами), сделай скрины и грамотно ее сформулируй. Тогда я тебе смогу помочь!
Ок. Хотя, я изначально не правильно задал вопрос  - я имел ввиду сделать что-то типа твоего ЖБК (где колонны, сечения, спецификации и прочее) и поэтому спросил: "а если блоков много?" - а надо было бы для начала разобраться, как ты это делал.
Буду пробовать и постараюсь правильно формулировать задачи.
Алексей Кулик, спасибо за домашние задания.
На "задачке посложнее", конечно же, споткнулся. Нашел в справке, что это называется "AllowedValues", думаю что программу нужно научить, что если "PropertyName" есть  "AllowedValues", то сделать "неAllowedValues" - либо как-то красивей, думаю. Но проблема пока что в том, что мне "нечем кричать и разговаривать" в программировании :) и как правильно искать нужные команды и правила их написания тоже пока туго лезет.



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

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 26
  • Skype: evthisrel
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #32 : 27-09-2016, 14:42:51 »
я имел ввиду сделать что-то типа твоего ЖБК (где колонны, сечения, спецификации и прочее) и поэтому спросил: "а если блоков много?".
То, о чем ты сейчас говоришь, это один блок. 8)
На самом деле, редко бывает нужно использовать много блоков - это только в сложнейших задачах.
Проблема в том, что не очень много людей умеют в AutoCAD работать с блоками, атрибутами и полями. Поэтому, если говорить о программировании в AutoCAD, то нужно сразу с разобраться с тем, что уже есть в самой программе. А вот уже манипулировать этим, красиво обернуть - в этом поможет программирование (разумеется, я говорю про начальный этап). Потом все интереснее и интереснее.  ;)

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

  • Administrator
  • *****
  • Сообщений: 8567
  • Карма: 1045
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #33 : 29-10-2016, 16:37:30 »
Замечание к 14-ому уроку. Координаты точек окна для печати следует преобразовывать из UCS в DCS. Иначе в ряде случаев печатается совсем не это окно: http://adndevblog.typepad.com/autocad/2016/05/plot-to-window-extents-using-vba.html
 
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 26
  • Skype: evthisrel
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #34 : 30-10-2016, 13:26:50 »
Замечание к 14-ому уроку. Координаты точек окна для печати следует преобразовывать из UCS в DCS. Иначе в ряде случаев печатается совсем не это окно: http://adndevblog.typepad.com/autocad/2016/05/plot-to-window-extents-using-vba.html
Принято и исправлено (прямо в посте). Лично у меня обозначенных проблем не возникало, но полностью согласен, что так правильно!

Оффлайн das-76

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #35 : 05-12-2016, 14:13:03 »
Максим Маркевич огромное спасибо за уроки.
Пробую печатать чертежи в PDF. Немного изменил ваш код из урока №14. У меня при выполнении команды ThisDrawing.Plot.PlotToFile FileName выскакивает окно ошибки AutoCAD.

Код - Visual Basic [Выбрать]
  1. Dim Xl As Excel.Application
  2. Dim Папка As String
  3. Dim Layout As AcadLayout
  4.  
  5. Private Sub AcadDocument_Activate()
  6. ' Вычерчивание схемы1
  7.    'Call Схема1
  8.    
  9.  ' Вычерчивание схемы2
  10.    'Call Схема2
  11.    
  12.  ' Вычерчивание схемы3
  13.    'Call Схема3
  14.  
  15. ' Печать чертежей
  16.    Dim pt1(0 To 1) As Double, pt2(0 To 1) As Double
  17.     Dim iTimer As Date
  18.  
  19.     Set Xl = GetObject(, "Excel.Application")
  20.     Папка = Xl.Range("Папка")
  21.    
  22.     For i = 1 To 3
  23.         ' Устанавливаем
  24.        Set Layout = ThisDrawing.ActiveLayout
  25.        
  26.         FileName = Папка & Xl.Range("Схема" & i) & ".pdf"
  27.         pt1(0) = Xl.Range("X1_" & i): pt1(1) = Xl.Range("Y1_" & i)  ' Получаем первую точку рамки
  28.        pt2(0) = Xl.Range("X2_" & i): pt2(1) = Xl.Range("Y2_" & i)  ' Получаем вторую точку
  29.        
  30.         ' Обновим текущую плот-информацию
  31.        Layout.RefreshPlotDeviceInfo
  32.                
  33.         ' Настройка печати
  34.        Layout.ConfigName = "DWG to PDF.pc3"
  35.         Layout.CanonicalMediaName = "ISO_full_bleed_A1_(594.00_x_841.00_MM)"
  36.         Layout.PlotRotation = ac90degrees
  37.         Layout.StandardScale = acScaleToFit
  38.         Layout.StyleSheet = "acad.ctb"
  39.        
  40.         ' Устанавливаем рамки окошка
  41.        Layout.SetWindowToPlot pt1, pt2
  42.         Layout.PlotType = acWindow
  43.        
  44.         ' Отправляем на печать
  45.        ThisDrawing.Regen acAllViewports
  46.         ThisDrawing.Plot.PlotToFile FileName
  47.     Next
  48.    
  49.     MsgBox ("Печать закончена")
  50. End Sub
« Последнее редактирование: 05-12-2016, 23:45:14 от Алексей Кулик »

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 11
  • Skype: pashin.evgeniy
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #36 : 05-12-2016, 14:47:31 »
das-76, добрый день.

Попробуйте выполнить печать в PDF-файл со следующими параметрами и в строгой последовательности:
1. Убедитесь, что каноническое имя формата существует и соответствует тому, что указан в вашем коде (в моём случае он указан как UserDefinedMetric (420.00 x 1486.00мм))
2. Попробуйте выполнить печать в строгой последовательности, которая указана в моём коде:

Код - Visual Basic [Выбрать]
  1. Public Sub PlotMe()
  2.  
  3. Dim p0(1) As Double
  4. Dim p1(1) As Double
  5. Dim p2(1) As Double
  6. Dim LowerLeft As Variant
  7. Dim UpperRight As Variant
  8.  
  9. With Application.ActiveDocument.ActiveLayout
  10.     .ConfigName = "DWG To PDF.pc3"
  11.     .CanonicalMediaName = "Каноническое имя формата (следите за кирилицей букв)"
  12.     .PaperUnits = acMillimeters
  13.     .PlotHidden = False
  14.     p0(0) = 0
  15.     p0(1) = 0
  16.     .PlotOrigin = p0
  17.     .PlotRotation = ac0degrees
  18.     p1(0) = 0
  19.     p1(1) = 0
  20.     LowerLeft = p1
  21.     p2(0) = 210 ' Значение из ячейки Excel
  22.    p2(1) = 297 ' Значение из ячейки Excel
  23.    UpperRight = p2
  24.     .SetWindowToPlot LowerLeft, UpperRight
  25.     .UseStandardScale = True
  26.     .SetCustomScale 1, 1
  27.     .PlotType = 4  ' acWindows
  28.    .CenterPlot = True
  29.     .PlotViewportBorders = True
  30.     .PlotViewportsFirst = True
  31.     .PlotWithLineweights = True
  32.     .PlotWithPlotStyles = True
  33.     .StyleSheet = "acad.ctb"
  34. End With
  35.  
  36. ThisDrawing.Plot.PlotToFile "D:\0001.pdf"
  37.  
  38. MsgBox "OK"
  39.  
  40. End Sub

3. Чтобы получить канонические имена форматов можно использовать код:

Код - Visual Basic [Выбрать]
  1. Public Sub CNNCLMDNMS()
  2. For Each PL In Application.ActiveDocument.ActiveLayout.GetCanonicalMediaNames
  3.     MsgBox PL
  4. Next
  5. End Sub


Оффлайн das-76

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #37 : 05-12-2016, 20:15:40 »
Попробуйте выполнить печать в PDF-файл со следующими параметрами и в строгой последовательности:
1. Убедитесь, что каноническое имя формата существует и соответствует тому, что указан в вашем коде (в моём случае он указан как UserDefinedMetric (420.00 x 1486.00мм))
2. Попробуйте выполнить печать в строгой последовательности, которая указана в моём коде:

Повторил ваш код, результат тот же. Формат записал правильно (проверил с помощью вашего кода).

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 11
  • Skype: pashin.evgeniy
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #38 : 08-12-2016, 11:41:11 »
das-76,  тогда у меня нет другого варианта, как самому заглянуть в Ваш код.

Выложите его здесь, желательно весь модуль. Я имею ввиду тот код, который у Вас получился после моих рекомендаций.

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

Оффлайн das-76

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #39 : 08-12-2016, 12:05:41 »
Евгений код я повторил ваш, только вставил формат.

Оффлайн das-76

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #40 : 08-12-2016, 12:06:15 »
   
Код - Visual Basic [Выбрать]
  1.  Public Sub PlotMe()
  2.      
  3.     Dim p0(1) As Double
  4.     Dim p1(1) As Double
  5.     Dim p2(1) As Double
  6.     Dim LowerLeft As Variant
  7.     Dim UpperRight As Variant
  8.      
  9.     With Application.ActiveDocument.ActiveLayout
  10.         .ConfigName = "DWG To PDF.pc3"
  11.         .CanonicalMediaName = "ISO_full_bleed_A4_(210.00_x_297.00_MM)"
  12.         .PaperUnits = acMillimeters
  13.         .PlotHidden = False
  14.         p0(0) = 0
  15.         p0(1) = 0
  16.         .PlotOrigin = p0
  17.         .PlotRotation = ac0degrees
  18.         p1(0) = 0
  19.         p1(1) = 0
  20.         LowerLeft = p1
  21.         p2(0) = 100 ' Значение из ячейки Excel
  22.        p2(1) = 100 ' Значение из ячейки Excel
  23.        UpperRight = p2
  24.         .SetWindowToPlot LowerLeft, UpperRight
  25.         .UseStandardScale = True
  26.         .SetCustomScale 1, 1
  27.         .PlotType = 4  ' acWindows
  28.        .CenterPlot = True
  29.         .PlotViewportBorders = True
  30.         .PlotViewportsFirst = True
  31.         .PlotWithLineweights = True
  32.         .PlotWithPlotStyles = True
  33.         .StyleSheet = "acad.ctb"
  34.     End With
  35.      
  36.     ThisDrawing.Plot.PlotToFile "D:\0001.pdf"
  37.      
  38.     MsgBox "OK"
  39.      
  40.     End Sub
« Последнее редактирование: 08-12-2016, 14:34:55 от Александр Ривилис »

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 11
  • Skype: pashin.evgeniy
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #41 : 08-12-2016, 13:21:44 »
        p2(0) = 100 ' Значение из ячейки Excel
        p2(1) = 100 ' Значение из ячейки Excel

das-76, пожалуйста замените эти два значения на 210 и 297 соответственно. На самом деле это вторая точка области печати.



Код, который Вы показали - работает! Я только изменил вторую точку области печати и каноническое имя формата принтера. На видео я это показал.

А у Вас что показывает?

У меня Ваш код сработал так:




Оффлайн das-76

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #42 : 08-12-2016, 13:35:37 »
Если создать новый чертёж и вставить код из урока №14 и не сохранять, то печать идёт. Даже вносил изменения в код и всё работало. Стоит только сохранить и закрыть, то при следующем запуске файла возникает эта проблема. Автокад мне достался по наследству.

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 11
  • Skype: pashin.evgeniy
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #43 : 08-12-2016, 13:40:01 »

Если создать новый чертёж и вставить код из урока №14 и не сохранять, то печать идёт. Даже вносил изменения в код и всё работало. Стоит только сохранить и закрыть, то при следующем запуске файла возникает эта проблема. Автокад мне достался по наследству.

Ничего страшного, главное понять, что у него не корректно срабатывает.
Вопросы:
1. Запускается ли макрос без ошибок?
2. Происходит ли печать Вашего объекта в PDF-файл?
3. Что отображается в PDF-файле? (если макрос работает) Можно в виде изображения.

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

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 26
  • Skype: evthisrel
Re: Обсуждение видеоуроков AutoCAD VBA
« Ответ #44 : 08-12-2016, 13:42:58 »
Автокад мне достался по наследству.
Кстати, что за Автокад? Какая версия, разрядность системы?