• このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

ポリラインが時計回りか反時計回り設計されているかどうかを判断するためにlisp

  • Thread starter Thread starter wind_skin
  • Start date Start date

wind_skin

Guest
salve, chiedo a voi esperti se esiste un lisp (con estensione .lsp) che sia in grado di determinare se una polilinea chiusa è stata disegnata in senso orario o antiorario.
ringrazio anticipatamente.
 
questo è un programma che creai tempo fa appunto per verificare se la polilinea è in senso orario o antiorario. tieni presente che se la polilinea è creata con il comando _bpoly è sempre in senso antiorario. se ti interessa ho anche il programma per invertire il senso della polilinea (creato per utilizzarlo sulle versioni di autocad che non avevano l'opzione inverti del comando editpl).
 

Attachments

curiosando qua e là nei dintorni di autocad mi sono imbattuto nella libreria doslib.arx, caricabile gratuitamente e facilmente in autocad, che contiene una miniera di funzioni avanzate, ben documentate.
fra queste la funzione dos_plinewinding che risolve il tuo problema.

(dos_plinewinding entity)
the entity name of a closed polyline.

returns
> 0 if the polyline winds to the left.
< 0 if the polyline winds to the right.
0 if unable to determine the winding.
nil on error.

example
command: (dos_plinewinding (car (entsel "\nselect a closed polyline:")))
-1
 
lo scopo era quello di risolvere il tutto senza l'installazione di librerie supplementari. mi è accaduto anche un'altra volta di proporre le doslib per risolvere un altro problema. l'interlocutore ha rifiutato categoricamente...
 
lo scopo era quello di risolvere il tutto senza l'installazione di librerie supplementari. mi è accaduto anche un'altra volta di proporre le doslib per risolvere un altro problema. l'interlocutore ha rifiutato categoricamente...

e quale dovrebbe essere il problema? sono free, non sono pesanti...
e allora gli express tools non sono anche loro una libreria esterna?
 
spesso i miei programmi devo crearli senza l'ausilio di librerie esterne. devo purtroppo prendere in considerazione anche l'eventualità che qualcuno non abbia installato gli express tools, anche se molto a malincuore.
devo dire però che in questa sede il discorso è un po' diverso.
 
ringrazio entrambi per l'aiuto e per l'interessamento; proverò e vi aggiornerò. in effetti a me serve una funzione da inserire all'interno di un programmino che ho intenzione di scrivere e che mi servirà per produrre un gcode per il percorso utensile di una cnc direttamente da autocad. sò bene che esistono software specifici per tale scopo, ma vorrei provarci ugualmente.
ancora grazie: siete gentilissimi.
 
questo è un programma che creai tempo fa appunto per verificare se la polilinea è in senso orario o antiorario. tieni presente che se la polilinea è creata con il comando _bpoly è sempre in senso antiorario. se ti interessa ho anche il programma per invertire il senso della polilinea (creato per utilizzarlo sulle versioni di autocad che non avevano l'opzione inverti del comando editpl).
confutatis, ho appena provato a caricare il lisp che hai gentilmente allegato, ma mi da il seguente errore in fase di caricamento "; errore: elenco errato nell'input".
ho provato sia con il 2008 che con il 2011. più precisamente, la videata è la seguente:
"comando: _appload plor.lsp caricato."
"comando: ; errore: elenco errato nell'input"
 
una volta tanto che mi ricordo il (vl-load-com), mi dimentico le parentesi, bah...
grazie confutatis, il tuo programma funziona egregiamente con tutte le tipologie di polilinea che ho avuto modo di provare, ad eccezione di quelle chiuse composte solo da un arco di cerchio ed un segmento (non sò perchè).
ancora grazie, sei stato gentilissimo e prezioso.
 
con soli due vertici come si fa a capire il senso orario o antiorario? credevo che il minimo fosse tre...
 
con soli due vertici come si fa a capire il senso orario o antiorario? credevo che il minimo fosse tre...
concordo con te: occorrono almeno tre vertici. il terzo vertice (quello mancante) potrebbe essere il punto medio dell'arco di cerchio.
 
il terzo vertice (quello mancante) potrebbe essere il punto medio dell'arco di cerchio.

mi è venuta l'ispirazione e ho creato questo: in tutte le polilinee aventi due vertici e uno dei due lati è un arco di cerchio, sullo stesso viene inserito un terzo vertice sul punto medio.
tutto questo sfruttando le potenti funzioni vlisp di gestione entità.
 

Attachments

mi è venuta l'ispirazione e ho creato questo: in tutte le polilinee aventi due vertici e uno dei due lati è un arco di cerchio, sullo stesso viene inserito un terzo vertice sul punto medio.
tutto questo sfruttando le potenti funzioni vlisp di gestione entità.
ciao confutatis, ho provato il programma che hai scritto, ma non ho ottenuto il risultato sperato (non so dove sbaglio). ti allego un file contenente un esempio di polilinea chiusa composta da un arco di cerchio ed un segmento: se hai tempo (non vorrei approfittare troppo della tua gentilezza), dai un'occhiata.
grazie.
 

Attachments

no, non hai sbagliato, sono io che non ho considerato altre possibilità. nel caso specifico i vertici originali non erano due ma tre, l'ultimo era coincidente con il primo, ma, ai fini della programmazione, una polilinea chiusa con n vertici è diversa da una polilinea aperta con n+1 vertici, di cui il primo e l'ultimo coincidenti, anche se a video sono uguali identiche.
 

Attachments

confutatis, ho provato il tuo programma e funziona. in sintesi, credo di aver capito che, qualora si abbia a che fare con una polilinea chiusa composta da un arco di cerchio ed un segmento, occorre prima avviare "aumver" e poi chidere l'orientamento mediante "plor". correggimi se sbaglio. ora proverò ad unire i due programmi in uno solo: spero di riuscirci.
grazie per la tua disponibilità e gentilezza.
 
si, in effetti ho lasciato i due programmi separati, dal momento che aumver potrebbe servirmi solo ogni tanto. comunque, se ti vuoi divertire ad unirli, fai pure! :smile:
 
il senso orario/orario ha senso solamente sulle polilinee chiuse. che senso potresti dare ad una polilinea aperta? per queste basta il comando inverti. al limite posso togliere dalla selezione tutte le polilinee aperte...
 

Forum statistics

Threads
46,674
Messages
380,976
Members
2
Latest member
loop80
このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

Members online

No members online now.
Back
Top