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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP-функция для изменения значения атрибутов в блоке

LISP-функция для изменения значения атрибутов в блоке

Ответ
Поиск в этой теме
Непрочитано 06.04.2016, 12:11 #1
LISP-функция для изменения значения атрибутов в блоке
r7800m
 
Регистрация: 06.04.2016
Сообщений: 2

Доброго дня, уважаемые форумчане!
Прошу помощи в доработке LISP'a для изменения значения атрибута в блоке.
Сам код ниже:
Код:
[Выделить все]
 (defun ag_valattedit (TARGETPOINT ATTMASK ATTVALUE)
	(setq TARGETBLOCK (ssname (ssget TARGETPOINT) 0)) ;_ определяем примитив по координатам (объект в точке)
	(while (eq (cdr (assoc 0 (entget (setq TARGETBLOCK (entnext TARGETBLOCK))))) "ATTRIB") ;_ цикл перебора вложенных примитивов с фильтром атрибутов
		(if (= ATTMASK (cdr (assoc 2 (entget TARGETBLOCK)))) (entmod (subst (cons 1 ATTVALUE) (assoc 1 (entget TARGETBLOCK)) (entget TARGETBLOCK)))) ;_ изменение значения целевого (по маске) атрибута
	) ;_ конец while
)
В функцию в качестве аргументов должны передаваться точка, в которой находится блок с атрибутами (вопрос с фильтрацией выбора объектов по их типу "блок/не блок", "с атрибутами/без атрибутов" пока опустим), маска тэга атрибута и новое значение этого атрибута. Сам код списан с сообщения E-degtyarev.
Вчера этот код вроде как даже работал в AutoCAD 2008. Но сегодня в AutoCAD 2014 отказывается это делать (вчера раки были большие, но по 5... ):
Код:
[Выделить все]
Команда: _CAL
>> Выражение: p1=cur
>> Введите точку:
0,0,0

Команда: (ag_valattedit (p1 "НОМЕРСКВ" "123"))
; ошибка: неверная функция: (0.0 0.0 0.0)

Команда: (ag_valattedit ('(0 0) "НОМЕРСКВ" "123"))
; ошибка: неверная функция: (0 0)
При этом даже два последовательно вставленные в командную строку AutoCAD выражения основную функцию выполняют:
Код:
[Выделить все]
 (setq TARGETBLOCK (entnext (ssname (ssget p1) 0)))
(entmod (subst (cons 1 "123") (assoc 1 (entget TARGETBLOCK)) (entget TARGETBLOCK)))
Код:
[Выделить все]
Команда: (setq TARGETBLOCK (entnext (ssname (ssget p1) 0)))
<Имя объекта: 7ffff467860>

Команда: (entmod (subst (cons 1 "123") (assoc 1 (entget TARGETBLOCK)) (entget TARGETBLOCK)))
((-1 . <Имя объекта: 7ffff467860>) (0 . "ATTRIB") (330 . <Имя объекта: 7ffff467120>) (5 . "DCE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "GEO_Скважина") (100 . "AcDbText") (10 1.325 26.05 0.0) (40 . 3.5) (1 . "123") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "GEO_Geniso_UsualText") (71 . 0) (72 . 1) (11 5.0 25.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (280 . 0) (2 . "НОМЕРСКВ") (70 . 0) (73 . 0) (74 . 1) (280 . 1))
В данном случае атрибут с тэгом "НОМЕРСКВ" попадается первым при переборе вложенных в блок элементов.
Подозреваю, что что-то не так с передачей в функцию аргументов, но не могу дать ума, как и что исправить, и вообще, куда смотреть?
Просмотров: 2256
 
Непрочитано 06.04.2016, 12:16
#2
Кулик Алексей aka kpblc
Moderator

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


Опущу момент "выбора по точке", бог с ним. Сравни вызовы:
Код:
[Выделить все]
 (ag_valattedit (p1 "НОМЕРСКВ" "123"))
и
Код:
[Выделить все]
 (ag_valattedit p1 "НОМЕРСКВ" "123")
Практически гарантирую, что второй вариант будет работать.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.04.2016, 13:16
#3
r7800m


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


Большое спасибо, Алексей!
Весьма обидная ошибка...
r7800m вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP-функция для изменения значения атрибутов в блоке

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно ли преобразование атрибутов в текст с сохранением значения Tag в текст oleg_marshinov AutoCAD 24 05.11.2017 15:37
AutoCAD_2010. Обновление атрибутов в блоке... olamot AutoCAD 7 19.10.2010 00:25
при работе в блоке вдруг рисуется линия вне блока,из-за которой не сохраняет изменения в блоке Макля AutoCAD 4 24.06.2010 12:10
Изменения блока, атрибутов блока сразу в нескольких файлах andery AutoCAD 7 03.04.2009 17:07
структурированный список Holon Программирование 22 11.09.2007 14:09