Ridimensionamento di un'immagine

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
#1
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, GstarCAD, CadWorx, Excel, Lisp, VBA
Regione: Sicilia
#2
Con il comando SCALE
(COMMAND "_SCALE" IMAGE "" ImagePuntoUno "_R" Dist1 Dist2)
 

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
#3
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
#4
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, GstarCAD, CadWorx, Excel, Lisp, VBA
Regione: Sicilia
#5
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
#6
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!