Newsgroup: it.comp.software.cad
Titolo: Per esperti in Lisp

Il comando "entnext" non funziona sulle "LWPOLYLINE", di conseguenza come
faccio ad andare ad analizzare i singoli vertici di una polilinea ????
Ciao e grazie a tutti

 Ciao e grazie a tutti.
Provero' a spiegarti come stanno le cose...
Disegnata una semplice "_pline" come potrebbe essere la seguente:
(command "_pline"  '(0 0)  '(1 0)  '(1 1)  '(0 1)  "c")
Puoi ottenerne la sua "lista" in vari modi.
In "automatico" se e' stata disegnata subito prima del "command":
(setq ŁLWPOL (entget (entlast)))
Selezionandola se non hai potuto "estrarla" calda calda dopo la sua creazione:
(setq ŁLWPOL (entget (car (entsel "selez. pline"))))
Se conosci le "liste" ed i relativi codici dxf dovresti essere da solo in grado di trovarti i tuoi punti... altrimenti
prosegui la lettura e scoprirai che non dovevi cercare poi tanto lontano.
---
Eccoti una possibile "lista" per la pline precedentemente disegnata, ovvero il "valore" di "ŁLWPOL" :
  '((-1 . <Entity name: 19abd60>)     (0 . "LWPOLYLINE")
    (330 . <Entity name: 19abcf8>)    (5 . "2C")
    (100 . "AcDbEntity")    (67 . 0)    (410 . "Model")    (8 . "0")
    (100 . "AcDbPolyline")
    (90 . 4)
    (70 . 1)
    (43 . 0.0)
    (38 . 0.0)
    (39 . 0.0)
    (10 0.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0)
    (10 1.0 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0)
    (10 1.0 1.0) (40 . 0.0) (41 . 0.0) (42 . 0.0)
    (10 0.0 1.0) (40 . 0.0) (41 . 0.0) (42 . 0.0)
    (210 0.0 0.0 1.0))
Et voila' eccoti associate al ["codice" 10] le coordinate (x,y) dei tuoi 4 punti (vedi ["codice 90"]) , vuoi la z ? (e'
unica per tutti i punti come puoi immaginare) ed e' associata al ["codice" 38].
Se sai usare "entnext", dovresti tranquillamente saper "pescare" cio' che ti serve dalla "lista" della tua pline (in
questo caso chiusa ["codice 70"]) ora che sai cosa predere.
Per ulteriori chiarimenti sui codici devi guardare i "Group code Description".
Se della tua pline ti interessano solo i vertici eccoti servito:
-------
(defun ŁPT_to_pline (Łpl / z PT ŁPT)          ; nel nostro caso si passa "ŁLWPOL"
(setq z    (cdr (assoc 38 Łpl)))                       ; la z di tutti i punti
(repeat    (cdr (assoc 90 Łpl))                              ; ripete per il numero di punti
 (setq PT  (append (cdr (assoc 10 Łpl ))(list z)))  ; il primo punto disponibile
 (setq Łpl (cdr (member (assoc 10 Łpl ) Łpl)))     ;"butta" la parte inutile
 (setq ŁPT (append ŁPT (list PT)))))          ; mette "da parte" il punto e riparte o esce
-------
Per il momento questo e' quanto posso scriverti, in base alle tue richieste, contento?
Ciao Giovanni Anzani

Grazie mille Giovanni
Sei stato molto esauriente,
purtroppo da quanto mi scrivi deduco che il comando entenext non posso più
usarlo, o sbaglio????
quando programmavo in lisp la versione di  Autocad era la 12, dove il
famigerato ENTnext spadroneggiava.
questo vuol dire che devo rimettere le mani in tutti i miei programmi per
adeguarmi a quanto mi hai indicato.
Spero proprio di no !!??
Onde evitare didisturbarti ancora mi sai dire dove trovare un manuale in
lisp aggiornato ??
Grazie ancora

Ciao Daniele,
Rispondero' brevemente alle tue domande:
------------------------------------------
[...] purtroppo da quanto mi scrivi deduco che il comando entnext non posso piů usarlo, o sbaglio???? [...]
----
Si e no, e' vero (come scrivesti) che <<"il comando "entnext" non funziona sulle "LWPOLYLINE" >>, ma questo non vuol
dire che non serva per altre entita', torno a consigliarti di leggerti i "Group code Description" per chiarirti le idee
a tal proposito.
In linea generale per conoscere un po' meglio un determinato tipo di oggetto usa:
(setq Łogg (entget (car (entsel "\nseleziona oggetto"))))
Comunque, in breve eccoti un po' di pappa scodellata:
le  polilinee 2d  -  comando  "_pline"   -  codice distintivo  (0 . "LWPOLYLINE")
le  spline           -  comando  "_spline" -  codice distintivo  (0 . "SPLINE")
le  linee             -  comando "_line"      - codice distintivo  (0 . "LINE")
contengono al loro interno le coordinate dei vertici, mentre:
le polilinee 3d  - comando  "_3dpoly" - codice distintivo   (0 . "POLYLINE")
hanno le coord. dei veritici "esterne" alla loro lista e "nascoste" nelle "entnext".
N.B.
Se usi il comando pedit (opzione Fit o Spline) su di una "LWPOLYLINE"  essa diventa una "POLYLINE" e necessita di
"entnext" per reperirne le coord. dei vertici.
------------------------------------------
[...] questo vuol dire che devo rimettere le mani in tutti i miei programmi per adeguarmi a quanto mi hai indicato.
[...]
----
Dipende da quanto scrittoti sopra e dai tuoi programmi che non conosco, avendo qualcosa davanti forse potrei dirti di
piu'.
------------------------------------------
[...] Onde evitare didisturbarti ancora mi sai dire dove trovare un manuale in lisp aggiornato ?
Grazie ancora. [...]
----
Allora avevo pensato bene ... sei un po' sfaticatello, ti perdono che non avevi la voglia di studiarti i "Group code
Description" della "LWPOLYLINE" per trovarvi ai "codici" 10 e 38 le coord. dei punti, ma se tu leggessi qualche vecchio
mesaggio (vedi la serie "Programmazione in Autolisp") sempre su i.c.s.c. non mi faresti certe domande...
Vabbe', dato che sono mesaggi un po vecchiotti che magari non hai ti riporto quanto scrissi:
-----
Il manuale che ho usato di piů  č:
AutoCAD Release 13 - manuale di personalizzazione, Autodesk, 1995.
il suo punto di forza č la completezza e la presenza del manuale del "Dialog Language Control (DCL)" per creare finestre
di dialogo e che raramente trovi negli altri manuali. Dovresti avercelo, lo danno con il programma ...
Ho letto sulle News che il cuggino di un tale, che aveva sul comp. l'AC2K, un giorno, cercando  con "cerca file: *.pdf"
la guida del CD-ROM ha trovato in una sottocartella del suddetto programma tre files (in inglese) molto interessanti.
Questo ho letto.
------------------------------------------
Con questo per il momento ti saluto ciao Giovanni