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

blubossa
Utente Senior



102 Messaggi

Inserito il - 27 dicembre 2011 : 13:58:15  Mostra Profilo Invia a blubossa un Messaggio Privato  Rispondi Quotando
ciao a tutti,
ho una figura chiusa, polilinea, con cui voglio creare un incastro orizzontale oppure verticale.....
....con un lisp vorrei selezionare la figura,scegliere il tipo di incastro ed una distanza minima di offset...e l'incastro deve avvenire automaticamente.

ora siccome le figure possono essere di svariate forme, anche irregolari, non so come fare per risolvere.....

sto lavorando su un lisp ma mi ritrovo a dover dare troppi imput e il risulato non sempre è buono..

grazie
bb

Scarica allegato:

INCASTRO.rar
10,82 KB

allego un file di esempio...

GP
Utente Master


Regione: Piemonte
Prov.: Vercelli


2776 Messaggi

Inserito il - 28 dicembre 2011 : 14:30:02  Mostra Profilo Invia a GP un Messaggio Privato  Rispondi Quotando
Quanti decimali di precisione sono necessari nella distanza di offset?
Torna all'inizio della Pagina

blubossa
Utente Senior



102 Messaggi

Inserito il - 28 dicembre 2011 : 14:40:39  Mostra Profilo Invia a blubossa un Messaggio Privato  Rispondi Quotando
ciao GP,
in pratica è l'operatore che decide....magari si propone una misurta di default di 5 mm.

...anche io ci sto lavorando ma....non me gusta molto.

appena posso allego quello che ho fatto.

ciao
bb
Torna all'inizio della Pagina

GP
Utente Master


Regione: Piemonte
Prov.: Vercelli


2776 Messaggi

Inserito il - 28 dicembre 2011 : 15:17:30  Mostra Profilo Invia a GP un Messaggio Privato  Rispondi Quotando
Ciao Blu, non mi sono spiegato...

Ho messo giù qualcosa, ma non riesco ad ottenere la precisione assoluta, impostando ad esempio 5 come buffer ottengo poi un offset reale di 5.00000056, perciò chiedevo a quanti decimali di precisione ti devi attenere.

Torna all'inizio della Pagina

blubossa
Utente Senior



102 Messaggi

Inserito il - 28 dicembre 2011 : 15:20:43  Mostra Profilo Invia a blubossa un Messaggio Privato  Rispondi Quotando
...in allegato la routine su cui sto lavorando...

inoltre ho allegato un file dwg con all'interno due blocchi...

inserirne uno e lanciare il comando...per ora sto lavorando sull'incastro verticale....penso che quando sarà ottimizzato questo sarà più facile fare anche il comando per l'incastro orizzontale..

bb

Scarica allegato:

test_n.rar
11,1 KB
Torna all'inizio della Pagina

GP
Utente Master


Regione: Piemonte
Prov.: Vercelli


2776 Messaggi

Inserito il - 28 dicembre 2011 : 16:07:13  Mostra Profilo Invia a GP un Messaggio Privato  Rispondi Quotando
Blu, non mi vuoi più bene... ti sfuggono i miei post.

Questo è quello che su cui ho lavorato, lo specchiamento di una poly con mantenimento di un buffer attorno a quella originale (ovvero quello che avevo capito).

Per le precisioni, calcolate su distanze orizz. e vert., vedi il mio post delle 15:17



(defun C:Test (/ os tipo spost poly poly_vl p1 p2 P1_ P2_ Pc
	     Pd PcX PcY poly_sp poly_sp_vl ang )

    (if (= buffer nil) (setq buffer 5))
    (command "_undo" "_begin")
    (setq cmd (getvar "cmdecho"))
    (setvar "cmdecho" 0)    
    (setq os (getvar "osmode"))
    (setvar "osmode" 0)
    (command "_UCS" "_W" )
        
    (if (= (cdr (assoc 0 (entget (setq poly (car (entsel "\nSelezionare il poligono")))))) "LWPOLYLINE")
        (progn
	    (while (= tipo nil)
	        (initget "V H")
	        (setq tipo (getkword "\nScegli l'ottimizzazione [V/H] "))
            )
  
            (prompt "\nDistanza Buffer (ortogonale)  <")
            (prompt (rtos buffer)) (prompt "\>   ")
            (setq buffer_n (getreal))	    
            (if (/= buffer_n nil) (setq buffer buffer_n))	    
    
            (setq poly_vl (vlax-ename->vla-object poly))
            (vla-getboundingbox poly_vl  'p1 'p2)
            (setq P1_ (vlax-safearray->list p1))
            (setq P2_ (vlax-safearray->list p2))
            (setq Pc (polar P1_ (angle P1_ P2_) (/ (distance P1_ P2_) 2)))

            (setq PcY (list (car Pc) (+ (cadr Pc) 1.0)))
            (setq PcX (list (- (car Pc) 1.0) (cadr Pc)))	    

            (command "_mirror" poly "" Pc PcY "_N")
            (setq poly_sp (entlast))
            (command "_mirror" poly_sp "" Pc PcX "_Y")
            (setq poly_sp_vl (vlax-ename->vla-object poly_sp))

            (setq spost (/ (distance P1_ P2_) 30))
            (if (= tipo "H") (setq ang 0.0) (setq ang (/ pi 2)))

            (while (> spost 0.00000001)
                (if (not (vlax-invoke poly_vl 'IntersectWith poly_sp_vl acExtendNone))
                    (setq Pd (polar Pc (+ ang pi) (setq spost (/ spost 2))))		    
                )
                (if (vlax-invoke poly_vl 'IntersectWith poly_sp_vl acExtendNone)
                    (setq Pd (polar Pc ang spost ))
                )
                (command "_move" poly_sp "" Pc Pd)
            )

            (command "_move" poly_sp "" Pc (polar Pc ang buffer))

        )
    )

    (command "_undo" "_end")
    (setvar "cmdecho" cmd)
    (setvar "osmode" os)
    (command "_UCS" "_P")   
    (prompt "\n ") (prompt "\n ") (prompt "\n ")
    
    (princ)

)

(vl-load-com)
Torna all'inizio della Pagina

joseph
Utente Master



Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore


1884 Messaggi

Inserito il - 29 dicembre 2011 : 00:47:11  Mostra Profilo Invia a joseph un Messaggio Privato  Rispondi Quotando
Devi introdurre nel lisp anche il valore degli spessori delle 2 ali, e quindi hai come input minimo:
- selezione dell'oggetto
- tipo di specchiatura
- spessore dell'ala in base al tipo di specchiatura, questo per effettuare lo spostamento del secondo pezzo
- valore dello sfrido

Se hai una figura appena un po più complessa (con lati non paralleli e/o con più di una variazione di spessore), non credo che si possa risolvere facilmente con un codice Lisp.
Torna all'inizio della Pagina

blubossa
Utente Senior



102 Messaggi

Inserito il - 29 dicembre 2011 : 08:24:18  Mostra Profilo Invia a blubossa un Messaggio Privato  Rispondi Quotando
...ciao GP,
sei stato un fulmine
stamattina faccio un test...

ciao joseph,
non capisco cosa intendi quando parli di ali

il problema invece è che la figura chiusa potrebbe non essere un polilinea, quindi avremmo una serie di linee ed archi, ed inoltre la stessa figura al suo interno potrebbe avere altre informazioni tipo testi linee etc etc...

forse la soluzione migliore potrebbe essere quella di gestire i tutto come blocco e quindi fare un incastro del blocco...

grazie
bb
Torna all'inizio della Pagina

joseph
Utente Master



Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore


1884 Messaggi

Inserito il - 29 dicembre 2011 : 10:36:20  Mostra Profilo Invia a joseph un Messaggio Privato  Rispondi Quotando
Nella fretta mi sono espresso male.
Tutto dipende da che cosa intendi per incastro.
Nella figura allegata solo l'ultimo caso presenta una situazione di incastro perfetto, ma questo richiede che l'oggetto originale possieda almeno un asse di simmetria.
In tutti gli altri casi può fare diventare tangenti i due oggetti in un punto o lungo un lato, e quindi potresti avere anche più di una soluzione, ma mai realizzare un incastro perfetto.

Immagine inserita:

10,37 KB
Torna all'inizio della Pagina

blubossa
Utente Senior



102 Messaggi

Inserito il - 29 dicembre 2011 : 13:57:51  Mostra Profilo Invia a blubossa un Messaggio Privato  Rispondi Quotando
...penso di aver capito quello che dice joseph....
in allegato un file con le prove che ho fatto su alcune figure, su molte il test, con quanto scritto da GP, è andato bene tranne che per una figura di cui ho fatto l'incastro manualmente (colore rosso)....

bella gatta da pelare...

bb


Scarica allegato:

test_new.rar
13,47 KB
Torna all'inizio della Pagina

joseph
Utente Master



Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore


1884 Messaggi

Inserito il - 29 dicembre 2011 : 14:27:22  Mostra Profilo Invia a joseph un Messaggio Privato  Rispondi Quotando
Forse ti servirebbe questo tipo di programma di ottimizzazione pannelli: (cercando con Google-Image "cad nesting" trovi altri esempi.

http://www.spazio3d.com/index.php?menu=3&page=31&lingua=IT
Torna all'inizio della Pagina

blubossa
Utente Senior



102 Messaggi

Inserito il - 29 dicembre 2011 : 22:05:47  Mostra Profilo Invia a blubossa un Messaggio Privato  Rispondi Quotando
ciao,
in effetti è quello che serve, però per me sarebbe decisamente più comodo farlo in autocad perchè poi vado a fare altre modifiche....

comunque anche trovare una soluzione che sia una via di mezzo mi andrebbe bene...

bb


Messaggio inserito da joseph

Forse ti servirebbe questo tipo di programma di ottimizzazione pannelli: (cercando con Google-Image "cad nesting" trovi altri esempi.

http://www.spazio3d.com/index.php?menu=3&page=31&lingua=IT
Torna all'inizio della Pagina
  Discussione Precedente Discussione Discussione 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,58 secondi.