TuttoCAD Forum

TuttoCAD Forum
[ Home | Registrati | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Album Fotografico | Download | | Cerca | FAQ ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 1 - TuttoCAD Software
 AutoLISP
 Dividere in parti uguali un area

Nota: Devi essere registrato per poter inserire un messaggio.
Per registrarti, clicca qui. La Registrazione è semplice e gratuita!

Larghezza finestra:
Nome Utente:
Password:
Modo:
Formato: GrassettoCorsivoSottolineatoBarrato Aggiungi Spoiler Allinea a  SinistraCentraAllinea a Destra Riga Orizzontale Inserisci linkInserisci EmailInserisci FlashInserisci Immagine Inserisci CodiceInserisci CitazioneInserisci Lista
   
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è OFF
* Il Codice Forum è ON

Faccine
Felice [:)] Davvero Felice [:D] Caldo [8D] Imbarazzato [:I]
Goloso [:P] Diavoletto [):] Occhiolino [;)] Clown [:o)]
Occhio Nero [B)] Palla Otto [8] Infelice [:(] Compiaciuto [8)]
Scioccato [:0] Arrabbiato [:(!] Morto [xx(] Assonnato [|)]
Bacio [:X] Approvazione [^] Disapprovazione [V] Domanda [?]
Seleziona altre faccine

    
 
   

V I S U A L I Z Z A    D I S C U S S I O N E
liber Inserito il - 02 febbraio 2010 : 11:49:57
è da sistemare, funziona, bisogna sostituire le ??? in rosso, e qualcos'altro, per poter essere davvero utile


-------------------------------------------------------
;;by snoopychen ,Guangzhou
;;???????????????????????


;;main program
(defun c:test ()
(setvar "osmode" 0)
(command "_undo" "_BE")
(setq pa (getpoint "????"))
(setq dis (getdist "????????????"))
; (setq lstarea nil)
(setq areaall (mj pa))
(setq n 16 te nil)
(setq lstres (rep 0.0 360.000000000))
(while (= te nil)
(setq ang_s (caddr lstres))
(setq ang_all (cadddr lstres))
(setq lstres (rep ang_s ang_all))
(if (< (cadr lstres) 0.01)
(progn
(setq te 1)
(command "_xline" "a" (caddr lstres) pa "")
)
)
)
(command "_undo" "_E")
)

;;??16???n???????????????????????
(defun rep (ang-s ang-all / i ang-i ssxl pa90)
(setq lstarea nil i 0)
(repeat n
(setq ang-i (+ (- ang-s (/ ang-all 2)) (* (/ ang-all n) i)))

(command "_xline" "a" ang-i pa "")
(setq ssxl (ssget "_l"))
(setq pa90 (polar pa (+ (DTR ang-i) (* pi 0.5)) (/ dis 3)))
(grdraw (list 0 0 0) pa90 1)
(setq mj1 (mj pa90))
(setq lstarea (append
lstarea
(list mj1)
)
)
(command "_erase" ssxl "")
(grdraw (list 0 0 0) pa90 0)
(setq i (1+ i))
)
(setq lstarea1 (mapcar
'(lambda (x)
(abs (- (/ areaall 2) x))
)
lstarea
)
)
(setq index (min-index-list lstarea1))
(setq indexarea (nth index lstarea1))
(setq indexangle (+ (- ang-s (/ ang-all 2)) (* (/ ang-all n) index)))
(setq allangle (* (/ ang-all n) 2))
(list index indexarea indexangle allangle)
)

;;?????
(defun mj (_point / a)
(command "_bpoly" _point "" "_y")
(command "_region" "_l" "")
(command "area" "o" "_l")
(command "_erase" "_l" "")
(prompt "\n the area is ")
(setq a (getvar "area"))
a
)

;;???????????
(defun min-index-list (lst / a b flag i)
(setq a (nth 0 lst)
i 0
flag 0
)
(while (< i (length lst))
(setq b (nth i lst))
(if (< b a)
(setq a b
flag i
)
)
(setq i (1+ i))
)
flag
)


;?????
(defun DTR (d)
(* pi (/ d 180.0))
)
--------------------------------------------
scegliere un punto interno
e poi primo punto e secondo punto



porobabilmente

(setq pa (getpoint "????"))

selezionare punto interno

(setq dis (getdist "????????????"))
inserire 2 punti interni
o simile
20   U L T I M E    R I S P O S T E    (in alto le più recenti)
liber Inserito il - 11 febbraio 2017 : 09:01:42
so che la discussione è vecchia, ma e' anche vecchio il topic su Cad freeware riguardante BABACAD che arri da in link con spiegazioni ma io supponevo il solito utilizzo di programmi free linee etc etc, infatti dopo i fallimenti vari con i lisp anche qui riportati, facevo come Roberto alla vecchia maniera, solo mi sono ritrovato a dividere aree un po' grandi e anche in porzioni di 7 ed oltre e dunque il vecchio metodo è lungo, i lisp non funzionano piu' e ho trovato questo video interessante su youtube
https://www.youtube.com/watch?v=-Rj-b-dICVo&t=50s
ho il contorno in autocad in polilinea lo salvo in un vecchio formato lo apro con BABACAD http://www.babacad.com/index.html
e con il comando areasplit divido il mio poligono.
lo consiglio molto a Roberto visto che ancora utilizza il vecchio metodo.
BABACAD salva in formato dxf
joseph Inserito il - 20 maggio 2010 : 17:30:28
Come mi ero ripromesso, anche se resterà una pura esercitazione accademica, ho cercato di risolvere in VisualLisp il problema della divisione di un'area di forma irregolare (ma senza accentuate concavità) in 2 parti di valore anche non uguale; questo dovrebbe raccogliere e sostituire tutti gli esempi postati precedentemenete.
Il file LSP si lancia con DVA.
Il contorno dell'area deve essere una polilinea chiusa.
All'interno ci sono diverse opzioni: spero di averle testate tutte.
E' un po lento (circa 20-30 sec) per fornire il risultato con un'approssimazione di circa 1*10e-5; qualche volta il disegno scompare momentaneamente: non preoccupatevi.
Alla fine fornisce, nella finestra di testo, i punti di intersezione della dividente con il perimetro.

Si accettano critiche, miglioramenti e/o modifiche e suggerimenti.
Mi piacerebbe conoscere quali sono i casi limite in cui il programma dà errore o va in stallo.
Più errori trovate, più approfondisco le mie conoscenze di base.
Grazie
Joseph

Scarica allegato:

divide-area.rar
3,32 KB

P.S. Primi bag (forse era meglio che aspettassi a proporla in rete)
- La dividente parallela a un Lato o a una XLine spesso va in errore; ho capito il problema, non mi resta altro che risolverlo.

joseph Inserito il - 12 marzo 2010 : 11:41:07
Riprendo il discorso della divisione di un'area in 2 parti uguali
Il file allegato accetta una dividente per 2 punti qualsiasi e sostituisce i precedenti "div-aree-lato" e "div-aree-direz", che ho cancellato dalla discussione, per non creare confusione.
Non ho provato tutte le possibilità, quindi può capitare che in qualche caso particolare non funzioni: ditemelo.
Parte con DVA.
Scarica allegato:

div-aree.rar
1,63 KB
Giuseppe Mauro Inserito il - 11 marzo 2010 : 09:39:15
Finalmente un elenco delle funzioni Vlisp.
Ecco anto' chi sono i master VERI
n/a Inserito il - 11 marzo 2010 : 08:20:57
...a meno che tu stesso, Joseph, non scriva 'sto benedetto manuale in italiano...

arri Inserito il - 11 marzo 2010 : 07:49:14
Citazione:
Messaggio inserito da joseph

Purtroppo tutto quello che ho usato finora è in lingua inglese;



avvisaci se vieni a conoscenza dell'uscita di manuali in italiano
n/a Inserito il - 11 marzo 2010 : 00:21:55
Encomiabile, caro Joseph, e' la tua sete inesauribile di sapere.

Ti dico una cosa che non ti ha mai detto nessuno: vorrei essere tuo nipote, per assorbire il tuo scibile.

arri Inserito il - 10 marzo 2010 : 19:35:43
grazie joseph
joseph Inserito il - 10 marzo 2010 : 14:55:24
Purtroppo tutto quello che ho usato finora è in lingua inglese; ma chi ha già dimestichezza con la programmazione di base in Autolisp non farà fatica ad approfondire VisualLisp; in fin dei conti basta ricordarsi un po di terminologia tecnica inglese.
Un'osservazione: quando si cerca VisualLisp, spesso i motori di ricerca indirizzano verso il VisualLisp Editor, che è l'ambiente di stesura, debug e formattazione del Codice Lisp, e non verso siti in cui si insegna a programmare e a utilizzare le nuove funzioni.
Peccato non usare questa estensione del codice, visto il numero elevato di funzioni introdotte, che semplificano notevolmente il codice.
Ti allego l'elenco di tutte le nuove funzioni.


Scarica allegato:

VLR-VLA-VLAX-tutte-le-funzioni.zip
10,83 KB
arri Inserito il - 10 marzo 2010 : 11:49:21
Citazione:
Messaggio inserito da joseph

Devo ancora sistemarle (formattazione e commenti) in modo che siano leggibili e interpretabili da chiunque; sono comunque solo idee cucite fra loro; chissà, forse a qualcuno, domani, potrebbero servire come punto di partenza per altro codice.
Nel frattempo ho studiato e scoperto nuove funzionalità di VisualLisp: questo problema mi ha incuriosito (ma poteva anche essere un altro); c'è solo la voglia di mettersi in gioco, ritagliando spazi fra impegni famigliari, sociali (ma non di lavoro, finalmente!!!).
Ma la storia non finisce qui...



segnala se trovi link italiani su visual lisp
joseph Inserito il - 08 marzo 2010 : 12:10:21
Non ho ancora inserito tutte le variabili locali sulla prima riga, anzi ce ne sono altre inutili, provenienti da altre procedure.
Sto testando la DVR usando anche come punti di partenza i punti medi dei lati; mi dà errore solo su una coppia di punti medi intermedi su una polilinea di 7 lati; controllerò passo-passo dove si blocca.
Potrebbe inglobare, una volta pulito e riordinato il codice, che risente di un montaggio affrettato fatto da un neofita, anche il caso precedente di dividente parallela a un lato; vedrò quale parte di codice funziona meglio.
Ho in mente altre 2 situazioni da studiare: rettifica di un confine, spostamento di un confine; però vorrei cambiare tipo di procedura, per sperimentare strade nuove, e anche per metterle a confronto con le precedenti, che mi sembrano, in alcuni punti, lente e talvolta contorte.
Ciao a tutti.
Giuseppe Mauro Inserito il - 08 marzo 2010 : 11:30:05
josh e' un grande, e ritengo queste procedure molto ma molto utili in senso generico

La DVR mi da problemi (da un errore su Area ed esce), ma passando le prime stringhe a mano (copia incolla su riga di comando), po si lancia la procedura e funziona (1 sola volta).
Presumo sia una variabile vuota che manda in crash la procedura, ma non sono stato in grado di trovarla ancora.
La cosa strana e' che dando le prime stringhe a mano poi va.

Cmq tanto di cappello josh
joseph Inserito il - 08 marzo 2010 : 11:00:59
Devo ancora sistemarle (formattazione e commenti) in modo che siano leggibili e interpretabili da chiunque; sono comunque solo idee cucite fra loro; chissà, forse a qualcuno, domani, potrebbero servire come punto di partenza per altro codice.
Nel frattempo ho studiato e scoperto nuove funzionalità di VisualLisp: questo problema mi ha incuriosito (ma poteva anche essere un altro); c'è solo la voglia di mettersi in gioco, ritagliando spazi fra impegni famigliari, sociali (ma non di lavoro, finalmente!!!).
Ma la storia non finisce qui...
arri Inserito il - 08 marzo 2010 : 09:35:35
joseph,
hai preso a cuore il problema
joseph Inserito il - 08 marzo 2010 : 00:23:54
Altro esercizio sulla falsariga dei precedenti.
Divide un'area in 2 parti uguali con una dividente passante per 2 punti qualsiasi. Parte con DVR.

Scarica allegato:
<file sostituito>
(vedi oltre)
joseph Inserito il - 04 marzo 2010 : 23:19:55
Come promesso, ho risolto un altro esercizio riguardante la divisione di un'area con una dividente parallela a un lato; parte con DVX

Scarica allegato:
<file sostituito>
(vedi oltre)
joseph Inserito il - 28 febbraio 2010 : 17:50:45
Questa versione riconosce anche le polilinee antiorarie, trasformandole in orarie; ho aggiunto 2 funzioni scritte da Evgeniy Elpanov,
Per ora NON SEMPRE funziona (a seconda del vertice di partenza) su poligoni concavi (che hanno cioè almeno un angolo > di 180 gradi) e questo dipende purtroppo dal tipo di funzione creata, o con tratti curvi, ma questo mi è ancora oscuro.
Ciao a tutti

Scarica allegato:

div-aree-reverse.zip
2,6 KB
Roberto07 Inserito il - 28 febbraio 2010 : 17:42:09
Citazione:
Messaggio inserito da antoniovinci

una parcella...


Stai sempre a pensà ai soldi!
n/a Inserito il - 28 febbraio 2010 : 17:23:15
Citazione:
Messaggio inserito da Roberto07
per tentativi

Roby, per tentativi e' capace anche il mio paggagallo Rico...

Lo scopo, lodevole benche' accademico, di Joseph e' trovare un automatismo, che consenta di dividere una parcella catastale di forma qualsiasi, con una secante passante per un punto prefissato.


Roberto07 Inserito il - 28 febbraio 2010 : 15:18:34
Io faccio come gli antichi... per tentativi. Non è una cosa impossibile però. Per trovare le due poligonali uguali, previo orientameto ortogonale del mirino dove applico "stira", con pochi tentativi risolvo tutto.

Immagine inserita:

71,87 KB

Comunque beati voi che conoscete così bene il lisp. Io l'ho seguito un po' per anni, poi mi sono cullato sugli allori.


TuttoCAD Forum © 2001-2010 CADLandia Torna all'inizio della Pagina
Pagina generata in 0,15 secondi.