Архитектору и проектировщику|Тепло- и звукоизоляция URSA.RU
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > Замена одного блока другим

Замена одного блока другим

Ответ
Поиск в этой теме
Непрочитано 12.06.2010, 14:28 #1
Замена одного блока другим
Victor
 
Бат-Ям
Регистрация: 14.06.2009
Сообщений: 293

Наверняка не всё учёл, поэтому возможна доработка.
Замена блока на блок. Разместить оба файла надо в путях автокада.
В этой строке пишем свои блоки, которых нет в рисунке, но которые есть в путях автокада (setq nam_out '("a7" "a9" "a11" "a13" "a17" "a21" "a25" "a31"))
Можно изменить и эту строку (setq scl (list "0.1" "0.25" "0.5" "1.0" "2.5" "5.0" "10" "25" "100"))
Файл DCL
Код:
[Выделить все]
b2b : dialog {				
      label = "Replace block" ;		
: row {
     :column {
        :text{label="Replace block";}
     	: popup_list {				
        key = "block_in";			
        value = "0" ; width=15;				
        }					
             }
     :column {
        :text{label="Insert block";}
     	: popup_list {				
        key = "block_out";			        
        value = "0" ; width=15;				
        }		
             }
      }
     :text{label="Scale";}
     	: popup_list {				
        key = "scl_out";			        
        value = "3" ;alignment=centered;
        fixed_width=true; width=10;	
                     }
     ok_cancel ;								
              }
Файл Lisp
Код:
[Выделить все]
 
(defun replace( b_in b_out sc / ) 
(setq at_r (getvar "attreq"))
(setvar "attreq" 0)
(setq s_in (cons 2 b_in)) 
(if(/= nil (setq blokset (ssget "_:L" (list '( 0 . "INSERT") s_in)))) 
  (progn 
  (setq blklength (sslength blokset)) 
  (setq i -1 ) 
  (repeat blklength 
     (setq i (1+ i))       
     (setq name_blk (ssname blokset i)) 
     (setq spis_blk (entget name_blk)) 
     (setq kord_b   (cdr(assoc 10 spis_blk))) 
     (setq ugol (*(cdr(assoc 50 spis_blk)) 57.297469)) 
     (command "_.insert" b_out kord_b sc sc ugol) 
  ) ;repeat 
  (setq i -1) 
  (repeat blklength 
   (setq i (1+ i)) 
   (entdel (ssname blokset i)) 
  ) ;repeat 
  ) ;progn 
) ;if 
(setvar "attreq" at_r)
) 


(defun C:b2b ( / snp scl nam_out nam_in bl nm_bl f_nm ch_1 ch_2 ch_3 sc_b)					
  (command "_.undo" "_begin") 
  (setq snp (getvar "Osmode")) 
  (setvar "Osmode" 0) 					

  (setq scl (list "0.1" "0.25" "0.5" "1.0" "2.5" "5.0" "10" "25" "100"))

  (setq nam_out   '("a7" "a9" "a11" "a13" "a17" "a21" "a25" "a31"))
  
  (setq nam_in nil) 
  (setq bl (tblnext "BLOCK" T))
  (while (/= nil bl)
         (setq nm_bl (cdr(assoc 2 bl)))
         (setq f_nm (substr nm_bl 1 2))
         (if(/= "*U" f_nm)(setq nam_in (append nam_in (list nm_bl))))
         (setq bl (tblnext "BLOCK"))
   ) 
  (setq nam_out (append nam_out nam_in))
  (setq dcl_id (load_dialog "b2b.dcl"))		        
  (if (not (new_dialog "b2b" dcl_id)			
      );not
    (exit)						
  );if
  (start_list "block_in")				
  (mapcar 'add_list nam_in)				
  (end_list)						
  (start_list "block_out")			        	
  (mapcar 'add_list nam_out)				
  (end_list)		
 
  (start_list "scl_out")				
  (mapcar 'add_list scl)				
  (end_list)			

    (action_tile
    "cancel"						
    "(done_dialog) (setq userclick nil)"		
    );action_tile
  (action_tile
    "accept"						
    (strcat						
      "(progn 
       (setq ch_1 (atoi (get_tile \"block_in\"))
             ch_2 (atoi (get_tile \"block_out\"))	
             ch_3 (atoi (get_tile \"scl_out\")))"
      " (done_dialog)(setq userclick T))"		
    );strcat
  );action tile

  (start_dialog)					
  (unload_dialog dcl_id)				

   (if userclick					
    (progn				
      (setq ch_1 (nth ch_1 nam_in))					
      (setq ch_2 (nth ch_2 nam_out))
      (setq sc_b (nth ch_3 scl))
    );progn
   );if userclick

(replace ch_1 ch_2 sc_b) 

(setvar "Osmode" snp) 
(command "_.undo" "_end") 
);defun
(princ)

Последний раз редактировалось Кулик Алексей aka kpblc, 20.02.2011 в 22:29.
Просмотров: 29703
 
Непрочитано 13.06.2010, 06:23
#2
Valery Brelovsky

Инженер дорожник
 
Регистрация: 22.10.2007
Израиль
Сообщений: 1,848


Продолжим здесь, здесь даже лучше не искажается код. Нужно пороробовать. Вижу тут есть окно DCL.

P.s.В окне DCL есть три строки. Набор блоков на замену и масштаб. Но нужно выбрать блок на чертеже который заменить. С эти не понятно.
Вот прилагаю растр.
я перед эти запускал программу в пустом чертеже, в чертеже с набором блоков открывается список блоков чертежа. Но по моему программа заменит все выбранные блоки данного типа на другой тип блока?
Миниатюры
Нажмите на изображение для увеличения
Название: 2.jpg
Просмотров: 964
Размер:	56.3 Кб
ID:	40743  

Последний раз редактировалось Valery Brelovsky, 13.06.2010 в 07:06.
Valery Brelovsky вне форума  
 
Непрочитано 30.10.2010, 10:05
#3
dextron3

Фотограф
 
Регистрация: 01.01.2007
Алматы
Сообщений: 5,042


Valery Brelovsky, а какой командой запускается то окошко которое у вас на скриншоте?
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Автор темы   Непрочитано 30.10.2010, 13:06
#4
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 293


Ух ты. Давно не заглядывал сюда. Запуск b2b. В первой колонке выбираем имя блока который хотим заменить. Во второй колонке выбираем имя блока на который хотим заменить. Жмём OK и выбираем блоки которые хотим заменить. Или выбираем весь чертёж, выберутся только блоки с указаным именем.
Victor вне форума  
 
Непрочитано 20.02.2011, 22:20
#5
Farest-1

Конструктор
 
Регистрация: 19.12.2005
Подольск
Сообщений: 54
<phrase 1= Отправить сообщение для Farest-1 с помощью Skype™


Цитата:
Сообщение от Victor Посмотреть сообщение
Ух ты. Давно не заглядывал сюда. Запуск b2b. В первой колонке выбираем имя блока который хотим заменить. Во второй колонке выбираем имя блока на который хотим заменить. Жмём OK и выбираем блоки которые хотим заменить. Или выбираем весь чертёж, выберутся только блоки с указаным именем.
У меня автокад_2011
Ошибка
Команда: _appload Replace block.LSP успешно загружено.
Команда: ; ошибка: no function definition: B_IN
Farest-1 вне форума  
 
Автор темы   Непрочитано 21.02.2011, 12:19
#6
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 293


Попробуй так. 2011 сейчас нет под рукой. На 2010 работает. Затащи в пространство модели файл VLX .Запуск b2b.
Вложения
Тип файла: rar b2b.rar (2.1 Кб, 594 просмотров)
Victor вне форума  
 
Непрочитано 21.02.2011, 21:14
#7
Farest-1

Конструктор
 
Регистрация: 19.12.2005
Подольск
Сообщений: 54
<phrase 1= Отправить сообщение для Farest-1 с помощью Skype™


Цитата:
Сообщение от Victor Посмотреть сообщение
Попробуй так. 2011 сейчас нет под рукой. На 2010 работает. Затащи в пространство модели файл VLX .Запуск b2b.
Спасибо работает
Farest-1 вне форума  
 
Непрочитано 25.02.2011, 10:14
#8
Farest-1

Конструктор
 
Регистрация: 19.12.2005
Подольск
Сообщений: 54
<phrase 1= Отправить сообщение для Farest-1 с помощью Skype™


Цитата:
Сообщение от Farest-1 Посмотреть сообщение
Спасибо работает
Наверное поторопился с ответом что работает (то есть до этого запустил окошко и закрыл дальше не проверял) .
Сегодня как раз нужно было заменить блоки на другие.
Делаю так Запуск b2b. В первой колонке выбираем имя блока который хотим заменить. Во второй колонке выбираем имя блока на который хотим заменить. Жмём OK и выбираем блоки которые хотим заменить.
В итоге он не выбирает блоки.

Команда: b2b
_.undo Текущие настройки: Авто = Вкл, Управление = Все, Объединить = Есть, Слой
= Есть
Количество отменяемых операций или [Авто/Управление/Начало/Конец/Метка/Обратно]
<1>: _begin
Команда:
Выберите объекты: найдено: 0
Выберите объекты: Противоположный угол: найдено: 0, всего: 0
Выберите объекты: Противоположный угол: найдено: 0, всего: 0
Выберите объекты: Противоположный угол: найдено: 0, всего: 0
Выберите объекты:
_.undo Текущие настройки: Авто = Вкл, Управление = Все, Объединить = Есть, Слой
= Есть
Количество отменяемых операций или [Авто/Управление/Начало/Конец/Метка/Обратно]
<1>: _end
Команда: nil
Farest-1 вне форума  
 
Автор темы   Непрочитано 25.02.2011, 10:34
#9
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 293


Ну это интересно. А можно файл посмотреть
Victor вне форума  
 
Непрочитано 25.02.2011, 11:20
#10
angel-fear

инженер-электрик
 
Регистрация: 21.10.2010
Краснодар
Сообщений: 132


А в чем отличие от Replace block with another block (blockreplace) из express`a?
angel-fear вне форума  
 
Непрочитано 25.02.2011, 11:28
#11
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,860


Цитата:
Сообщение от angel-fear Посмотреть сообщение
А в чем отличие от Replace block with another block (blockreplace) из express`a?
одно другого хуже.
Nike вне форума  
 
Непрочитано 25.02.2011, 11:50
#12
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 15,986


Зачем сложности?
К блоку применяем flatten без скрытия линий из Express Tools.
Получаем блок с новым именем <имя блока>-flat-1.
Ну, и дальше подменяем этот самый блок через blockreplace
Хмурый вне форума  
 
Автор темы   Непрочитано 25.02.2011, 11:58
#13
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 293


Я ведь не настаиваю. Пользуйтесь express tools.
Victor вне форума  
 
Непрочитано 25.02.2011, 21:42
#14
Farest-1

Конструктор
 
Регистрация: 19.12.2005
Подольск
Сообщений: 54
<phrase 1= Отправить сообщение для Farest-1 с помощью Skype™


Цитата:
Сообщение от Victor Посмотреть сообщение
Попробуй так. 2011 сейчас нет под рукой. На 2010 работает. Затащи в пространство модели файл VLX .Запуск b2b.
Файл этот который выкладывал.
Farest-1 вне форума  
 
Автор темы   Непрочитано 26.02.2011, 13:31
#15
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 293


Меня интересует твой файл, так как у меня всё работает.
Victor вне форума  
 
Непрочитано 26.02.2011, 19:03
#16
Farest-1

Конструктор
 
Регистрация: 19.12.2005
Подольск
Сообщений: 54
<phrase 1= Отправить сообщение для Farest-1 с помощью Skype™


Цитата:
Сообщение от Victor Посмотреть сообщение
Меня интересует твой файл, так как у меня всё работает.
Вот
Вложения
Тип файла: rar b2b.rar (2.1 Кб, 269 просмотров)
Farest-1 вне форума  
 
Автор темы   Непрочитано 26.02.2011, 19:06
#17
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 293


Файл с твоими блоками.
Victor вне форума  
 
Непрочитано 28.02.2011, 23:15
#18
Farest-1

Конструктор
 
Регистрация: 19.12.2005
Подольск
Сообщений: 54
<phrase 1= Отправить сообщение для Farest-1 с помощью Skype™


Цитата:
Сообщение от Victor Посмотреть сообщение
Файл с твоими блоками.
Блоки с атрибутами
Вложения
Тип файла: rar Фасад.rar (906.4 Кб, 202 просмотров)
Farest-1 вне форума  
 
Автор темы   Непрочитано 01.03.2011, 12:40
#19
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 293


Эта прога была задумана для простых блоков а не для динамических. Для динамических сразу возникаeт вопрос по какому имени менять по исходному или по текущему.
Victor вне форума  
 
Непрочитано 02.03.2012, 14:35
#20
crosandr

Инженер-строитель
 
Регистрация: 09.07.2010
Санкт-Петербург
Сообщений: 1,773


Цитата:
Сообщение от Victor Посмотреть сообщение
Попробуй так. 2011 сейчас нет под рукой. На 2010 работает. Затащи в пространство модели файл VLX .Запуск b2b.
Несколько пожеланий:
  • Дать возможность скрывать неименованные блоки
  • Выпадающий список хотелось бы иметь размером с имя блока (они иногда весьма длинные бывают)
  • Дать возможность вписать масштаб вставки руками в самом окошке при работе программы (а не в текст lsp), того списа, что имеется - недостаточно
  • Упорядочить имена блоков по алфавиту
В остальном работает Неплохое дополнение к ET команде blockreplace

Последний раз редактировалось crosandr, 02.03.2012 в 14:45.
crosandr вне форума  
 
Непрочитано 30.04.2012, 10:26
#21
baaba

архитектор
 
Регистрация: 07.07.2007
Москва
Сообщений: 622
<phrase 1= Отправить сообщение для baaba с помощью Skype™


Мои пожелания: хотелось бы работать с массивом блоков.
baaba вне форума  
 
Автор темы   Непрочитано 01.05.2012, 09:50
#22
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 293


"массив блоков" - как это понять. Одну кучу блоков на другую кучу? Без атрибутов просто.
Как заготовка - m2m. "2"-входящий, "M4402"-исходящий. Поставьте свои названия блоков.
Вложения
Тип файла: lsp m2m.lsp (1.2 Кб, 132 просмотров)
__________________
... а Автокад то - голый
Victor вне форума  
 
Непрочитано 20.06.2012, 16:01
#23
baaba

архитектор
 
Регистрация: 07.07.2007
Москва
Сообщений: 622
<phrase 1= Отправить сообщение для baaba с помощью Skype™


Цитата:
Сообщение от Victor Посмотреть сообщение
Замена одного блока другим
А можно сделать что бы работало с массивом блоков (minsert)? Массив блоков - блоки, вставленные minsert а не insert, с расстоянием между рядами и колонками

>>Как заготовка - m2m. "2"-входящий, "M4402"-исходящий. Поставьте свои названия блоков.
Не работает, разбираться неуспеваю, нужен готовый лисп, наподобие blockreplace из expresstools (у меня они не установлены просто)

Последний раз редактировалось baaba, 20.06.2012 в 17:34.
baaba вне форума  
 
Автор темы   Непрочитано 21.06.2012, 14:07
#24
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 293


Экзотика какая-то. Убедите меня, что стоит упираться ради единичного случая.
"Не работает" - выложите пример, чтобы понять в чём дело.
__________________
... а Автокад то - голый
Victor вне форума  
 
Непрочитано 17.07.2012, 18:24
#25
baaba

архитектор
 
Регистрация: 07.07.2007
Москва
Сообщений: 622
<phrase 1= Отправить сообщение для baaba с помощью Skype™


Цитата:
Сообщение от Victor Посмотреть сообщение
"Не работает" - выложите пример, чтобы понять в чём дело.
Выкладываю пример. Блок s1 вставлен коммандой minsert. Надо всё заменить на s2. Вашей программой получается в результате один блок s2, вместо массива блоков 3х3, что обидно. Впрочем я установил экспресы, теперь всё заработало (ExpressTools > blockreplace)
Вложения
Тип файла: zip s1-s2.zip (4.3 Кб, 76 просмотров)
baaba вне форума  
 
Непрочитано 03.10.2012, 15:12
#26
Оле


 
Регистрация: 01.09.2008
Сообщений: 28


Цитата:
Затащи в пространство модели файл VLX
Стесняюсь спросить, а каким образом это делается? как затащить его в пространство модели????
Оле вне форума  
 
Непрочитано 05.10.2012, 22:16
#27
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,785
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Оле, Называется это drag-and-drop. Альтернатива - команда _appload. Загрузка lisp файла В твоем случае vlx и lsp файл одно и то же
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 07.11.2012, 20:20
1 | #28
Hennic


 
Регистрация: 12.06.2010
Сообщений: 1


Может кому поможет?

;;; Автор новой редакции старейшей программки
;;; Филимонов Г.Н. hennic@mail.ru
;;; Замена одного блока другим во всем рисунке
;;; или на указанном слое

(defun C:BBA (/ s1 s2 la ss st vt)
(setq s1 (getstring "\nЗамена блока на блок.
\nЗадай имя заменяемого блока...: "))
(setq s2 (getstring "\nЗадай имя нужного блока...: "))
(setq la (getstring "\nСлой, где заменить блок или <На всех слоях>: "))
(if (/= la "")
(setq ss (ssget "x" (list (cons 2 s1) (cons 8 la))))
(setq ss (ssget "x" (list (cons 2 s1))))
)
(setq st (ssname ss 0))
(while st
(setq ss (ssdel st ss))
(setq vt (entget st))
(setq vt (subst (cons 2 s2) (assoc 2 vt) vt))
(entmod vt)
(setq st (ssname ss 0))
)
(setq ss nil)
(prin1)
)

Имеется и пакетная замена одной группы простейших блоков на другую группу.
Hennic вне форума  
 
Непрочитано 09.11.2012, 10:20
#29
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,682
Отправить сообщение для Do$ с помощью Skype™


Offtop: И чего Victor парился, диалоги составлял какие-то? Фигней вы тут страдаете, товарищи. Вот Hennic в 20 строчек кода уложился! Вот так надо! Ничего лишнего! У вас русский автокад? Это ваши проблемы! Эскейп? Не, не слышал. Initget? Для чайников! Вы не помните названий блоков в чертеже наизусть? Тренируйте память и не морочьте голову программисту!
К чему я это?
Почитайте http://forum.dwg.ru/announcement.php?f=29&a=3
Добро пожаловать на dwg.ru
Do$ вне форума  
 
Автор темы   Непрочитано 09.11.2012, 16:12
#30
Victor


 
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 293


Да ладно. У меня это тоже была проба пера. В нашем мире такая прога совершенно бесполезная, ввиду отсутствия безатрибутных блоков. Делал другую, т.к. задачи другие: 1 атрибут в 6, 2 в 1, и.т.п.
Вложения
Тип файла: zip b2b.zip (4.3 Кб, 189 просмотров)
__________________
... а Автокад то - голый
Victor вне форума  
 
Непрочитано 15.12.2014, 12:12
#31
НАТА ША


 
Регистрация: 16.03.2010
Сообщений: 7


Интересно. У меня успешно заменилось. Только встали новые блоки не на место заменяемых, а отбросились далеко в поле чертежа.
НАТА ША вне форума  
 
Непрочитано 15.12.2014, 12:16
#32
Кулик Алексей aka kpblc
Moderator

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


Практически гарантирую: кавардак с точками вставки блоков.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.12.2014, 13:19
#33
НАТА ША


 
Регистрация: 16.03.2010
Сообщений: 7


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Практически гарантирую: кавардак с точками вставки блоков.
Так все безнадежно?
НАТА ША вне форума  
 
Непрочитано 15.12.2014, 14:29
#34
Кулик Алексей aka kpblc
Moderator

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


Почему "безнадежно"? Исправь базовые точки в новых блоках - вот и все.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.12.2014, 15:27
#35
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,785
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Есть лисп для этого
Дополнительные функции для работы с блоками
Базовая точка существующего блока
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.12.2014, 19:15 А вот еще интересный Лисп
#36
Zedest


 
Регистрация: 17.12.2014
Сообщений: 1


Очень полезная штука. Выбираешь что надо заменить, enter, указываешь чем.
И будет Вам счастье!
Вложения
Тип файла: lsp frto.lsp (2.6 Кб, 226 просмотров)
Zedest вне форума  
 
Непрочитано 30.11.2015, 19:23
#37
Oleg_M


 
Регистрация: 30.05.2011
Сообщений: 1


Цитата:
Сообщение от Zedest Посмотреть сообщение
Очень полезная штука. Выбираешь что надо заменить, enter, указываешь чем.
И будет Вам счастье!
Огромное спасибо за лисп.
В 15м автокаде работает на ура!
Oleg_M вне форума  
 
Непрочитано 18.08.2016, 13:02
#38
alkrymov


 
Регистрация: 22.03.2012
Сообщений: 1


У кого-нибудь работает данный LISP (FRTO) в 2017-ом автокаде?

Беда, неожиданно перестал работать данный лисп.
Пишет:
Цитата:
+++ Select source object -> нет определения функции: VLA-ENDUNDOMARK

Последний раз редактировалось alkrymov, 19.08.2016 в 17:26.
alkrymov вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Готовые программы > Замена одного блока другим

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Меняется масштаб блока при копировании с одного чертежа на другой. Jeriko AutoCAD 23 28.12.2016 16:09
LISP: Переименование одного из вхождений блока Кочетков Андрей Готовые программы 23 13.02.2015 09:12
Замена цвета блока или блока на блок maximator Программирование 25 24.09.2009 16:02
Замена простого блока на динамический Vova Программирование 5 11.05.2009 22:02
Несущие стены или колонны? Приимущества одного перед другим? Wlady Конструкции зданий и сооружений 23 17.01.2009 07:26