Vous êtes sur la page 1sur 16

AutoLISP - VI

Conjuntos de selecção

João Manuel R. S. Tavares


Joaquim Oliveira Fonseca
Conjuntos de selecção

 Cada vez que um item (ou grupo de itens) é manuseado


no AutoCAD, um conjunto de selecção está activo.
 Conjuntos de selecção são listas especiais que contêm
os nomes das entidades dos itens seleccionados.
 No AutoLisp um conjunto de selecção é definido como
um tipo de dado, tal como um real, um integer ...
 O AutoLisp permite criar por aplicação até 128 conjuntos
de selecção.

2 2009@JST/JOF CFAC: AutoLISP (VI) - Conjuntos de selecção


Como criar um conjunto de selecção

 As funções ssadd e ssget criam conjuntos de


selecção dentro de programas em AutoLisp.
 Exemplos com a função ssadd:
(setq ss1 (ssadd))
;cria um conjunto de selecção vazio
(ssadd (entlast) ss1)
; inclui o nome da última entidade desenhada no
; conjunto de selecção ss1
(setq ss2 ss1)

3 2009@JST/JOF CFAC: AutoLISP (VI) - Conjuntos de selecção


Garbage collection (remoção de lixo)

 Mais de uma variável pode estar associada ao mesmo


conjunto de selecção. Veja-se o exemplo anterior: ss1 e
ss2 apontam para o mesmo conjunto.
 Se estas duas variáveis forem ajustadas para nil e forem
as únicas a apontarem para um mesmo conjunto de
selecção, então é necessário libertar o espaço de
memória que o conjunto está a ocupar.
 Essa actividade é denominada garbage collection e é
executada pela função gc.

4 2009@JST/JOF CFAC: AutoLISP (VI) - Conjuntos de selecção


Garbage collection (remoção de lixo)

 Exemplo:
(setq ss1 nil ss2 nil)
(gc)
; (gc) liberta o espaço de memória de qualquer
; conjunto de selecção não associado a variáveis.

5 2009@JST/JOF CFAC: AutoLISP (VI) - Conjuntos de selecção


Função ssadd

 Cria um conjunto de selecção vazio ou acrescenta


entidades a um conjunto existente.
 Sintaxe:
(ssadd [nome-de-entidade [conjunto-selecção]])
– sem opções, cria um conjunto de selecção vazio;
– apenas com a opção nome-de-entidade, cria um conjunto
de selecção composto pela entidade especificada;
– com as opções nome-de-entidade e conjunto-selecção,
acrescenta a entidade a um conjunto de selecção existente.
 Exemplo:
(setq ss1 (ssadd))
;retorna <Selection set: XX> - conjunto vazio

6 2009@JST/JOF CFAC: AutoLISP (VI) - Conjuntos de selecção


Função ssget

 Cria um conjunto de selecção a partir de uma


selecção de objectos.
 Sintaxe:
(ssget [mode] [pt1] [pt2] [pt-list] [filter-list])
– onde mode:
"P" (previous), "L" (last), "W"(window), "C" (crossing),
"X" (all), "WP" (window poligon), "CP" (crossing poligon),
"F" (fence)

7 2009@JST/JOF CFAC: AutoLISP (VI) - Conjuntos de selecção


Função ssget

 Exemplos:
(ssget "X")
; cria um conjunto de selecção com todas as entidades
; do desenho
(ssget "W" pt1 pt2)
; cria um conjunto de selecção com os objectos contidos
; na janela definida por pt1 e pt2
(ssget '((0 . "LINE")))
; cria conjunto de selecção com linhas (LINE) seleccionadas
; individualmente (filtro)
8 2009@JST/JOF CFAC: AutoLISP (VI) - Conjuntos de selecção
Exemplos de funções com ssget

;;; conjunto de selecção das entidades dentro de uma janela


(defun c:selecciona-janela(/ p1 p2)
(setq p1 (getpoint "\nPrimeiro vértice:"))
(setq p2 (getcorner p1 "\nSegundo vértice :"))
(setq ss1 (ssget "W" p1 p2))
)

;;;conjunto de selecção com todas as linhas do desenho


(defun c:ssline()
(setq lineobjs (ssget "X" '((0 . "LINE"))))
)

9 2009@JST/JOF CFAC: AutoLISP (VI) - Conjuntos de selecção


Utilizar conjuntos selecção

;;; apagar todos os objectos existentes no desenho


(defun c:eall(/ ssall)
(setq ssall (ssget "X"))
(command "erase" ssall "")
(command "redraw")
(setq ssall nil)
(gc)
(princ)
)

10 2009@JST/JOF CFAC: AutoLISP (VI) - Conjuntos de selecção


Funções sslenght e ssname

 A função sslength retorna o número de


entidades que compõem um dado conjunto de
selecção.
– Sintaxe: (sslength conjunto-selecção)
 A função ssname retorna o nome da entidade
na posição x de um dado conjunto de selecção.
– O primeiro elemento num conjunto de selecção
está na posição 0 (zero).
– Sintaxe: (ssname conjunto-selecção posição)

11 2009@JST/JOF CFAC: AutoLISP (VI) - Conjuntos de selecção


Exemplo de função com sslength e
ssname

(defun c:sslist()
(Utilizador selecciona os
(setq grupo (ssget))
objectos pretendidos.)
(print grupo)
(setq num (sslength grupo))
(print num)
(setq cont 0)
(repeat num
(setq nome (ssname grupo cont))
(print cont) (Escrita da ordem e do
(princ nome) nome de cada objecto
(setq cont (+ 1 cont))
que constitui o conjunto.)
)
(princ)
)

12 2009@JST/JOF CFAC: AutoLISP (VI) - Conjuntos de selecção


Mais um exemplo - função que selecciona
a maior linha presente num desenho

(defun c:maior (/ gru num cont maior inicio fim dista mai-ent)
(setq gru (ssget "X" '((0 . "LINE"))))
(setq num (sslength gru))
(setq cont 0)
(setq maior 0)
(repeat num
(setq inicio (cdr (assoc 10 (entget (ssname gru cont)))))
(setq fim (cdr (assoc 11 (entget (ssname gru cont)))))
(setq dista (distance inicio fim)) (Comprimento da recta
(if (>= dista maior) com posição cont.)

13 2009@JST/JOF CFAC: AutoLISP (VI) - Conjuntos de selecção


Mais um exemplo - função que selecciona
a maior linha presente no desenho

(progn
(setq maior dista)
(setq mai-ent (ssname gru cont))
)
) ; fecha o if
(setq cont (+ 1 cont))
) ; fecha o repeat
(alert "Clique OK para destacar\n a maior linha...")
(redraw mai-ent 3) ; 3 destaca a entidade mai-ent
(gc)
)

14 2009@JST/JOF CFAC: AutoLISP (VI) - Conjuntos de selecção


Função ssmemb

 A função ssmemb verifica se uma determinada entidade


pertence a um dado conjunto de selecção.
 Se a entidade pertence ao conjunto, o seu nome é retornado,
senão a função retorna nil.
 Sintaxe:
(ssmemb nome-da-entidade conjunto-selecção)
 Exemplo: (verifica se uma entidade a definir pertence a um conj. a seleccionar)
(setq ss1 (ssget))
(ssmemb (car (entsel)) ss1)

15 2009@JST/JOF CFAC: AutoLISP (VI) - Conjuntos de selecção


Função ssdel

 A função ssdel remove uma entidade de um dado


conjunto de selecção.
– OBS: a entidade não é apagada do desenho.
 Sintaxe:
(ssdel nome-da-entidade conjunto-selecção)
 Exemplo: (remove uma entidade a definir de um conj. a seleccionar)
(setq ss1 (ssget))
(ssdel (car (entsel)) ss1)

16 2009@JST/JOF CFAC: AutoLISP (VI) - Conjuntos de selecção

Vous aimerez peut-être aussi