Размещение 2 блока
Реклама i
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Размещение 2 блока

Размещение 2 блока

Ответ
Поиск в этой теме
Непрочитано 26.09.2007, 17:39 #1
Размещение 2 блока
Apog
 
москва
Регистрация: 12.09.2007
Сообщений: 17

Ситуация такая, я вставляю в чертеж блок, после этого мне нужно вставить в этот же чертеж другой блок. проблема заключается в том, что имена блоков совпадают и AutoCAD пишет в командной строке
"Повторное описание блока PSEQP пропущено" и подставляет графику первого блока, что является абсолютно не правильно!!! Как мне преодолеть эту проблему, очистить чертеж я не могу т.к. 1 блок используется!! Буду благодарен за любую помощь!!
Просмотров: 6687
 
Непрочитано 26.09.2007, 17:41
#2
Mist


 
Регистрация: 31.07.2007
Москва
Сообщений: 92


Переименуй блоки и все
Mist вне форума  
 
Автор темы   Непрочитано 27.09.2007, 09:56
#3
Apog


 
Регистрация: 12.09.2007
москва
Сообщений: 17


Цитата:
Сообщение от Mist
Переименуй блоки и все
а как это сделать, какая функция не подскажите? а реально ли это сделать в автоматическом режиме? файлов около 2к!!!
Apog вне форума  
 
Непрочитано 27.09.2007, 10:49
#4
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Тут надо разобраться с ситуацией. А она, похоже, такова. Имеется 2к (склько это - 2к?) чертежей, в которые УЖЕ вставлены однотипные блоки 1. Теперь надо вставить другие однотипные блоки, оказавшиеся с тем же именем. Так переименовать второй блок (или файл, если он вставляется как блок). Т.е., сначапа понавставлять первый блок, а потом переименованный второй. Или что-то не так?
Profan вне форума  
 
Автор темы   Непрочитано 27.09.2007, 11:02
#5
Apog


 
Регистрация: 12.09.2007
москва
Сообщений: 17


Цитата:
Сообщение от Profan
Имеется 2к (склько это - 2к?) чертежей, в которые УЖЕ вставлены однотипные блоки 1.
Немножко не так! У меня около 2000 чертежей, в которых сохранены различные изображения блоков, но у них название одно и тоже (это что-то типа базы данных изображений)!!! Т.е. после создания нового файла я вставляю 1 из моих файлов, тут проблем нет! Но при вставлении другого блока из другого чертежа возникает ситуация, при которой вставляется изображение первого размешенного блока, т.к. имена блоков совпадают! Как изменить имя вставляемого блока, если такое имя блока в чертеже уже есть. как я уже говорил раньше, очистить чертеж нельзя, т.к. блок уже размещен в чертеже. Помогите!
Apog вне форума  
 
Непрочитано 27.09.2007, 11:15
#6
Bull

Конструктор по сути (машиностроитель)
 
Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391


могу только геморройный вариант предложить. Вставляешь блок, заходишь в него, сохраняешь как... Удаляешь. Вставляешь переименованный. Далее так же со следующими. В блокедиторе не нашёл команды "переименовать"
__________________
Век живи, век учись - ...
Bull вне форума  
 
Непрочитано 27.09.2007, 11:23
#7
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Вообще-то, для переименования ВСТАВЛЕННОГО блока можно применить команду "_RENAME" ("НОВОЕИМЯ").
Profan вне форума  
 
Непрочитано 27.09.2007, 11:24
#8
Bull

Конструктор по сути (машиностроитель)
 
Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391


забыл сказать... После удаления обязательно пурджить
__________________
Век живи, век учись - ...
Bull вне форума  
 
Непрочитано 27.09.2007, 11:32
#9
Bull

Конструктор по сути (машиностроитель)
 
Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391


profan, а где сия команда находится-то...

PS Вот на самом деле... и подпись кстати получилась.

Уже нашёл. В "Format"е, оказывается.
__________________
Век живи, век учись - ...
Bull вне форума  
 
Непрочитано 27.09.2007, 11:36
#10
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


кстати, переименовать блок команда _rename.
переименовать блок в куче файлов подручными средствами можно только если файлы сохранены в формате DXF. нужен только текстовый редактор поддерживающий пакетный поиск-замену в группе файлов - например multiedit. делаешь просто замену "старое_имя" на "новое_имя" для папки содержащей твои DXF. если файлы у тебя в DWG, что скорее всего, нужно поискать какойнибудь пакетный конвертор DWG<>DXF. может подойдет вот это. http://www.softnew.ru/list.phtml?id=8230 первое что выдал яндекс.
Способ подходит лишь для уникальных названий блоков, т.е. если файл содержит тексты с названиями блоков, то они тоже заменятся
zamtmn вне форума  
 
Автор темы   Непрочитано 27.09.2007, 11:43
#11
Apog


 
Регистрация: 12.09.2007
москва
Сообщений: 17


Цитата:
Сообщение от zamtmn
кстати, переименовать блок команда _rename.
я
Мысль понял, но у меня есть пакетная програма для преобразования DWG файлов! Вопрос в том, как тогда генерирова уникальное имя блока???
Apog вне форума  
 
Непрочитано 27.09.2007, 11:47
#12
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Все проще пишешь _rename захожишь в блоки выделяешь все (1 блок нажимашь shift - последний) в поле новое имя вводишь _* - все блоки будут названы _старое имя. Вместо _ можно написать любые символы например старое_имя* и т.д.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 27.09.2007, 11:48
#13
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


всё зависит от: есть ли у тебя какаянибудь закотомерность в твоих названиях блоков, если есть, то все сделается одним росчерком клавиатуры на регулярных выражениях multiedit`a, если нет, то пару старое_имя, новое_имя в строчки окошка замены придется вбивать каждый раз вручную((
zamtmn вне форума  
 
Непрочитано 27.09.2007, 11:50
#14
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>Дима_
для двух тысяч файлов, это совсем не просто...
zamtmn вне форума  
 
Непрочитано 27.09.2007, 11:51
#15
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Но ведь, как я понял, разных блоков-то с одним именем всего два. Чего тут мудрить-то.
Profan вне форума  
 
Непрочитано 27.09.2007, 11:58
#16
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Цитата:
Немножко не так! У меня около 2000 чертежей, в которых сохранены различные изображения блоков, но у них название одно и тоже (это что-то типа базы данных изображений)!!! Т.е. после создания нового файла я вставляю 1 из моих файлов, тут проблем нет! Но при вставлении другого блока из другого
в смысле ты эти файлы вставляешь _block`ом или блоки определены внутри этих файлов? если вставляешь, то их нужно просто переименовать. естественно в пакетном режиме фаром и тоталкомандером *.dwg на например _*.dwg
zamtmn вне форума  
 
Автор темы   Непрочитано 27.09.2007, 11:59
#17
Apog


 
Регистрация: 12.09.2007
москва
Сообщений: 17


Цитата:
Сообщение от zamtmn
всё зависит от: есть ли у тебя какаянибудь закотомерность в твоих названиях блоков, если есть, то все сделается одним росчерком клавиатуры на регулярных выражениях multiedit`a, если нет, то пару старое_имя, новое_имя в строчки окошка замены придется вбивать каждый раз вручную((
Как я писал раньше почти все блоки называются одинаково во всех файлах, например, Test! Если честно мне все равно как будут называться блоки! А вот как в поле новое имя ввести уникальное имя в автоматическом режиме, хоть 1, 2, 3, 4 и т.д. вместо этого Test!

Для Profan! Вы не правильно поняли, я описаывал проблему на примеру 2-х блоков. Все 2000 файлов имеют одинаковые имена файлов!!
Apog вне форума  
 
Автор темы   Непрочитано 27.09.2007, 12:04
#18
Apog


 
Регистрация: 12.09.2007
москва
Сообщений: 17


блоки определены в файлах!
Apog вне форума  
 
Непрочитано 27.09.2007, 12:06
#19
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>Все 2000 файлов имеют одинаковые имена файлов!!
и находятся в 2000 разных папках?
в этих файлах определены блоки или блоки получаются путем вставки этих файлов?
zamtmn вне форума  
 
Непрочитано 27.09.2007, 12:07
#20
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Что, что?
Цитата:
Все 2000 файлов имеют одинаковые имена файлов!!
Пристрелите меня.
Profan вне форума  
 
Непрочитано 27.09.2007, 12:10
#21
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Все накрыло! Опиши подробно что у тебя есть и что нужно сделать?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 27.09.2007, 12:12
#22
Apog


 
Регистрация: 12.09.2007
москва
Сообщений: 17


Цитата:
Сообщение от Profan
Что, что?
Цитата:
Все 2000 файлов имеют одинаковые имена файлов!!
Пристрелите меня.
Сори опечатался!! Все 2000 файлов имеют одинаковые имена блоков!
Apog вне форума  
 
Непрочитано 27.09.2007, 12:17
#23
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


Так, ситуация все страньше и страньше. Прикладывай архив с dwg и последовательно, шаг за шагом, описывай, что и как ты делал, чтобы вставить блок в файл. В архиве также "источник" нового блока.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.09.2007, 12:20
#24
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


приведи пример названий блоков
zamtmn вне форума  
 
Непрочитано 27.09.2007, 14:06
#25
Bull

Конструктор по сути (машиностроитель)
 
Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391


ребята, по-моему всё просто. Когда-то чел делал блоки в файлах, не думая, что они пригодятся. И, не думая, называл их "1", например, везде. А теперь понадобилось делать типа каталога изделий. Вот и мучается товарищ.

Короче, будет быстрее, не обращая внимания на советы, работать двумя ком-ми: past block и rename
__________________
Век живи, век учись - ...
Bull вне форума  
 
Автор темы   Непрочитано 27.09.2007, 15:55
#26
Apog


 
Регистрация: 12.09.2007
москва
Сообщений: 17


Цитата:
Сообщение от Bull
ребята, по-моему всё просто. Когда-то чел делал блоки в файлах, не думая, что они пригодятся. И, не думая, называл их "1", например, везде. А теперь понадобилось делать типа каталога изделий. Вот и мучается товарищ.

Короче, будет быстрее, не обращая внимания на советы, работать двумя ком-ми: past block и rename
Вы абсолютно правы! просто хотелось как-то оптимизировать процесс! спасибо
Apog вне форума  
 
Непрочитано 27.09.2007, 16:27
#27
Bull

Конструктор по сути (машиностроитель)
 
Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391


Ну, теперь вот и lisp'овщики могут подсоединиться к процессу.
__________________
Век живи, век учись - ...
Bull вне форума  
 
Непрочитано 27.09.2007, 18:36
#28
Star

Конструктор штампов
 
Регистрация: 10.03.2004
г. Киев
Сообщений: 92


А сколько блоков в каждом файле?
Если 1, то какой в них смысл при данной технологии организации базы? Разве что, точка вставки была в нужном месте...
Если точка вставки не имеет значение, то нужно в пакетном режиме открыть необходимые файлы:
- взорвать блок
- пурдж блок
- сохранить файл
- закрыть файл
Star вне форума  
 
Непрочитано 28.09.2007, 00:59
#29
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


Для варианта "в каждом файле немеряно блоков" можно попробовать такой код:
Код:
[Выделить все]
(vl-load-com)

(defun rename-blocks-in-dwg (path
                             /
                             z-files-in-directory
                             _kpblc-odbx
                             _kpblc-odbx-close
                             _kpblc-acad-version
                             _kpblc-conv-value-to-string
                             _kpblc-conv-value-to-int
                             _kpblc-dir-path-and-splash
                             _kpblc-string-ext
                             _kpblc-error-catch
                             _kpblc-error-print
                             _kpblc-string-replace
                             _kpblc-get-msg-norm
                             doc
                             prefix
                             )

  (defun z-files-in-directory (directory pattern nested /)
                              ;|
*    функция z-files-in-directory возвращает список файлов находящаяся в заданной
* директории
*    Автор : Зуенко Виталий (ZZZ)
*  Параметры:
*    directory  путь к папке например "D:\\Мои документы\\ZEF\\Lisp"
*    pattern    шаблон например "*.lsp" или список '("*.dwg" "*.dxf")
*    nested    искать в вложенных папках: t (да) или nil (нет)
* Пример вызова:
(z-files-in-directory "D:\\Мои документы\\ZEF\\Lisp" "*.lsp" t)
(z-files-in-directory "D:\\Мои документы\\ZEF\\Lisp" '("*.lsp" "*.fas") t)
|;
    (if (not (listp pattern))
      (setq pattern (list pattern))
      ) ;_ if
    (if nested
      (apply
        'append
        (append
          (mapcar '(lambda (_pattern)
                     (mapcar '(lambda (f) (strcat directory "\\" f))
                             (vl-directory-files directory _pattern 1)
                             ) ;_ list
                     ) ;_ lambda
                  pattern
                  ) ;_ mapcar
          (mapcar
            '(lambda (d)
               (z-files-in-directory
                 (strcat directory "\\" d)
                 pattern
                 nested
                 ) ;_ z-files-in-directory
               ) ;_ lambda
            (vl-remove
              "."
              (vl-remove ".."
                         (vl-directory-files directory nil -1)
                         ) ;_ end of vl-remove
              ) ;_ vl-remove
            ) ;_ mapcar
          ) ;_ append
        ) ;_ append
      (apply
        'append
        (mapcar '(lambda (_pattern)
                   (mapcar '(lambda (f) (strcat directory "\\" f))
                           (vl-directory-files directory _pattern 1)
                           ) ;_ list
                   ) ;_ lambda
                pattern
                ) ;_ end of mapcar
        ) ;_ end of apply
      ) ;_ end of if
    ) ;_ end of defun

  (defun _kpblc-acad-version ()
                             ;|
*    Возвращает номер сборки AutoCAD'a. Для 2005 вернет 16.1, для 2006 - 16.2
|;
    (atof (getvar "acadver"))
    ) ;_ end of defun

  (defun _kpblc-conv-value-to-int (value /)
                                  ;|
*    конвертация значения в целое. Для VLA-объектов возвращается nil.
*    Точечные списки не обрабатываются.
|;
    (atoi (_kpblc-conv-value-to-string value))
    ) ;_ end of defun

  (defun _kpblc-dir-path-and-splash (path)
                                    ;|
*    Возвращает путь со слешем в конце
*    Параметры вызова:
*   path   - обрабатываемый путь
*    Примеры вызова:
(_kpblc-dir-path-and-splash "c:\\kpblc-cad")   ; "c:\\kpblc-cad\\"
|;
    (strcat (vl-string-right-trim "\\" path) "\\")
    ) ;_ end of defun

  (defun _kpblc-conv-value-to-string (value /)
                                     ;|
*    конвертация значения в строку.
|;
    (if value
      (vl-princ-to-string value)
      ""
      ) ;_ end of if
    ) ;_ end of defun

  (defun _kpblc-string-ext (string ext / str)
                           ;|
*    Функция меняет "расширение" переданной строки на устанавливаемое. В строке
* должно быть не более 1 символа ".", все, что после него, считается
* расширением
*    Параметры вызова:
*   string   модифицируемая строка
*   ext   устанавливаемое расширение (можно без ".")
*    Примеры вызова:
(_kpblc-string-ext "abcd" "cfg")   ; -> "abcd.cfg"
(_kpblc-string-ext "AbCd" ".ext")   ; -> "abcd.ext"
|;
    (setq ext (strcat "." (vl-string-left-trim "." ext))
          str (strcase (vl-filename-base string))
          str (strcase (strcat (vl-string-trim " " str) ext) t)
          ) ;_ end of setq
    (if (/= (vl-filename-directory string) "")
      (setq
        str
         (strcat (_kpblc-dir-path-and-splash (vl-filename-directory string))
                 str
                 ) ;_ end of strcat
        ) ;_ end of setq
      ) ;_ end of if
    str
    ) ;_ end of defun

  (defun _kpblc-odbx (/)
                     ;|
*    функция возвращает интерфейс IAxDbDocument (для работы с файлами DWG без
* их открытия). Если интерфейс не поддерживается, возвращает nil. Проверено
* на ACAD 2002, 2004, 2005, 2006, 2007
*    Автор - Fatty aka Олег jr. Моего только адаптация под общую систему и
* переименование
*    Параметры вызова:
*   нет
*    Примеры вызова:
(_kpblc-odbx)
|;
    (cond
      ((< (_kpblc-acad-version) 15.06)
       (alert "ObjectDBX method not applicable\nin this AutoCAD version")
       nil
       )
      ((= (fix (_kpblc-acad-version)) 15)
       (if (not (vl-registry-read
                  "HKEY_CLASSES_ROOT\\ObjectDBX.AxDbDocument\\CLSID"
                  ) ;_ end of vl-registry-read
                ) ;_ end of not
         (startapp "regsvr32.exe"
                   (strcat "/s \"" (findfile "axdb15.dll") "\"")
                   ) ;_ end of startapp
         ) ;_ end of if
       (vla-getinterfaceobject
         (vlax-get-acad-object)
         "ObjectDBX.AxDbDocument"
         ) ;_ end of vla-getinterfaceobject
       )
      (t
       (vla-getinterfaceobject
         (vlax-get-acad-object)
         (strcat "ObjectDBX.AxDbDocument."
                 (_kpblc-conv-value-to-string
                   (_kpblc-conv-value-to-int (_kpblc-acad-version))
                   ) ;_ end of _kpblc-conv-value-to-string
                 ) ;_ end of strcat
         ) ;_ end of vla-getinterfaceobject
       )
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-odbx-close (conn)
                           ;|
*    Закрытие файла, открытого ранее через _kpblc-odbx-*. С попыткой сохранения
*    Параметры вызова:
*   conn   соединение с ObjectDBX, созданное ранее через (_kpblc-odbx)
*      либо список:
      '(("conn" . <ObjectDBXConnection>)   ; то же самое
   ("save" . t)         ; сохранять или нет изменения
   ("file" . "c:\\temp\\tmp.dwg")   ; имя, под которым сохранять. nil ->
      ; использовать текущее
|;
    (if (and (= (type conn) 'list)
             (cdr (assoc "save" conn))
             ) ;_ end of and
      (progn
        (vlax-invoke
          (cdr (assoc "conn" conn))
          'saveas
          (cond
            ((cdr (assoc "file" conn))
             (strcat (_kpblc-dir-path-and-splash (vl-filename-directory file))
                     (_kpblc-string-ext (vl-filename-base file) "dwg")
                     ) ;_ end of strcat
             )
            (t (vla-get-name (cdr (assoc "conn" conn))))
            ) ;_ end of cond
          ) ;_ end of vlax-invoke
        ) ;_ end of progn
      ) ;_ end of if
    (vl-catch-all-apply
      '(lambda ()
         (vlax-release-object
           (if (= (type conn) 'list)
             (cdr (assoc "conn" conn))
             conn
             ) ;_ end of if
           ) ;_ end of vlax-release-object
         ) ;_ end of lambda
      ) ;_ end of vl-catch-all-apply
    (setq conn nil)
    ) ;_ end of defun

  (defun _kpblc-error-catch (protected-function
                             on-error-function
                             /
                             catch_error_result
                             )
                            ;|
*** Функция взята из книжной версии ruCAD'a без каких бы то ни было переделок,
*** кроме переименования.
*    Оболочка отлова ошибок.
*    Параметры вызова:
*   protected-function   - "защищаемая" функция
*   on-error-function   - функция, выполняемая в случае ошибки
|;
    (setq catch_error_result (vl-catch-all-apply protected-function))
    (if (and (vl-catch-all-error-p catch_error_result)
             on-error-function
             ) ;_ end of and
      (apply on-error-function
             (list (vl-catch-all-error-message catch_error_result))
             ) ;_ end of apply
      catch_error_result
      ) ;_ end of if
    ) ;_ end of defun

  (defun _kpblc-error-print (func-name msg)
                            ;|
*    Функция вывода сообщения об ошибке для (_kpblc-error-catch)
*    Параметры вызова:
*   func-name   имя функции, в которой возникла ошибка
*   msg      сообщение об ошибке
|;
    (princ (strcat "\n ** "
                   (_kpblc-get-msg-norm
                     (_kpblc-string-replace
                       (strcase (_kpblc-conv-value-to-string func-name) t)
                       "error"
                       ""
                       ) ;_ end of _kpblc-string-replace
                     ) ;_ end of _kpblc-get-msg-norm
                   " ERROR #"
                   (if msg
                     (strcat
                       (_kpblc-conv-value-to-string (getvar "errno"))
                       ": "
                       (_kpblc-conv-value-to-string msg)
                       ) ;_ end of strcat
                     ": undefined"
                     ) ;_ end of if
                   "\n"
                   ) ;_ end of strcat
           ) ;_ end of princ
    (princ)
    ) ;_ end of defun

  (defun _kpblc-string-replace (string old_substr new_substr / pos)
                               ;|
*    Функция замены вхождений подстроки в исходную строку на новые.
* Регистрозависимо
*    Параметры вызова:
*   string      исходная строка
*   ols_substr   старая подстрока
*   new_substr   новая подстрока
*    Примеры вызова:
(_kpblc-string-replace "Здесь были ВаВася и ВаВаВаня. Вася" "Ва" "Бу")
   ; "Здесь были Буся и Буня. Буся"
|;
    (if (/= old_substr new_substr)
      (while (setq pos (vl-string-search old_substr string))
        (setq string
               (strcat
                 (substr string 1 pos)
                 new_substr
                 (_kpblc-string-replace
                   (substr string (+ (strlen old_substr) pos 1))
                   old_substr
                   new_substr
                   ) ;_ end of _kpblc-string-replace
                 ) ;_ end of strcat
              ) ;_ end of setq
        ) ;_ end of while
      ) ;_ end of if
    string
    ) ;_ end of defun

  (defun _kpblc-get-msg-norm (msg)
                             ;|
*    Нормализация строки запроса для использования в запросах ком.строки
|;
    (vl-string-trim "][ :\n<>" msg)
    ) ;_ end of defun

  (foreach file (z-files-in-directory path "*.dwg" t)
    (_kpblc-error-catch
      (function
        (lambda ()
          (setq doc (_kpblc-odbx))
          (vla-open doc file)
          (vlax-for blk_def (vla-get-blocks doc)
            (if (and (equal (vla-get-islayout blk_def) :vlax-false)
                     (equal (vla-get-isxref blk_def) :vlax-false)
                     (not (wcmatch (strcase (vla-get-name blk_def)) "`**"))
                     ) ;_ end of and
              (vla-put-name
                blk_def
                (strcat (setq prefix
                               ((lambda (/ res)
                                  (setq res (vl-filename-base file))
                                  (foreach item
                                           '("\\" "/" "." "," ":" ";" "`" "~" "'")
                                    (setq res (_kpblc-string-replace res item "_"))
                                    ) ;_ end of foreach
                                  (cond
                                    ((> (strlen res) 120)
                                     (substr res (- (strlen res) 120))
                                     )
                                    (t res)
                                    ) ;_ end of cond
                                  ) ;_ end of lambda
                                )
                              ) ;_ end of setq
                        "-"
                        (if (wcmatch (strcase (vla-get-name blk_def))
                                     (strcat (strcase prefix) "*")
                                     ) ;_ end of wcmatch
                          (substr (vla-get-name blk_def) (+ 3 (strlen prefix)))
                          (vla-get-name blk_def)
                          ) ;_ end of if
                        ) ;_ end of strcat
                ) ;_ end of vla-put-name
              ) ;_ end of if
            ) ;_ end of vlax-for
          ) ;_ end of lambda
        ) ;_ end of function
      nil
      ) ;_ end of _kpblc-error-catch
    (_kpblc-odbx-close (list (cons "conn" doc) (cons "save" t)))
    ) ;_ end of foreach
  ) ;_ end of defun
Я его не тестировал. Что оно делает: последовательно открывает каждый файл из указанной папки; проходит по всем блокам (надеюсь, что дин.блоков в библиотеке нет - на них никакой проверки не выполняется); к имени блока прибавляет имя файла и через минус - имя блока. Игнорирует блоки анонимные, блоки размеров и таблиц.
Перед работой следует сделать следующее: все файлы из обрабатываемой папки закрыть (к ним должен быть осуществлен "монопольный" доступ, иначе выбьет в ошибку). Проверки на целостность файла не выполняется (если файл невозможно открыть - выбьет в ошибку). Файлы не очищаются. Блоки "в нормальный вид" не приводятся (хотя и можно сделать).
---
Добавлено: Да, вот еще. По блокам размерных стилей тоже пройдется, теоретически их надо исключать из обработки. Но мне пока лениво. Может, с утра пораньше, если будет время...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.09.2007, 11:27
#30
Apog


 
Регистрация: 12.09.2007
москва
Сообщений: 17


Цитата:
Сообщение от Кулик Алексей aka kpblc

к имени блока прибавляет имя файла и через минус - имя блока. .
Спасибо за идею, это то что нужно для решения проблемы!!!
Немножко не понял как запустить данный лисп?? какая команда?
Apog вне форума  
 
Непрочитано 28.09.2007, 11:32
#31
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


Например, обрабатываемые файлы положены в папку "d:\files\acad\block\lib". Тогда вызов будет:
Код:
[Выделить все]
Command : (rename-blocks-in-dwg "d:\\files\\acad\\block\\lib")
Вызов обязательно надо "обрамлять" скобками; при указании пути надо заменять символ "\" на двойной слеш: "\\" или на один обратный : "/".
P.S. А ведь так и не изменил код...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.09.2007, 11:48
#32
Bull

Конструктор по сути (машиностроитель)
 
Регистрация: 10.10.2005
Набережные Челны (это где КамАЗ)
Сообщений: 11,391


скопирую ка себе на всякий случай тоже. Хотя бы для общего развития.
__________________
Век живи, век учись - ...
Bull вне форума  
 
Непрочитано 28.09.2007, 11:51
#33
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для Bull.
И мне, и мне скопируй.
P.S. Судя по тому, что дальше написали, погоди мне копировать.
Profan вне форума  
 
Автор темы   Непрочитано 28.09.2007, 11:55
#34
Apog


 
Регистрация: 12.09.2007
москва
Сообщений: 17


Цитата:
Сообщение от Кулик Алексей aka kpblc
P.S. А ведь так и не изменил код...
AutoCAD выдал:

Команда: (rename-blocks-in-dwg "e:\\ATOLL")
; ошибка: no function definition: VLA-GET-NAME

что поправить??-)
Apog вне форума  
 
Непрочитано 28.09.2007, 12:00
#35
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,345


возможен такой вариант:
в файле не блок, а только объекты блока и этот файл вставляется командой insert как блок. Т.е. заходишь в файло - бомбишь блок, закрываешь - сохраняешь. И потом вставляешь файл как блок. Уж виндовские названия файлов надеюсь разные?
P.S.
Цитата:
PS Вот на самом деле... и подпись кстати получилась
там вроде концовка еще есть "... и все равно дураком помрешь"
asys вне форума  
 
Автор темы   Непрочитано 28.09.2007, 12:06
#36
Apog


 
Регистрация: 12.09.2007
москва
Сообщений: 17


Цитата:
Сообщение от Asys
возможен такой вариант:
в файле не блок, а только объекты блока и этот файл вставляется командой insert как блок. Т.е. заходишь в файло - бомбишь блок, закрываешь - сохраняешь. И потом вставляешь файл как блок. Уж виндовские названия файлов надеюсь разные?
Имена файлов разные!-)
а что это меняет, если в файлах объекты блока? они же имею имена!!
Приаттачиваю файлик с блоком-)
[ATTACH]1190966801.dwg[/ATTACH]
Apog вне форума  
 
Непрочитано 28.09.2007, 12:11
#37
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


Цитата:
Сообщение от Apog
Цитата:
Сообщение от Кулик Алексей aka kpblc
P.S. А ведь так и не изменил код...
AutoCAD выдал:

Команда: (rename-blocks-in-dwg "e:\\ATOLL")
; ошибка: no function definition: VLA-GET-NAME

что поправить??-)
Самой первой строкой (перед defun которая) поставить (vl-load-com). Код исправил (в этой части).
---
Добавлено: для гарантии запускай на копиях.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.09.2007, 12:37
#38
Apog


 
Регистрация: 12.09.2007
москва
Сообщений: 17


Цитата:
Сообщение от Кулик Алексей aka kpblc
Самой первой строкой (перед defun которая) поставить (vl-load-com). Код исправил (в этой части).
---
Добавлено: для гарантии запускай на копиях.
Запустил! что-то отработало, даже bak файлы создались! но вот блок не изменил свое название!!! а счастье было так близко-(
Apog вне форума  
 
Непрочитано 28.09.2007, 12:47
#39
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


Стоп, оно должно было в обрабатываемых файлах поменять имена блоков!
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.09.2007, 12:56
#40
Apog


 
Регистрация: 12.09.2007
москва
Сообщений: 17


Цитата:
Сообщение от Кулик Алексей aka kpblc
Стоп, оно должно было в обрабатываемых файлах поменять имена блоков!
да, а для чего тогда указывать дирректорию???
если поменять исходные файлы, то при размещении в новый файл пересечений имен не будет и проблема решится!
а что тогда делает програма?

а счастье было еще ближе-(
помоги о великий Кулик Алексей aka kpblc-))
Apog вне форума  
 
Непрочитано 28.09.2007, 13:42
#41
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


Допустим, было дело так (сначала имя файл, потом, через "|" - имя блока в нем
Код:
[Выделить все]
c:\autopoll\file1.dwg | block1
c:\autopoll\file2 | block1
c:\autopoll\file3 | block1
После обработки должно (теоретически) получиться такое:
Код:
[Выделить все]
c:\autopoll\file1.dwg | file1-block1
c:\autopoll\file2 | file2-block1
c:\autopoll\file3 | file3-block1
И при вставке этих блоков пересечения имен уже не должно быть.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.09.2007, 13:55
#42
Apog


 
Регистрация: 12.09.2007
москва
Сообщений: 17


Цитата:
Сообщение от Кулик Алексей aka kpblc
И при вставке этих блоков пересечения имен уже не должно быть.
Да, об этом я и мечтаю, но не смотря на то, что файлы в выбранной директории изменилась (появились bak), имена блоков не поменялись! как проверить програму? я выложил раньше 1 файлик, не проверишь на нем?
Apog вне форума  
 
Непрочитано 28.09.2007, 14:21
#43
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


Прошу прощения, была ошибка. Код исправил. Также добавил вариант: для повторного прохода новое имя блока не будет вида "file1-file1-block1".
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.09.2007, 14:28
#44
Apog


 
Регистрация: 12.09.2007
москва
Сообщений: 17


Цитата:
Сообщение от Кулик Алексей aka kpblc
Прошу прощения, была ошибка. Код исправил. Также добавил вариант: для повторного прохода новое имя блока не будет вида "file1-file1-block1".
ОГРОМНОЕ СПАСИБО!!!!
1 вопросик, есть ли какие-нибудь ограничения на имена файлов?
Apog вне форума  
 
Непрочитано 28.09.2007, 14:49
#45
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431


Да я вроде как все ограничения попробовал снять внутри кода (недопустимый символ будет меняться на "_"). Не стоит держать в именах символы типа @#$%^&()+=~`. Поскольку это все же редкость, их я не обрабатывал. Но можно и добавить, заменив строку
Код:
[Выделить все]
'("\\" "/" "." "," ":" ";" "`" "~" "'")
на
Код:
[Выделить все]
                                           '("\\" "/" "." "," ":" ";" "`" "~" "'""!" "@" "#" "$" "%" "^" "&" "(" ")" "№")
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 29.09.2007, 20:01
#46
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,345


Цитата:
Сообщение от Apog
Цитата:
Сообщение от Asys
возможен такой вариант:
в файле не блок, а только объекты блока и этот файл вставляется командой insert как блок. Т.е. заходишь в файло - бомбишь блок, закрываешь - сохраняешь. И потом вставляешь файл как блок. Уж виндовские названия файлов надеюсь разные?
Имена файлов разные!-)
а что это меняет, если в файлах объекты блока? они же имею имена!!
Приаттачиваю файлик с блоком-)
[ATTACH]1190966801.dwg[/ATTACH]
Попробуй такую операцию - открой свой файл с блоком, разбомби блок, пургеном его вычисти, все объекты выстави относительно мирового нуля и вообще в пространстве, так как они хочешь что бы они располагались относительно точки вставки блока (мировой ноль потом и будет этой точкой) Выставляешь текущей мировую систему координат, сохраняешь, закрываешь. Потом сам файл переименоввываешь в PSEQP.dwg (имя блока из примера) Или оставляешь как есть, но при вставке этого файла как блок, в другой имя блока будет соответствовать имени вставляемого файла
asys вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Размещение 2 блока