Aller au contenu

_line a distance donne avec angle clicué dans le dessin


Messages recommandés

Invité ingoenius
Posté(e)

Salut a tous, dans un lisp que je suis en trai de travailler

j'ai une variable

P1 (coordonnes point)

D (variable numerique avec une distance ex 10.0)

maintenat je voudrait creer une commande que me dessine une ligne de la longuer donné par distance D quelle debute dans le point P1 , mais avec un angle a definir pendant le dessin

 

je essaié quelque chose comme cela, mais je doit me troper quelque part merci pour votre coup d'oeil e votre aide

enfait il faudrait detecter la position du curseur dans l'espace de dessin et dessiner la ligne avec cette angle et avec la longueur D

(command "_line" P1 (getangle  pause D "" ""))

 

[Edité le 22/9/2008 par ingoenius]

Posté(e)

Salut , tu peux essayer comme ça :

 

(setq p1 (getpoint "\n point de départ :"))
(setq d 10.0)

(command "ligne" p1)
(setq a (getangle p1 "\n specifier l'angle"))
(setq p2 (polar p1 a d))
(command p2 "") 

Posté(e)

Ou comme ça (en boucle)

 

Rajouter les (initget) pour peaufiner

 

((lambda ( / p1 d a1)
(setq p1 (getpoint "\npoint: ") d (getdist p1 "\ndistance: "))
(command "_.line")
(while p1
 (command "_none" p1)
 (if (setq a1 (getangle p1 "\nAngle?: "))
   (setq p1 (polar p1 a1 d))
   (setq p1 nil)
 )
)
(command "") 
))

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Invité ingoenius
Posté(e)

merci ;-) ici 3 routines (fortement a ameliorer peut -etre)

Les routine servent a dessiner des tailles d'image pour les videoprojecteurs (lignes en 3d)

 

il y a 3 routines, car on peut a chaque fois connaitre 2 element sur trois entre

Distance (distance de Projection)

Optique (taille de l'optique utilisé)

Base (base de l'image projecté)

 

Les script demandent aussi le format d'image voulu entre 16/9 4/3 5/4

 

pour le moment ca fonctionnent seulement dans une vue ortogonale Top, mais les dessin sont en 3d

merci de me dire si ca vous est utile ou pas, et si vous avez des modif a suggerer ;-)

 

PS certains chose sont en italien dans les commentaires, excusez moi, mais j'ecrs poas trés bien le francais

 

 

 


(defun c:projDO(); elementi noti DISTANZA e OTTICA

(defun DTR (a) (* pi (/ a 180))) ;degres en radiants
(defun RTD (a) (/ (* a 180) pi ));radiants en degres
(setvar "osmode" 3)		 ;mette  lo snap a fin e mid

 
(initget 1)			 ;controllo imput nullo
(setq Puntamento (getpoint "\nPick center of image : "));puntamento proiettore
(prompt "\nPick Projector position:")
(command "_line" Puntamento pause "" )
(setq LL (entlast))

(setq Line (entget LL))  
(setq Lamp (cdr (assoc 11 Line)))
;(setq Lamp (cdr (assoc 10 Line)))  

 

;(setq  LAMP (getpoint "\nIndicare la posizione del proiettore:"));punto proiettore

(initget 1);controllo imput nullo
;(command "_line" LAMP Puntamento "")	;disegna la prima linea

(setvar "osmode" 0);toglie lo snap 

(initget 1);controllo imput nullo
(setq OTTICA (getreal "\nLens?  es 0.33 :  ")) ;ottica proiettore
(setq SLIDE 1.0) ;piano ottico 
(setq distanza (distance LAMP PUNTAMENTO));distanza di proiezione

(setq INCL(angle  LAMP Puntamento));ottengo l'angolo 1 in radianti
(setq INCL_G (angtos incl 0 3));lo stesso angolo in gradi
(setq INCL_r (atof INCL_g));numero reale

;qua bisogna mettere una condizione a seconda del quadrante verso cui va la linea


;Q1

(cond
 ((>= 90 incl_r)
(setq incl_f (+ INCL_r  180 ));ottengo la dir opposta per il p p5
(setq incl_slide1 (+ 90 INCL_r ));ottengo la dir opposta per il p p6
(setq incl_slide2 (+ INCL_r 270  ));ottengo la dir opposta per il p p6
)
;Q2
(( >= 180 incl_r)
 (setq incl_f (+ INCL_r  180 ));ottengo la dir opposta per il p p5
(setq incl_slide1 (+ 90 INCL_r ));ottengo la dir opposta per il p p6
(setq incl_slide2 (- INCL_r 90  ));ottengo la dir opposta per il p p6
)
;FINE Q2

;Q3
((  >= 270 incl_r)
 (setq incl_f (- INCL_r  180 ));ottengo la dir opposta per il p p5
(setq incl_slide1 (+ 90 INCL_r ));ottengo la dir opposta per il p p6
(setq incl_slide2 (- INCL_r 90  ));ottengo la dir opposta per il p p6
)
;FINE Q3
;Q4
((  >= 360 incl_r)
 (setq incl_f (- INCL_r  180 ));ottengo la dir opposta per il p p5
(setq incl_slide1 (- INCL_r  90));ottengo la dir opposta per il p p6
(setq incl_slide2 (- INCL_r 270  ));ottengo la dir opposta per il p p6
)
(t nil)
 )
;FINE Q4


;determina i punti che ci servono per il disegno 
(setq P5 (polar LAMP (dtr incl_f) ottica));determina il punto P5 cioé centro della slide 
(setq P6 (polar P5 ( dtr incl_slide1) (/  SLIDE 2 )));determina il punto P6 cioé un lato slide 
(setq P7 (polar P5 ( dtr incl_slide2) (/ SLIDE 2 )));determina il punto P6 cioé un lato slide

(command "_line" P6 P7 "")  ;disegna l'asse ottico
(command "_line" P6 lamp "");disegna il raggio 1
(setq Lo1 (entlast))	    ;nomino la polilinea LineaOptique1  
(command "_line" P7 lamp "");disegna il raggio 2
(setq Lo2 (entlast))	    ;nomino la polilinea  LineaOptique2

;fin dessin optique   


 
(setq ottica1 (* 100 ottica) slider (* 100 slide))
(setq immagine (/ (*  distanza slider   ) ottica1)) ;dimensione immagine ottica perfetta 

;formato immaggine per stabilire l'altezza 

(initget 1 "16x9 4x3 5x4")
 	(setq screen (getkword "\ntype 16x9 4x3 5x4 ?\n"))	;determina il tipo di schermo scelto 

(cond 
  		((= screen "16x9")
	(setq ALT (* 9 (/ immagine 16)))		 
	)
  		((= screen "4x3")
	(setq ALT (* 3 (/ immagine 4)))		 
	)
  		((= screen "5x4")
	(setq ALT (* 4 (/ immagine 5)))		 
	)
 
)		 


 
(setq ALTh (/  ALT 2))	            ;hauter haut = coord Z de P10 et P12
(setq ALTb (- ALTh ( + Alth Alth) ));hauteur bas = coord Z de P11 et P13
 
 

(setq mezza (/ immagine 2 )); dim mezza immagine proiettata 

(setq P8 (polar puntamento (dtr incl_slide2) mezza )); punto ext immagine
(setq P9 (polar puntamento (dtr incl_slide1 ) mezza )); punto ext immagine


(setq P10 (list (car P9)(cadr P9) Alth));altezza schermo
(setq P11 (list (car P9)(cadr P9) Altb));altezza schermo
(setq P12 (list (car P8)(cadr P8) Alth));altezza schermo
(setq P13 (list (car P8)(cadr P8) Altb));altezza schermo
 

(command "_line" P10 P11 P13 P12 P10  "");disegna quadro immagine

 
;(command "_line" lamp P8 P9 LAMP  "");disegna i raggi
(command "_line" P10 lamp P12  "");disegna i raggi
(command "_line" P11 lamp P13  "");disegna i raggi




 


(command "_UCS" "g" "")	
(setvar "osmode" 3);rimette a 3  lo snap middle fin 
(setq im (rtos immagine  ));converto in stringa il valore dell'immagine
(setq message (strcat "la base misura " IM " metri"));unisco le stringhe
(alert message);message box col messaggio
);fine defun




(defun c:projDB(); elementi noti DISTANZA e BASE
 
(defun DTR (a) (* pi (/ a 180))) ;degres en radiants
(defun RTD (a) (/ (* a 180) pi ));radiants en degres
(setvar "osmode" 3);mette  lo snap a fin e mid
(initget 1)			 ;controllo imput nullo
(setq  Puntamento (getpoint "\nIndicare la posizione dell'immagine:"));punto proiettore
(setq immagine (getreal "\n Indicare la Base dell'immagine:"))

(command "_line" Puntamento pause "" )
(setq LL (entlast))

(setq Line (entget LL))  
(setq Lamp (cdr (assoc 11 Line)))
;(setq Lamp (cdr (assoc 10 Line)))  




 
;(setq Lamp (getpoint "\n Indicare il punto del proiettore:"))
;(command "_line" Puntamento Lamp "");axe optique 
 
(setq distanza(distance Puntamento Lamp))  
(setq OTTICA (/ distanza immagine)) ;ottica proiettore

(setq INCL(angle  LAMP Puntamento));ottengo l'angolo 1 in radianti
(setq INCL_G (angtos incl 0 3));lo stesso angolo in gradi
(setq INCL_r (atof INCL_g));numero reale

(setvar "osmode" 0);toglie lo snap 

;qua bisogna mettere una condizione a seconda del quadrante verso cui va la linea


;Q1

(cond
 ((>= 90 incl_r)
(setq incl_f (+ INCL_r  180 ));ottengo la dir opposta per il p p5
(setq incl_slide1 (+ 90 INCL_r ));ottengo la dir opposta per il p p6
(setq incl_slide2 (+ INCL_r 270  ));ottengo la dir opposta per il p p6
)
;Q2
(( >= 180 incl_r)
 (setq incl_f (+ INCL_r  180 ));ottengo la dir opposta per il p p5
(setq incl_slide1 (+ 90 INCL_r ));ottengo la dir opposta per il p p6
(setq incl_slide2 (- INCL_r 90  ));ottengo la dir opposta per il p p6
)
;FINE Q2

;Q3
((  >= 270 incl_r)
 (setq incl_f (- INCL_r  180 ));ottengo la dir opposta per il p p5
(setq incl_slide1 (+ 90 INCL_r ));ottengo la dir opposta per il p p6
(setq incl_slide2 (- INCL_r 90  ));ottengo la dir opposta per il p p6
)
;FINE Q3
;Q4
((  >= 360 incl_r)
 (setq incl_f (- INCL_r  180 ));ottengo la dir opposta per il p p5
(setq incl_slide1 (- INCL_r  90));ottengo la dir opposta per il p p6
(setq incl_slide2 (- INCL_r 270  ));ottengo la dir opposta per il p p6
)
(t nil)
 )
;FINE Q4


;determina i punti che ci servono per il disegno 
(setq P5 (polar LAMP (dtr incl_f) ottica));determina il punto P5 cioé centro della slide 
(setq P6 (polar P5 ( dtr incl_slide1) (/  SLIDE 2 )));determina il punto P6 cioé un lato slide 
(setq P7 (polar P5 ( dtr incl_slide2) (/ SLIDE 2 )));determina il punto P6 cioé un lato slide

(command "_line" P6 P7 "")  ;disegna l'asse ottico
(command "_line" P6 lamp "");disegna il raggio 1
(setq Lo1 (entlast))	    ;nomino la polilinea LineaOptique1  
(command "_line" P7 lamp "");disegna il raggio 2
(setq Lo2 (entlast))	    ;nomino la polilinea  LineaOptique2

;fin dessin optique   
(initget 1 "16x9 4x3 5x4")
 	(setq screen (getkword "\ntype 16x9 4x3 5x4 ?\n"))	;determina il tipo di schermo scelto 

(cond 
  		((= screen "16x9")
	(setq ALT (* 9 (/ immagine 16)))		 
	)
  		((= screen "4x3")
	(setq ALT (* 3 (/ immagine 4)))		 
	)
  		((= screen "5x4")
	(setq ALT (* 4 (/ immagine 5)))		 
	)
 
)		 

(setq ALTh (/  ALT 2))	            ;hauter haut = coord Z de P10 et P12
(setq ALTb (- ALTh ( + Alth Alth) ));hauteur bas = coord Z de P11 et P13

(setq Baseh (/  immagine 2))	            ;Base haut = coord x de P10 et P12
(setq Baseb (- Baseh(+ Baseh Baseh)))	    ;Base bas = coord X de P10 et P12

 
(setq mezza (/ immagine 2 )); dim mezza immagine proiettata 

(setq P8 (polar puntamento (dtr incl_slide2) mezza )); punto ext immagine
(setq P9 (polar puntamento (dtr incl_slide1 ) mezza )); punto ext immagine
;(command "_line" P8 P9 "")

(setq P10 (list (car P9)(cadr P9) Alth));altezza schermo
(setq P11 (list (car P9)(cadr P9) Altb));altezza schermo
(setq P12 (list (car P8)(cadr P8) Alth));altezza schermo
(setq P13 (list (car P8)(cadr P8) Altb));altezza schermo
 
 

(command "_line" P10 P11 P13 P12 P10  "");disegna quadro immagine

 
;(command "_line" lamp P8 P9 LAMP  "");disegna i raggi
(command "_line" P10 lamp P12  "");disegna i raggi
(command "_line" P11 lamp P13  "");disegna i raggi

(command "_UCS" "g" "")	
(setvar "osmode" 3);rimette a 3  lo snap middle fin 
(setq opt (rtos OTTICA  ));converto in stringa il valore dell'immagine
(setq message (strcat "l'optique plus proche est " opt ));unisco le stringhe
(alert message);message box col messaggio
)





(defun c:projBO()		 ; elementi noti BASE e OPTIQUE

(defun DTR (a) (* pi (/ a 180))) ;degres en radiants
(defun RTD (a) (/ (* a 180) pi ));radiants en degres
(setvar "osmode" 3)		 ;mette  lo snap a fin e mid
(initget 1)			 ;controllo imput nullo
(setq immagine (getreal "\n Indicare la Base dell'immagine:"))
(setq  Puntamento (getpoint "\nIndicare la posizione dell'immagine:"));punto proiettore
(setvar "osmode" 0)
(initget 1);controllo imput nullo
(setq OTTICA (getreal "\nOTTICA?  es 0.33 :\n")) 	;ottica proiettore
(setq  distanza (* immagine OTTICA))		;distanza di proiezione


(command "_line" Puntamento)
(setq a (getangle Puntamento "\n specifier l'angle"))
(setq Lamp (polar Puntamento a distanza))
(command Lamp "")
(setq LL (entlast))

(setq Line (entget LL))  
;(setq Lamp (cdr (assoc 11 Line)))
;(setq Lamp (cdr (assoc 10 Line)))

(setq INCL(angle  LAMP Puntamento));ottengo l'angolo 1 in radianti
(setq INCL_G (angtos incl 0 3));lo stesso angolo in gradi
(setq INCL_r (atof INCL_g));numero reale

;Q1

(cond
 ((>= 90 incl_r)
(setq incl_f (+ INCL_r  180 ));ottengo la dir opposta per il p p5
(setq incl_slide1 (+ 90 INCL_r ));ottengo la dir opposta per il p p6
(setq incl_slide2 (+ INCL_r 270  ));ottengo la dir opposta per il p p6
)
;Q2
(( >= 180 incl_r)
 (setq incl_f (+ INCL_r  180 ));ottengo la dir opposta per il p p5
(setq incl_slide1 (+ 90 INCL_r ));ottengo la dir opposta per il p p6
(setq incl_slide2 (- INCL_r 90  ));ottengo la dir opposta per il p p6
)
;FINE Q2

;Q3
((  >= 270 incl_r)
 (setq incl_f (- INCL_r  180 ));ottengo la dir opposta per il p p5
(setq incl_slide1 (+ 90 INCL_r ));ottengo la dir opposta per il p p6
(setq incl_slide2 (- INCL_r 90  ));ottengo la dir opposta per il p p6
)
;FINE Q3
;Q4
((  >= 360 incl_r)
 (setq incl_f (- INCL_r  180 ));ottengo la dir opposta per il p p5
(setq incl_slide1 (- INCL_r  90));ottengo la dir opposta per il p p6
(setq incl_slide2 (- INCL_r 270  ));ottengo la dir opposta per il p p6
)
(t nil)
 )
;FINE Q4


;determina i punti che ci servono per il disegno 
(setq P5 (polar LAMP (dtr incl_f) ottica));determina il punto P5 cioé centro della slide 
(setq P6 (polar P5 ( dtr incl_slide1) (/  SLIDE 2 )));determina il punto P6 cioé un lato slide 
(setq P7 (polar P5 ( dtr incl_slide2) (/ SLIDE 2 )));determina il punto P6 cioé un lato slide

(command "_line" P6 P7 "")  ;disegna l'asse ottico
(command "_line" P6 lamp "");disegna il raggio 1
(setq Lo1 (entlast))	    ;nomino la polilinea LineaOptique1  
(command "_line" P7 lamp "");disegna il raggio 2
(setq Lo2 (entlast))	    ;nomino la polilinea  LineaOptique2

;fin dessin optique   

(initget 1 "16x9 4x3 5x4")
 	(setq screen (getkword "\ntype 16x9 4x3 5x4 ?\n"))	;determina il tipo di schermo scelto 

(cond 
  		((= screen "16x9")
	(setq ALT (* 9 (/ immagine 16)))		 
	)
  		((= screen "4x3")
	(setq ALT (* 3 (/ immagine 4)))		 
	)
  		((= screen "5x4")
	(setq ALT (* 4 (/ immagine 5)))		 
	)
 
)
 
;

 

(setq ALTh (/  ALT 2))	            ;hauter haut = coord Z de P10 et P12
(setq ALTb (- ALTh ( + Alth Alth) ));hauteur bas = coord Z de P11 et P13

(setq Baseh (/  immagine 2))	            ;Base haut = coord x de P10 et P12
(setq Baseb (- Baseh(+ Baseh Baseh)))	    ;Base bas = coord X de P10 et P12

 
(setq mezza (/ immagine 2 )); dim mezza immagine proiettata 

(setq P8 (polar puntamento (dtr incl_slide2) mezza )); punto ext immagine
(setq P9 (polar puntamento (dtr incl_slide1 ) mezza )); punto ext immagine
;(command "_line" P8 P9 "")

(setq P10 (list (car P9)(cadr P9) Alth));altezza schermo
(setq P11 (list (car P9)(cadr P9) Altb));altezza schermo
(setq P12 (list (car P8)(cadr P8) Alth));altezza schermo
(setq P13 (list (car P8)(cadr P8) Altb));altezza schermo
 
(command "_line" P10 P11 P13 P12 "_C"  "");disegna quadro immagine

 
;(command "_line" lamp P8 P9 LAMP  "");disegna i raggi
(command "_line" P10 lamp P12  "");disegna i raggi
(command "_line" P11 lamp P13  "");disegna i raggi

(command "_UCS" "g" "")	
(setvar "osmode" 3)		;rimette a 3  lo snap middle fin 
(setq dist (rtos distanza  ));converto in stringa il valore dell'immagine
(setq message (strcat "la distance est de " dist " mt" ));unisco le stringhe
(alert message);message box col messaggio  
)


Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité