Aller au contenu

Est-ce le Viewtwist qui fait danser ?


willy95

Messages recommandés

Bonjour à tous et Bonne et Heureuse Année 2020,

 

Et oui me revoici par ici, avec un problème que n'arrive pas à résoudre, et j'ai bien chercher partout sur le forum et sur internet, mais je suis resté sans solution positive, alors j'ose poser ma question qui je l'espère sera clair.

 

J'ai bricoler ce code qui à pour but de récupérer la valeur de l'altitude dans une étiquette d'un bloc point et de la réécrire en simple texte en réinsérant un point sur le point d'insertion du bloc avec ou sans orientation spécifique.

 

Après mes analyses je pense que le problème dois se situer au niveau du "VIEWTWIST" mais je n'y comprends rien.

 

Tous fonctionne mais le texte ne s'écrit pas au même endroit suivant le type de fichier, il ne reste jamais à la même distance du point d'insertion dans chacun des fichiers différents.

 

Alors si pour ce début d'année 2020, une Âme charitable pourrait m'expliquer pourquoi, ce serait bien sympathique.

 

 

points10.jpg

 

(setvar "CMDECHO" 0)

(defun DTR (a) (/ (* 200 (getvar "VIEWTWIST")) pi))

(defun DTR2 (a) (/ (* 0 (getvar "VIEWTWIST")) pi))

(Defun C:altip ( / OldAccr p di p11 p12 di11 p14 p15 Ang Ang1 Ang2 Ang3 Ang4 pins p16 p17 blocent Txt_Alti ht)

(SetVar "CMDECHO" 0)

(Setq Actucalque (GetVar "CLayer"))					

(Setq Actuaccr (GetVar "OSMODE"))

(Setvar "OSMODE" 8)

(Setvar "OSMODE" 512)

(setq p11 (getpoint "\n1er point pour l'Orientation du Texte ou [Entrée] pour mettre à l'horizontale : "))

(IF (= p11 nil)

(progn

(setq blocent (car (entsel"\nChoisir le Point [bloc] :"))
       
ht 1
       
Txt_Alti (cdr (assoc 1 (entget (entnext (entnext blocent)))))
       
pins (cdr (assoc 10 (entget blocent))))     

(setq p16 (polar pins (+ 100 (/ (* 200 (getvar "VIEWTWIST")) pi)) -0.30))

(setq p17 (polar p16 (DTR2 0.0) 0.40))

(setq Ang3 (+ 100 (/ (* 200 (getvar "VIEWTWIST")) pi))))

(progn
	
(setq p12 (getpoint "\t2ème  point pour l'Orientation : "))
	
(setq di11 (/ (Distance p11 p12) 2))

(setq p13 (polar p11 (angle p11 p12) di11))
	
(setq p14 (polar p13 (+ (angle p13 p12) (/ pi 2.0)) (/ 1.0)))

(setq p15 (polar p14 (- (angle p13 p12) (/ pi 2.0)) (/ 2.0)))

(setq Ang1 (angle p11 p12))

(setq Ang2 (angtos Ang1 2 2))

(setq Ang3 (atof Ang2))

(setq Ang4 (+ Ang3 300))

(setq blocent (car (entsel"\nChoisir le Point [bloc] :"))
       
ht 1
       
Txt_Alti (cdr (assoc 1 (entget (entnext (entnext blocent)))))
       
pins (cdr(assoc 10 (entget blocent))))

(setq p16 (polar pins (angle p11 p12) 0.05))

(setq p17 (polar p16 (+ (angle p11 p12) (/ pi 2.0)) 0.2))))

(IF (= (TblSearch "style" "Altimetrie") nil)

(Command "-style" "Altimetrie" "simplex8" "0.20" "1" "20" "" "" ""))

(IF (= (TblSearch "layer" "M-NIV_TEXTE") nil)
   
(command "_-layer" "_make" "M-NIV_TEXTE" "_color" 4 "" ""))

(command "_-layer" "CH" "M-NIV_TEXTE" "")

(command "_point" pins)

(command "_.text" "_s" "Altimetrie" p17 Ang3 (rtos (atof Txt_Alti) 2 2))

(setvar 'pdmode 32)

(setvar "PDSIZE" 0.1)  
   		
(princ)

)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Également tous mes vœux pour cette nouvelle année.

 

Ce qui me chiffonne dans ton code sans savoir ce que tu veux faire exactement sont celle effectivement qui utilise VIEWTWIST.

tu a écris:

(setq p16 (polar pins (+ 100 (/ (* 200 (getvar "VIEWTWIST")) pi)) -0.30))
;et
(setq Ang3 (+ 100 (/ (* 200 (getvar "VIEWTWIST")) pi))))

Je crois comprendre que tu as voulu convertir en grade, mais sache que la fonction (polar) ne prends que les angle en radian, donc la conversion est inutile. De plus ton code ne fonctionnerais correctement que dans un dessin défini en grade.

Pour moi sans savoir le but exact, j'aurais écris simplement ceci:

(setq p16 (polar pins (+ (* 0.5 pi) (getvar "VIEWTWIST")) -0.30))(setq Ang3 (+ (* 0.5 pi) (getvar "VIEWTWIST"))))

Je ne sais pas si cette remarque va mettre fin à ton dysfonctionnement...

 

 

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Alors pour moi ce qui me chiffonne le plus au premier regard c'est de voir 2 systèmes de coordonnées cohabiter(SCU & SCG), sans conversion pour passer de l'un à l'autre. D'expériences si les 2 systèmes ne sont pas superposés, tu risques des décalages non désiré..

 

C'est ce que tu sembles d'écrire ici:

Tous fonctionne mais le texte ne s'écrit pas au même endroit suivant le type de fichier, il ne reste jamais à la même distance du point d'insertion dans chacun des fichiers différents.

 

 

Exemple points exprimés et calculés dans le SCG, (le point est récupéré depuis le code DXF de l'entité)

pins (cdr(assoc 10 (entget blocent))))
(setq p16 (polar pins (angle p11 p12) 0.05))
(setq p17 (polar p16 (+ (angle p11 p12) (/ pi 2.0)) 0.2))))

 

Points exprimés dans le SCU car transmit à la fonction command

(command "_point" pins)
(command "_.text" "_s" "Altimetrie" p17 Ang3 (rtos (atof Txt_Alti) 2 2)) 

 

Je te conseil de regarder ou de faire une recherche sur la fonction trans, ou d'utiliser la fonction entmake pour la création d'entité, afin de rester dans le même système de coordonnée.

 

A+ Bruno

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

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é