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

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

Как удалить атрибут?

Ответ
Поиск в этой теме
Непрочитано 27.06.2007, 10:42 #1
Как удалить атрибут?
пончеГ
 
Проектирую ДЭС
 
Москва
Регистрация: 25.06.2007
Сообщений: 101

Собственно сабж.
На чертеже был блок с атрибутом. Я все его вхождения заменил (blockreplace) на другой блок, который должен быть без атрибута. Блоки заменились, но атрибут почему-то остался. Причем, если зайти в редактирование нового блока, атрибут там не отображается. А в диспетчере атрибутов блока кнопка "удалить" затемнена. Так как его удалить?
__________________
Запомните, товарищи офицеры, чтобы ничего не делать, надо уметь делать все.
Просмотров: 9633
 
Непрочитано 27.06.2007, 11:11
1 | #2
Кулик Алексей aka kpblc
Moderator

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


_battman либо _attsync
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 27.06.2007, 11:22
#3
пончеГ

Проектирую ДЭС
 
Регистрация: 25.06.2007
Москва
Сообщений: 101
<phrase 1=


Дык о том и речь! По _attsync пишет, что "выбранный блок не имеет атрибутов" (и их действительно нет при открытии блока _bedit), но он в обычном режиме отображается же. И в _properties пишет, что атрибут есть и значение его задано.
_battman вызывает диспетчер атрибутов, в котором кнопка "удалить" затемнена и не нажимается вобще ни для одного блока.
__________________
Запомните, товарищи офицеры, чтобы ничего не делать, надо уметь делать все.
пончеГ вне форума  
 
Непрочитано 27.06.2007, 11:49
#4
Кулик Алексей aka kpblc
Moderator

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


А, так ты вообще все атрибуты снес? Я не пробовал такого, может, _regenall поможет. На крайняк - закрыть и снова открыть файл. Точного рецепта нет
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 27.06.2007, 11:55
#5
пончеГ

Проектирую ДЭС
 
Регистрация: 25.06.2007
Москва
Сообщений: 101
<phrase 1=


не помогает...
__________________
Запомните, товарищи офицеры, чтобы ничего не делать, надо уметь делать все.
пончеГ вне форума  
 
Непрочитано 27.06.2007, 12:18
#6
Alaspher


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


Попробуй:
Код:
[Выделить все]
(defun c:reina () (pl:reinsert-attval-all))

(defun pl:reinsert-attval-all (/ doc layfr laylc laylst lays sel sels slst snam tmp) 
  (setq doc  (vla-get-activedocument (vlax-get-acad-object)) 
        snam "pl-temp-selection" 
        sels (vla-get-selectionsets doc) 
        lays (vla-get-layers doc) 
  ) 
  (if (vl-catch-all-error-p 
        (setq sel (vl-catch-all-apply (function vla-item) (list sels snam))) 
      ) 
    (setq sel (vla-add sels snam)) 
  ) 
  (vla-clear sel) 
  (vla-select 
    sel 
    acselectionsetall 
    nil 
    nil 
    (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0)) 
    (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0)) '("INSERT")) 
  ) 
  (vlax-for x sel (setq slst (cons x slst))) 
  (vla-clear sel) 
  (vla-delete sel) 
  (setq laylst (list (getvar "clayer"))) 
  (foreach x slst 
    (setq tmp (vla-get-layer x)) 
    (if (not (vl-position tmp laylst)) 
      (setq laylst (cons tmp laylst)) 
    ) 
    (if (= (vla-get-hasattributes x) :vlax-true) 
      (foreach y (vlax-safearray->list (vlax-variant-value (vla-getattributes x))) 
        (setq tmp (vla-get-layer y)) 
        (if (not (vl-position tmp laylst)) 
          (setq laylst (cons tmp laylst)) 
        ) 
      ) 
    ) 
  ) 
  (setq laylst (mapcar (function (lambda (x) (vla-item lays x))) laylst) 
        layfr  (vl-remove-if-not 
                 (function (lambda (x) (= (vla-get-freeze x) :vlax-true))) 
                 laylst 
               ) 
        laylc  (vl-remove-if-not 
                 (function (lambda (x) (= (vla-get-lock x) :vlax-true))) 
                 laylst 
               ) 
  ) 
  (foreach x layfr (vla-put-freeze x :vlax-false)) 
  (foreach x laylc (vla-put-lock x :vlax-false)) 
  (foreach x slst 
    (setq tmp (vla-insertblock 
                (vla-objectidtoobject doc (vla-get-ownerid x)) 
                (vla-get-insertionpoint x) 
                (vla-get-name x) 
                (vla-get-xscalefactor x) 
                (vla-get-yscalefactor x) 
                (vla-get-zscalefactor x) 
                (vla-get-rotation x) 
              ) 
    ) 
    (foreach y '("layer" "linetype" "linetypescale" "lineweight" "color") 
      (vl-catch-all-apply 
        (read (strcat "vla-put-" y)) 
        (list tmp (vl-catch-all-apply (read (strcat "vla-get-" y)) (list x))) 
      ) 
    ) 
    (pl:attreval x tmp) 
    (vla-delete x) 
  ) 
  (foreach x layfr (vla-put-freeze x :vlax-true)) 
  (foreach x laylc (vla-put-lock x :vlax-true)) 
  (princ) 
) 

(defun pl:attreval (from to / att1 att2 layfr laylc laylst lays layto tmp) 
  (if (and (setq from (pl:get-att-with-tag from)) (setq to (pl:get-att-with-tag to))) 
    (foreach x from 
      (if (setq tmp (assoc (car x) to)) 
        (progn 
          (setq att1 (cdr x) 
                att2 (cdr tmp) 
          ) 
          (if (= (vla-get-constant att2) :vlax-false) 
            (progn (setq lays   (vla-get-layers (vla-get-document att2)) 
                         laylst (list (vla-item lays (vla-get-layer att2))) 
                   ) 
                   (if (vl-catch-all-error-p 
                         (vl-catch-all-apply 
                           (function vla-item) 
                           (list lays (setq layto (vla-get-layer att1))) 
                         ) 
                       ) 
                     (setq laylst (cons (vla-add lays layto) laylst)) 
                   ) 
                   (setq layfr (vl-remove-if-not 
                                 (function (lambda (x) (= (vla-get-freeze x) :vlax-true))) 
                                 laylst 
                               ) 
                         laylc (vl-remove-if-not 
                                 (function (lambda (x) (= (vla-get-lock x) :vlax-true))) 
                                 laylst 
                               ) 
                   ) 
                   (foreach x layfr (vla-put-freeze x :vlax-false)) 
                   (foreach x laylc (vla-put-lock x :vlax-false)) 
                   (foreach y '("alignment" 
                                "backward" 
                                "height" 
                                "insertionpoint" 
                                "linetype" 
                                "linetypescale" 
                                "lineweight" 
                                "obliqueangle" 
                                "scalefactor" 
                                "stylename" 
                                "textstring" 
                                "thickness" 
                                "color" 
                                "upsidedown" 
                                "layer" 
                               ) 
                     (vl-catch-all-apply 
                       (read (strcat "vla-put-" y)) 
                       (list att2 (vl-catch-all-apply (read (strcat "vla-get-" y)) (list att1))) 
                     ) 
                   ) 
                   (foreach x layfr (vla-put-freeze x :vlax-true)) 
                   (foreach x laylc (vla-put-lock x :vlax-true)) 
            ) 
          ) 
          (vl-remove tmp to) 
        ) 
      ) 
    ) 
  ) 
) 

(defun pl:get-att-with-tag (ins) 
  (if (= (vla-get-hasattributes ins) :vlax-true) 
    (mapcar (function (lambda (x) (cons (vla-get-tagstring x) x))) 
            (vlax-safearray->list (vlax-variant-value (vla-getattributes ins))) 
    ) 
  ) 
)

(progn (princ "\nEnter: 'reina' in the command string for begining.") (princ))
Если мне не изменяет мой склероз, это одна из утилит, которые делал для похожего случая.

WARNING! Писано бегом, так что косяки возможны!
Alaspher вне форума  
 
Автор темы   Непрочитано 27.06.2007, 12:38
#7
пончеГ

Проектирую ДЭС
 
Регистрация: 25.06.2007
Москва
Сообщений: 101
<phrase 1=


СПАСИБО! Попробую... тока лиспами надо сначала пользоваться научиться
__________________
Запомните, товарищи офицеры, чтобы ничего не делать, надо уметь делать все.
пончеГ вне форума  
 
Непрочитано 27.06.2007, 12:50
#8
Alaspher


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


Цитата:
Сообщение от пончеГ
тока лиспами надо сначала пользоваться научиться
См. тут. Удачи.
Alaspher вне форума  
 
Автор темы   Непрочитано 27.06.2007, 13:13
#9
пончеГ

Проектирую ДЭС
 
Регистрация: 25.06.2007
Москва
Сообщений: 101
<phrase 1=


Спасибо еще раз! Получилось!
Наблюдаю необычный побочный эффект - атрибуты в других блоках стали отображаться в зеркальном виде... выглядит концептуально
__________________
Запомните, товарищи офицеры, чтобы ничего не делать, надо уметь делать все.
пончеГ вне форума  
 
Непрочитано 27.06.2007, 14:14
#10
Alaspher


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


Цитата:
Сообщение от пончеГ
Наблюдаю необычный побочный эффект - атрибуты в других блоках стали отображаться в зеркальном виде... выглядит концептуально
А эти блоки вставлялись не зеркально? Или не переопределены ли они уже после вставки в зеркальном виде?
Alaspher вне форума  
 
Автор темы   Непрочитано 27.06.2007, 14:33
#11
пончеГ

Проектирую ДЭС
 
Регистрация: 25.06.2007
Москва
Сообщений: 101
<phrase 1=


не знаю, это не я вставлял, я с ними вобще ничего не делал...
ну и ладно...они мне все равно не нужны
__________________
Запомните, товарищи офицеры, чтобы ничего не делать, надо уметь делать все.
пончеГ вне форума  
 
Непрочитано 28.06.2007, 11:00
#12
Alaspher


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


Откорректированая версия утилиты + подобная утилита для варианта с ручным выбором.

Код:
[Выделить все]
(defun c:reinm () (pl:reinsert-attval))
(defun c:reina () (pl:reinsert-attval-all))

(defun pl:reinsert-attval-all (/ doc layfr laylc laylst lays sel sels slst snam tmp) 
  (setq doc  (vla-get-activedocument (vlax-get-acad-object)) 
        snam "pl-temp-selection" 
        sels (vla-get-selectionsets doc) 
        lays (vla-get-layers doc) 
  ) 
  (if (vl-catch-all-error-p 
        (setq sel (vl-catch-all-apply (function vla-item) (list sels snam))) 
      ) 
    (setq sel (vla-add sels snam)) 
  ) 
  (vla-clear sel) 
  (vla-select 
    sel 
    acselectionsetall 
    nil 
    nil 
    (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0)) 
    (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0)) '("INSERT")) 
  ) 
  (vlax-for x sel (setq slst (cons x slst))) 
  (vla-clear sel) 
  (vla-delete sel) 
  (setq laylst (list (getvar "clayer"))) 
  (foreach x slst 
    (setq tmp (vla-get-layer x)) 
    (if (not (vl-position tmp laylst)) 
      (setq laylst (cons tmp laylst)) 
    ) 
    (if (= (vla-get-hasattributes x) :vlax-true) 
      (foreach y (vlax-safearray->list (vlax-variant-value (vla-getattributes x))) 
        (setq tmp (vla-get-layer y)) 
        (if (not (vl-position tmp laylst)) 
          (setq laylst (cons tmp laylst)) 
        ) 
      ) 
    ) 
  ) 
  (setq laylst (mapcar (function (lambda (x) (vla-item lays x))) laylst) 
        layfr  (vl-remove-if-not 
                 (function (lambda (x) (= (vla-get-freeze x) :vlax-true))) 
                 laylst 
               ) 
        laylc  (vl-remove-if-not 
                 (function (lambda (x) (= (vla-get-lock x) :vlax-true))) 
                 laylst 
               ) 
  ) 
  (foreach x layfr (vla-put-freeze x :vlax-false)) 
  (foreach x laylc (vla-put-lock x :vlax-false)) 
  (foreach x slst 
    (setq tmp (vla-insertblock 
                (vla-objectidtoobject doc (vla-get-ownerid x)) 
                (vla-get-insertionpoint x) 
                (vla-get-name x) 
                (vla-get-xscalefactor x) 
                (vla-get-yscalefactor x) 
                (vla-get-zscalefactor x) 
                (vla-get-rotation x) 
              ) 
    ) 
    (foreach y '("layer" "linetype" "linetypescale" "lineweight" "color") 
      (vl-catch-all-apply 
        (read (strcat "vla-put-" y)) 
        (list tmp (vl-catch-all-apply (read (strcat "vla-get-" y)) (list x))) 
      ) 
    ) 
    (pl:attreval x tmp) 
    (vla-delete x) 
  ) 
  (foreach x layfr (vla-put-freeze x :vlax-true)) 
  (foreach x laylc (vla-put-lock x :vlax-true)) 
  (princ) 
) 

(defun pl:reinsert-attval (/ doc snam sels sel slst tmp)
  (setq	doc  (vla-get-activedocument (vlax-get-acad-object))
	snam "pl-temp-selection"
	sels (vla-get-selectionsets doc)
  )
  (if (vl-catch-all-error-p
	(setq
	  sel (vl-catch-all-apply (function vla-item) (list sels snam))
	)
      )
    (setq sel (vla-add sels snam))
  )
  (vla-clear sel)
  (vla-selectonscreen
    sel
    (vlax-safearray-fill
      (vlax-make-safearray vlax-vbinteger '(0 . 0))
      '(0)
    )
    (vlax-safearray-fill
      (vlax-make-safearray vlax-vbvariant '(0 . 0))
      '("INSERT")
    )
  )
  (vlax-for x sel (setq slst (cons x slst)))
  (vla-clear sel)
  (vla-delete sel)
  (foreach x slst
    (setq tmp (vla-insertblock
		(vla-objectidtoobject doc (vla-get-ownerid x))
		(vla-get-insertionpoint x)
		(vla-get-name x)
		(vla-get-xscalefactor x)
		(vla-get-yscalefactor x)
		(vla-get-zscalefactor x)
		(vla-get-rotation x)
	      )
    )
    (pl:attreval x tmp)
    (vla-delete x)
  )
  (princ)
)

(defun pl:attreval
       (from to / att1 att2 layfr laylc laylst lays layto tmp)
  (if (and (setq from (pl:get-att-with-tag from))
	   (setq to (pl:get-att-with-tag to))
      )
    (foreach x from
      (if (setq tmp (assoc (car x) to))
	(progn
	  (setq	att1 (cdr x)
		att2 (cdr tmp)
	  )
	  (if (= (vla-get-constant att2) :vlax-false)
	    (progn (setq lays	(vla-get-layers (vla-get-document att2))
			 laylst	(list (vla-item lays (vla-get-layer att2)))
		   )
		   (if (vl-catch-all-error-p
			 (vl-catch-all-apply
			   (function vla-item)
			   (list lays (setq layto (vla-get-layer att1)))
			 )
		       )
		     (setq laylst (cons (vla-add lays layto) laylst))
		   )
		   (setq layfr (vl-remove-if-not
				 (function
				   (lambda (x) (= (vla-get-freeze x) :vlax-true))
				 )
				 laylst
			       )
			 laylc (vl-remove-if-not
				 (function
				   (lambda (x) (= (vla-get-lock x) :vlax-true))
				 )
				 laylst
			       )
		   )
		   (foreach x layfr (vla-put-freeze x :vlax-false))
		   (foreach x laylc (vla-put-lock x :vlax-false))
		   (foreach y '("alignment"	   "backward"
				"height"	   "insertionpoint"
				"linetype"	   "linetypescale"
				"lineweight"	   "obliqueangle"
				"scalefactor"	   "stylename"
				"textstring"	   "thickness"
				"color"		   "upsidedown"
				"layer"		   "FieldLength"
				"Invisible"	   "Material"
				"Normal"	   "PlotStyleName"
				"Rotation"	   "TagString"
				"TextAlignmentPoint"
				"TextGenerationFlag"
				"TrueColor"	   "Visible"
			       )
		     (vl-catch-all-apply
		       (read (strcat "vla-put-" y))
		       (list att2
			     (vl-catch-all-apply
			       (read (strcat "vla-get-" y))
			       (list att1)
			     )
		       )
		     )
		   )
		   (foreach x layfr (vla-put-freeze x :vlax-true))
		   (foreach x laylc (vla-put-lock x :vlax-true))
	    )
	  )
	  (vl-remove tmp to)
	)
      )
    )
  )
)

(defun pl:get-att-with-tag (ins)
  (if (= (vla-get-hasattributes ins) :vlax-true)
    (mapcar (function (lambda (x) (cons (vla-get-tagstring x) x)))
	    (vlax-safearray->list
	      (vlax-variant-value (vla-getattributes ins))
	    )
    )
  )
)

(progn (princ
	 "\nEnter: 'reinm' or 'reina' in the command string for begining."
       )
       (princ)
)
За замеченные ошибки, спасибо - пончеГу!
Alaspher вне форума  
 
Непрочитано 28.06.2007, 12:04
#13
studios


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


У меня была похожая проблема. Я просто изменил значение атрибута одного блока на пробел а потом _attsync переопределил значения во всех остальных блоках. Визуально теперь его не видно. Попробуй может получится...
studios вне форума  
 
Непрочитано 07.08.2015, 15:56
#14
AAI


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


Код из #6 и #12 превращает динамический блок в обычный. Есть решение для удаления "удаленного атрибута" из динамического блока?
Помогите пожалуйста.
AAI вне форума  
 
Непрочитано 07.08.2015, 17:22
#15
Хмурый


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


AAI, поковыряй BG-tools. Может помочь
Хмурый вне форума  
 
Непрочитано 30.01.2020, 12:35
#16
Электрик Schneider


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


Доброго времени суток, уважаемые гуру.

Недавно столкнулся с такой проблемой:
Имеем динамический блок с некоторыми свойствами. На нем наложен атрибут "УКЛОН", который я никак не могу удалить, потому что при выборе этого блока - он оказывается не имеет атрибутов.
Все вышеперечисленные способы и команды - не помогают. Лисп и BG-tools не дают нужного эффекта, преобразуя блок в статику.

Как можно удалить этот атрибут с сохранением всех свойств динамического блока?

Прикреплю файл с блоком, для понимания проблемы.
блок.dwg
Электрик Schneider вне форума  
 
Непрочитано 30.01.2020, 13:13
1 | #17
Зодчий1989


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


Цитата:
Сообщение от Электрик Schneider Посмотреть сообщение
Как можно удалить этот атрибут с сохранением всех свойств динамического блока?
Просто перевставь блок заново, через команду _-insert(Вставка)
__________________
Не ошибается только тот, кто ничего не делает.
Зодчий1989 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как удалить атрибут?

Размещение рекламы