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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Создать блок Autolisp

Создать блок Autolisp

Ответ
Поиск в этой теме
Непрочитано 27.01.2013, 19:27 #1
Создать блок Autolisp
Mozgunov
 
Начинающий проектировщик
 
Санкт-Петербург
Регистрация: 07.02.2008
Сообщений: 443

Добрый вечер. Подскажите пожалуйста почему функция ниже не создаёт блока? Спасибо.
Код:
[Выделить все]
  ( defun c:qqq ( / )

   (entmake (list (cons 0 "INSERT")(cons 8 "0")(cons 66 1)(cons 2 "<test>")
                  (cons 10 (list 0 0 0))(cons 41 1)(cons 42 1)(cons 50 0)
                  (cons 43 1)(cons 70 0)(cons 71 0)(cons 44 0)(cons 45 0)
                  (cons 210 (list 0 0 1))(cons 62 256)(cons 39 0)
                  (cons 6 "BYLAYER"))
    )
	
(entmake
      (append
        (list
          '(0 . "LWPOLYLINE")
          '(100 . "AcDbEntity")
          '(100 . "AcDbPolyline")
          (cons 90
                (length (vl-remove-if-not
                          '(lambda (x) (= (car x) 10))
                          (setq vert_lst
                                 (list
								   (cons 10 '(0 0 0))
								   (cons 10 '(1 1 1))
                                   ) ;_ end of list
                                ) ;_ end of setq
                          ) ;_ end of vl-remove-if-not
                        ) ;_ end of length
                ) ;_ end of cons
          ) ;_ end of list
        vert_lst
        ) ;_ end of append
      ) ;_ end of entmake				  
				  
				  
(entmake (list (cons 0 "SEQEND")(cons 8 "0")));end of entmake 
  

				  
);;
Просмотров: 7481
 
Непрочитано 27.01.2013, 19:35
#2
Кулик Алексей aka kpblc
Moderator

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


1. Не создается описание блока или его вхождение?
2. Почему бы не использовать ActiveX-методы? Там все на несколько порядков проще.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 27.01.2013, 19:51
#3
Mozgunov

Начинающий проектировщик
 
Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
<phrase 1=


Ни того ни другого не создаётся( А можете кинуть ссылочку на ActiveX-функции? Вы наверняка уже сталкивались с блоками и написали пару тройку функций)
Mozgunov вне форума  
 
Непрочитано 27.01.2013, 20:17
1 | #4
Кулик Алексей aka kpblc
Moderator

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


Во-первых, в имени блока запрещено использование символов \ < > / ? " , : ; = * | `
Во-вторых, в самом процессе создания блока нет ничего сложного:
Код:
[Выделить все]
 (vl-load-com)

(defun test (/ adoc block_name vert pline blk_def pt)
  (setq block_name "TestBLock"
        adoc       (vla-get-activedocument (vlax-get-acad-object))
        ) ;_ end of setq
  (vla-startundomark adoc)
  (repeat 3 (vla-purgeall adoc))
  ;; Создаем блок
  (if (/= (type
            (setq blk_def (vl-catch-all-apply (function (lambda () (vla-item (vla-get-blocks adoc) block_name)))))
            ) ;_ end of type
          'vla-object
          ) ;_ end of /=
    (progn
      (setq blk_def (vla-add (vla-get-blocks adoc) (vlax-3d-point '(0. 0. 0.)) block_name)
            ;; Список вершин:
            vert    '((0. 0.) (10. 0.) (10. 10.) (0. 10.))
            ;; Преобразовываем в одномерный список
            vert    (apply (function append)
                           ;; Этот шаг для варианта, если вдруг заданы трехмерные координаты
                           (mapcar
                             (function
                               (lambda (x)
                                 (list (car x) (cadr x))
                                 ) ;_ end of lambda
                               ) ;_ end of function
                             vert
                             ) ;_ end of mapcar
                           ) ;_ end of apply
            pline   (vla-addlightweightpolyline blk_def
                                                (vlax-make-variant
                                                  (vlax-safearray-fill
                                                    (vlax-make-safearray
                                                      vlax-vbdouble
                                                      (cons 0 (1- (length vert)))
                                                      ) ;_ end of vlax-make-safearray
                                                    vert
                                                    ) ;_ end of vlax-safearray-fill
                                                  ) ;_ end of vlax-make-variant
                                                ) ;_ end of vla-AddLightWeightPolyline
            ) ;_ end of setq
      ;; Настраиваем полилинию:
      (vla-put-closed pline :vlax-true)
      (vla-put-constantwidth pline 5.)
      ) ;_ end of progn
    ) ;_ end of if
  ;; ДОполнительная проверка: если блок вдруг не создан, вываливаем alert
  (if (= (type (vl-catch-all-apply (function (lambda () (vla-item (vla-get-blocks adoc) block_name)))))
         'vla-object
         ) ;_ end of =
    (while (setq pt (getpoint "\nInsertion point : "))
      (vla-insertblock (vla-get-modelspace adoc) (vlax-3d-point pt) block_name 1. 1. 1. 0.)
      ) ;_ end of while
    (alert "Блок не создан.")
    ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 27.01.2013, 21:22
#5
Mozgunov

Начинающий проектировщик
 
Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
<phrase 1=


А подскажите что нужно написать внутри progn если уже есть набор примитивов которые должны войти блок?
Mozgunov вне форума  
 
Непрочитано 27.01.2013, 21:53
#6
Кулик Алексей aka kpblc
Moderator

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


Если уже есть - то можно воспользоваться методом vla-copyobjects.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 27.01.2013, 23:07
#7
Mozgunov

Начинающий проектировщик
 
Регистрация: 07.02.2008
Санкт-Петербург
Сообщений: 443
<phrase 1=


Спасибо, Алексей. Буду разбираться.
Mozgunov вне форума  
 
Непрочитано 06.04.2015, 14:05
#8
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Не то чтобы я лентяй, но как-то не очень понятно.
Подскажите пожалуйста, как создать описание блока, содержащего 3 атрибута, при этом чтоб он ещё был и аннотативным?
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 06.04.2015, 14:16
1 | #9
Кулик Алексей aka kpblc
Moderator

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


Еще раз, но с переводом.

----- добавлено через 39 сек. -----
http://autolisp.ru/2011/03/17/howto-...tyle-or-block/
Как атрибуты добавлять, надеюсь, объяснять не надо?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.04.2015, 14:24
#10
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


если уж для совсем ленивых - через комстроку)

Код:
[Выделить все]
 (command "_.-block" pause "_A" "_Y" "_N" pause)
Сергей812 вне форума  
 
Непрочитано 07.04.2015, 21:09
3 | #11
VVA

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


Пару примеров из найденных в интернете кодов. Создание определения и вставки блока через entmake
Код:
[Выделить все]
 
;*********************************************************
;;			BLOCK ENTMAKE			;;
;*********************************************************

; Определение заголовка блока :

(defun ent-block-header (name pt)
(entmake (list
(cons 0 "BLOCK")
(cons 2 name)
(cons 8 "0")
(cons 70 2)
(cons 3 "")
(cons 10 pt))))

; Определение отдельного субпримитива блока :
(defun ent-block-sub (ent)
(entmake
    (vl-remove-if
	(function (lambda (x)
	(member (car x) '(5 330))))
	    (cdr (entget ent )))))  

; Определение субпримитивов из набора выбора :
(defun ent-ss (ss / i ss1)
     (setq i 0 ss1 (ssadd))
          (repeat (sslength ss)  
            (ent-block-sub (ssname ss i))
	    (ssadd (entlast) ss1)
            (setq i (1+ i)))
  ss1
  )

;Определение атрибута :
(defun ent-attdef (pt tag pmt val)
(entmake (list
'(0 . "ATTDEF")
'(100 . "AcDbEntity")
(cons 10 pt)
(cons 40 (getvar "TEXTSIZE"))
'(8 . "0")
'(100 . "AcDbText")
(cons 1 val)
(cons 3 pmt)
(cons 7 "Standard")
'(100 . "AcDbAttributeDefinition")
(cons 2 tag)
'(70 . 0)))
)

; Определение окончания блока :
(defun ent-endblk ()
(entmake '((0 . "ENDBLK")(8 . "0"))))

; Основная программа :
(defun C:emake (/ at i name pa pmt pt ss ss1 tag val)
(prompt "\n  >> Указать примитивы для создания определения блока >>\n")
(if (and (setq ss (ssget)
	       pt (getpoint "\nБазовая точка блока:\n")
	       name (getstring "\nИмя блока\n")))  
    (progn
      (setq ss1 (ssadd))
      (ent-block-header name pt)      
      (while (setq pa (getpoint "\nТочка вставки атрибута (Enter без атрибутов) :\n"))
		(setq  tag (strcase (getstring "\nТаг атрибута:\n"))
		      pmt (getstring T "\nПодсказка атрибута:\n")
		     val (getstring "\nЗначение атрибута:\n"))           
      (ent-attdef pa tag pmt val)      
      (ssadd (entlast) ss))
      (setq ss1 (ent-ss ss))
      (ent-endblk)
      (setq i 0)
          (repeat (sslength ss1)  
            (ssdel (ssname ss1 i) ss1)
            (setq i (1+ i)))
      )
  (princ "\nОтмена создания блока\n"))
  (princ)
  )
  (prompt "\n\t>>\tВ командной строке ввести emake \t\n")
  (princ)
;	TesT :
;	(C:emake)
;	(princ)

    ;;===============================================;;
    ;; Example by Lee Mac 2011  -  www.lee-mac.com   ;;
    ;;===============================================;;

(defun c:ENTMAKE_BLOCK ( )
    
    (if (not (tblsearch "BLOCK" "TPBLK"))
        (progn
            (if (not (tblsearch "STYLE" "Gen-Text"))
                (entmake
                    (list
                        (cons 0 "STYLE")
                        (cons 100 "AcDbSymbolTableRecord")
                        (cons 100 "AcDbTextStyleTableRecord")
                        (cons 2 "Gen-Text")
                        (cons 70 0)
                        (cons 40 2.5)
                        (cons 3 "Arial.ttf")
                    )
                )
            )
            
            (entmake
                (list
                    (cons 0 "BLOCK")
                    (cons 8 "0")
                    (cons 370 0)
                    (cons 2 "TPBLK")
                    (cons 70 2)
                    (cons 4 "Block to Place Trial pit Locations")
                    (list 10 0.0 0.0 0.0)
                )
            )
            (entmake
               (list
                   (cons 0 "LWPOLYLINE")
                   (cons 100 "AcDbEntity")
                   (cons 100 "AcDbPolyline")
                   (cons 8 "0")
                   (cons 90 4)
                   (cons 70 1)
                   (list 10 -2.0 2.0)
                   (list 10  2.0 2.0)
                   (list 10  2.0 -2.0)
                   (list 10 -2.0 -2.0)
               )
            )
            
            (entmake
                (list
                    (cons 0 "LINE")
                    (cons 8 "0")
                    (cons 6 "Continuous")
                    (cons 370 0)
                    (list 10 0.0 -3.0 0.0)
                    (list 11 0.0 3.0 0.0)                    
                )
            )
            
            (entmake
                (list
                    (cons 0 "LINE")
                    (cons 8 "0")
                    (cons 6 "Continuous")
                    (cons 370 0)
                    (list 10 -3.0 0.0 0.0)
                    (list 11 3.0 0.0 0.0)                    
                )
            )            
    
            (entmake
                (list
                    (cons 0 "ATTDEF")
                    (cons 8 "0")
                    (cons 370 0)
                    (cons 7 "Gen-Text")
                    (list 10 2.5 3.5 0.0)
                    (list 11 2.5 3.5 0.0)
                    (cons 40 3.5)
                    (cons 1 "TP-00")
                    (cons 3 "Trial pit Location")
                    (cons 2 "TP")
                    (cons 70 0)
                    (cons 72 0)
                    (cons 74 2)
                )
            )
            
            (entmake
                (list
                    (cons 0 "ENDBLK")
                    (cons 8 "0")
                )
            )
          
        )
    )

    (princ)
)

Код:
[Выделить все]
 
(defun Insert (pt Nme)
  (entmakex (list (cons 0 "INSERT")
                  (cons 2 Nme)
                  (cons 10 pt))))
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 08.04.2015, 06:31
#12
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Почему бы не использовать ActiveX-методы? Там все на несколько порядков проще.
Бегло пробежался, в целом всё понятно, потом гляну, скорее всего и аннотативность можно задавать так же.
Не понял зачем вот это:
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
(repeat 3 (vla-purgeall adoc))
Цитата:
Сообщение от VVA Посмотреть сообщение
Пару примеров
Спасибо, сейчас пока прям некогда, позже к этому вернусь буду разбираться, но с ходу не заметил присутствия группы -3, т.е. блоки создаются не аннотативными, надо как-то будет её туда прикрутить.
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 08.04.2015, 07:44
1 | #13
VVA

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


Цитата:
Сообщение от Disney Посмотреть сообщение
но с ходу не заметил присутствия группы -3, т.е. блоки создаются не аннотативными, надо как-то будет её туда прикрутить.
Ну так прикручивать есть чем. См. #9
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 09.04.2015, 13:14
#14
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Не фига не выходит
Создаю блок как Lee научил
Код:
[Выделить все]
 (defun ENTMAKE_BLOCK (text_height bl_name text_style / delta)
  (setq delta (/ text_height 4.0))
  (if (not (tblsearch "BLOCK" bl_name))
    (progn
      (entmake
	(list
	  (cons 0 "BLOCK")
	  (cons 8 "0")
	  (cons 370 0)
	  (cons 2 bl_name)
	  (cons 70 2)
	  (list 10 0.0 0.0 0.0)
	)
      )
      (entmake
	(list
	  (cons 0 "ATTDEF")
	  (cons 8 "0")
	  (cons 370 0)
	  (cons 7 text_style)
	  (cons 10 (list delta delta 0.0))
	  (cons 11 (list 0.0 0.0 0.0))
	  (cons 40 text_height)
	  (cons 1 "0.0")
	  (cons 3 "")
	  (cons 2 "G_C_Red")
	  (cons 70 8)
	  (cons 71 0)
	  (cons 72 0)
	  (cons 73 0)
	  (cons 74 0)
	)
      )
      (entmake
	(list
	  (cons 0 "ATTDEF")
	  (cons 8 "0")
	  (cons 370 0)
	  (cons 7 text_style)
	  (cons 10 (list delta (* -5 delta) 0.0))
	  (cons 11 (list delta (* -1 delta) 0.0))
	  (cons 40 text_height)
	  (cons 1 "0.0")
	  (cons 3 "")
	  (cons 2 "G_C_Black")
	  (cons 70 8)
	  (cons 71 0)
	  (cons 72 0)
	  (cons 73 0)
	  (cons 74 3)
	)
      )
      (entmake
	(list
	  (cons 0 "ATTDEF")
	  (cons 8 "0")
	  (cons 370 0)
	  (cons 7 text_style)
	  (cons 10 (list (* -5 delta) 0 0.0))
	  (cons 40 text_height)
	  (cons 1 "0.0")
	  (cons 3 "")
	  (cons 2 "G_C_h")
	  (cons 71 0)
	  (cons 72 2)
	  (cons 11 (list (* -1 delta) 0 0.0))
	  (cons 73 0)
	  (cons 74 1)
	  (cons 70 8)
	)
      )
      (entmake
	(list
	  (cons 0 "ENDBLK")
	  (cons 8 "0")
	)
      )
    )
  )   
  (princ)
)

(ENTMAKE_BLOCK 1 "блок_1" "Standard")
Как к нему добавить аннотативность?

Получаю указатель на описание блока (tblobjname "BLOCK" "блок_1") , сразу вопрос, из функции ENTMAKE_BLOCK его ни как не получить? он же у нас там только что создался.
передаю его _lispru-ent-make-annotative и ни чего не происходит.
entget-ил указатель на заведомо аннативный блок но ни какой группы - 3 там не нашёл.

И ещё, атрибуты в блоке получаются с ручками, т.е. фиксированное положение - "нет", как его установить в "да" методоми ActiveX я нашёл, а вот dxf группу отвечающею за это не нашёл.

Блок создаётся "безразмерный", как бы и пофиг, всё равно при вставке vla-insertblock мы задаём масштаб, а если вручную вставляем то он вставляется с масштабом 0.001, наверно потому что единицы чертежа установлены метры? Как блоку при его описании задать ему единицы - метры?

----- добавлено через ~24 ч. -----
Сделал методами ActiveX, как Алексей учил, вроде получилось
Код:
[Выделить все]
 (defun _lispru-ent-make-annotative (ent / res)
;|
*    Добавление аннотативности объекту
*    Параметры вызова:
ent  ename-указатель на объект
|;
  (if
    (and (> (atof (getvar "acadver")) 17.)
         (not
           (assoc "AcadAnnotative" (cdr (assoc -3 (entget ent '("*")))))
           ) ;_ end of not
         ) ;_ end of and
     (progn
       (regapp "AcadAnnotative")
       (setq
         res (entmod
               (list (cons -1 ent)
                     '(-3
                       ("AcadAnnotative"
                        (1000 . "AnnotativeData")
                        (1002 . "{")
                        (1070 . 1)
                        (1070 . 1)
                        (1002 . "}")
                        )
                       )
                     ) ;_ end of list
               ) ;_ end of entmod
         ) ;_ end of setq
       ) ;_ end of progn
     ) ;_ end of if
  ) ;_ end of defun


(vl-load-com)
(defun test (block_name text_height text_style / delta adoc block_name vert pline blk_def pt)
;;;(test "TestBLock_2" 1 "Standard")  
  (setq	delta (/ text_height 4.0)
	adoc	   (vla-get-activedocument (vlax-get-acad-object))
  )
  (vla-startundomark adoc)
  (repeat 3 (vla-purgeall adoc))
    (if (/= (type
	    (setq
	      blk_def (vl-catch-all-apply
			(function
			  (lambda ()
			    (vla-item (vla-get-blocks adoc) block_name)
			  )
			)
		      )
	    )
	  )
	  'vla-object
      )
    (progn

      
      (setq blk_def (vla-add (vla-get-blocks adoc)
			     (vlax-3d-point '(0. 0. 0.))
			     block_name
		    )
	    attr   (vla-AddAttribute
		      blk_def
		      text_height
		      0
		      ""
		      (vlax-3d-point (list delta delta 0.0))
		      "G_C_Red"
		      "0.0"		      
		    )
      )
      (vla-put-LockPosition attr :vlax-true)
      (vla-put-StyleName attr text_style)

      
      (setq attr   (vla-AddAttribute
		      blk_def
		      text_height
		      0
		      ""
		      (vlax-3d-point (list delta (* -5 delta) 0.0))
		      "G_C_Black"
		      "0.0"		      
		    )
      )      
      (vla-put-LockPosition attr :vlax-true)
      (vla-put-StyleName attr text_style)
      (vla-put-Alignment attr 6)
      (vla-put-TextAlignmentPoint attr (vlax-3d-point (list delta (* -1 delta) 0.0)))

      
      (setq attr   (vla-AddAttribute
		      blk_def
		      text_height
		      0
		      ""
		      (vlax-3d-point (list (* -5.03548 delta) delta 0.0))
		      "G_C_H"
		      "0.0"		      
		    )
      )
      (vla-put-LockPosition attr :vlax-true)
      (vla-put-StyleName attr text_style)
      (vla-put-Alignment attr 2)
      (vla-put-TextAlignmentPoint attr (vlax-3d-point (list (* -1 delta) delta 0.0)))
   (_lispru-ent-make-annotative (vlax-vla-object->ename blk_def))     
    )
  )  
  (while (setq pt (getpoint "\nInsertion point:"))
    (vla-insertblock
      (vla-get-modelspace adoc)
      (vlax-3d-point pt)
      block_name
      1.
      1.
      1.
      0.
    )
  ) ;_ end of while
  (vla-endundomark adoc)
  (princ)
) ;_ end of defun
Единственное не нашёл как размерность блоку задать.
Причём кроме всего теперь надо при описании этого блока и цвет и прозрачность и ещё чего-нибудь ему нормализовать, потому как создаётся всё текущими, а они могут быть всякими разными, мне не нужными Чем entmake и удобнее там за один раз всё это задаёшь.

Ещё раз вернулся к предыдущему коду (с entmake), описание блока создаётся, но аннотативность ну ни как к нему не прикручивается
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 03.08.2017, 17:50
#15
kurstep


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


Подскажите пожалуйста лисп, который создает новый аналогичный блок по выбранному вхождению но с новым именем (которое вбивает пользователь) и вставляет это вхождение вместо старого вхождения (вообщем сохранить блок как но по выбранному вхождению)
kurstep вне форума  
 
Непрочитано 03.08.2017, 18:23
1 | #16
VVA

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


kurstep,
LISP. Подготовка подосновы
Цитата:
BGCB - копирует одно из вхождений блока в блок с новым именем
BGRB - переименовывает одно из вхождений блока в блок с новым именем
Начало было здесь LISP: Переименование одного из вхождений блока
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Создать блок Autolisp

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в AutoCAD создать блок с несколькими ручками видимости? МишаИнженер Динамические блоки 15 06.03.2020 16:35
Как создать 3D динамический блок используя параметризацию Едрёныч Динамические блоки 8 02.11.2015 13:53
Летние Олимпийские игры 2012. Болеем за наших! T-Yoke Разное 303 13.09.2012 11:56
На каком лайоуте находится выбранный блок? DonVik Программирование 30 29.08.2008 17:20