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

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

LISP. Не удается корректно отсортировать объекты

Ответ
Поиск в этой теме
Непрочитано 19.07.2016, 09:57
LISP. Не удается корректно отсортировать объекты
tujn08
 
Регистрация: 26.12.2013
Сообщений: 284

Привет!
Не могу понять в чем дело.

Хочу сделать так:
Набрать список ID + координаты вставки от объектов в наборе.
Дальше отсортировать список по Y в нужной последовательности.
И переключаться по ID и заполнять свойства.

У меня получается так, что свойства меняется в одном блоке, а остальные не хотят. При этом ошибок не выдает.

Код:
[Выделить все]
 (progn
(defun zxc_1 () ; непосредственная нумерация после zxc_0
	;(setq ccord_1 (assoc '10 (entget a1)))	
	(setq a1 (entnext ent)) ; зашли в атрибуты	; координаты вставки форматки
	(setq b1 (cdr (assoc '2 (entget a1))))
	(while b1
		(if (equal b1 "ШИФР2")															; проверяем атрибуты перед вставкой
			(progn 
				(setq b1 (subst (cons 1 s_sh) (assoc '1 (entget a1)) (entget a1) ))		; записали
				(entmod b1)	(entupd a1)													; перерисовали
				(setq D0 T)
			)
		)			
		(if (equal b1 "ШИФР")															; проверяем атрибуты перед вставкой
			(progn 
				(setq b1 (subst (cons 1 s_sh) (assoc '1 (entget a1)) (entget a1) ))		; записали
				(entmod b1)	(entupd a1)													; перерисовали
				(setq D1 T)
			)
		)
		(if (equal b1 "СТАДИЯ")															; проверяем атрибуты перед вставкой
			(progn 
				(setq b1 (subst (cons 1 s_st) (assoc '1 (entget a1)) (entget a1) ))		; записали
				(entmod b1)	(entupd a1)													; перерисовали
				(setq D2 T)
			)
		)
		(setq a1 (entnext a1))
	  	(setq b1 (cdr (assoc '2 (entget a1)))); следующий атрибут
		(if
			(and (equal D0 T) (equal D1 T) (equal D2 T))
			(setq b1 nil)
		)
	)
)


(vl-load-com)

(initget 7) 																						; стр 83
	(setq s_sh (getstring "Введите шифр общий для всех чертежей (без ' - ' вконце)..."))
	(terpri)
	(initget 7) 																						; стр 83
	(setq s_st (getstring "Введите стадию проекта (П / Р)..."))
	(terpri)
(setq f_list nil)
(setq nab (ssget "_X"(list (cons 8 "Форматка_штамп") (cons 0 "INSERT"))))							; создали набор форматок
	(setq b (sslength nab)) 																			; всего в наборе
	;(alert (strcat "Найдено  форматок: " (itoa b) "   ")) 												; сообщение
	(setq i 0) 																					; счетчик перебора набора. Взяли из конца набора
  	(repeat b 																							; цикл по набору
		(setq a1 (ssname nab i)) 																		; взяли первый из набора
		(setq ccord (assoc '10 (entget a1)))															; координаты вставки форматки
		(setq obj (vlax-ename->vla-object a1))
		(setq n (vla-get-ObjectID obj))
		(if f_list
			(progn (setq f_list (cons (list n ccord) f_list)))
			(progn (setq f_list (list (list n ccord))))
		)
		(setq i (+ i 1))
	)
	(princ f_list)

		
		
(defun select-id(id)
	((lambda (ent)
		(if ent 
		(progn
			(zxc_1)
			;(sssetfirst nil (ssadd ent)) ; подсветить объект
			;(setq a1 (entnext ent)) ; зашли в атрибуты
			;(setq b1 (cdr (assoc '2 (entget a1)))) ; имя атрибута
		)
             (princ "Не найден объект"))
		(princ))
	(car (vl-remove-if '(lambda (x) (or (listp x)
                                       (not (equal id (vla-get-objectid (vlax-ename->vla-object x))))))
                      (mapcar 'cadr (ssnamex (ssget "_a"))))))
)
	(setq b (length f_list)) ; всего в списке
	(setq i 0)
	(repeat b
	  (setq a (car (nth i f_list)))
		(select-id a)
	  (terpri)
	  (princ a)(terpri)
  		(setq i (+ i 1))
	)

)
----- добавлено через ~19 мин. -----
Я подумал и решил обойтись номерами из набора. Так будет проще всего.
Просмотров: 3121
 
Автор темы   Непрочитано 25.07.2016, 14:29
#21
tujn08


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Твой код вывалил ошибку на твоем же примере.
Мой у меня работает и на 10 ПК тоже работает.
set-attr-value.lsp - пишет мало аргиментов
tujn08 вне форума  
 
Непрочитано 25.07.2016, 14:51
1 | #22
Кулик Алексей aka kpblc
Moderator

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


Специально же пример вызова привел...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.07.2016, 15:09
#23
tujn08


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
пример вызова привел..
Запустил, пронумеровались листы.
В целом можно переделать под свои нужды. СПС - буду разбирать.
tujn08 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Не удается корректно отсортировать объекты

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Не могу корректно сменить основной файл меню Кулик Алексей aka kpblc LISP 8 04.07.2016 08:51
LISP. Программная вставка dwf в текущий файл Кулик Алексей aka kpblc LISP 4 10.02.2015 14:38
Lisp: удалить "ножницы". hwd LISP 2 29.05.2013 19:10
Объекты есть, но их нет! Volodich AutoCAD 19 22.03.2013 09:55
LISP: возможно ли выбрать через ssget рамкой объекты разных типов? cj_lex LISP 5 20.04.2012 10:54