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

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

Блок на высоту атрибута

Ответ
Поиск в этой теме
Непрочитано 15.12.2023, 04:42 #1
Блок на высоту атрибута
n0str0m0
 
геолог
 
Тында, Дальний Восток
Регистрация: 02.09.2009
Сообщений: 413

Имеется блок - скважина с атрибутами, один из которых - отметка устья скважины. Но все скважины находятся на нулевой отметке. Подскажите, как поднять этот блок на атрибут отметки устья? Пытался через поиск найти, не получилось. То, что нашел, не работает
Просмотров: 935
 
Непрочитано 15.12.2023, 07:48
| 1 #2
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


через запросы https://forum.dwg.ru/attachment.php?...6&d=1362567741

Последний раз редактировалось trir, 15.12.2023 в 08:10.
trir вне форума  
 
Непрочитано 15.12.2023, 08:11
#3
name02


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


Цитата:
Сообщение от trir Посмотреть сообщение
через запросы
Надо только правильно попросить

Цитата:
Сообщение от n0str0m0 Посмотреть сообщение
Подскажите, как поднять этот блок на атрибут отметки устья?
Где-то в параллельной вселенной на каком-то параллельном форуме должно быть висит пост:
Есть блок с атрибутом высотной отметки устья скважины. Подскажите, пожалуйста, лисп для замены значения Y-координаты точки вставки выделенных блоков на значение из данного атрибута.

Код:
[Выделить все]
 
(defun C:TEST (/ ss en p1)
 (if (setq ss (ssget '((0 . "INSERT") (2 . "ИМЯ_БЛОКА"))))
   (repeat (setq i (sslength ss))
     (setq en (vlax-ename->vla-object (ssname ss (setq i (1- i))))
           p1 (vlax-get en 'InsertionPoint)
     )
     (foreach x (vlax-invoke en 'getattributes)
       (if (eq (vla-get-TagString x) "ИМЯ_АТРИБУТА")
         (vlax-put en 'InsertionPoint (list (car p1)  (atof (vla-get-TextString x)) (caddr p1)))
       )
     )
   )
 )
 (princ)
)
Данный код работает только для статических блоков (не динамических)!
TEST.lsp

Последний раз редактировалось name02, 15.12.2023 в 08:32.
name02 вне форума  
 
Автор темы   Непрочитано 15.12.2023, 09:32
#4
n0str0m0

геолог
 
Регистрация: 02.09.2009
Тында, Дальний Восток
Сообщений: 413
<phrase 1=


Загрузил лисп, но выбрать блоки не получается, хотя они не динамические
Вложения
Тип файла: dwg
DWG 2013
Чертеж1.dwg (224.7 Кб, 6 просмотров)
n0str0m0 вне форума  
 
Непрочитано 15.12.2023, 09:39
#5
Кулик Алексей aka kpblc
Moderator

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


Лисп надо менять - вводить нормальное имя блока и нормальный же тэг атрибута
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.12.2023, 10:24
1 | #6
name02


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


Цитата:
Сообщение от n0str0m0 Посмотреть сообщение
хотя они не динамические
Очень даже динамические - у тебя в них параметр видимости есть!
К тому же у тебя блоки имеют разные имена...
Для лиспа это очень существенная разница - имей в виду на будущее, если будешь просить помочь - пиши подробнее и точно!
Вместо BLOCK_NAME "*" можно написать имена нужных блоков (подробнее читай тут)
Код:
[Выделить все]
 (defun C:TEST (/ BLOCK_NAME ATT_NAME ss i en p1)

  (setq
    BLOCK_NAME     "*"
    ATT_NAME "Z"
  ) ;_ end of setq

  (setq ss (ssget '((0 . "INSERT"))))

  (if ss
    (repeat (setq i (sslength ss))
      (setq en (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
      (cond
	((wcmatch (vla-get-EffectiveName en) BLOCK_NAME) ;_ end of wcmatch

	 (setq p1 (vlax-get en 'InsertionPoint))

	 (foreach x (vlax-invoke en 'getattributes)
	   (if (eq (vla-get-TagString x) ATT_NAME)
	     (vlax-put en
		       'InsertionPoint
		       (list (car p1) (atof (vla-get-TextString x)) (caddr p1))
	     ) ;_ end of vlax-put
	   ) ;_ end of if
	 ) ;_ end of foreach
	)
	(T nil)
      ) ;_ end of cond
    ) ;_ end of repeat
  ) ;_ end of if
  (princ)
) ;_ end of defun
TEST.lsp
name02 вне форума  
 
Непрочитано 17.12.2023, 18:46
#7
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от n0str0m0 Посмотреть сообщение
поднять этот блок на атрибут отметки
Как подвариант:
Выгрузить блоки и значения атрибутов в txt лиспом PtM - PointManager от Lee Mac. (Пригодится еще много для чего. В т.ч. и для обратного процесса).
Заменить в Excel нулевые Z на значения атрибута отметки.
Загрузить обратно этими же блоками лиспом PtM.
Исходные блоки сначала удалить или т.п.
__________________
количество моих сообщений не говорит о знании Автокада

Последний раз редактировалось АлексЮстасу, 17.12.2023 в 23:32.
АлексЮстасу вне форума  
 
Автор темы   Непрочитано 18.12.2023, 04:06
#8
n0str0m0

геолог
 
Регистрация: 02.09.2009
Тында, Дальний Восток
Сообщений: 413
<phrase 1=


Цитата:
Сообщение от name02 Посмотреть сообщение
Очень даже динамические - у тебя в них параметр видимости есть!
К тому же у тебя блоки имеют разные имена...
Для лиспа это очень существенная разница - имей в виду на будущее, если будешь просить помочь - пиши подробнее и точно!
Вместо BLOCK_NAME "*" можно написать имена нужных блоков (подробнее читай тут)
Код:
[Выделить все]
 (defun C:TEST (/ BLOCK_NAME ATT_NAME ss i en p1)

  (setq
    BLOCK_NAME     "*"
    ATT_NAME "Z"
  ) ;_ end of setq

  (setq ss (ssget '((0 . "INSERT"))))

  (if ss
    (repeat (setq i (sslength ss))
      (setq en (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
      (cond
	((wcmatch (vla-get-EffectiveName en) BLOCK_NAME) ;_ end of wcmatch

	 (setq p1 (vlax-get en 'InsertionPoint))

	 (foreach x (vlax-invoke en 'getattributes)
	   (if (eq (vla-get-TagString x) ATT_NAME)
	     (vlax-put en
		       'InsertionPoint
		       (list (car p1) (atof (vla-get-TextString x)) (caddr p1))
	     ) ;_ end of vlax-put
	   ) ;_ end of if
	 ) ;_ end of foreach
	)
	(T nil)
      ) ;_ end of cond
    ) ;_ end of repeat
  ) ;_ end of if
  (princ)
) ;_ end of defun
Вложение 260573
Этот лисп работает, но отметку Z из атрибута присваивает координате Y (север) блока. Таким образом, блок перемещается по горизонтали, а не по вертикали. А так работает и с простыми блоками, и с блоками, имеющими параметр видимости. Как и где подправить лисп, я, к сожалению, не знаю

Последний раз редактировалось n0str0m0, 18.12.2023 в 04:19.
n0str0m0 вне форума  
 
Непрочитано 18.12.2023, 07:37
1 | #9
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Цитата:
Как и где подправить лисп, я, к сожалению, не знаю
поcar'кай
trir вне форума  
 
Непрочитано 18.12.2023, 12:31
1 | #10
name02


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


Цитата:
Сообщение от n0str0m0 Посмотреть сообщение
Таким образом, блок перемещается по горизонтали, а не по вертикали.
Короче, не сильно понял, но сделал так, чтобы координата Z блока бралась из атрибута
Код:
[Выделить все]
   ;Замена Z-координаты динамических и статических блоков на значение из атрибута
(defun C:TEST (/ BLOCK_NAME ATT_NAME ss i en p1)

  (setq
    BLOCK_NAME "*"
    ATT_NAME "Z"
  ) ;_ end of setq

  (setq ss (ssget '((0 . "INSERT"))))

  (if ss
    (repeat (setq i (sslength ss))
      (setq en (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
      (cond
	((wcmatch (vla-get-EffectiveName en) BLOCK_NAME) ;_ end of wcmatch

	 (setq p1 (vlax-get en 'InsertionPoint))

	 (foreach x (vlax-invoke en 'getattributes)
	   (if (eq (vla-get-TagString x) ATT_NAME)
	     (vlax-put en
		       'InsertionPoint
		       (list
			    ;;X-координата блока
			    (car p1)
			    ;;Y-координата блока
			    (cadr p1)
			    ;;Z-координата блока
			    (atof (vla-get-TextString x))
		       ) ;_ end of list
	     ) ;_ end of vlax-put
	   ) ;_ end of if
	 ) ;_ end of foreach
	)
	(T nil)
      ) ;_ end of cond
    ) ;_ end of repeat
  ) ;_ end of if
  (princ)
) ;_ end of defun
name02 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Блок на высоту атрибута

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Diesel. Как передать значение атрибута? DANZZ Программирование 2 21.12.2023 14:23
Хитрый блок Vova Динамические блоки 166 20.03.2017 15:13
Как изменить ширину рамки многострочного атрибута? Сет AutoCAD 7 09.09.2015 12:54
Параметрический блок: точка вставки не перемещается при изменении размеров tequillka Динамические блоки 8 04.05.2015 15:41
Копирование нужного атрибута блока в другой блок. Alexeipost Программирование 4 25.05.2011 09:33