Numero massimo elementi nella selezione

Gio_S

Utente attivo
professione: architetto
software: IntelliCAD, SketchUp, MeshLab, PovRay, AutoLisp, Ruby SkUp, RapidQ, XBLite, QB64-PE
regione: Milano
Some functions through, only accept 16-bit numbers ranging from +32767 to -32678.
Questo recita Autodesk, ne avevo il sospetto, e infatti nei doc lo dice, mentre cercavo di selezionare in lisp un grande numero di elementi, e andavo in errore (invece nativamente autoCAD lo fa tranquillamente, ma non in lisp).
Credo sia SSLENGTH che va in errore sugli interi superiori ma non è quello l'importante, io nel frattempo potrei già migliorare la selezione se potessi già "predisporre" l'utente a selezionare un determinato tipo di entità dalla finestra di selezione che lui imposterà.
Migliorerei le condizioni della lunghezza della selezione, ed essendo già filtrata, eviterei anche che come prima cosa il mio lisp dovesse perdere tempo a filtrare il tipo di elementi che non voglio processare.
Non vorrrei che l'utente, selezionando, debba armeggiare con gli ADD e REMOVE, vorrei che chiedendo la selezione, a prescindere dalla sua finestra, il lisp fosse GIA' predisposto col ssget a prendere il tipo di entità che poi userà.
Un (setq ss (ssget)) già "istruito".
Non so se sono stato chiaro, ma a me non viene in mente come impostare la sintassi...
grazie!
 

rpor66

Utente Standard
professione: Programmatore
software: Lisp, Vba per Autocad, BricsCad e GstarCAD, CadWorx
regione: Sicilia
(ssget (list (cons 0 "LINE"))) selezioni solo linee
(ssget (list (cons 0 "LINE") (cons 8 "MURI")) selezioni solo linee su layer MURI
(ssget (list (cons 0 "LINE,CIRCLE") (cons 8 "MURI")) selezioni solo linee e cerchi su layer MURI
cerca ssget parametri, trovi di tutto.
 

Gio_S

Utente attivo
professione: architetto
software: IntelliCAD, SketchUp, MeshLab, PovRay, AutoLisp, Ruby SkUp, RapidQ, XBLite, QB64-PE
regione: Milano
ok , grazie mille ora mi è chiaro, su loro esempi non capivo!
 

Gio_S

Utente attivo
professione: architetto
software: IntelliCAD, SketchUp, MeshLab, PovRay, AutoLisp, Ruby SkUp, RapidQ, XBLite, QB64-PE
regione: Milano
però sarò scemo ma non riesco ad applicarlo mettendo quell'argomento in ssget

(setq nuova-lista (ssget (list (cons 0 "3DFACE"))) )
; ok, mi seleziona correttamente e mi restituisce il numero "pulito" di ciò che mi serve

;però poi non riesco ad operare sulla selezione

(princ (length nuova-lista))
; debug perché poi la lunghezza mi dà bad argument type del (length nuova-lista)

(while (> (length nuova-lista) 0) ; none non ho la lunghezza
 

Gio_S

Utente attivo
professione: architetto
software: IntelliCAD, SketchUp, MeshLab, PovRay, AutoLisp, Ruby SkUp, RapidQ, XBLite, QB64-PE
regione: Milano
opssss dovevo fare sslength :)
ma comunque non va oltre perche poi
(nth 0 nuova-lista) mi dà errore ....

queste cose mi fanno impazzire, prima col vecchio codice la lista era ok
 
Ultima modifica:

Gio_S

Utente attivo
professione: architetto
software: IntelliCAD, SketchUp, MeshLab, PovRay, AutoLisp, Ruby SkUp, RapidQ, XBLite, QB64-PE
regione: Milano
scusa ma c'è proprio un problema ...
(setq nuova-lista nil)
(setq nuova-lista (ssget (list (cons 0 "3DFACE"))) )
; restituisce correttamente 3 mentre ho selezionato

ma poi, il debug
(princ (sslength nuova-lista))

mi dà 13
e mi va in errore col nth
 

Gio_S

Utente attivo
professione: architetto
software: IntelliCAD, SketchUp, MeshLab, PovRay, AutoLisp, Ruby SkUp, RapidQ, XBLite, QB64-PE
regione: Milano
mi sa che va a concatenare annidando via via le 3Dface o fa qualcosa di simile..
 

Gio_S

Utente attivo
professione: architetto
software: IntelliCAD, SketchUp, MeshLab, PovRay, AutoLisp, Ruby SkUp, RapidQ, XBLite, QB64-PE
regione: Milano
resettato disegno e lisp ...
con
(setq nuova-lista (ssget (list (cons 0 "3DFACE"))) )
ne seleziono 3 e ne trova 3
il numero di elementi della lista che ha costruito è ok agli effetti suoi e del princ lunghezza

però, già da
(princ (nth 0 nuova-lista))... mi dà errore tipo argomento, pare che una lista esista ma non ho idea di cosa sia fatta
 

Gio_S

Utente attivo
professione: architetto
software: IntelliCAD, SketchUp, MeshLab, PovRay, AutoLisp, Ruby SkUp, RapidQ, XBLite, QB64-PE
regione: Milano
niente da fare, ho provato anche il metodo descritto qui

(setq ss1 (ssget '((0 . "3DFACE"))))
ne seleziono alcune in finestra
(princ (sslength ss1)) ; risponde col numero corretto delle sole entità face ed evidenzia le selezionate
ma poi a
(setq h (nth 0 ss1)) ; errore bad argument type (nth 0 ss1)
 

rpor66

Utente Standard
professione: Programmatore
software: Lisp, Vba per Autocad, BricsCad e GstarCAD, CadWorx
regione: Sicilia
Codice:
(setq sel (ssget))

  (setq c 0)
  (repeat (sslength sel)
      (setq n (ssname sel c)) ; ottieni il nome dell'entità
      ... esegui il tuo codice     
      (setq c (1+ c))
  )
 

Gio_S

Utente attivo
professione: architetto
software: IntelliCAD, SketchUp, MeshLab, PovRay, AutoLisp, Ruby SkUp, RapidQ, XBLite, QB64-PE
regione: Milano
grazie!
avevo provato già una cosa simile, perché ne avevo avuto il sospetto, ieri sera, ma mi dava errore, ora però riscritta di nuovo funziona... si vede che l'avevo scritta male

(setq ss (ssget '((0 . "3DFACE"))))
(princ (sslength ss)) ; ok

(setq nuova-lista nil i 0)
(repeat (sslength ss)
(setq ent (ssname ss i))
(setq nuova-lista (cons ent nuova-lista))
(setq i (1+ i))
)
 

Gio_S

Utente attivo
professione: architetto
software: IntelliCAD, SketchUp, MeshLab, PovRay, AutoLisp, Ruby SkUp, RapidQ, XBLite, QB64-PE
regione: Milano
(setq N (fix (getreal "\nInserire un numero intero: ")))
Some functions through, only accept 16-bit numbers ranging from +32767 to -32678.
dice Autodesk, in certi casi non si può proprio, perché gli argomenti richiedono interi ...
 

GP.

Utente Senior
professione: Nientologo
software: uozapp
regione: Vercelli
Se con SSGET selezioni 100.000 oggetti, SSLENGTH restituisce un numero reale (numeri interi solo fino a 32.767) che puoi tranquillamente utilizzare con SSNAME.
Oltre ad AutoCAD ti posso dire che è così anche su ProgeCAD (basato su Intellicad), GstarCAD e BricsCAD.
Se così non fosse metà degli applicativi si potrebbero buttare...
 

Gio_S

Utente attivo
professione: architetto
software: IntelliCAD, SketchUp, MeshLab, PovRay, AutoLisp, Ruby SkUp, RapidQ, XBLite, QB64-PE
regione: Milano
sai che non capisco che vuoi dire? io ho notato che se uso selezionare col comando nativo, non ho limiti nel numero delle entità, ma se lo faccio in lisp, con ssget non posso superare i 32767 oggetti, perché poi non posso che utilizzare un semplice puntatore intero fino a quel limite. O non ho capito e c'è un metodo?
 

Gio_S

Utente attivo
professione: architetto
software: IntelliCAD, SketchUp, MeshLab, PovRay, AutoLisp, Ruby SkUp, RapidQ, XBLite, QB64-PE
regione: Milano
quando mi sarò riposato la testa da questi tool vado a fare un confronto coi vecchi lisp che risalgono a parecchi hanni fa fatti per generare file stl e pov da interi disegni, per capire, come dice autodesk
Some functions through, only accept 16-bit numbers ranging from +32767 to -32678.
quali sono le funzioni che sto usando ora mi stanno ponendo dei limiti.
Sempre processi di entità selezionate sono, quelli che faccio negli altri lisp, e quindi devo uniformarmi al sistema precedente. I miei oggetti da inviare all'STL sono mediamente da 60mila facce ...
ecco qua il primo errore
error: bad argument type
(REPEAT (SSLENGTH SS)
mi sa che è il repeat che vale solo per interi
perché questa cosa che ho sempre usata problemi non ne dà anche con selezioni oltre i 32mila
(setq max (sslength selez) contasel 0 contastl 0)
(while (> max contasel)
(setq en (ssname selez contasel) alist (entget en))
.......
(setq contasel (+ 1 contasel))
 
Ultima modifica:

rpor66

Utente Standard
professione: Programmatore
software: Lisp, Vba per Autocad, BricsCad e GstarCAD, CadWorx
regione: Sicilia
quando vuoi sapere i parametri delle istruzioni consulta questo link
repeat accetta solo interi
se vuoi fare un ciclo senza usare repeat, usa while
imposta la variabile contatore (setq contasel 0.0) numeri a doppia precisione
 

Gio_S

Utente attivo
professione: architetto
software: IntelliCAD, SketchUp, MeshLab, PovRay, AutoLisp, Ruby SkUp, RapidQ, XBLite, QB64-PE
regione: Milano
esatto, è quello a cui sono arrivato, ma anche con contasel impostato a zero funziona perfettamente, perché non mi pare che autocad distingua la semplice precisione dalla doppia, difatti per creare gli STL, che esigono i single nei binari, devo ricorrere al formato stl ascii, perché in singola non posso passarglieli
O integer o double ...
grazie per il link , autodesk è disastrosa anche nella dispersione dei documenti ... (di solito uso l'help 2024) è però non ti dicono mai da quando le funzioni sono introdotte ... e ho sempre anche dubbi di questo tipo su cose magari non supportate sul mio intellicad
 

Statistiche forum

Discussioni
59,303
Messaggi
506,452
Utenti registrati
111,551
Ultimo utente registrato
Paola Meli

Utenti online

Top