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

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

Создание набора с условием.

Ответ
Поиск в этой теме
Непрочитано 29.05.2018, 11:33 #1
Создание набора с условием.
shartal
 
Регистрация: 12.08.2009
Сообщений: 447

Задача видимо проста, но не выходит. Требуется создать набор всех объектов модели, кроме внешних ссылок и блоков на слое 0. Один вариант перечислить все примитивы,. Второй- все кроме ссылок. Не работают оба.
(ssget "_X" ' ((-4 . "<OR") (0 . "*line") (0 . "circle") (-4 . "OR>") (-4. "<AND") (8 . "0") (-4. "AND>")))
(ssget "_X" '((-4 "<NOT") (0. "INSERT") (-4. "NOT>") (-4. "<AND") (8 . "0") (-4. "AND>")))
И еще один вопрос: как можно сбросить предыдущий набор? Есть скрипт в котором создается набор под определенную команду. После этого создается другой набор для другой команды. Если второй набор не собрался (не удовл. параметрам) команда обращается к предыдущему набору, собранному ранее. И это никуда не годиться.
Просмотров: 1981
 
Непрочитано 29.05.2018, 12:08
#2
skkkk


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


Насколько я помню, внешняя ссылка и блок для AutoLISP - суть одно и то же. Проверил, взял дамп блока и ссылки:
Код:
[Выделить все]
(0 . INSERT)
(330 . <Имя объекта: 7ffff98e9f0>)
(5 . 14260BE)
(100 . AcDbEntity)
(67 . 0)
(410 . Model)
(8 . 0)
(6 . Continuous)
(48 . 3.0)
(370 . -2)
(100 . AcDbBlockReference)
(2 . A$C69136017)
(10 1.70016e+007 -133485.0 0.0)
(41 . 1.0)
(42 . 1.0)
(43 . 1.0)
(50 . 0.0)
(70 . 0)
(71 . 0)
(44 . 0.0)
(45 . 0.0)
(210 0.0 0.0 1.0)

Код:
[Выделить все]
(0 . INSERT)
(330 . <Имя объекта: 7ffff98e9f0>)
(5 . 14260B4)
(100 . AcDbEntity)
(67 . 0)
(410 . Model)
(8 . 0)
(6 . Continuous)
(48 . 3.0)
(370 . -2)
(100 . AcDbBlockReference)
(2 . Чертеж1)
(10 0.0 0.0 0.0)
(41 . 1.0)
(42 . 1.0)
(43 . 1.0)
(50 . 0.0)
(70 . 0)
(71 . 0)
(44 . 0.0)
(45 . 0.0)
(210 0.0 0.0 1.0)


В VisualLISP есть такое свойство объекта как IsXref.
Я бы преобразовывал набор в список примитивов, затем вырезал бы из полученного списка НЕ внешние ссылки, скорее всего с помощью (vl-remove-if-not). Далее при желании можно преобразовать список обратно в набор.

А чтобы в программе не использовался не тот набор, надо проверять, создался ли он или нет, тем же if.
skkkk вне форума  
 
Непрочитано 29.05.2018, 12:13
#3
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Цитата:
Сообщение от shartal Посмотреть сообщение
но не выходит
логика неправильная. or-ы и not-ы д.б. внутри and-ов
koMon вне форума  
 
Непрочитано 29.05.2018, 12:47
1 | #4
Кулик Алексей aka kpblc
Moderator

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


По-моему, должно быть нечто типа
Код:
[Выделить все]
 (ssget "_X" '((8 . "0") (0 . "*LINE,CIRCLE")))
(ssget "_X" '((-4 . "<AND") (8 . "0") (-4 . "<NOT") (0 . "INSERT") (-4 . "NOT>") (-4 . "AND>")))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Создание набора с условием.

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание внешнего контура на основе выделенного набора примитивов Shaft Программирование 26 13.02.2017 16:55
Помогите найти ошибку с Lisp "автонумерацией листов" tujn08 LISP 14 12.05.2015 17:20
создание 2D чертежа из набора пространственных сечений (AutoCAD 2012) Vojtov AutoCAD 4 15.08.2012 13:00
Создание набора с помощью ssget из примитива *TEXT, содержащего любое количество цифр Nitrogenium Программирование 40 16.02.2011 09:40
создание набора с помощью activeX Composter Программирование 3 15.05.2009 00:11