Newsgroup: it.comp.software.cad
Titolo: domanda difficile! non aprire

mettiamo che:
- abbia finito un bel 2d con autocad
- che abbia impostata una griglia tipo 5 cm x 5 cm
- che nel disegnare abbia trascurato la perfetta coincidenza della fine 
dell'entità linea con la griglia imposta
- che pertanto le mie linee non cadano nel punto esatto del nodo di 
ggrigia, ma un po a destra, un po sotto e un po a pocchia
- che questa inesattezza o non mi generi linee ortogonali, intersezioni 
fantasma e l'impossibilità di avere e/o creare facilmente polilinee 
chiuse o tratteggi veloci.
bene, esiste qualcosa che stiri/forzi le estremità delle mie linee al 
nondo di griglia impostato più vicino?
p.s.
questa domanda viene postata con regolarità su questo gruppo da almeno 
dieci anni senza risultato.

capsula ha scritto:



dovevi usare lo snap subito dall'inizio
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 nondo di griglia impostato più vicino?
Inizia a imparare autolisp :-)
Non e' poi un problema cosi' complesso visto che le coordinate dei nodi
devono essere multiple di 5cm.
Diverso sarebbe stato il caso di impostare solamente che nodi vicini
risultino coincidenti e impostare rotazioni nulle o a 90° sugli elementi
lievementi ruotati. Questo sarebbe stato un bagno di sangue.
Io lo risolverei cosi:
itero su tutti gli elementi e quindi i nodi.
dati due nodi ns e nr verifico che la distanza(ns,nr) sia piccola a
piacere e quindi imposto nr=ns e modifico le coordinate in modo che
risultino multiple di 5cm. Finito.
Faccio cosi' perche' se trattassi singolarmente i nodi rischierei di non
farli coincidere (perche' ad esempio un nodo ha coordinata xs=47 e
l'altro xr=44. Se li arrotondo metto xs=50 e xr=40).
Importante e' usare sempre la stessa regola di arrotondamento in modo
che si ottengano i corretti allineamenti.
E' pero' necessario fare un controllo "umano" del disegno perche'
qualche nodo potrebbe essersi spostato da dove desiderato a causa di una
scelta non felice delle tolleranze per definire vicini due nodi.
Comunque puoi anche seguire una regola semplicissima.
Itera su tutti i nodi e arrotonda le coordinate come multipli di 5cm.
Alla fine sistemerai a mano le incogruenze rimaste.
Mi sembra un buon compromesso.
-- 
Ciao da Francesco B.

 anni senza risultato.
Non ho capito bene la domanda, comunque, il metodo seguente è un
po' brutale ma mi è servito in un paio di occasioni su disegni
importati da altri CAD.
- devi regolare il valore di FuzFac
- per i blocchi occorre qualcosa in più
- può dare risultati inattesi
Per qualcosa di meno brutale occorre operare come detto da Francesco B.
Al momento non ho tempo di estrapolare il mio programma che elabora ogni
singola entità, verificandone la geometria, in modo che funzioni senza
l'utilizzo di altre funzioni comuni.
Marco
--
; Marc'Antonio Alessi - 
http://xoomer.virgilio.it/alessi
; Function: C:ALE_UtlFixPrecisionSs
;
; Version 1.00 - 14/09/2005
;
(defun C:ALE_UtlFixPrecisionSs ( / SelSet FuzFac)
  (setq
    SelSet (ssget)
    FuzFac (* 0.1 1e15)
  )
  (command
    "_.MOVE" SelSet ""
    "_NONE" (list FuzFac  FuzFac  FuzFac)
    "_NONE" (list (- FuzFac) (- FuzFac) (- FuzFac))
    "_.MOVE" SelSet ""
    "_NONE" (list (- FuzFac) (- FuzFac) (- FuzFac))
    "_NONE" (list FuzFac  FuzFac  FuzFac)
  )
  (princ)
)
;
; Marc'Antonio Alessi - 
http://xoomer.virgilio.it/alessi
; Function: C:ALE_ShowPrecision
;
; Version 1.00 - 14/09/2005
;
(defun C:ALE_UtlShowPrecision ( / EntNam EntDat Pnt001 Pnt002)
  (setq
    EntNam (car (nentsel "\nSelect object: "))
    EntDat (entget EntNam)
    Pnt001 (cdr (assoc 10 EntDat))
  )
  (princ (strcat "\n"  (rtos (car  Pnt001) 2 16)))
  (princ (strcat " - " (rtos (cadr Pnt001) 2 16)))
  (cond
    ( (wcmatch (DXF 0 EntDat) "LINE,TEXT,ATTRIB,ATTDEF")
      (setq Pnt002 (cdr (assoc 11 EntDat)))
      (princ (strcat "\n"  (rtos (car  Pnt002) 2 16)))
      (princ (strcat " - " (rtos (cadr Pnt002) 2 16)))
    )
    ( (= (DXF 0 EntDat) "LWPOLYLINE")
      (foreach ForElm (cdr (ALE_Massoc 10 EntDat))
        (princ (strcat "\n"  (rtos (car  ForElm) 2 16)))
        (princ (strcat " - " (rtos (cadr ForElm) 2 16)))
      )
    )
  )
  (princ)
)
;
; Marc'Antonio Alessi - 
http://xoomer.virgilio.it/alessi
; Function: ALE_UtlTempFixPrecision
;
; Version 1.00 - 14/09/2005
;
; Example: (ALE_UtlTempFixPrecision nil 0.0001)
;
(defun ALE_UtlTempFixPrecision (EntNam DecPrc / FuzFac EntNam EntDat Pnt001 
Pnt002)
  (or EntNam (setq EntNam (car (entsel "\nSelect the original line: "))))
  (setq
    FuzFac (* DecPrc 1e15)
    EntDat (entget EntNam)
    Pnt001 (cdr (assoc 10 EntDat))
    Pnt002 (cdr (assoc 11 EntDat))
  )
  (princ "\nOld coord.")
  (princ (strcat "\n" (rtos (car  Pnt001) 2 16)))
  (princ (strcat "\n" (rtos (cadr Pnt001) 2 16)))
  (princ (strcat "\n" (rtos (car  Pnt002) 2 16)))
  (princ (strcat "\n" (rtos (cadr Pnt002) 2 16)))
  (command
    "_.UNDO" "_GROUP"
    "_.MOVE" EntNam ""
    "_NONE" (list FuzFac  FuzFac  FuzFac)
    "_NONE" (list (- FuzFac) (- FuzFac) (- FuzFac))
    "_.MOVE" EntNam ""
    "_NONE" (list (- FuzFac) (- FuzFac) (- FuzFac))
    "_NONE" (list FuzFac  FuzFac  FuzFac)
  )
  (setq
    EntDat (entget EntNam)
    Pnt001 (cdr (assoc 10 EntDat))
    Pnt002 (cdr (assoc 11 EntDat))
  )
  (princ "\nNew coord.")
  (princ (strcat "\n" (rtos (car  Pnt001) 2 16)))
  (princ (strcat "\n" (rtos (cadr Pnt001) 2 16)))
  (princ (strcat "\n" (rtos (car  Pnt002) 2 16)))
  (princ (strcat "\n" (rtos (cadr Pnt002) 2 16)))
  (command "_.UNDO" "_END" "_.U")
  (princ)
)
(defun Dxf (DxfCod EntDat)
  (cdr (assoc DxfCod EntDat))
)
; Trova tutte le ricorrenze di key nella lista > Orginal by M. Puckett
(defun ALE_MAssoc (DxfKey ImpLst / TmpLst OutLst)
  (while (setq TmpLst (assoc DxfKey ImpLst))
    (setq OutLst (cons (cdr TmpLst) OutLst)
          ImpLst (cdr (member TmpLst ImpLst))
    )
  )
  (reverse OutLst)
)
-- 
----------------------------------------------------------
Marc'Antonio Alessi - 
http://xoomer.virgilio.it/alessi
Per AutoCAD:
- Travi 2D: disegno automatico travi e pilastri in C.A.,
  relativi ferri e staffe, report peso ferri e C.A.
  su Excel
- Calcolo automatico aree su planimetrie: report su Excel
  per locale altezza, piano con descrizioni locali e piani
- Elaborazione dati from/to Excel
- Librerie manufatti in assonometria
- Autolayers: gestione automatica dei layers
- Elaborazioni e stampe multiple e automatiche
- Parametrico 2D, Viterie 2D/3D, Esplosi 2D/3D
- AutoGroups: gestione automatica gruppi di layers
- SetUp del disegno con gestione automatica DimStyles
- Conversione automatica files Inventor a DWG e viceversa
  anche senza avere Inventor installato
- ...
----------------------------------------------------------

 dieci anni senza risultato.
Mai vista.
Saluti
frank

 frank
molto pericoloso come sistema



Fa quello che chiede capsula e in modo più semplice di qualsiasi altra 
soluzione avanzata sotto tutti i punti di vista.
Io non l'ho mai fatto e non credo mi servirà mai. Non conosco l'utilità di 
ottenere ciò che capsula ha chiesto e credo nemmeno tu.
Non posso quindi valutarne la pericolosità ma posso ipotizzare che non sia 
più pericolosa di un salvataggio automatico non impostato.
Saluti
frank 

 frank
infatti non si capisce perche non ha rifatto la griglia, con un _ARRAY te
la crei in un secondo


 frank
prova su un dwg che non ha solo linee e poi vedi che bella zuppa salta
fuori



Di che griglia stai parlando?
Capsula parla di griglia (f7) e snap (f9). Non si creano con nessuna array.
Saluti
frank 


Non ho mai detto fosse indolore.
Prova a metterti a studiare l'autolisp, fare un poche di pagine di codice e 
poi lancialo. Ci sentiamo al nuovo anno.
frank 

Francesco B. ha scritto:

ci siamo capiti
in genere gli spostamenti ai nodi della grigia sono minimi (uno anzi 
crede che la rispettiva fine sia coincidente e si accorge che non è così 
quando l'unione della polilinea non funge o il tratteggio non chiude) e 
le cose dovrebbero forzarsi in modo rapido e sicuro.
l'esigenza nasce su disegnoi con linee ortogonali e le eventuali 
forzature fuori griglia generebbero linee obblique facilmente 
individuabili e rieditabili a manina
si potrebbe anche agire per gradi: nell'esempio maglia 5x5unità si 
potrebbe forzare dapprima ad una griglia più prossima 1x1unità e poi 
passare più avanti.
ovviamente si dovrebbe operare sulle sole linee ortogonali che si 
vorrebbero forzare al nodo lasciando stare quelle volutamente fuori 
griglia (misura esatta o linea obbliqua).
in pratica, io disegno molto nell'edile e disegno con la precisione dei 
cinque centimentri (diciamo 2,5 cm in quanto o forzo a zero o forzo a 
+/- 5). Tanto in cantiere dare una misura tipo 17,233 ml o 17,25 cambia 
nulla (i muratori la faranno 17,30 comunque, son fatti così). finito il 
disegno mi va di misurare aree, tratteggiare, unire ecc.. e scopro che 
c'è sempre quella bastarda di linea che non è dove dovrebbe essere.
il discorso va bane anche per chi vuole forzare al centimetro o al 
millimetro, basta poterlo fare

 poi lancialo. Ci sentiamo al nuovo anno.
Non è poi così lungo.
Se qualcuno vuole gli posso inviare un Lisp compilato da testare.
Il programma è scritto in puro Lisp (no Visual Lisp) quindi
compatibile ed es. con IntelliCad.
Modifica le coordinate di ogni entità con la possibilità di
impostare un valore diverso di arrotondamento per x, y e z.
Corregge:
DIMENSION,ARC,ATTDEF,ATTRIB,CIRCLE,ELLIPSE,FACE3D,INSERT,LINE
POLYLINE,LWPOLYLINE,*TEXT,POINT,SHAPE,SOLID,TRACE
BLOCK (compresi quelli annidati).
Non corregge:
la posizione degli attributi dei blocchi inseriti (al momento).
--
Alcuni spunti, per correggere LWPOLYLINE:
...
( (eq (Dxf 0 EntDat) "LWPOLYLINE")
  (setq VrtLst (member (assoc 10 EntDat) EntDat))
  (repeat (cdr (assoc 90 EntDat))
    (setq
       EntDat (subst
                (cons 10 (ALE_ListNumberRound (cdar VrtLst) PrcLst))
                (car VrtLst)
                EntDat
              )
       VrtLst (cddddr VrtLst)
    )
  )
)
...
;
; Marc'Antonio Alessi, Italy - 
http://xoomer.virgilio.it/alessi
;
; Function: ALE_ListNumberRound
;
; Version 1.00 - 09/11/2006
;
; Arguments:
;   In_Lst: the list of numbers
;   PrcLst: decimal precision list to apply to In_Lst
;           the length of list must be >= of In_Lst length
;
; Examples:
;   (ALE_ListNumberRound '(1.565656 1.111111 3.123456) '(1 0.1 0.01))
; =>(2 1.1 3.12)
;   (ALE_ListNumberRound '(1.565656 1.111111)          '(1 0.1 0.01))
; =>(2 1.1)
;
(defun ALE_ListNumberRound (In_Lst PrcLst / OutLst)
  (foreach ForElm In_Lst
    (setq
      OutLst (cons (ALE_NumberRound ForElm (car PrcLst)) OutLst)
      PrcLst (cdr PrcLst)
    )
  )
  (reverse OutLst)
)
;
; Rounding function - Doug Broad - 02/19/2003
; Additional credits: Joe Burke, Peter Toby
; Original name: (defun Round (value to) ...)
;
; Examples:
; (ALE_NumberRound 1.11111          0) => 0
; (ALE_NumberRound 1.11111          1) => 1
; (ALE_NumberRound 1.11111        0.1) => 1.1
; (ALE_NumberRound 1.11111       0.01) => 1.11
; (ALE_NumberRound 1.11111      0.001) => 1.111
; (ALE_NumberRound 1.11111     0.0001) => 1.1111
; (ALE_NumberRound 1.11111  0.0000001) => 1.11111
;
; (ALE_NumberRound 1.565656        10) => 0
; (ALE_NumberRound 1.565656         1) => 2
; (ALE_NumberRound 1.565656       0.1) => 1.6
; (ALE_NumberRound 1.565656      0.01) => 1.57
; (ALE_NumberRound 1.565656     0.001) => 1.566
; (ALE_NumberRound 1.565656    0.0001) => 1.5657
; (ALE_NumberRound 1.565656   0.00001) => 1.56566
; (ALE_NumberRound 1.565656 0.0000001) => 1.56566
;
(defun ALE_NumberRound (ImpVal To_Val)
  (setq To_Val (abs To_Val))
  (*
    To_Val
    (fix
      (/
        (
          (if (minusp ImpVal)
            -
            +
          )
          ImpVal
          (* To_Val 0.5)
        )
        To_Val
      )
    )
  )
)
Marco 

 fuori
Ciao arri,
hai provato ALE_UtlFixPrecisionSs sulle stesse linee?
Se sì, qual'è il risultato?
--
Marco 


Ciao Marco.
Certo, lungo č inteso tutto l'apprendimento per poter essere autonomi con 
questo metodo.
Ovviamente se qualcuno lo fa per te allora c'č poco da scervellarsi su quali 
siano i metodi per ottenere una determinata cosa.
Saluti paesan
frank 

> Saluti paesan
Di dove sei?


Molto vicino.
Al mio paese non c'è il cimitero perchè, dicono, muoiono tutti in galera.
Lo conosci?
frank 

 Lo conosci?
No, forse ne ho sentito parlare...
Se proprio non vuoi divulgare il nome del paese dammi almeno un indizio
che sia più decifrabile.
Es.: quanti Km dal mio e in che direzione.
     il patrono
     qualcosa di caratteristico
M.