Печать в цикле

Автор Тема: Печать в цикле  (Прочитано 8175 раз)

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

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

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
Печать в цикле
« : 15-10-2017, 17:55:00 »
Добрый день! В общем моя цель сделать цикл:
1) отрисовка линий по координатам из excel по строке n
2) вывод на печать путем сохранения в .png файл
3) удаление линий и повтор цикла с n+1 и тд.


Проблема возникает на втором этапе, на втором проходе цикла. Выскакивает ошибка:
"Run-time error '-2147467259(80004005)':
Method 'PlotToFile' of object 'IAcadPlot' failed"
Выскакивает на этом месте:
Код - vb.net [Выбрать]
  1. ThisDrawing.Plot.PlotToFile "c:\" & Q

Кто знает в чем дело? Уже все обшарил ничего не могу придумать. Заранее благодарен.

вот сам код:
Код - Visual Basic [Выбрать]
  1. Sub ExcelToAutocad()
  2. ' Äëÿ òîãî, ÷òîáû àâòîêàä ïîíèìàë òàêîé òèï ïåðåìåííûõ, êàê Excel.Application, Excel.Workbook è Excel.Worksheet
  3. ' íåîáõîäèìî â ðåäàêòîðå VBA âûáðàòü Tools - References è äîáàâèòü Microsoft Excel *.* Type Library
  4.        Dim AP As Excel.Application
  5.         Dim WB As Excel.Workbook
  6.         Dim WS As Excel.Worksheet
  7. 'Óñòàíàâëèâàåì ñâÿçü ñ Excel
  8.        Set AP = Excel.Application
  9.         Set WB = AP.Workbooks.Open("C:\1.xlsx")
  10.         Set WS = WB.Worksheets("1")
  11.         Dim F, Q As String
  12.         Dim i As LongLong
  13. 'Íà÷àëî öèêëà
  14.        For i = 0 To 99999
  15.         Q = CStr(i)
  16. 'Ñ÷èòûâàåì äàííûå
  17.        ty1 = Cells(1 + i, 1)
  18.         tx1 = Cells(1 + i, 2)
  19.         ty2 = Cells(1 + i, 4)
  20.         tx2 = Cells(1 + i, 5)
  21.         ty3 = Cells(1 + i, 7)
  22.         tx3 = Cells(1 + i, 8)
  23.         F = Cells(1 + i, 3)
  24. 'Ñòðîþ ïîëèëèíèþ
  25.        Dim plineObj As AcadLWPolyline
  26.         Dim points(0 To 5) As Double
  27. 'Define the 2D polyline points
  28.        points(0) = tx1: points(1) = ty1
  29.         points(2) = tx2: points(3) = ty2
  30.         points(4) = tx3: points(5) = ty3
  31. 'Create a lightweight Polyline object in model space
  32.        Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
  33.         ZoomAll
  34. 'Âûâîä íà ïå÷àòü
  35.        ThisDrawing.ActiveLayout.ConfigName = "PublishToWebPNG1.pc3"
  36.         ThisDrawing.Regen acAllViewports
  37.         ThisDrawing.Plot.PlotToFile "c:\" & Q
  38. 'Óäàëåíèå ïîëèëèíèè
  39.        plineObj.Delete
  40.         ThisDrawing.Regen acActiveViewport
  41. 'Âûõîä èç öèêëà
  42.        If F = "ôèíèø" Then
  43.         Exit For
  44.         End If
  45.         Next
  46. 'Âûâîäèì â AutoCAD
  47.        MsgBox "Ãîòîâî. Âñåãî èçîáðàæåíèé: " & i
  48. 'Çàêðûâàåì Excel
  49.        AP.Quit
  50.  
  51. End Sub
  52.  
  53.  
« Последнее редактирование: 15-10-2017, 18:19:46 от Александр Ривилис »

Отмечено как Решение kawa 15-10-2017, 19:45:00

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Печать в цикле
« Ответ #1 : 15-10-2017, 18:12:17 »
Какое значение системной переменной BACKGROUNDPLOT? Если не 0, то установи её в 0.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
Re: Печать в цикле
« Ответ #2 : 15-10-2017, 19:44:05 »
Какое значение системной переменной BACKGROUNDPLOT? Если не 0, то установи её в 0.
Спасибо большое, помогло.
Я до того как спросил делал команду backgroundplot=0, после вашего ответа поискал и нашел ваш ответ в другой теме и применил вот эту команду:
Код - Visual Basic [Выбрать]
  1. ThisDrawing.SetVariable "backgroundplot", 0
Огромное спасибо)))

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

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 3
Re: Печать в цикле
« Ответ #3 : 16-10-2017, 04:58:54 »
Off-Topic: показать
Цитировать
2) вывод на печать путем сохранения в .png файл
А автокад зачем здесь?

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Печать в цикле
« Ответ #4 : 16-10-2017, 13:02:05 »
Цитировать
2) вывод на печать путем сохранения в .png файл
А автокад зачем здесь?
Ну вообще-то выводятся результаты отрисовки в AutoCAD по данным из Excel
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 3
Re: Печать в цикле
« Ответ #5 : 16-10-2017, 14:04:07 »
Ну вообще-то выводятся результаты отрисовки в AutoCAD по данным из Excel

Ну, а нарисовать эту линию сразу в Excel нельзя? И там же сохранить в .png файл?
Минуя передачу данных и отрисовку линии в Акад.
Кроме этого. Может ТС и не принципиально, но схема, полученная в Акаде, не всегда качественно передается в растр. Например две параллельные линии одинаковой толщины в Акаде могут оказаться разной толщины в растре.

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

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
Re: Печать в цикле
« Ответ #6 : 17-10-2017, 16:49:21 »
Ну вообще-то выводятся результаты отрисовки в AutoCAD по данным из Excel

Ну, а нарисовать эту линию сразу в Excel нельзя? И там же сохранить в .png файл?
Минуя передачу данных и отрисовку линии в Акад.
Кроме этого. Может ТС и не принципиально, но схема, полученная в Акаде, не всегда качественно передается в растр. Например две параллельные линии одинаковой толщины в Акаде могут оказаться разной толщины в растре.
Нарисовать можно хоть в пэйнте, но когда нужно нарисовать 1000 линий по определенным координатам и по каждой линии получить изображение, то тут уж кроме автокада я не нашел выхода)

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 475
  • Карма: 63
Re: Печать в цикле
« Ответ #7 : 18-10-2017, 07:00:58 »
Цитировать
Нарисовать можно хоть в пэйнте, но когда нужно нарисовать 1000 линий по определенным координатам и по каждой линии получить изображение, то тут уж кроме автокада я не нашел выхода)
d3

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

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 3
Re: Печать в цикле
« Ответ #8 : 18-10-2017, 07:15:13 »
удалил

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

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 3
Re: Печать в цикле
« Ответ #9 : 18-10-2017, 07:15:48 »
Off-Topic: показать
но когда нужно нарисовать 1000 линий по определенным координатам и по каждой линии получить изображение
Я-то считаю, что Вы чешете левое ухо правой рукой, причем через затылок. Можно же левой рукой и напрямую.
А Вы отвечаете, что почесать-то нужно 1000 раз, поэтому... только правой рукой.
Нет, ну если Вам так удобней... Никто не спорит. Потому у меня вопрос этот сразу был в offtop.

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Печать в цикле
« Ответ #10 : 18-10-2017, 08:39:25 »
trir, Владимир П
Кончайте с offtop'ом. Есть совершенно конкретный вопрос и совершенно конкретный ответ на него. Задача решена.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение