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

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

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

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

Наверняка не всё учёл, поэтому возможна доработка.
Замена блока на блок. Разместить оба файла надо в путях автокада.
В этой строке пишем свои блоки, которых нет в рисунке, но которые есть в путях автокада (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.
Просмотров: 37259
 
Непрочитано 30.04.2012, 10:26
#21
baaba

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


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


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


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

архитектор
 
Регистрация: 07.07.2007
Москва
Сообщений: 644
<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
Бат-Ям
Сообщений: 295


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

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


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


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


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

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


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


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


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

;;; Автор новой редакции старейшей программки
;;; Филимонов Г.Н. [email protected]
;;; Замена одного блока другим во всем рисунке
;;; или на указанном слое

(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,702
Отправить сообщение для 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
Бат-Ям
Сообщений: 295


Да ладно. У меня это тоже была проба пера. В нашем мире такая прога совершенно бесполезная, ввиду отсутствия безатрибутных блоков. Делал другую, т.к. задачи другие: 1 атрибут в 6, 2 в 1, и.т.п.
Вложения
Тип файла: zip b2b.zip (4.3 Кб, 224 просмотров)
__________________
... а Автокад то - голый
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
С.-Петербург
Сообщений: 39,787


Практически гарантирую: кавардак с точками вставки блоков.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей 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
С.-Петербург
Сообщений: 39,787


Почему "безнадежно"? Исправь базовые точки в новых блоках - вот и все.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.12.2014, 15:27
#35
VVA

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


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


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


Очень полезная штука. Выбираешь что надо заменить, enter, указываешь чем.
И будет Вам счастье!
Вложения
Тип файла: lsp frto.lsp (2.6 Кб, 388 просмотров)
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