Autore |
Discussione |
|
blubossa
Utente Senior
102 Messaggi |
Inserito il - 27 dicembre 2011 : 13:58:15
|
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
|
Quanti decimali di precisione sono necessari nella distanza di offset? |
|
|
blubossa
Utente Senior
102 Messaggi |
Inserito il - 28 dicembre 2011 : 14:40:39
|
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 |
|
|
GP
Utente Master
Regione: Piemonte
Prov.: Vercelli
2776 Messaggi |
Inserito il - 28 dicembre 2011 : 15:17:30
|
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.
|
|
|
blubossa
Utente Senior
102 Messaggi |
Inserito il - 28 dicembre 2011 : 15:20:43
|
...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 |
|
|
GP
Utente Master
Regione: Piemonte
Prov.: Vercelli
2776 Messaggi |
Inserito il - 28 dicembre 2011 : 16:07:13
|
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)
|
|
|
joseph
Utente Master
Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore
1884 Messaggi |
Inserito il - 29 dicembre 2011 : 00:47:11
|
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. |
|
|
blubossa
Utente Senior
102 Messaggi |
Inserito il - 29 dicembre 2011 : 08:24:18
|
...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 |
|
|
joseph
Utente Master
Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore
1884 Messaggi |
Inserito il - 29 dicembre 2011 : 10:36:20
|
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 |
|
|
blubossa
Utente Senior
102 Messaggi |
Inserito il - 29 dicembre 2011 : 13:57:51
|
...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 |
|
|
joseph
Utente Master
Regione: Lombardia
Prov.: Cremona
Città: Casalmaggiore
1884 Messaggi |
|
blubossa
Utente Senior
102 Messaggi |
Inserito il - 29 dicembre 2011 : 22:05:47
|
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
|
|
|
|
Discussione |
|