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

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

LISP : Как объединить два набора в один?

Ответ
Поиск в этой теме
Непрочитано 14.03.2013, 20:01 #1
LISP : Как объединить два набора в один?
WhiteShark
 
Регистрация: 30.03.2012
Сообщений: 101

Товарищи! Можно ли как то просто объединить 2 ранее созданных selection set'a в один? Ну кроме как перебора элементов одного и другого и занесения их в новый набор?

Последний раз редактировалось Кулик Алексей aka kpblc, 15.03.2013 в 10:21.
Просмотров: 3793
 
Непрочитано 14.03.2013, 20:24
#2
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


О наименовании топиков данной ветви форума. или Вы думаете тут телепаты?
Boxa вне форума  
 
Автор темы   Непрочитано 14.03.2013, 21:13
#3
WhiteShark


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


Виноват-с. Имелось ввиду как это сделать на LISP.
И вопрос вдогонку как получить active selection set без activex и, если это невозможно, как преобразовать vla-указатель на active selection set в обычный selection set?
WhiteShark вне форума  
 
Непрочитано 14.03.2013, 21:29
#4
Кулик Алексей aka kpblc
Moderator

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


1. Тему переименуй.
2. Переведи, как ты собираешься работать с vla-указателями без ActiveX.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.03.2013, 21:33
#5
WhiteShark


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


1. не могу найти как переименовать тему
2. как раз хочется заиметь active selection set без помощи activeX
WhiteShark вне форума  
 
Непрочитано 15.03.2013, 01:21
#6
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от WhiteShark Посмотреть сообщение
не могу найти как переименовать тему
Как переименовать тему?
Цитата:
Сообщение от WhiteShark Посмотреть сообщение
как раз хочется заиметь active selection set без помощи activeX
Соль без соли?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.03.2013, 02:56
#7
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Товарищи! Можно ли как то просто объединить 2 ранее созданных selection set'a в один? Ну кроме как перебора элементов одного и другого и занесения их в новый набор?
Я именно так и делал. Другого способа не нашел.
Цитата:
Сообщение от WhiteShark Посмотреть сообщение
2. как раз хочется заиметь active selection set без помощи activeX
Может, имеется в виду Implied selection set? Тогда (ssget "_I").

Последний раз редактировалось Do$, 15.03.2013 в 03:02.
Do$ вне форума  
 
Автор темы   Непрочитано 15.03.2013, 10:17
#8
WhiteShark


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


Кулик Алексей aka kpblc, не затруднит тебя переименовать тему как модератора? на моем IEx64 расширенный режим не работает к сожалению
Do$, кажется, то что надо ) Смысл в том, что моя функция получает в качестве аргумента то, что уже выбрано.
WhiteShark вне форума  
 
Непрочитано 12.01.2014, 06:04
#9
skkkk


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


Тот редкий случай, когда не нашел ответа на dwg.ru. Может, плохо искал... но однако, нашел на буржуйском форуме Autodesk Community http://forums.autodesk.com/t5/Visual...s/td-p/2338945 три варианта решения объединения двух наборов. Тестировал довольно бегло, второй вариант чуть подправил, дабы отвечал он заявленному описанию.
Код:
[Выделить все]
 ;;; Функция объединяет два набора.
;;; Аргументы s1 и s2 должны быть наборами и не nil. Проверок нет.
;;; Возвращает набор, объединяющий два входящих, 
;;; исключая повторяющиеся объекты.
;;; http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General/how-to-join-two-selection-sets/td-p/2338945
;;; Код в теме по ссылке выше, в посте №2. 
;;; Автор поста: chatsupa
(defun ssjoin (s1 s2)
    (command "_select" s1 s2 "")
    (ssget "_p")
)

Код:
[Выделить все]
 ;;; Функция объединяет два набора.
;;; Добавляет первый набор во второй.
;;; Аргументы - наборы sset1 и sset2 или nil.
;;; Если оба аргумента - наборы,
;;; возвращается второй набор,
;;; дополненный объектами первого набора,
;;; исключая повторяющиеся объекты.
;;; Если первый аргумент не набор или nil,
;;; возвращается второй набор.
;;; Если второй аргумент не набор или nil - 
;;; возращается nil.
;;; Если оба аргумента не наборы или nil,
;;; возвращается nil
;;; http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General/how-to-join-two-selection-sets/td-p/2338945
;;; Подправленный код из темы по ссылке выше, в посте №6. 
;;; Автор поста: wkiernan
;;; Изменения skkkk (изначально код не отвечал описанию)
(defun add_sset1_to_sset2 (sset1 sset2 / scount )
    (if (or (null sset1)(/= (type sset1)(quote pickset)))
        (if (and sset2 (= (type sset2)(quote pickset)))
            sset2
            nil
        )
        (if (or (null sset2)(/= (type sset2)(quote pickset)))
            nil
            (progn
                (setq scount (sslength sset))
                (while (> scount 0)
                    (ssadd (ssname sset1 (setq scount (1- scount))) sset2)
                )
            )
        )
    )
)

Код:
[Выделить все]
 ;;; Функция объединяет два набора.
;;; Добавляет оба набора в новый набор.
;;; Аргументы - наборы sset1 и sset2 или nil.
;;; Возвращает созданный набор, 
;;; объединяющий два входящих набора, 
;;; исключая повторяющиеся объекты.
;;; Если один из аргументов nil, то возвращается 
;;; новый набор, совпадающий со входящим.
;;; Если оба аргумента nil, то возвращается пустой набор.
;;; http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General/how-to-join-two-selection-sets/td-p/2338945
;;; Код в теме по ссылке выше, в посте №6. 
;;; Автор поста: wkiernan

(defun sset1_plus_sset2 (sset1 sset2 / sset3 )
    (setq sset3 (ssadd))
    (if (= (type sset1)(quote pickset))
        (setq scount (sslength sset1))
        (setq scount 0)
    )
    (while (> scount 0)
        (ssadd (ssname sset1 (setq scount (1- scount))) sset3)
    )
    (if (= (type sset2)(quote pickset))
    (setq scount (sslength sset2))
    (setq scount 0)
    )
    (while (> scount 0)
    (ssadd (ssname sset2 (setq scount (1- scount))) sset3)
    )
    sset3
)
skkkk вне форума  
 
Непрочитано 12.01.2014, 10:16
#10
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


лучше использовать cond и repeat а проверять достаточно sslength
gomer вне форума  
 
Непрочитано 12.01.2014, 21:06
#11
skkkk


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


Цитата:
Сообщение от gomer Посмотреть сообщение
лучше использовать cond и repeat а проверять достаточно sslength
Offtop: Хотелось не слишком уж сильно запускать руки в чужие творения
skkkk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP : Как объединить два набора в один?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как объединить несколько файлов dwg в один? pavelkuban AutoCAD 19 11.03.2021 12:03
Как объединить различные элементы сооружения в один? serdobsk SCAD 8 11.10.2011 11:06
есть много DWG надо сделать один DWG Muirtaig AutoCAD 8 21.07.2011 15:42
Можно ли два сплайна объединить в один? Дмитррр AutoCAD 1 02.03.2008 12:42
2 Layout на один лист v_alex AutoCAD 10 18.02.2008 16:49