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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > МН-блок

МН-блок

Закрытая тема
Поиск в этой теме
Непрочитано 10.05.2004, 03:25 #1
Kак "взорвать" MINSERT BLOCK ??
Startrek
 
AutoCAD/AutoLISP
 
Seattle/USA
Регистрация: 27.08.2003
Сообщений: 1,133

Уважаемые коллеги,
Кто знает как "взорвать" MINSERT BLOCK, он к тому же безымянный (*U)
Мой старый трюк с изменением колон и рядов на 1 и расстояние между ними на 0
не срабатывает. АutoCAD 2004/2005
Просмотров: 166991
 
Непрочитано 10.05.2004, 10:17
#2
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Вот (не моё):
Код:
[Выделить все]
(DEFUN c:minxpld() 
  (SETQ A (ENTSEL "\nSelect minserted block to explode: ")) 
  (SETQ B (ENTGET (CAR A))) 
  (SETQ XSC (CDR (ASSOC 70 B)) 
   YSC (CDR (ASSOC 71 B)) 
   ) 
  (SETQ XSP (CDR (ASSOC 44 B)) 
   YSP (CDR (ASSOC 45 B)) 
  )    
  (COND 
    ((AND (= XSP 0)(= YSP 0))(SETQ XSC 1 YSC 1)) 
    ((AND (/= XSP 0)(= YSP 0))(SETQ YSC 1)) 
    ((AND (= XSP 0)(/= YSP 0))(SETQ XSC 1)) 
  ) 
  (SETQ C (SUBST (CONS 70 1)(ASSOC 70 B) B)) 
  (SETQ D (SUBST (CONS 71 1)(ASSOC 71 B) C)) 
  (SETQ ENT (CDR (ASSOC -1 (ENTMOD D)))) 
  (COND 
    ((AND (= XSC 1)(= YSC 1))(COMMAND "_EXPLODE" ENT "")) 
    ((= XSC 1) (COMMAND "_ARRAY" ENT "" "R" YSC XSC YSP )) 
    ((= YSC 1) (COMMAND "_ARRAY" ENT "" "R" YSC XSC XSP )) 
    ( T (COMMAND "_ARRAY" ENT "" "R" YSC XSC YSP XSP)) 
  ) 
)
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 10.05.2004, 16:53
#3
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


Спасибо земляк - попробую.
Startrek вне форума  
 
Автор темы   Непрочитано 10.05.2004, 17:26
#4
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


>>Fantomas
Не работает в 2004/2005 (работает в 2000).
Вообщем эта програмка делает то что я обычно делал в ручную, и всеже НЕ РАБОТАЕТ
Startrek вне форума  
 
Автор темы   Непрочитано 10.05.2004, 18:27
#5
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


Эта програмка работает - разбивает на простые блоки которые потом легко резбиваются. :!: :!:

Код:
[Выделить все]
;;; XM.LSP
;;; James Tunstall
;;; Autodesk Australia
;;; 28-09-92

;;; Revision history

;;; 28-09-92
;;; Modified to support alignment point of Attributes
;;;
;;; 21-09-92
;;; Modified to support Inserts with Attributes
;;;
;;; 17-09-92
;;; Original

;;;
;;; Explodes multiple insertions into individual INSERT entities
;;;
(defun C:XM
   (
      / ent entdat column_count row_count
      column_spacing row_spacing m n x0 y0 z0 ax0 ay0 az0
      x1 y1 ax1 ay1 entdat0 entdat1 inspt olderr xm_er getval
      bx0 by0 bz0 bx1 by1 alignment
   )

   ;; save error handler
   (setq olderr *error*)

   ;;;
   ;;; User defined error handling function
   ;;;
   (defun xm_er (msg)

      (princ "\nerror: ")                 ; display error message
      (princ msg)
      (terpri)

      (if olderr (setq *error* olderr))   ;restore old *error* function
      (setq olderr nil)
      (princ)
   )

   ;; redefine error handler
   (setq *error* xm_er)

   ;; get value macro
   (defun getval (n e)
       (cdr (assoc n e))
   )

   (prompt "\nSelect Multiple Insertion to Explode:")
   (setq ent (entsel))
   (if (null ent)
      (exit)
   )
   (setq entdat (entget (car ent)))

   (if (null (setq column_count (getval 70 entdat)))
      (progn
         (prompt "\nEntity not a Multiple Insertion.")
         (exit)
      )
   )

   (setq row_count (getval 71 entdat))

   (if (or (<= column_count 0) (<= row_count 0))
      (progn
         (prompt "\nEntity not a Multiple Insertion.")
         (exit)
      )
   )

   ;; set variables
   (setq x0 (car (getval 10 entdat)))
   (setq y0 (cadr (getval 10 entdat)))
   (setq z0 (caddr (getval 10 entdat)))
   (if (null z0)
      (setq z0 0.0)
   )
   (setq column_spacing (getval 44 entdat))
   (setq row_spacing (getval 45 entdat))


   ;; construct preliminary list for INSERT entity creation
   (setq entdat0 entdat)
   (setq entdat1 (subst (cons 70 0) (assoc 70 entdat0) entdat0))
   (setq entdat0 entdat1)
   (setq entdat1 (subst (cons 71 0) (assoc 71 entdat0) entdat0))
   (setq entdat0 entdat1)
   (setq entdat1 (subst (cons 44 0.0) (assoc 44 entdat0) entdat0))
   (setq entdat0 entdat1)
   (setq entdat1 (subst (cons 45 0.0) (assoc 45 entdat0) entdat0))
   (setq entdat entdat1)

   ;; remember last entity in database
   (setq ent (entlast))

   (setq m 0)
   (while (< m column_count)
      (setq n 0)
      (while (< n row_count)
         (setq entdat0 entdat)

         ;; calculate insertion point
         (setq x1 (+ x0 (* m column_spacing)))
         (setq y1 (+ y0 (* n row_spacing)))
         (setq inspt (list x1 y1 z0))

         ;; construct final list for INSERT entity construction
         (setq entdat1 (subst (cons 10 inspt) (assoc 10 entdat0) entdat0))

         ;; create new INSERT entity
         (if (null (entmake entdat1))
            (progn
               (prompt "\nError in ENTMAKE 1")
               (print entdat1)
               (exit)
            )
         )

         ;; duplicate attribute entities if they exist
         (if (= (getval 66 entdat) 1)
            (progn
               (setq entdat0 entdat)
               (while (/= (getval 0 entdat0) "SEQEND")
                  ;; get next entity
                  (setq entdat0 (entget (entnext (getval -1 entdat0))))
                  (if (= (getval 0 entdat0) "ATTRIB")
                     ;; modify insertion point for attributes
                     (progn
                        ;; set variables
                        (setq ax0 (car (getval 10 entdat0)))
                        (setq ay0 (cadr (getval 10 entdat0)))
                        (setq az0 (caddr (getval 10 entdat0)))
                        (if (null az0)
                           (setq az0 0.0)
                        )

                        ;; calculate insertion point for attribute
                        (setq ax1 (+ ax0 (* m column_spacing)))
                        (setq ay1 (+ ay0 (* n row_spacing)))
                        (setq inspt (list ax1 ay1 az0))

                        ;; modify list for
                        ;; ATTRIB entity construction
                        (setq entdat1
                           (subst
                              (cons 10 inspt)
                              (assoc 10 entdat0)
                              entdat0
                           )
                        )

                        (if
                           (or
                              (/= (getval 72 entdat0) 0)
                              (/= (getval 74 entdat0) 0)
                           )
                           (progn
                              ;; set variables
                              (setq bx0 (car (getval 11 entdat0)))
                              (setq by0 (cadr (getval 11 entdat0)))
                              (setq bz0 (caddr (getval 11 entdat0)))
                              (if (null bz0)
                                 (setq bz0 0.0)
                              )

                              ;; calculate alignment point for attribute
                              (setq bx1 (+ bx0 (* m column_spacing)))
                              (setq by1 (+ by0 (* n row_spacing)))
                              (setq alignment (list bx1 by1 bz0))

                              ;; modify list for
                              ;; ATTRIB entity construction
                              (setq entdat1
                                 (subst
                                    (cons 11 alignment)
                                    (assoc 11 entdat1)
                                    entdat1
                                 )
                              )
                           )
                        )
                     )
                     ;; else no modication required for SEQEND
                     (setq entdat1 entdat0)
                  )
                  ;; create new Sub entity
                  (if (null (entmake entdat1))
                     (progn
                        (prompt "\nError in ENTMAKE 2")
                        (print entdat1)
                        (exit)
                     )
                  )
               )
            )
         )
         (setq n (1+ n))
      )
      (setq m (1+ m))
   )

   ;; delete Multiple Insertion entity
   (entdel (getval -1 entdat))

   ;; redraw newly created INSERT entities
   (while (setq ent (entnext ent))
      (redraw ent)
   )

   ;; clean up
   (if olderr (setq *error* olderr))   ;restore old *error* function

   (princ)
)

Последний раз редактировалось Кулик Алексей aka kpblc, 22.05.2008 в 11:40.
Startrek вне форума  
 
Непрочитано 10.05.2004, 18:50
#6
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Я к счастью с этой проблеммой пока не сталкивался, но видел недавно обсуждение на одном англоязычном форуме, откуда тупо скопировал прогу.
{Smirnoff} вне форума  
 
Непрочитано 11.05.2004, 12:29
#7
Alxd


 
Сообщений: n/a


Есть еще один вариант. Но надо владеть знаниями DXF.
Сохраняешь файл в формате DXF. Потом ищешь в нем начало описание примитива MINSERT. Меняешь на INSERT. Возможно понадобиться убрать количество рядов и колонок (коды вроде 70 и 71). После этого открываешь файл в AutoCAD'е и видишь, что MINSERT превратился в INSERT. Он расчленяется.
 
 
Непрочитано 11.05.2004, 13:23
#8
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Согласен с Alxd по способу "правки". Только считаю, что удобнее все же переименовать блок, чтоб он перестал быть анонимным. А потом можно делать с ним все что угодно.
К сожалению, объем правки DXF в этом случае будет несколько больше.
vk вне форума  
 
Непрочитано 11.05.2004, 16:23
#9
Эдуард

строительство
 
Регистрация: 16.01.2004
Петербург
Сообщений: 165
<phrase 1=


Метод борьбы с анонимными минсерт блоками
с нулевым смещением рядов и колонок в модели:
Код:
[Выделить все]
(defun C:demins()  
(vl-load-com)
  (if
    (and
  (setq spbl(ssget "x"		   
		    (list
		      '(0 . "Insert")
		      '(410 . "Model")
		      ))
		     
	);setq
  (setq spbl(vl-remove-if '(lambda(x)
			     (and
			     (= (cdr(assoc 70 (entget x)))0)
			     (= (cdr(assoc 71 (entget x)))0)
			     ))
	     
		     (mapcar 'cadr
			     (ssnamex spbl)
			     
		     )
	      )
	);setq
  );and
    (progn
    (setq spbl (mapcar 'vlax-ename->vla-object spbl)
	  )
     
    (foreach i spbl
      (setq inspt(vla-get-insertionpoint i)
	    name(vla-get-name i)
	    xs (vla-get-XScaleFactor i)
	    ys (vla-get-YScaleFactor i)
	    zs (vla-get-ZScaleFactor i)
	    rot(vla-get-rotation i)
	    lay(vla-get-layer i)
	    )
      (if
	(equal (vl-string-elt name 0) 42)
	(vla-put-name (vla-item
			(vla-get-blocks
			  (vla-get-activedocument
			    (vlax-get-acad-object)
			    )
			  )name)(vl-string-left-trim "*" name)
	  );vla-put-name
	);if
      (setq name (vla-get-name i)) 
      (setvar "clayer" lay)	
      (vla-insertblock (vla-get-modelspace
			 (vla-get-activedocument
			   (vlax-get-acad-object)
			   )
			 )
	inspt name xs ys zs rot)
      );foreach
    );progn    
  );if
  
  (mapcar 'vla-delete spbl)
  (princ)
  );defun
Эдуард вне форума  
 
Непрочитано 11.05.2007, 09:11 МН-блок
#10
RЯков


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


Здраствуйте!
Помогите разобраться с такой вот штукой..
Не взрывается не редактируется.
Для чего их такими делают и как с ними потом работать....
Чего то с файлом прикрепленным никак тема не создается... попробую как ответ прикрепить.
RЯков вне форума  
 
Непрочитано 11.05.2007, 09:22
#11
Кулик Алексей aka kpblc
Moderator

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


Это многовидовые блоки, что ли?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.05.2007, 09:40
#12
RЯков


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


Не знаю я как прикрепить не цепляется короче.
В общем весь чертеж в модели заблокирован в один примитив имя ему МН-блок
В свойствах пишет его имя *U111
Блок не взрывается не редактируется.
RЯков вне форума  
 
Непрочитано 11.05.2007, 09:49
#13
Кулик Алексей aka kpblc
Moderator

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


Хехехехе, защита Эдуарда и Alshera работает На полную катушку.
В общем, присылай мне на почту - попробую расковырять (хоть научусь, может быть )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.05.2007, 10:03
#14
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


Так был же конвектор по разбивке безымянных блоков.
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Непрочитано 11.05.2007, 10:15
#15
RЯков


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


DEFUN c:minxpld()
(SETQ A (ENTSEL "\nSelect minserted block to explode: "))
(SETQ B (ENTGET (CAR A)))
(SETQ XSC (CDR (ASSOC 70 B))
YSC (CDR (ASSOC 71 B))
)
(SETQ XSP (CDR (ASSOC 44 B))
YSP (CDR (ASSOC 45 B))
)
(COND
((AND (= XSP 0)(= YSP 0))(SETQ XSC 1 YSC 1))
((AND (/= XSP 0)(= YSP 0))(SETQ YSC 1))
((AND (= XSP 0)(/= YSP 0))(SETQ XSC 1))
)
(SETQ C (SUBST (CONS 70 1)(ASSOC 70 B) B))
(SETQ D (SUBST (CONS 71 1)(ASSOC 71 B) C))
(SETQ ENT (CDR (ASSOC -1 (ENTMOD D))))
(COND
((AND (= XSC 1)(= YSC 1))(COMMAND "_EXPLODE" ENT ""))
((= XSC 1) (COMMAND "_ARRAY" ENT "" "R" YSC XSC YSP ))
((= YSC 1) (COMMAND "_ARRAY" ENT "" "R" YSC XSC XSP ))
( T (COMMAND "_ARRAY" ENT "" "R" YSC XSC YSP XSP))
)
)
Не работает
RЯков вне форума  
 
Непрочитано 11.05.2007, 12:07
#16
ASLYS

Delineante
 
Регистрация: 26.12.2006
Ростов-на-Дону/Madrid
Сообщений: 396
<phrase 1=


А если переименовать?
[ATTACH]1178870877.rar[/ATTACH]
ASLYS вне форума  
 
Непрочитано 11.05.2007, 12:21
#17
RЯков


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


Переименовался...но не взрывается и не редактируется
RЯков вне форума  
 
Непрочитано 11.05.2007, 12:35
#18
RЯков


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


часть 1 1,38мбт
[ATTACH]1178872552.rar[/ATTACH]
RЯков вне форума  
 
Непрочитано 11.05.2007, 12:40
#19
Кулик Алексей aka kpblc
Moderator

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


Е-мое, а что, письмо не пришло? Я ж недавно тебе отправлял...
P.S. И еще - у тебя ж архива только кусочек, предупреждать надо
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.05.2007, 12:57
#20
RЯков


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


я пытаюсь по кусочкам навыкладывать сюда их
или форум глючит или я что не так делаю ?
RЯков вне форума  
Закрытая тема
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > МН-блок

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

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