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

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

Возврат данных о координате объекта в атрибут блока

Ответ
Поиск в этой теме
Непрочитано 12.10.2013, 15:23 #1
Возврат данных о координате объекта в атрибут блока
d.mOnII
 
Проектирование
 
Минск
Регистрация: 22.01.2013
Сообщений: 123

Добрый день еще раз)
прошу помочь с поиском возможности автоматической вставки информации о координате по оси Z в атрибут блока.
т.е. есть блок, который я располагаю не только в осях x/y но и изменяю высоту расположения по оси Z
создал выноску в которую вбиваю эту высоту ручками, а хочется что бы координата по оси Z определялась автоматически, т.к. расположить на нужной отметке, а затем внести эту инфу в атрибут - достаточно долго(, особенно когда речь идет о тысяче блоков.
пробовал через текстовое поле, но параметра такого не нашел( из геометрии дает только масштаб по осям, но не расположение
Просмотров: 3798
 
Непрочитано 12.10.2013, 15:49
#2
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Ну если так навскидку.... при вставке блока в атрибут вставляется его координата Z
Код:
[Выделить все]
(setvar "attreq" 0)
(command "_.INSERT" "имя блока" x y z alfa)
(setq rr (entlast))
;;; блок имеет атрибут с именем ZZ
(setq sp_atr (list "ZZ" (caddr (getvar "lastpoint"))))
;;;      корректирование атрибутов из списка
(nz_att_ch10 rr sp_atr)
Так устроит?
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 12.10.2013, 15:58
#3
d.mOnII

Проектирование
 
Регистрация: 22.01.2013
Минск
Сообщений: 123
Отправить сообщение для d.mOnII с помощью Skype™


а могли бы Вы пояснить как этот код работает?
я не понимаю как этот код внедрить в блок, что бы в атрибут этого блока возвращалась координата блока по оси Z
уточню:
есть динамический блок, который состоит изпрямоугольника (можно менять ширину, длину и угол поворота)
есть выноска состоящая из двух атрибутов:
1. атрибут - возвращает длину через текстовое поле используя свойства объекта
2 атрибут возвращает: а. слой на котором расположен (автоматом через текстовое поле), б. ширину (автоматом через текстовое поле), с. метка, которую я вношу вручную, д. высота - она же является координатой по оси Z, которую я вношу вручную, но хотелось бы автоматизировать(координата по оси Z = 10000, в атрибут я записываю как +10.000 если Z=-100, то в атрибут: -0.000). как написать формулу в атрибуте через текстовые поля я знаю, но как вырвать исходник, а именно координату по оси Z я не представляю(((((((

Последний раз редактировалось d.mOnII, 12.10.2013 в 16:05.
d.mOnII вне форума  
 
Непрочитано 12.10.2013, 16:19
#4
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Ну я наверное не совсем верно понял задачу...
Я решал её для вставленного блока, а тебе нужна выноска
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 12.10.2013, 16:22
#5
d.mOnII

Проектирование
 
Регистрация: 22.01.2013
Минск
Сообщений: 123
Отправить сообщение для d.mOnII с помощью Skype™


ааааааааааааа
еще раз)
я вставил блок (координаты базовой точки: x/y/z)
мне нужно в атрибуте этого блока отобразить координату по оси Z
d.mOnII вне форума  
 
Непрочитано 12.10.2013, 16:24
#6
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от d.mOnII Посмотреть сообщение
я вставил блок (координаты базовой точки: x/y/z)
мне нужно в атрибуте этого блока отобразить координату по оси Z
Тогда я решил верно.
Текст nz_att_ch10 просто не приводил, он есть здесь на форуме
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 12.10.2013, 16:29
#7
d.mOnII

Проектирование
 
Регистрация: 22.01.2013
Минск
Сообщений: 123
Отправить сообщение для d.mOnII с помощью Skype™


блин, так что делать то? не понимаю. куда скопировать код, если создать файл лисп и подгрузить, то как потом вызвать команду или как код работает, не понимаю

что с кодом то делать? что за текст nz_att_ch10
d.mOnII вне форума  
 
Непрочитано 12.10.2013, 16:37
#8
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от d.mOnII Посмотреть сообщение
блин, так что делать то? не понимаю. куда скопировать код, если создать файл лисп и подгрузить, то как потом вызвать команду или как код работает, не понимаю что с кодом то делать?
Пока почитай
http://dwg.ru/pub/9
Пришли на мою почту alnaz @ ukr.net свой блок с тем атрибутом, я объединю всё в команду
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 12.10.2013, 16:39
#9
d.mOnII

Проектирование
 
Регистрация: 22.01.2013
Минск
Сообщений: 123
Отправить сообщение для d.mOnII с помощью Skype™


да я знаю как использовать лисп)
я пользовался только теми лиспами, которые я должен сам вызвать определенной командой.
d.mOnII вне форума  
 
Непрочитано 12.10.2013, 16:45
#10
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от d.mOnII Посмотреть сообщение
да я знаю как использовать лисп)
я пользовался только теми лиспами, которые я должен сам вызвать определенной командой.
Ну раз знаешь как, пользуйся...
Код:
[Выделить все]
(defun c:inschange (/ rr sp_atr)
  (setvar "attreq" 0)
  (command "_.INSERT" "имя блока" x y z alfa)
  (setq rr (entlast))
;;; блок имеет атрибут с именем ZZ
  (setq sp_atr (list "ZZ" (caddr (getvar "lastpoint"))))
;;;      корректирование атрибутов из списка
  (nz_att_ch10 rr sp_atr)
  (princ "\n:: Type \"InsChange\" для выполнения ::")
  (princ)
) ;_ конец defun
;;; ===================      ЗАМЕНА ЗНАЧЕНИЙ АТРИБУТОВ ========================================
(defun nz_att_ch10
       (el_sp sp_atr / att seqend a_name new_value att0 att)
;;;	el_sp - элемент списка
;;; 	new_value - новое значение
  (setq att (entnext el_sp))
  (setq seqend (cdr (assoc 0 (entget att))))
  (while (not (eq seqend "SEQEND"))
			      ; пока есть атрибуты в блоке
    (setq a_name (cdr (assoc 2 (entget att)))) ; находим  атрибут 

;;; начинаем проверять по списку для изменений: есть - меняем
    (setq new_value (car (cdr (assoc a_name sp_atr))))

    (if	new_value
      (setq att0 (subst	(cons 1 new_value)
			(assoc 1 (entget att))
			(entget att)
		 ) ;_ конец subst
      ) ;_ конец setq
    ) ;_ конец if
    (entmod att0)
    (entupd att)
    (setq att (entnext att))
    (setq seqend (cdr (assoc 0 (entget att))))
  ) ;_ конец while
) ;_ конец defun
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 12.10.2013, 16:56
#11
d.mOnII

Проектирование
 
Регистрация: 22.01.2013
Минск
Сообщений: 123
Отправить сообщение для d.mOnII с помощью Skype™


я так понял я должен все разрисовать) затем только вызвать функцию, атрибуты обновятся и при изменении я снова должен вызывать функцию, в данном случае командой inschange
правильно?
на почту блочок отправил)

inschange -> ; ошибка: неверный ассоциативный список: ("УЧАСТОК" 0.0)

код для блока что я Вам отправил на почту:
Код:
[Выделить все]
(defun c:inschange (/ rr sp_atr)
  (setvar "attreq" 0)
(command "_.INSERT" "!_Лоток" x y z alfa)
(setq rr (entlast))
;;; блок имеет атрибут с именем ZZ
(setq sp_atr (list "УЧАСТОК" (caddr (getvar "lastpoint"))))
;;;      корректирование атрибутов из списка
(nz_att_ch10 rr sp_atr)
  (princ "\n:: Type \"InsChange\" для выполнения ::")
  (princ)
) ;_ конец defun
;;; ===================      ЗАМЕНА ЗНАЧЕНИЙ АТРИБУТОВ ========================================
(defun nz_att_ch10
       (el_sp sp_atr / att seqend a_name new_value att0 att)
;;;     el_sp - элемент списка
;;;     new_value - новое значение
  (setq att (entnext el_sp))
  (setq seqend (cdr (assoc 0 (entget att))))
  (while (not (eq seqend "SEQEND"))
                              ; пока есть атрибуты в блоке
    (setq a_name (cdr (assoc 2 (entget att)))) ; находим  атрибут

;;; начинаем проверять по списку для изменений: есть - меняем
    (setq new_value (car (cdr (assoc a_name sp_atr))))

    (if new_value
      (setq att0 (subst (cons 1 new_value)
                        (assoc 1 (entget att))
                        (entget att)
                 ) ;_ конец subst
      ) ;_ конец setq
    ) ;_ конец if
    (entmod att0)
    (entupd att)
    (setq att (entnext att))
    (setq seqend (cdr (assoc 0 (entget att))))
  ) ;_ конец while
) ;_ конец defun

Последний раз редактировалось d.mOnII, 12.10.2013 в 17:03.
d.mOnII вне форума  
 
Непрочитано 12.10.2013, 16:59
1 | #12
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от d.mOnII Посмотреть сообщение
я так понял я должен все разрисовать) затем только вызвать функцию,
Думаю, что не так...
Моя команда inschange при вызове вставляет блок и в Атрибут ZZ записывает значение координаты Z.
Цитата:
inschange -> ; ошибка: неверный ассоциативный список: ("УЧАСТОК" 0.0)
Да, в запарке не сделал ассоциативный список.
Подправил текст под твой блок, проверь.
Код:
[Выделить все]
(defun c:inschange (/ rr sp_atr)
  (setvar "attreq" 0)
  (command "_.INSERT" "!_Лоток" pause 1 1 0)
  (setq rr (entlast))
;;; блок имеет атрибут с именем УЧАСТОК
  (setq
    sp_atr (list (list "УЧАСТОК"
		       (strcat "ET_LVD 600x60TS, BOC +"
			       (rtos (caddr (getvar "lastpoint")) 2 3)
		       ) ;_ конец strcat
		 ) ;_ конец list
	   ) ;_ конец list
  ) ;_ конец setq
;;;      корректирование атрибутов из списка
  (nz_att_ch10 rr sp_atr)
  (princ "\n:: Type \"InsChange\" для выполнения ::")
  (princ)
) ;_ конец defun
;;; ===================      ЗАМЕНА ЗНАЧЕНИЙ АТРИБУТОВ ========================================
(defun nz_att_ch10
       (el_sp sp_atr / att seqend a_name new_value att0 att)
;;;     el_sp - элемент списка
;;;     new_value - новое значение
  (setq att (entnext el_sp))
  (setq seqend (cdr (assoc 0 (entget att))))
  (while (not (eq seqend "SEQEND"))
			      ; пока есть атрибуты в блоке
    (setq a_name (cdr (assoc 2 (entget att)))) ; находим  атрибут

;;; начинаем проверять по списку для изменений: есть - меняем
    (setq new_value (car (cdr (assoc a_name sp_atr))))

    (if	new_value
      (setq att0 (subst	(cons 1 new_value)
			(assoc 1 (entget att))
			(entget att)
		 ) ;_ конец subst
      ) ;_ конец setq
    ) ;_ конец if
    (entmod att0)
    (entupd att)
    (setq att (entnext att))
    (setq seqend (cdr (assoc 0 (entget att))))
  ) ;_ конец while
) ;_ конец defun
Это протокол проверки:
Цитата:
Команда: INSCHANGE
_.INSERT Имя блока или [?] <!_Лоток>: !_Лоток
Единицы: Миллиметры Преобразование: 1.000
Точка вставки или [Базовая точка/Масштаб/X/Y/Z/ПОворот]: 1000,1000,555
Не стал делать анализ величины атрибута, но это не проблема - важна идея.
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...

Последний раз редактировалось Alan, 12.10.2013 в 18:08.
Alan вне форума  
 
Непрочитано 12.10.2013, 18:53
1 | #13
Кулик Алексей aka kpblc
Moderator

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


А внутрь блока вставить атрибут-поле, считывающий координаты вставки - не катит?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.10.2013, 19:31
1 | #14
nolte

спринклеры, сантехника
 
Регистрация: 26.01.2010
Сообщений: 188
Отправить сообщение для nolte с помощью Skype™


Алексей это как сделать
еще один вариант:
Код:
[Выделить все]
 (defun c:bbb (/ obj )
(vl-load-com)
(while (not obj)
	(setq obj (car (entsel)))
)
(setq obj (vlax-ename->vla-object obj))					
(mapcar '(lambda (x)
 (if (= (vla-get-tagstring x) "COOR_Z")	;поменять на свой ;таг атрибута
  (vla-put-textstring x 
   (rtos
     (car (reverse
      (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint obj)))
     ))
    2 2	;вторая цифра - точность 
  )
 )
)
)
(vlax-safearray->list (vlax-variant-value (vla-getattributes obj)))
)
(princ)
)
nolte вне форума  
 
Непрочитано 12.10.2013, 20:33
1 | #15
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от nolte Посмотреть сообщение
Алексей это как сделать
См. тему "Мои динамические блоки".
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.10.2013, 13:14
#16
d.mOnII

Проектирование
 
Регистрация: 22.01.2013
Минск
Сообщений: 123
Отправить сообщение для d.mOnII с помощью Skype™


я не могу вставлять новый блок(((
т.к. не все текстовые поля работают через местозаполнитель в разделе объект, так например слой на котором расположен блок
я не могу при вставке нового блока постоянно вбивать это текстовое поле((((
важно как то вности в блок который скопирован и вставлен(((
может можно что-то сделать?

Цитата:
А внутрь блока вставить атрибут-поле, считывающий координаты вставки - не катит?
КАТИТ, именно это мне и надо, но покажите мне ГДЕ эта функция считывания координат?
если Вы внимательно читали, я писал, что из геометрии кад предлагает только вернуть масштаб по осям, возврат координат ОТСУТСТВУЕТ(((
используем купленную лицензию акад2011

ОТВЕТ ЕСТЬ!!!
Спасибо Алексей за ЛС

Ваш ответ то что надо
параметр который мне нужен был - ПОЗИЦИЯ (POSITION)

Цитата:
Большое спасибо. все что мне надо было это параметр позиция))), просто в моем блоке куча параметров и я не подумал что позиция это не мои примочки(((
полагаю тему можно закрыть

Последний раз редактировалось d.mOnII, 14.10.2013 в 11:06.
d.mOnII вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Возврат данных о координате объекта в атрибут блока

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Содержание раздела ПЗУ (генплан) в ПД Tyhig Прочее. Архитектура и строительство 45 10.12.2015 11:09
запрос ввода данных при выборе объекта Klo Программирование 6 11.05.2012 23:36
Временная защита неэксплутаруемого здания от осадков ing-e Прочее. Архитектура и строительство 16 06.12.2011 00:11
Длина 3д тела как атрибут блока Андрей Будзинский Программирование 28 24.12.2009 19:53