Ridimensionamento di un'immagine in funzione di alcuni parametri

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
Salve a tutti,
cerco di scrivere un codice che ridimensioni un'immagine in funzione di alcuni parametri, mi spiego meglio col listato :

Codice:
(defun C:GEOREF (/ ImagePuntoUno ImagePuntoDue DwgPuntoUno DwgPuntoDue Dist1 Dist2)

    (setvar "osmode" 0)

    (setq Image nil)
    (while
        (= Image nil)
        (setq Image (entsel "\nSeleziona l'Immagine da georeferenziare : "))
    )

    ;; --------------------------------

    (setq ImagePuntoUno nil)

    (while
    (= ImagePuntoUno nil)
    (princ "\nPrimo Punto dell'Immagine: ")
    (setq ImagePuntoUno (getpoint))
    )

    (setq ImagePuntoDue nil)

    (while
    (= ImagePuntoDue nil)
    (princ "\nSecondo Punto dell'Immagine: ")
    (setq ImagePuntoDue (getpoint))
    )

    ;; --------------------------------

    (setq DwgPuntoUno nil)

    (while
    (= DwgPuntoUno nil)
    (princ "\nPrimo Punto del Rilievo: ")
    (setq DwgPuntoUno (getpoint))
    )

    (setq DwgPuntoDue nil)

    (while
    (= DwgPuntoDue nil)
    (princ "\nSecondo Punto del Rilievo: ")
    (setq DwgPuntoDue (getpoint))
    )

    (setq Dist1 (distance ImagePuntoUno ImagePuntoDue))
    (princ "\n")
    (princ Dist1)
    (princ "\n")
    (setq Dist2 (distance DwgPuntoUno DwgPuntoDue))
    (princ "\n")
    (princ Dist2)
    (princ "\n")

   (setq Rapporto (/ Dist1 Dist2))

Ora dovrei scalare l'immagine selezionata (Image) con l'uso di "Rapporto" ma non riesco a scrivere correttamente il relativo comando.
Grazie.
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, CadWorx, Lisp, VBA. YouTube: roberto portuese
Regione: Sicilia
Con il comando SCALE
(COMMAND "_SCALE" IMAGE "" ImagePuntoUno "_R" Dist1 Dist2)
 

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
Ho inserito il comando ma ottengo errore :

Codice:
(defun C:GEOREF (/ ImagePuntoUno ImagePuntoDue DwgPuntoUno DwgPuntoDue Dist1 Dist2)

    (setvar "osmode" 0)

    (setq Image nil)
    (while
        (= Image nil)
        (setq Image (entsel "\nSeleziona l'Immagine da georeferenziare : "))
    )

    ;; --------------------------------

    (setq ImagePuntoUno nil)

    (while
    (= ImagePuntoUno nil)
    (princ "\nPrimo Punto dell'Immagine: ")
    (setq ImagePuntoUno (getpoint))
    )

    (princ "\n")
    (princ ImagePuntoUno)
    (princ "\n")

    (setq ImagePuntoDue nil)
    
    (while
    (= ImagePuntoDue nil)
    (princ "\nSecondo Punto dell'Immagine: ")
    (setq ImagePuntoDue (getpoint))
    )

    (princ "\n")
    (princ ImagePuntoDue)
    (princ "\n")

    ;; --------------------------------

    (setq DwgPuntoUno nil)

    (while
    (= DwgPuntoUno nil)
    (princ "\nPrimo Punto del Rilievo: ")
    (setq DwgPuntoUno (getpoint))
    )

    (princ "\n")
    (princ DwgPuntoUno)
    (princ "\n")

    (setq DwgPuntoDue nil)

    (while
    (= DwgPuntoDue nil)
    (princ "\nSecondo Punto del Rilievo: ")
    (setq DwgPuntoDue (getpoint))
    )

    (princ "\n")
    (princ DwgPuntoDue)
    (princ "\n")

    (setq Dist1 (distance ImagePuntoUno ImagePuntoDue))
    (princ "\n")
    (princ Dist1)
    (princ "\n")
    (setq Dist2 (distance DwgPuntoUno DwgPuntoDue))
    (princ "\n")
    (princ Dist2)
    (princ "\n")

    (command "_scale" Image DwgPuntoUno "_R" Dist1 Dist2)   

)

Grazie
 

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
Scusa avevo dimenticato gli apici tra Image e DwgPuntoUno (Image "" DwgPuntoUno), ora funziona, l'immagine viene si ridimensionata ma non spostata in "DWGPuntoUno" bensì in un punto ?.
Grazie
 

rpor66

Utente Standard
Professione: Programmatore
Software: AutoCad, CadWorx, Lisp, VBA. YouTube: roberto portuese
Regione: Sicilia
Se vuoi spostare l'immagine, dopo il comando scale usa:
(command "_SCALE" IMAGE "" ImagePuntoUno "_R" Dist1 Dist2)
(command "_MOVE" IMAGE "" ImagePuntoUno DwgPuntoUno)
 

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
Perfetto!
ora funziona, ecco il listato definitivo (quasi) :
Codice:
(defun C:GEOREF (/ ImagePuntoUno ImagePuntoDue DwgPuntoUno DwgPuntoDue Dist1 Dist2)

    (setvar "osmode" 0)

    (setq Image nil)
    (while
        (= Image nil)
        (setq Image (car (nentsel "\nSeleziona l'Immagine da georeferenziare : ")))
    )

    (princ "\n")
    (princ Image)
    (princ "\n")

    ;; --------------------------------

    (setq ImagePuntoUno nil)

    (while
    (= ImagePuntoUno nil)
    (princ "\nPrimo Punto dell'Immagine: ")
    (setq ImagePuntoUno (getpoint))
    )

    (princ "\n")
    (princ ImagePuntoUno)
    (princ "\n")

    (setq ImagePuntoDue nil)
    
    (while
    (= ImagePuntoDue nil)
    (princ "\nSecondo Punto dell'Immagine: ")
    (setq ImagePuntoDue (getpoint))
    )

    (princ "\n")
    (princ ImagePuntoDue)
    (princ "\n")

    ;; --------------------------------

    (setq DwgPuntoUno nil)

    (while
    (= DwgPuntoUno nil)
    (princ "\nPrimo Punto del Rilievo: ")
    (setq DwgPuntoUno (getpoint))
    )

    (princ "\n")
    (princ DwgPuntoUno)
    (princ "\n")

    (setq DwgPuntoDue nil)

    (while
    (= DwgPuntoDue nil)
    (princ "\nSecondo Punto del Rilievo: ")
    (setq DwgPuntoDue (getpoint))
    )

    (princ "\n")
    (princ DwgPuntoDue)
    (princ "\n")

    (setq Dist1 (distance ImagePuntoUno ImagePuntoDue))
    (princ "\n")
    (princ Dist1)
    (princ "\n")
    (setq Dist2 (distance DwgPuntoUno DwgPuntoDue))
    (princ "\n")
    (princ Dist2)
    (princ "\n")

    (command "_scale" Image "" ImagePuntoUno "_R" Dist1 Dist2)
    (command "_move" Image "" ImagePuntoUno DwgPuntoUno)

    (alert "Scalatura e georeferenziazione dell'immagine avvenuta")

)

Ora vorrei portare l'immagine in secondo piano, se hai ancora un po' di pazienza .....
Grazie mille anzi un milione!
 

Statistiche forum

Discussioni
54,579
Messaggi
464,888
Utenti registrati
93,353
Ultimo utente registrato
Merzolina

Top