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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > атрибут rotation = 0

атрибут rotation = 0

Ответ
Поиск в этой теме
Непрочитано 18.01.2006, 10:32 #1
атрибут rotation = 0
v_alex
 
Новокузнецк
Регистрация: 24.10.2005
Сообщений: 1,124

подскажите как сделать в блоке, чтобы при любом его изменении (вращение, отражение... и т.п.) параметр атрибута Rotation всегда равнялся 0?
Просмотров: 2736
 
Непрочитано 18.01.2006, 11:16
#2
{Smirnoff}

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


Цитата:
подскажите как сделать в блоке, чтобы при любом его изменении (вращение, отражение... и т.п.) параметр атрибута Rotation всегда равнялся 0?
Такое только програмно.

Однако можно потом выставить угол всех атрибутов 0° с помощью _battman.
{Smirnoff} вне форума  
 
Непрочитано 18.01.2006, 11:37
#3
{Smirnoff}

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


Вот простенькая программа, выбираете блоки с атрибутами и жмете Enter. Для полной автоматизации которую вы хотите, надо намного больше кода.
Код:
[Выделить все]
(defun c:atnor(/ blSet attLst)
  (princ "§§§ Выберите блоки с атрибутами §§§")
  (if
    (setq blSet(ssget '((0 . "INSERT")(66 . 1))))
    (progn
      (setq blSet(mapcar 'vlax-ename->vla-object 
                    (vl-remove-if 'listp 
                     (mapcar 'cadr(ssnamex blSet)))))
      (foreach itm blSet
	(setq attLst
	       (vlax-safearray->list
		 (vlax-variant-value
		   (vla-GetAttributes itm))))
	(foreach att attLst
	  (if(not(vl-catch-all-error-p
		   (vl-catch-all-apply
		     'vla-put-Rotation(list att 0))))t)
	  ); end foreach
	); end foreach
      ); end progn
    (princ ">>> Ничего не выбрано! <<<")
    ); end if
  (princ)
  ); end of c:atnor
{Smirnoff} вне форума  
 
Непрочитано 18.01.2006, 11:45
#4
Кулик Алексей aka kpblc
Moderator

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


> {Smirnoff} : При всем уважении - блокировка слоев, однако, пропущена. Не знаю, правда, надо ли оно здесь...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.01.2006, 12:33
#5
{Smirnoff}

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


>kpblc
Цитата:
> {Smirnoff} : При всем уважении - блокировка слоев, однако, пропущена. Не знаю, правда, надо ли оно здесь...
Ну почему пропущена. Фильтрует оно все ошибки при развороте, однако ничего не сообщает. Решил что в такой 3-х минутной поделке это не обязательно, тем более видно если какие то атрибуты не развернулись. Если ты имел ввиду что надо разблокировать слои перед работой основного кода - то я считаю что это не правильно поскольку слои на то и блокируются чтобвы нельзя было внести изменения.
{Smirnoff} вне форума  
 
Непрочитано 18.01.2006, 12:43
#6
{Smirnoff}

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


Добавил счетчик ошибок:
Код:
[Выделить все]
(defun c:atnor(/ blSet attLst errCount)
  (princ "§§§ Выберите блоки с атрибутами §§§")
  (setq errCount 0)
  (if
    (setq blSet(ssget '((0 . "INSERT")(66 . 1))))
    (progn
      (setq blSet(mapcar 'vlax-ename->vla-object 
                    (vl-remove-if 'listp 
                     (mapcar 'cadr(ssnamex blSet)))))
      (foreach itm blSet
	(setq attLst
	       (vlax-safearray->list
		 (vlax-variant-value
		   (vla-GetAttributes itm))))
	(foreach att attLst
	  (if(vl-catch-all-error-p
		   (vl-catch-all-apply
		     'vla-put-Rotation(list att 0)))
	    (setq errCount(1+ ErrCount))
		  ); end if
	  ); end foreach
	); end foreach
      ); end progn
    (princ ">>> Ничего не выбрано! <<<")
    ); end if
  (if(/= 0 errCount)
    (princ
      (strcat ">>> "
	(itoa errCount)
	      " атрибутов были на заблокированных слоях! <<< "))
	      ); end if
  (princ)
  ); end of c:atnor
Теперь по крайней мере говорит сколько не сумел развернуть.
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 18.01.2006, 13:04
#7
v_alex


 
Регистрация: 24.10.2005
Новокузнецк
Сообщений: 1,124
<phrase 1=


всем спасибо... это немного не то что я хотел... но думаю данный код мне поможет...
v_alex вне форума  
 
Непрочитано 18.01.2006, 15:07
#8
Эдуард

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


Цитата:
Для полной автоматизации которую вы хотите, надо намного больше кода.
Да не очень и много.
Код:
[Выделить все]
(defun attr-reactor ()

  (if
    (vlr-reactors :VLR-AcDb-Reactor)
     (vlr-remove-all :VLR-AcDb-Reactor)
  )
  (if
    (vlr-reactors :VLR-command-Reactor)
     (vlr-remove-all :VLR-command-Reactor)
  )
  (if (or
	(not r_acdb)
	(not (vlr-added-p r_acdb))
      )
    (setq r_acdb (VLR-AcDb-Reactor
		   ""
		   (list
		     '(:VLR-objectAppended . obj_list)
		     '(:VLR-objectModified . obj_list)
		   )
		 )
    )
  )
  (if (or
	(not r_com)
	(not (vlr-added-p r_com))
      )
    (setq r_com	(VLR-Command-Reactor
		  ""
		  (list
		    '(:vlr-commandended . change_att)
		  )
		)
    )
  )


  (princ)
)

(defun obj_list	(rn obj)
  (setq obj (cadr obj))
  (if
    (and
      (= (cdr (assoc 0 (entget obj))) "INSERT")
      (> (cdr (assoc 66 (entget obj))) 0)
    )
     (setq list_obj (cons obj list_obj))
  )
)

(defun change_att (a b)
  (if list_obj
    (foreach i (mapcar 'vlax-ename->vla-object list_obj)
      (mapcar '(lambda (x)
		 (if
		   (/= (vla-get-Rotation x) 0.0)
		    (vla-put-rotation x 0.0)
		 )
	       )
	      (vlax-safearray->list
		(vlax-variant-value (vla-getattributes i))
	      )
      )
    )
  )
  (setq list_obj nil)
)
Эдуард вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > атрибут rotation = 0