Тема: программа для копирования/вставки текста в атрибуты блока

Уважаемые!
Нужна помощь в написание программы (собсно надо ее написать).
Суть ее работы в следующем:
В файле есть блок скажем с именем Block-name.
В нем есть ряд редактируемых атрибутов с неким текстом – скажем имена атрибутов Tag1, Tag2, Tag3.


1. Пользователь указывает мышкой в блок (запрос программы - укажите блок) .
2. Программа считывает из него текстовое содержание атрибутов Tag 1..3.
3. Далее в буфер обмена помещается текст из содержимого атрибутов Tag1 + Tag2 + Tag3 (предварительно отсекаются лишние пробелы).
4. Работа программы завершается.

1. Пользователь указывает мышкой в блок (запрос программы - укажите блок) .
2. Программа считывает из него текстовое содержание атрибутов Tag 1..3.
3. Далее извлекается текст из содержимого атрибутов Tag1, Tag2, Tag3 (предварительно отсекаются лишние пробелы).
4. значения атрибутов сохраняются в файл на диске.
5. Пользователь в другом чертеже (не обязательно той же копии акада поэтому необходимо записывать содержание атрибутов на диск) на запрос программы указывает блок.
6. в указанный блок в атрибуты Tag1, Tag2, Tag3 (имена атрибутов идентичны именам в блоке доноре) вставляется содержимое прочитанное из файла.
7. Работа программы завершается.


Оба варианта работы должны вызываться разными командами – итого 3 команды.
- команда на копирование содержимого атрибутов в буфер обмена
- команда на копирование содержимого атрибутов в файл на диске
- команда на вставку в атрибуты из файла.

Рабочее применение программы в следующем: копирование название чертежа из блока штампа - и вставка названия в другой штамп или в перечень чертежей в заглавный лист.

Буду очень признателен.

Re: программа для копирования/вставки текста в атрибуты блока

Рабочее применение программы в следующем:

... а остальное можно было не писать имхо, т.к. это наверняка уже реализовано с помощью шаблонов чертежей и полей, источниками к-рых могут быть текстовые и файлы excel и access, а так же сама подшивка или проект в вертикалках

Re: программа для копирования/вставки текста в атрибуты блока

Vitaly пишет:

...текстовые и файлы excel и access, а так же сама подшивка или проект в вертикалках

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

Re: программа для копирования/вставки текста в атрибуты блока

Diman111, попробуйте attout и attin, а также blockreplace вместе с _AttSync.

Re: программа для копирования/вставки текста в атрибуты блока

Нужна именно программа, автоматизирующая данную последовательность операций.

Re: программа для копирования/вставки текста в атрибуты блока

Diman111 пишет:

данную последовательность операций.

Именно данная последовательность операций и вызывает неприятие задачи.
Ощущение нелогичности действий...
Гораздо проще работать со штампом в обратной последовательности

Re: программа для копирования/вставки текста в атрибуты блока

Diman111 пишет:

Нужна именно программа, автоматизирующая данную последовательность операций.

1 - создать блок штампа с необходимыми атрибутами
2 - создать блок перечня с необходимыми атрибутами с тегами аналогичными блоку штампа.
3 - использовать команду _.QSELECT
4 - и поиграться свойствами.
Все ваши хотелки решаются штатными средствами AutoCAD-а.

Re: программа для копирования/вставки текста в атрибуты блока

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

Уважаемые!
Я не прошу совета какими командами автокада проще выполнить эти операции. Средствами автокада можно сделать много - вопрос в количестве действий. Я прошу помочь с программой для автоматизации процесса.

Спасибо.

Re: программа для копирования/вставки текста в атрибуты блока

Diman111 пишет:

Я прошу помочь с программой для автоматизации процесса.

Задачу решить не сложно. (Только буфер обмена я использовать не люблю).
Хранить данные можно в чертеже, используя, например, dwgprop
http://forum.dwg.ru/showthread.php?t=16 … ht=dwgprop
Записать в файл и взять из файла в атрибуты блока тоже не сложно...
Сейчас я сильно занят, если за месяц задачу не решат, могу попробовать.
Удачи, друзья!

(изменено: Alan aka Александр Назаров, 23 августа 2011г. 11:41:21)

Re: программа для копирования/вставки текста в атрибуты блока

>Diman111
Это ты хотел в первой задаче?
Вот тут лежит чертежик со штампом
http://ifolder.ru/25325562

;|
;|
Подпрограмма выбора из блока наименований проекта и объекта и запись в файл
Пример вызова (nz_shtamp_read )
|;
(defun nz_shtamp_read (/ sp_atr el fname i fl str)
;;;     sp_atr - список атрибутов нужных в блоке
  (setq    sp_atr '(("OD1" . "")
         ("S1PR" . "")
         ("S2PR" . "")
         ("S3PR" . "")
         ("S1P" . "")
         ("S2P" . "")
         ("S3P" . "")
         ("ST" . "")
        )
;;;   файл с данными штампа в рабочей папке
    fname  (strcat (getvar "dwgprefix") "\\shtamp.txt")
    i      0
  ) ;_ конец setq
  (if (setq el (nz_vybor_blk))
    (progn
      (setq sp_atr_new
         (nz_att_read (ssname el (1- (sslength el))) sp_atr)
      )
;;; Запишем в файл
      (setq fl (open fname
             "w"
           ) ;_ конец open
      ) ;_ конец setq
      (while (setq str (cdr (nth i sp_atr_new)))
    (write-line str fl)
    (setq i (1+ i))
      ) ;_ конец while
      (close fl)
    )
    (prompt "\n Отменили, так отменили")
  )
  (princ)
) ;_ конец defun

;;; выбор блока штампа с именем "nz_shtaru"
;;;------------------------------------------------------
(defun nz_vybor_blk (/ r)
  (prompt "\n Укажите блок штампа")
  (vl-catch-all-apply
    '(lambda ()
       (setq r (ssget '((0 . "INSERT") (2 . "nz_shtaru"))))
     ) ;_ end of lambda
  ) ;_ end of vl-catch-all-apply
  (setq    r (if r
        r
        nil
      ) ;_ конец if
  ) ;_ конец setq
) ;_ конец defun

;;; ===================      ЗАМЕНА ЗНАЧЕНИЙ АТРИБУТОВ ========================================
(defun nz_att_read
       (el_sp sp_atr / att seqend a_name new_value att0 att)
;;;   el_sp - список примитивов блока
  (setq att (entnext el_sp))
  (setq seqend (cdr (assoc 0 (entget att))))
;;; ; пока есть атрибуты в блоке
  (while (not (eq seqend "SEQEND"))
;;;                ; находим  атрибут
    (setq a_name (cdr (assoc 2 (entget att))))
;;;  значение ЭТОГО атрибута
    (setq new_value (cdr (assoc 1 (entget att))))
;;; начинаем проверять по списку для изменений: есть атрибут - меняем в списке
    (if    new_value
      (setq sp_atr (subst (cons a_name new_value)
              (assoc a_name sp_atr)
              sp_atr
           ) ;_ конец subst
      ) ;_ конец setq
    ) ;_ конец if
    (setq att (entnext att))
    (setq seqend (cdr (assoc 0 (entget att))))
  ) ;_ конец while
  sp_atr
) ;_ конец defun

(изменено: Diman111, 23 августа 2011г. 10:39:06)

Re: программа для копирования/вставки текста в атрибуты блока

>Alan aka Александр Назаров,

БОльшое спасибо за потраченное время и Ваш труд.
Позволю себе высказать несколько пожеланий.
1. ПРограмма находит штамп - но запрос организован не на одиночный выбор а на множественный, но из всего выбора берется лишь 1 элемент - это сбивает с толку (указать могут нужный блок не всегда первым а фильтр по имени - не совсем удобен - придется лазить лишний раз в код - запрос на указание ввел именно для того что бы не лазить в код) - хотелось бы запрос вида entSel и проверки на то, что выбранное - блок - все будет проще.
2. В файл пишется все как есть - если атрибут не найден - пишется пустая строка - неверно ИМХО.
3. Запись в файл ведется чтобы вставить в другой документ  - вставка не организована совсем. копирование в буфер не организовано.

Надеюсь на Вашу дальнейшую помощь ))))

(изменено: Alan aka Александр Назаров, 23 августа 2011г. 12:36:18)

Re: программа для копирования/вставки текста в атрибуты блока

Diman111 пишет:

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

Пжл. Образовалась пауза, связанная с праздниками, смог отвлечься на код.
Теперь по пожеланиям....

Diman111 пишет:

1. ПРограмма находит штамп - но запрос организован не на одиночный выбор а на множественный, но из всего выбора берется лишь 1 элемент - это сбивает с толку (указать могут нужный блок не всегда первым а фильтр по имени - не совсем удобен - придется лазить лишний раз в код - запрос на указание ввел именно для того что бы не лазить в код) - хотелось бы запрос вида entSel и проверки на то, что выбранное - блок - все будет проще.

Не согласен на одиночный выбор. Это есть не правильно! Немного переделал код.
Теперь указываются блоки штампа (их на чертеже м.б. много, а вы можете ошибиться),
а в файл записываются данные с последнего указанного.

Diman111 пишет:

2. В файл пишется все как есть - если атрибут не найден - пишется пустая строка - неверно ИМХО.

ИМХО. Так и должно быть. Поставить проверку на пустую строку "" не проблема. Но!
Порядок и количество строк определяют элементы списка sp_atr, потом это пригодится для заполнения другого штампа. Можно конечно было писать строку из скрепленного имени атрибута и его значения. Но это потребует потом еще одну прожку для разбивки строки по разделителю. В данном случае писал по рабоче-крестьянски. Вообще-то у меня в подпрограмме штампа эти данные хранятся в ИНИ-файле и вызываются через СОМ-сервер. Типа, так  Ifolder  Но когда-то читал и из файла.

Diman111 пишет:

3. Запись в файл ведется чтобы вставить в другой документ - вставка не организована совсем. копирование в буфер не организовано.

Любая сторонняя программа работает с ТХТ файлом, даже Блокнот.
Определитесь, какая строка из эти 10 (или сколько?) должна записываться в буфер. И красный флаг в руки!
Ну не люблю я ничего вставлять через буфер, особенно в Автокаде!!!
Люблю полностью управлять процессом.
Текст кода в п.10 заменил!!!!  :!: