Тема: КАк автоматизировать процесс вставки изображения?

Друзья!
Передо мной встала задача — решить которую я оказался не в силах — надежда на вашу помощь.
СУть проста как валенок:
- нужно открыть документ (обычный 2D чертеж)
- вставить в него рисунок (из буфера обмена или из файла — неважно), с привязкой к правому нижнему углу рамки
- сохранить
проблема в том что сделать это надо — около 3000 раз....
чертежей много....
в написании скриптов — я полный профан — а ведь уверен что задача мастеру на 10 минут.
вот бы еще сделать пакетную обработку.... :)
поможете?
Предупреждение! Кросс-постинг запрещен. https://www.caduser.ru/forum/topic29790.html
/Администратор./

Re: КАк автоматизировать процесс вставки изображения?

> Алексей
А все равно потом вручную придется править масштаб....По собственному опыту знаю....Я тоже растры тысячами вставляю...

Re: КАк автоматизировать процесс вставки изображения?

не-е-е..
у меня все проще и от этого обиднее - растр стандартный - подпись и масштаб там подогнан как надо.
и от этой рутины аж голова кругом идет...
осталось примерно 2900....

Re: КАк автоматизировать процесс вставки изображения?

> Алексей
Попробуй перепиши на VBA:

;; written by Fatty T.O.H (c) 2004
;; all rights removed
;; get ObjectDBX document
(defun odbx-test (/ dbx_doc)
(if (< (atof (getvar "ACADVER")) 15.06)
(progn (alert "ObjectDBX method not applicable\nin this AutoCAD version")
  (exit)(princ)(gc))
(progn
(if (= (atoi (getvar "ACADVER")) 15)
(progn
(if (not (vl-registry-read
"HKEY_CLASSES_ROOT\\ObjectDBX.AxDbDocument\\CLSID"))
(startapp "regsvr32.exe"
(strcat "/s \"" (findfile "axdb15.dll") "\"")))
(setq dbx_doc (vla-getinterfaceobject
(vlax-get-acad-object)
"ObjectDBX.AxDbDocument")))
(setq dbx_doc (vla-getinterfaceobject
            (vlax-get-acad-object)
            "ObjectDBX.AxDbDocument.16"))))))
;; main program :
;; () 2006
(defun C:IMI (/ acapp acsp adoc fi fn fname fold full_name_list mdmod odbx rst_obj)
  (vl-load-com)
  (or acapp
      (setq acapp (vlax-get-acad-object))
  )
  (or adoc
      (setq adoc (vla-get-activedocument acapp))
  )
  (vla-endundomark adoc)
  (vla-startundomark adoc)
  (setq mdmod (getvar"SDI"))
  (setvar "SDI" 0)
  (alert "Выбрать файл растра для\n массовой вставки в рисунки")
  (setq    fi           (getfiled "Select \"IMAGE\" file to insert"
                 ""
                 "jpg"
                 8
               )
      )
  (alert "Выбрать любой файл рисунка в папке\nдля обработки всех ее рисунков")
  (setq    fn           (getfiled "Select ANY \".DWG\" file to attach image"
                 ""
                 "dwg"
                 16
               )
    fold           (vl-filename-directory fn)
    full_name_list (vl-directory-files fold "*.dwg" 1)
    full_name_list (mapcar (function (lambda (x)
                       (strcat fold "\\" x)
                     )
                   )
                   full_name_list
               )
  )
  (foreach other full_name_list
    (if
      (setq fname (findfile other))
       (progn
     (setq odbx (odbx-test))
     (vla-open odbx fname)
     (setq acsp (vla-get-modelspace odbx))
  (setq rst_obj (vla-addraster acsp fi (vlax-3d-point '(0. 0. 0.)) 1. 0.))
  (vla-put-imagefile rst_obj fi)
  (vlax-invoke odbx 'SaveAs fname )    
  (vl-catch-all-apply (function (lambda ()
    (vlax-release-object odbx))))
  (setq odbx nil))))
  (setvar "SDI" mdmod)
  (vla-endundomark adoc)
  (gc)
  (princ)
)
(prompt "\nType imi to execute ...")
(princ)

~'J'~

Re: КАк автоматизировать процесс вставки изображения?

Sub AddRaster()
    Dim insertionPoint(0 To 2) As Double
    Dim scalefactor As Double
    Dim rotationAngle As Double
    Dim imageName As String
    Dim rasterObj As AcadRasterImage
    imageName = "d:/DSC01538.JPG"
    insertionPoint(0) = 5#: insertionPoint(1) = 5#: insertionPoint(2) = 0#
    scalefactor = 1#
    rotationAngle = 0
    On Error Resume Next
    Set rasterObj = ThisDrawing.ModelSpace.AddRaster(imageName, insertionPoint, scalefactor, rotationAngle)
    If err.Description = "File error" Then
        MsgBox imageName & " could not be found."
        Exit Sub
    End If
End Sub

Re: КАк автоматизировать процесс вставки изображения?

м-м-м.. какое поле для экспериментов :)
Сегодня попробую, спасибо!

Re: КАк автоматизировать процесс вставки изображения?

> Алексей
А вставляемый растр для всех 3000 чертежей один и тот же ? Или для каждого чертежа свой растр с оригинальным именем?

Re: КАк автоматизировать процесс вставки изображения?

To BigScrew
подписей 2-3 разных максимум
ну в плане универсалности программы - конечно хорошо бы иметь возможность выбирать
а в плане "не раскатывай губу" - согласен на урезанный вариант.
ничего не станется - если ручками поправить имя вставляемого файла - 2-3 раза и отсортировать в 2-3 папки - сюда с 1 подписью, сюда со второй сюда с третьей.
это мне не 3000 раз сделать отнотипные операции.
грех жаловаться :)
To Fatty
Понимая что вопрос вызовет бурю негодования ( и праведного замечу) все же спрошу.
Это же LISP?

Re: КАк автоматизировать процесс вставки изображения?

Отвечу за Fatty: Ага. Запуск с ком.строки - IMI

Re: КАк автоматизировать процесс вставки изображения?

to kpblc
м-м-м... IMI?
чувствую себя профаном...

Re: КАк автоматизировать процесс вставки изображения?

:?:
Смотри, есть а лиспе такая строка:

(defun C:IMI (

И дальнейшее нас на данный момент особо не интересует. Вот то, что идет после с: (и до первой скобки), и надо вколачивать в ком.строку (при условии, конечно, что выполнено то, что описано в FAQ, раздел "Как сохранить программный код на своем компьютере?" - там Владимир Громов все очень хорошо расписал.

Re: КАк автоматизировать процесс вставки изображения?

ГУт!!!
Спасибо Очень большое!