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

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

Функция vl-remove не удаляет элемент из списка. Не понимаю почему.

Ответ
Поиск в этой теме
Непрочитано 31.01.2016, 22:28 #1
Функция vl-remove не удаляет элемент из списка. Не понимаю почему.
granit201z
 
Проектировщик
 
Камышин
Регистрация: 17.08.2014
Сообщений: 118

Код:
[Выделить все]
(defun c:ppp ( / )


  (vl-load-com) ; загружаем Актив-Х без нее все актив-х функции работать не будут

  (setq actdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
  (setq obj (vla-get-ModelSpace actdoc))


(setq nabor_primitivov (ssget))

(setq i 0)



(while (< i (sslength nabor_primitivov))

	(setq dannie_primitiva (entget(ssname nabor_primitivov i))) ; данные о примитиве


	(setq dannie_primitiva (subst (cons 8 "0") (assoc 8 dannie_primitiva) dannie_primitiva))

	(setq dannie_primitiva (vl-remove (assoc 62 dannie_primitiva) dannie_primitiva)) ; меняем цвет на по слою

	(setq dannie_primitiva (vl-remove (assoc 6 dannie_primitiva) dannie_primitiva)) ; меняем тип линии на по слою
(print (assoc 370 dannie_primitiva))
	(setq dannie_primitiva (vl-remove (assoc 370 dannie_primitiva) dannie_primitiva)) ; меняем вес линии на по слою


	(entmod dannie_primitiva)

	(setq i (+ i 1))


)

По идее этот код. должен поменять на всех выбранных объектах: слой на "0", цвет на "По слою", тип линии на "По слою", вес линии на "По слою". Но фактически этого не происходит. А именно большинство отрезков, текстов, кругов и прочих примитивов, конечно, подчиняются коду и меняются как я того от них и требую. Но встречаются на чертеже и "бронированные" примитивы, которым плевать на код, т.е. допустим слой, цвет, и тип они приняли как надо, а вес ни в какую не принимают, пока вручную не установишь "По слою", или цвет например не хотят принимать. Причем ф-я "Принт" в коде показывает, что "Ассок" извлекает из списка то, что надо, но дальше почему то "Вл-ремове" не удаляет элемент, который был извлечен "ассоком"
Просмотров: 3176
 
Непрочитано 01.02.2016, 08:51
#2
ProPeller

Пастух
 
Регистрация: 16.07.2012
Питер
Сообщений: 318


Прикрепите чертеж на котором не работает. И сразу обратите внимание, что в приложенном коде отсутствует одна скобка в конце.
__________________
Автоматизация должна быть автоматической.
ProPeller вне форума  
 
Непрочитано 01.02.2016, 08:53
#3
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


granit201z, Извини, конечно. Но твой пост выше ниочем. Похоже на
Цитата:
У меня машина периодически не заводится и не едет. Пару раз в неделю она ездит, но в некоторые дни становится колом и не едет. Причем аккумулятор заряжен и бензин в баке есть. Но машина не едет. Не понимаю почему?
Если хочешь помощи, то выкладывай пример dwg с примитивом, в котором что-то не меняется. А то выяснится, что примитив вовсе не автокадовский, а сторонний (например СПДС графикс) и т.п.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 01.02.2016, 09:47
#4
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


1 entmod лучше использовать вместе с entupd
2 некоторые точечные пары таким образом не удаляются
3 на "послою" нужно ставить что-то вроде (62 . 255*)

*256,-1 ... (точно не помню)
kakt00z вне форума  
 
Автор темы   Непрочитано 01.02.2016, 22:09
#5
granit201z

Проектировщик
 
Регистрация: 17.08.2014
Камышин
Сообщений: 118


Цитата:
Прикрепите чертеж на котором не работает
Прикрепил до и после прогона через программу соответственно.
Вложения
Тип файла: dwg
DWG 2007
do progona.dwg (211.3 Кб, 166 просмотров)
Тип файла: dwg
DWG 2013
posle progona.dwg (111.1 Кб, 166 просмотров)
granit201z вне форума  
 
Непрочитано 01.02.2016, 23:47
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,991
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Ответ частично дан в #4. Нужно разбираться с dxf кодами.
В частности вес линий "послою" - не отсутствие dxf группы 370, а замена ее значения на -1
Код:
[Выделить все]
(setq e (car(entsel)))
(setq ed (entget e))
(setq ed (subst (cons 370 -1) (assoc 370 ed) ed))
(entmod ed)
По поводу цвета - "послою" - это значение 256
Код:
[Выделить все]
(setq e (car(entsel)))
(setq ed (entget e))
(setq ed (subst (cons 62 256) (assoc 62 ed) ed))
(entmod ed)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 02.02.2016, 00:09
#7
granit201z

Проектировщик
 
Регистрация: 17.08.2014
Камышин
Сообщений: 118


Цитата:
Ответ частично дан в #4. Нужно разбираться с dxf кодами.
спасибо. разобрался. для типа линии по слою будет (cons 6 "BYLAYER")
granit201z вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Функция vl-remove не удаляет элемент из списка. Не понимаю почему.

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При повторном запуске кода, функция SSGET возвращает nil. Почему? vladimirr_b Программирование 3 25.11.2015 03:41
Расчет пространственных стержневых систем и наличие шарниров в расчетных схемах Jenec Лира / Лира-САПР 17 27.09.2013 22:23
структурированный список Holon Программирование 22 11.09.2007 14:09
Помощь по Лире Серега М Лира / Лира-САПР 52 28.05.2007 02:47