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
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Pagina Successiva
Autore Discussione Precedente Discussione Discussione Successiva
Pagina: di 2

liber
Utente Master



1278 Messaggi

Inserito il - 02 febbraio 2010 : 11:49:57  Mostra Profilo Invia a liber un Messaggio Privato  Rispondi Quotando
è 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

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 02 febbraio 2010 : 11:55:55  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
Citazione:
Messaggio inserito da liber

porobabilmente

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

selezionare punto interno

(setq dis (getdist "????????????"))
inserire 2 punti interni
o simile



giusto
Torna all'inizio della Pagina

liber
Utente Master



1278 Messaggi

Inserito il - 02 febbraio 2010 : 13:01:06  Mostra Profilo Invia a liber un Messaggio Privato  Rispondi Quotando
modificato il listato comando divarea
ultimo problema è un messaggio di errore

Creazione eseguita di 1 regione.

the area is Comando sconosciuto "Y". Premere F1 per la Guida.



Scarica allegato:

divarea.zip
1,26 KB
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 02 febbraio 2010 : 13:07:08  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
Citazione:
Messaggio inserito da liber

modificato il listato comando divarea
ultimo problema è un messaggio di errore



questo lisp a cosa potrebbe servire ?
Torna all'inizio della Pagina

liber
Utente Master



1278 Messaggi

Inserito il - 02 febbraio 2010 : 13:13:59  Mostra Profilo Invia a liber un Messaggio Privato  Rispondi Quotando
a dividere in 2 un superfice e le aree risultanti sono uguali
Torna all'inizio della Pagina

n/a
deleted

Prov.: Estero
Città: Sieradz (PL)


5926 Messaggi

Inserito il - 02 febbraio 2010 : 13:25:51  Mostra Profilo  Rispondi Quotando
Citazione:
Messaggio inserito da liber

a dividere in 2 un superfice e le aree risultanti sono uguali


Detto in siciliano: non serve a una minq...

Torna all'inizio della Pagina

MEM
Utente Master


Regione: Puglia
Prov.: Lecce
Città: Galatone


2235 Messaggi

Inserito il - 02 febbraio 2010 : 13:30:00  Mostra Profilo Invia a MEM un Messaggio Privato  Rispondi Quotando
Ottimo per divisioni patrimoniali.
Torna all'inizio della Pagina

liber
Utente Master



1278 Messaggi

Inserito il - 02 febbraio 2010 : 13:31:20  Mostra Profilo Invia a liber un Messaggio Privato  Rispondi Quotando
si scrive minc... con la C e non la Q per dare più corpo si pronuncia quasi come la K

prova a dividere un area in 2 parti uguali e dimmi quale procedimento usi.

ho scritto appunto da sistemare, perchè sarebbe comodo avere un punto di ancoraggio e una direzione certa o presunta, allora si che diventa utile per suddividere aree.
Infatti Mem ha già compreso un utilizzo utile

Modificato da - liber in data 02 febbraio 2010 13:34:59
Torna all'inizio della Pagina

n/a
deleted

Prov.: Estero
Città: Sieradz (PL)


5926 Messaggi

Inserito il - 02 febbraio 2010 : 13:38:00  Mostra Profilo  Rispondi Quotando
Citazione:
Messaggio inserito da liber
si scrive minc... con la C e non la Q


"Minc" non e' politically correct, per questo va scritto MINQ o MINK (niente volgarita' in Cadlandia).

Per quanto riguarda le divisioni di parcelle catastali fra eredi, in effetti ha ragione Mem, chiedo venia.

Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 02 febbraio 2010 : 13:40:16  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
Citazione:
Messaggio inserito da liber
perchè sarebbe comodo avere un punto di ancoraggio e una direzione certa o presunta, allora si che diventa utile per suddividere aree.
Infatti Mem ha già compreso un utilizzo utile



così ha senso
Torna all'inizio della Pagina

liber
Utente Master



1278 Messaggi

Inserito il - 02 febbraio 2010 : 13:48:20  Mostra Profilo Invia a liber un Messaggio Privato  Rispondi Quotando
Citazione:
Messaggio inserito da arri

Citazione:
Messaggio inserito da liber
perchè sarebbe comodo avere un punto di ancoraggio e una direzione certa o presunta, allora si che diventa utile per suddividere aree.
Infatti Mem ha già compreso un utilizzo utile



così ha senso


ma visto che a quanto sembra per me il cinese è più semplice del lisp chiedo aiuto a chi può, perchè questa è una gran bella funzione se si riesce a portare nella giusta direzione
Torna all'inizio della Pagina

n/a
deleted

Prov.: Estero
Città: Sieradz (PL)


5926 Messaggi

Inserito il - 02 febbraio 2010 : 14:40:52  Mostra Profilo  Rispondi Quotando
Li',
guarda se va bene adesso:

http://www.sieradz.internetdsl.pl/cadlandia/divarea.zip

Torna all'inizio della Pagina

liber
Utente Master



1278 Messaggi

Inserito il - 02 febbraio 2010 : 15:33:17  Mostra Profilo Invia a liber un Messaggio Privato  Rispondi Quotando
partiamo dall'errore che mi mi dava e che hai sitemato!! cos'era??
adesso per come il listato era concepito dai cinesi va bene, caruccio il messaggio con riportata l'area divisa, anche se non ne merito la paternità nel messaggio.
adesso per il reale utilizzo di questa lisp è
1) dividere un area e lasciare alla casualità cosi' come ora
2) dividere un area avendo un punto di ancoraggio e decidere la direzione della divisione, se deve essere in orizzontale, a desta, a sinistra etc etc.
ed il secondo punto è quello che in effetti giova, altrimenti va bene solo nella casualità e devo darti ragione al post di cui sopra che non serve ad una minq
Torna all'inizio della Pagina

n/a
deleted

Prov.: Estero
Città: Sieradz (PL)


5926 Messaggi

Inserito il - 02 febbraio 2010 : 15:36:29  Mostra Profilo  Rispondi Quotando
Citazione:
Messaggio inserito da liber
cos'era??

Ho messo BOUNDARY al posto di BPOLY - davvero vuoi che tolga "by Liber"..?


Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 02 febbraio 2010 : 15:40:42  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
Citazione:
Messaggio inserito da liber

partiamo dall'errore che mi mi dava e che hai sitemato!! cos'era??



nel 2008 italiano funzionano e non funzionano entrambi

Basta mettere il punto interno decentrato e s'ingrippa subito, provate su un rettangolo
Torna all'inizio della Pagina

joseph
Utente Master



Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore


1884 Messaggi

Inserito il - 24 febbraio 2010 : 23:48:35  Mostra Profilo Invia a joseph un Messaggio Privato  Rispondi Quotando
Riprendo l'argomento, perchè aveva sollecitato la mia curiosità, intravedendone anche un'utilità pratica, se pur minima, soprattutto nel caso di frazionamenti.

Tagliando, elaborando e incollando parti di codice provenienti da diversi autori (Evgeniy Elpanov, Bill kramer, Fuccaro, John F.Uhden) che qui ringrazio, e mettendo anche un po' del mio, ho provato a risolvere il problema, restringendo l'applicazione a casi limitati.
Il codice funziona, per ora, su polilinee chiuse (anche con parti curve), tracciate in senso orario, ad angoli convessi (o leggermente concavi).
La precisione (inversamente proporzionale alla velocità d'esecuzione) dipende da un parametro interno K=20000, che si può diminuire a piacere.
Il punto base della dividente è vincolato a uno dei vertici della polilinea.
Il file parte con DVA (Invio).

Prendetelo come una personale (e istruttiva) esercitazione sull'uso di VisualLisp (non sono e non aspiro ad essere un programmatore), con difetti nascosti che verranno sicuramente alla luce dopo essere stato dato in pasto a più utenti, passibile di sostanziali miglioramenti.
Tempo permettendo mi riprometto di scrivere il codice anche per il caso di una dividente orizzontale o parallela a un lato della poligonale.

Scarica allegato:

div-area.zip
1,77 KB
Torna all'inizio della Pagina

Giuseppe Mauro
Amministratore



Regione: Campania
Prov.: Napoli


2705 Messaggi

Inserito il - 25 febbraio 2010 : 09:26:57  Mostra Profilo Invia a Giuseppe Mauro un Messaggio Privato  Rispondi Quotando
A me non divide l'area a meta'
Torna all'inizio della Pagina

joseph
Utente Master



Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore


1884 Messaggi

Inserito il - 26 febbraio 2010 : 15:13:19  Mostra Profilo Invia a joseph un Messaggio Privato  Rispondi Quotando
Si blocca? Dà un qualche messaggio di errore? L'errore è grossolano? Che forma ha l'area testata?
Quando hai tempo, puoi allegare un caso (fra i molti?) in cui il procedimento non offre i risultati che promette, citando la versione usata?
Grazie.


Modificato da - joseph in data 28 febbraio 2010 10:49:51
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 28 febbraio 2010 : 11:09:34  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
joseph,
come mai hai cancellato il tuo ultimo post che conteneva
divisione-areeOK-1-bis.lsp
Torna all'inizio della Pagina

joseph
Utente Master



Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore


1884 Messaggi

Inserito il - 28 febbraio 2010 : 14:33:25  Mostra Profilo Invia a joseph un Messaggio Privato  Rispondi Quotando
Perchè ho scoperto, durante una verifica, che non risolveva ancora alcuni errori interni.

Ricarico il file, dopo alcuni alleggerimenti: è sparita la dividente che scorre, ho ridotto il numero di cicli (fattore K da 20000 a 5000)
Scarica allegato:
Non mi offendo se qualcuno mi dovesse dire che non è il mio mestiere o che questo lavoro non serve a niente: da ex-docente ho già fatto il callo.

divisione-aree-def.zip
1,94 KB


Modificato da - joseph in data 28 febbraio 2010 15:34:18
Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 28 febbraio 2010 : 15:17:26  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
Citazione:
Messaggio inserito da joseph

Perchè ho scoperto, durante una verifica, che non risolveva ancora alcuni errori interni.



ok,
ma potevi lasciarla in modo d'apprezzare i successivi miglioramenti
Torna all'inizio della Pagina
Pagina: di 2 Discussione Precedente Discussione Discussione Successiva  
Pagina Successiva
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
TuttoCAD Forum © 2001-2010 CADLandia Torna all'inizio della Pagina
Pagina generata in 0,36 secondi.