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

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

Спрошу про блоки

Ответ
Поиск в этой теме
Непрочитано 26.10.2004, 17:35 #1
Спрошу про блоки
ilka_t
 
Москва
Регистрация: 20.01.2004
Сообщений: 154

Если блок был создан в одном слое, а потом его пго поместили в другой слой, то у него остается связь с первоночальным слоем, и таже поблема с цветом.
Может есть у кого нибудь Lisp для переопределения блока в текущий слой,и цвет,чтобы он был не зависим от первоначального цвета и слоя
Просмотров: 13821
 
Непрочитано 26.10.2004, 18:17
#2
Star

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


Создавай блок на слое 0.
Star вне форума  
 
Автор темы   Непрочитано 26.10.2004, 18:20
#3
ilka_t


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


ето самый легкий способ, но возьмешь файл у архитекторов и там такое, да и сам иногда забываешь про 0 слой, вот я и спашиваю про LISP
ilka_t вне форума  
 
Непрочитано 26.10.2004, 19:17
#4
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


У Startrek'a на страничке видел подобную прогу.
Torino вне форума  
 
Непрочитано 26.10.2004, 19:26
#5
Startrek

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


Можно воспользоваться аутокадовской kоммандой REFEDIT она работает не только с ХREF но и с обычными блоками
Startrek вне форума  
 
Автор темы   Непрочитано 27.10.2004, 14:47
#6
ilka_t


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


За REFEDIT зпасибо не знал.но там надо каждый бдок по отдельности редактировать, а сразу все блоки низя.
Может кто Lispik напишет, что бы все блоки сразу можно было поменять
ilka_t вне форума  
 
Непрочитано 27.10.2004, 15:40
#7
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


;FixBlock.lsp [December 31, 1997]
;
; Copyright 1996, 1997 ManuSoft Computer Services
;
; Freeware by:
; ManuSoft Computer Services
; http://www.manusoft.com
;
; Load function, then enter FIXBLOCK to redefine selected blocks
; so that all entities are on layer '0', color 'BYBLOCK'.
;


(defun C:FixBlock (/ ss cnt blkname donelist Grp Update)
(defun Grp (gc el) (cdr (assoc gc el)))
(defun Update (bname / ename elist)
(setq ename (tblobjname "BLOCK" bname))
(while ename
(setq elist (entget ename '("*"))
elist (subst '(8 . "0") (assoc 8 elist) elist)
elist (if (assoc 62 elist) (subst '(62 . 0) (assoc 62 elist) elist) (append elist '((62 . 0)))))
(entmake elist)
(setq ename (entnext ename)))
(if (/= "ENDBLK" (Grp 0 elist)) (entmake '((0 . "ENDBLK") (8 . "0") (62 . 0))))
)
(if (> (logand (Grp 70 (tblsearch "layer" "0")) 1) 0)
(princ "\nLayer 0 must be thawed before running FIXBLOCK!\n")
(progn
(if
(progn
(princ "\nPress <Enter> to fix all defined blocks\n")
(setq ss (ssget '((0 . "INSERT")))))
(progn
(setq cnt (sslength ss))
(while (>= (setq cnt (1- cnt)) 0)
(if (not (member (setq blkname (Grp 2 (entget (ssname ss cnt)))) donelist))
(progn
(Update blkname)
(setq donelist (cons blkname donelist)))))
(setq cnt (sslength ss)))
(progn
(setq cnt 0)
(while (setq blkname (Grp 2 (tblnext "BLOCK" (not blkname))))
(Update blkname)
(setq cnt (1+ cnt)))))
(princ (strcat "\n" (itoa cnt) " block" (if (= cnt 1) "" "s") " redefined\n"))))
(princ)
)
;End-of-file



После этого команда Regen
Vova на форуме  
 
Непрочитано 27.10.2004, 16:41
#8
Эдуард

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


Код:
[Выделить все]
(defun C:block-v-0 ()
  (vl-load-com)
  (setq	ac_doc (vla-get-ActiveDocument
		 (vlax-get-acad-object
		 )
	       ) ;_ end of vla-get-ActiveDocument
  ) ;_ end of setq
  (vlax-for item (vla-get-layers
		   ac_doc
		 ) ;_ end of vla-get-layers
    (if
      (equal (vla-get-lock item) :vlax-true)
       (vla-put-lock item :vlax-false)
    ) ;_ end of if
  ) ;_ end of vlax-for
  (vla-StartUndoMark
    ac_doc
  ) ;_ end of vla-StartUndoMark

  (vlax-for item
		 (vla-get-blocks
		   ac_doc
		 ) ;_ end of vla-get-blocks

    (if
      (not
	(wcmatch
	  (vla-get-name item)
	  "*Space"
	) ;_ end of wcmatch
      ) ;_ end of not

       (progn
	 (vlax-for item2 item
	   (if
	     (not
	       (equal
		 (vla-get-layer item2)
		 "0"
	       ) ;_ end of equal
	     ) ;_ end of not

	      (progn
		(vla-put-layer item2 "0")
	      ) ;_ end of progn
	   ) ;_ end of if
	 ) ;_ end of vlax-for

       ) ;_ end of progn
    ) ;_ end of if

  ) ;_ end of vlax-for


  (vla-regen ac_doc
	     acAllViewports
  ) ;_ end of vla-regen
  (vla-endUndoMark
    ac_doc
  ) ;_ end of vla-endUndoMark
  (princ)
) ;_ end of defun
Эдуард вне форума  
 
Непрочитано 27.10.2004, 19:33
#9
{Smirnoff}

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


Функция удалена, по причине того что дальше содержиться усовершенствованный вариант.
{Smirnoff} вне форума  
 
Непрочитано 27.10.2004, 20:09
#10
Tech


 
Регистрация: 18.10.2004
Odessa
Сообщений: 226
<phrase 1=


У меня тоже есть вопросик касательно блоков: - Создаю значится блок, присваиваю ему имя, аккуратненько заполняю description, сохраняюсь, затем вдруг захотелось поменять или дополнить имя или описание, -так description виден только в DesignCenter, в свойствах даже и не упоминается и ничем другим не читается, refedit позволяет редактировать сам блок, но не имя и описание.
Пока борюсь с этим EXPLODE>EDIT>MAKE BLOCK, может кто подскажет более простой путь, и как оперативно просмотреть DESCRIPTION?
Tech вне форума  
 
Непрочитано 27.10.2004, 20:51
#11
lee


 
Регистрация: 28.02.2004
43
Сообщений: 1,819
<phrase 1=


Format > Rename
...............
По моим наблюдениям есть глюки с корректностью имен блока. Например, если блок называется типа "Унитаз #1", то Акад фиг даст его переименовать.
lee вне форума  
 
Непрочитано 27.10.2004, 21:21
#12


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


Оперативно просмотреть Description:
Код:
[Выделить все]
(defun c:bld (/ block blName Descr)
  (if
    (setq block(car(entsel "\nSelect block ")))
    (progn
   (if(= "INSERT"(cdr(assoc 0(entget block))))
     (progn
       (setq blName(cdr(assoc 2(entget block))))
     (if
       (setq Descr(cdr(assoc 4(tblsearch "block" blName))))
       (princ(strcat "\nBlock name: " blName "\nDesctiption: " Descr))
       (princ(strcat "\nBlock name: " blName
		     "\n*** Haven't description ***"))
       ); end if
     ); end progn
  (princ "\n*** This don't block ***")
  ); end if
    ); end progn
  (princ "\n*** Nothing selected ***")
	 ); end if
    (princ)
  ); end bld

Изменть чуть сложнее. Непродуман у них этот вопрос или я чего не знаю...
 
 
Непрочитано 27.10.2004, 21:26
#13
{Smirnoff}

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


Если будешь пользоваться убери из листинга фразу:
Цитата:
"Изменть чуть сложнее. Непродуман у них этот вопрос или я чего не знаю..."
. Я незалогинился и теперь немогу подправить. Да видно что сам не дурак, это я на всякий случай предупредил...
{Smirnoff} вне форума  
 
Непрочитано 28.10.2004, 12:12
#14
{Smirnoff}

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


Пришлось немного усовершенствовать и подправить поскольку сам работаю с архитектурными чертежами и этот ЛИСП мне не лишний. Прога делает блоки "правильными" т. е. 1) все составляющие примитивы в слое "0" 2) цвет "ByBlock". Сами блоки остаются в своем слое и им присваивается цвет "ByLayer". Заблокированные слои на время работы программы разблокируются и потом восстанавливают состояние.

Код:
[Выделить все]
(defun c:bto (/
	       opMode
	       Block
	       vlaList
	       acApp
	       layerState
	       LayerCol
	       nameList
	       layList
	       blockCol
	       blSet
	       )
  (vl-load-com)
  (initget "S A")
  (setq opMode(getkword "\nSelect operation mode [Selection/All] <S>: "))
  (if (null opMode)(setq opMode "S"))
  (if(= "S" opMode)
    (progn
    (princ "\nSelect block(s) and press Enter ")
      (setq blSet(ssget '((0 . "INSERT"))))
    ); end progn
      (setq blSet(ssget "_X" '((0 . "INSERT"))))
    ); end if
  (if blSet
    (progn
    (setq acApp(vla-get-ActiveDocument
	         (vlax-get-acad-object))
	  LayerCol(vla-get-Layers acApp)
	  layerState '()
          vlaList(mapcar 'vlax-ename->vla-object
		    (vl-remove-if 'listp
		      (mapcar 'cadr(ssnamex blSet))))
	  nameList
		    (mapcar
		    '(lambda (x)(vla-get-Name x))vlaList)
          layList
             (mapcar '(lambda(x)
                (list x(vla-get-Layer x)))vlaList)
          blockCol
              (vla-get-blocks acApp)
	  ); end setq
     (vlax-for l LayerCol
       (setq layerState
            (append layerState
	       (list
		 (list
		   l
		   (vla-get-Lock l)))))
       (vla-put-lock l :vlax-false)
       ); end vlax-for
  (vlax-for i blockCol
    (vlax-for e i
      (cond
	(
	(and
	  (= opMode "S")
	  (member (vla-get-Name i)nameList)
	  ); end and
	 (progn
      (vla-put-Layer e "0")
      (vla-put-Color e 0)
      ); end progn
	 )
	(
	(= opMode "A")
	 (progn
      (vla-put-Layer e "0")
      (vla-put-Color e 0)
      ); end progn
      )
     ); end cond
      ); end vlax-for
    ); end vlax-for
  (foreach i layList
    (vla-put-Layer(car i)(cadr i))
    (vla-put-Color (car i) 256)
    ); end foreach
    (foreach l layerState
      (vla-put-Lock (car l)(cadr l))
	); end foreach
); end progn
    (princ "\nNothing block selected!")
    ); end if
  (vla-regen acApp acAllViewports)
  (princ)
  ); end of bto
{Smirnoff} вне форума  
 
Непрочитано 28.10.2004, 12:53
#15
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от Lamer
У меня тоже есть вопросик касательно блоков: - Создаю значится блок, присваиваю ему имя, аккуратненько заполняю description, сохраняюсь, затем вдруг захотелось поменять или дополнить имя или описание, -так description виден только в DesignCenter, в свойствах даже и не упоминается и ничем другим не читается, refedit позволяет редактировать сам блок, но не имя и описание.
Пока борюсь с этим EXPLODE>EDIT>MAKE BLOCK, может кто подскажет более простой путь, и как оперативно просмотреть DESCRIPTION?
Возможность нормального редактирования описаний блоков а ACADе отсутствует, вот так пришлось решать вопрос в ruCAD:
http://www.kurganobl.ru/cad/book.jsp...=272&tn=main#b
Alaspher вне форума  
 
Непрочитано 28.10.2004, 16:02
#16
Tech


 
Регистрация: 18.10.2004
Odessa
Сообщений: 226
<phrase 1=


Fantomas

Огромное спасибо за помощь, оба LISPa как раз в тему, правда мне приходится работать с элетронными компонентами и библиотека накопилась довольно приличная. Жаль конечно, что разработчики не решили этот вопрос, хотя он напрашивается сам собой :roll:
Tech вне форума  
 
Непрочитано 28.10.2004, 16:23
#17
{Smirnoff}

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


У меня на этот счет есть идея. Можно ведь использоваь атрибуты блоков причем невидимые. Мне несложно написать лиспик который вставил бы в каждый блок ваших библиотек этот невидимый атрибут соответствующий Description блока.

Будет просмотр и редактирование по двойному щелчку ну и соответственно все все остальное с атрибутами связанное 8)

Делаете свои библиотеки по привычке заполняя Description, затем запускаете прогу и она автоматом вставляет во все блоки невидимые атрибуты. Если к примеру вы используете "чужой" блок без Description, то атрибут тоже будет создаваться но к примеру с прочерком "-".

А если в Description использовать по договоренности служебные знаки к примеру $1$Locheed-Martin$1$ $2$Laser Gun$2$ $3$SLG-134$3$ $4$10000000 USD$4$ то в блоке могут создаваться несколько атрибутов:

Manufacturer: Locheed-Martin
Devise: Space Laser Gun
Model: SLG-134
Price: 10000000 USD

Что то я разошелся...
{Smirnoff} вне форума  
 
Непрочитано 28.10.2004, 16:40
#18
Tech


 
Регистрация: 18.10.2004
Odessa
Сообщений: 226
<phrase 1=


Цитата:
Сообщение от Alaspher
Возможность нормального редактирования описаний блоков а ACADе отсутствует, вот так пришлось решать вопрос в ruCAD:
http://www.kurganobl.ru/cad/book.jsp...=272&tn=main#b
К величайшему моему сожалению , я пока не настолько хорошо знаю LISP, что бы приспособить этот листинг под AutoCAD. Может кто-то оз уважаемых Гуру попробует это сделать :roll: :?:
Tech вне форума  
 
Непрочитано 28.10.2004, 17:05
#19
Tech


 
Регистрация: 18.10.2004
Odessa
Сообщений: 226
<phrase 1=


Цитата:
Сообщение от Fantomas
...лиспик который вставил бы в каждый блок ваших библиотек этот невидимый атрибут соответствующий Description блока.
А что, идея мне кажется очень даже интересной

Цитата:
Будет просмотр и редактирование по двойному щелчку ...
- тогда прийдется совмещать с REFEDIT, я думаю, что уже многие привыкли к этой функции.

Цитата:
А если в Description использовать по договоренности служебные знаки к примеру $1$Locheed-Martin$1$ $2$Laser Gun$2$ $3$SLG-134$3$ $4$10000000 USD$4$ то в блоке могут создаваться несколько атрибутов:

Manufacturer: Locheed-Martin
Devise: Space Laser Gun
Model: SLG-134
Price: 10000000 USD
А такой вариант вообще позволил бы навести порядок в библиотеках.
Tech вне форума  
 
Непрочитано 28.10.2004, 17:26
#20
{Smirnoff}

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


Цитата:
- тогда прийдется совмещать с REFEDIT, я думаю, что уже многие привыкли к этой функции.
Для вызова REFEDIT можно пользоваться и пунктом Edit Block in-place из контекстного меню по правому клику.

Лиспик "синхронизирующий" Description и соответствующий атрибут блока напишу. Насчет "$1$"тоже не слишком сложно, но хочется знать насколько нужно и если нужно то какие пункты?

Цитата:
К величайшему моему сожалению , я пока не настолько хорошо знаю LISP, что бы приспособить этот листинг под AutoCAD. Может кто-то оз уважаемых Гуру попробует это сделать
В данном конкретном случае для использования надо сделать две вещи: 1) написать лисп в 5 строчек для запуска соответствующей функции (это плевое дело) 2) загрузить библиотеку RU- которая состоит из огромного количества вложенных функций или ее часть "размотав клубок" тех же вложенных функций и выбрав необходимые. Библиотеки у меня нет. Проще такую прогу написать самому.[/code]
{Smirnoff} вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Спрошу про блоки