Aller au contenu

Déformer une courbe sur l'axe de x


Messages recommandés

Posté(e)

Bonjour , j'aie une question un peu spéciale sur Autocad 2005 .(Je viens juste de m'y remettre apres 7 ans mis de coté)

 

J'aie une courbe de 1 à 1200 sur l'axe des x et 100 à 3000 sur l'axe de y .

Quand je fait un zoom étendu je vois toute ma courbe .L'axe y est bien encadre .

Par contre l'axe x lui n'encadre pas les valeurs extremes (1 à 1200) correctement .

J'aie une impression d'avoir une courbe compassée ; plein d'espace libre à gauche et

plein d'espace libre à droite

 

Ce que je voudrais c'est avoir une courbe qui occupe bien tout l'espace de l'écran .

Pour cela il faut que j'étire la courbe sur l'axe des x qui encadre bien les valeurs 1 à 1200 .(Voir dans la barre d'état des coordonnés négatives du genre - 1438 ,2552 lorsque je bouge la souris n'est pas bon ; mes x seront toujours positifs)

 

Donc il faut que j'étire ma courbe mais sans perdre mes coordonnées .

 

Merci !

Posté(e)

je ne comprend pas pourquoi tu veux occuper tout l'écran avec ton dessin (ta courbe)?!! :blink:

surtout que ca change en fonction de :

-ton type d'écran 4/3 16/9

-Ta résolution

-ou encore d'autocad ouvert en fenêtre non étendu dans windows...

 

Occupe toi uniquement de ta fenêtre dans ta présentation (l'onglet en bas)

Insert ton cadre et cartouche au bon format (A3, A2 etc...) et tu ouvres une fenêtre avec ton objet a l'échelle désirée

 

Si j'ai répondu à coté de la plaque dsl j'ai donc rien compris (rires forts) :D

 

7 ans de coupure !

Bonne reprise dans le monde de la DAO :P

Posté(e)

Voici la courbe en pièce jointe .

Elle represente le CAC40 que j'aie dessiné à l'aide d'une routine VBA .Puis j'aie divisé les coordonnées en 2 .

Le problème est que je trouve la courbe illisible .L'espace objet a plein de place libre ou rien n'est dessiné .

Surtout à droite et à gauche de la courbe .Meme en zoomant , c'est toujours bof .

C'est un peu comme un ressort comprimé sur l'axe des x, il faudrait qu'il reprenne sa forme normal sans faire bouger ses cooordonnés .

 

 

 

NB : j'aie fait une coupure avec Autocad mais pas avec la DAO , je bosse sous MIAO

Posté(e)

hello

 

avec ta courbe tu en fais un bloc

 

ce bloc est a l'echelle 1

donc x=1, y=1, z=1

 

tu peux lui donner des echelles différentes pour X, Y, et Z

 

dans ton cas tu joues avec l'echelle X , et une fois que tu as la bonne "largeur" pour ta coubre tu décomposes le bloc et refait un "pljoin" pour recréer une seule coubre

 

c'est tout

 

a+

 

phil

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Posté(e)

coucou

 

pardon de revenir à la charge

c'est quoi une courbe "compassée" ? :rolleyes:

 

je pense que la solution du bloc est efficace a posteriori

quand la courbe est à l'écran c'est faisable.

 

mais sinon il est possible dans ta routine

d'appliquer un facteur multiplicateur aux coordonnées de l'axe des X

et là je pense que ce sera plus "propre"

 

amicalement

Posté(e)

Didier "Compassée" est inexact .Voici d'autres terme une courbe compactée , comprimée (comme un ressort ou un accordéon)

 

http://fr.wiktionary.org/wiki/compasser (compassée désigne plutot une attitude humaine vulgairement une personne constipée <img src='http://cadxp.com/public/style_emoticons/<#EMO_DIR#>/laugh.gif' class='bbc_emoticon' alt=':(rires forts):' /> )

 

Mais revenons à nos moutons noirs . j'aie réussi à creer mon bloc mais je ne sais pas comment modifier

l'échelle sur mon axe X seulement ...Quelle est le nom de la commande ? (cela m'interresse meme si je pense que hélas cela va modifier la valeur de mes coordonnées )

 

Si j'aie bonne mémoire le seule moyen de manipuler un objet sans lui faire perdre ses coordonnées c'est

le SCU .

Il me faudrait un SCU capable d'appliquer un facteur d'echelle uniquement sur l'axe de X .Ainsi ma courbe s'aggrandit sans toucher aux coordonnées (enfin je crois...) .

 

Ce que je tente d'avoir c'est une sorte de fonction zoom .Les fonctions zoom existantes ne m'ont pas satifait .Je trouve la courbe toujours illisible .

Il me faudrait une sorte de fonction zoom qui agrandit 2 fois plus dans le sens des x que dans le sens des y .

 

 

Titi95 , tu as bien saisis le problème .

ce que tu as besoin c'est une fonction échelle que à l'horizontal sans que la verticale ne bouge

mais je ne suis pas sur que Autocad le face...

 

Peut-être que nous touchons une limite d'Autocad ?

Posté(e)

Saltz,

 

Les SCU dans AutoCAD sont toujours des repères orthonormés, on peut penser que c'est une "limite d'AutoCAD", personnellement, je pense que c'est beaucoup mieux comme ça. Certains utilisateurs ont du mal à maitriser les SCUs, je n'ose même pas imaginer ce que ça serait si on pouvait définir des repères non normés (avec des valeurs différentes suivant les axes) et/ou non orthogonaux.

 

Les réponses à ta demande t'ont été données, tu peux modifier les échelles d'un bloc à l'insertion ou via la fenêtre de propriétés.

 

Ceci dit, je pense comme Didier que si ta courbe est créée par une routine, il serait plus simple et plus propre de donner un facteur différent à tes coordonnées en X et Y.

 

Dans tous les cas, les coordonnées seront modifiées, je ne vois pas en quoi cela peut poser un problème dans la mesure où tu sembles privilégier l'apparence de ta courbe.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

J'aie bien créer un bloc mais je n'aie pas trouvé l'endroit pour jouer sur l'échelle des axes .

J'aie retrouvé la commande xplode (de vieux souvenirs) mais pas son bouton sur la barre d'outils .

 

Ou est la fenetre de propriétés ? Quelle ligne de commande ?

 

Je ne me vois pas trop réinserer un bloc que je viens de creer c'est une étape de plus autant le manipuler directement ...

 

Merci pour votre patience et votre réactivité

Posté(e)

Didier "Compassée" est inexact .Voici d'autres terme une courbe compactée , comprimée (comme un ressort ou un accordéon)

 

http://fr.wiktionary.org/wiki/compasser (compassée désigne plutot une attitude humaine vulgairement une personne constipée <img src='http://cadxp.com/public/style_emoticons/<#EMO_DIR#>/laugh.gif' class='bbc_emoticon' alt=':(rires forts):' /> )

 

Mais revenons à nos moutons noirs . j'aie réussi à creer mon bloc mais je ne sais pas comment modifier

l'échelle sur mon axe X seulement ...Quelle est le nom de la commande ? (cela m'interresse meme si je pense que hélas cela va modifier la valeur de mes coordonnées )

 

Si j'aie bonne mémoire le seule moyen de manipuler un objet sans lui faire perdre ses coordonnées c'est

le SCU .

Il me faudrait un SCU capable d'appliquer un facteur d'echelle uniquement sur l'axe de X .Ainsi ma courbe s'aggrandit sans toucher aux coordonnées (enfin je crois...) .

 

Ce que je tente d'avoir c'est une sorte de fonction zoom .Les fonctions zoom existantes ne m'ont pas satifait .Je trouve la courbe toujours illisible .

Il me faudrait une sorte de fonction zoom qui agrandit 2 fois plus dans le sens des x que dans le sens des y .

 

 

Titi95 , tu as bien saisis le problème .

 

 

Peut-être que nous touchons une limite d'Autocad ?

 

Pour les SCU c'est effectivement une solution.

Le problème est que cela permet SEULEMENT de compresser pour déformer l'échelle sans modifier les cordonnées.

Or dans ton fichier de Test du voudrait l'inverse.

 

Comme j'ai bien envie de voir la courbe du CAC40 faire un beau plongeon :rolleyes:

Cela reste possible mais il va falloir appliquer un facteur de 1000 au coordonnées X pour décompresser la courbe.

 

Dans ton fichier de test utilise la commande CONVERT pour convertir ta polyligne2D en LWPolyligne.

 

Copie-colle le code qui suit en ligne de commande

(defun c:mille_x ( / ent dxf_ent typ_ent up_def pt_lst n new_lst)
(while (not (setq ent (entsel "\nChoisir une polyligne2D: "))))
(setq typ_ent (cdr (assoc 0 (setq dxf_ent (entget (car ent))))) new_lst '())
(cond
	((eq typ_ent "LWPOLYLINE")
		(setq up_def (vl-remove-if '(lambda (x) (or (= (car x) 10) (= (car x) 40) (= (car x) 41) (= (car x) 42))) dxf_ent))
		(setq pt_lst (vl-remove-if-not '(lambda (x) (or (= (car x) 10) (= (car x) 40) (= (car x) 41) (= (car x) 42))) dxf_ent))
		(while pt_lst
			(setq new_lst (append (mapcar '(lambda (x / y) (setq y (nth x pt_lst)) (if (zerop x) (list 10 (* (cadr y) 1000.0) (caddr y)) y)) '(0 1 2 3)) new_lst))
			(setq pt_lst (cddddr pt_lst))
		)
		(setq up_def (subst (cons 90 (/ (length new_lst) 4)) (assoc 90 up_def) up_def))
		(entmod (append (subst (cons 90 (/ (length new_lst) 4)) (assoc 90 up_def) up_def) new_lst))
	)
	(T
		(princ "\nN'est pas une polyligne 2D optimisée!") 
	)
)
(princ)
)

Utilise alors la commande MILLE_X au clavier

Fais un zoom étendu.

Tu auras ta courbe décompressée en X

Par la suite pour jouer avec les SCU pour compresser la courbe tu peux utiliser le code suivant:

(defun c:compress_view ( / echll)
(initget 8)
(setq echll (getpoint "\nEchelle de déformation <1000,1>: "))
(if (eq echll ()) (setq echll '(1000 1)))
 (setvar "ucsfollow" 0)
 (command "_.ucs" "_world")
 (command "_.ucs" "_y"
	(angtos
		(atan
			(/
				(sqrt
					(-
						(* (car echll) (car echll))
						(* (cadr echll) (cadr echll))
					)
				)
				(cadr echll)
			)
		)
		0
		4
	)
)
(if (tblsearch "UCS" (strcat (itoa (fix (car echll))) "-" (itoa (fix (cadr echll)))))
   (command "_.ucs" "_save" (strcat (itoa (fix (car echll))) "-" (itoa (fix (cadr echll)))) "_yes")
   (command "_.ucs" "_save" (strcat (itoa (fix (car echll))) "-" (itoa (fix (cadr echll)))))
 )
(command "_.plan" "_current")
(command "_.ucs" "_previous")
)

Avec la

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

Posté(e)

Didier "Compassée" est inexact .Voici d'autres terme une courbe compactée , comprimée (comme un ressort ou un accordéon)

 

http://fr.wiktionary.org/wiki/compasser (compassée désigne plutot une attitude humaine vulgairement une personne constipée <img src='http://cadxp.com/public/style_emoticons/<#EMO_DIR#>/laugh.gif' class='bbc_emoticon' alt=':(rires forts):' /> )

 

Mais revenons à nos moutons noirs . j'aie réussi à creer mon bloc mais je ne sais pas comment modifier

l'échelle sur mon axe X seulement ...Quelle est le nom de la commande ? (cela m'interresse meme si je pense que hélas cela va modifier la valeur de mes coordonnées )

 

Si j'aie bonne mémoire le seule moyen de manipuler un objet sans lui faire perdre ses coordonnées c'est

le SCU .

Il me faudrait un SCU capable d'appliquer un facteur d'echelle uniquement sur l'axe de X .Ainsi ma courbe s'aggrandit sans toucher aux coordonnées (enfin je crois...) .

 

Ce que je tente d'avoir c'est une sorte de fonction zoom .Les fonctions zoom existantes ne m'ont pas satifait .Je trouve la courbe toujours illisible .

Il me faudrait une sorte de fonction zoom qui agrandit 2 fois plus dans le sens des x que dans le sens des y .

 

 

Titi95 , tu as bien saisis le problème .

 

 

Peut-être que nous touchons une limite d'Autocad ?

 

Pour les SCU c'est effectivement une solution.

Le problème est que cela permet SEULEMENT de compresser pour déformer l'échelle sans modifier les cordonnées.

Or dans ton fichier de Test du voudrait l'inverse.

 

Comme j'ai bien envie de voir la courbe du CAC40 faire un beau plongeon :rolleyes:

Cela reste possible mais il va falloir appliquer un facteur de 1000 au coordonnées X pour décompresser la courbe.

 

Dans ton fichier de test utilise la commande CONVERT pour convertir ta polyligne2D en LWPolyligne.

 

Copie-colle le code qui suit en ligne de commande

(defun c:mille_x ( / ent dxf_ent typ_ent up_def pt_lst n new_lst)
(while (not (setq ent (entsel "\nChoisir une polyligne2D: "))))
(setq typ_ent (cdr (assoc 0 (setq dxf_ent (entget (car ent))))) new_lst '())
(cond
	((eq typ_ent "LWPOLYLINE")
		(setq up_def (vl-remove-if '(lambda (x) (or (= (car x) 10) (= (car x) 40) (= (car x) 41) (= (car x) 42))) dxf_ent))
		(setq pt_lst (vl-remove-if-not '(lambda (x) (or (= (car x) 10) (= (car x) 40) (= (car x) 41) (= (car x) 42))) dxf_ent))
		(while pt_lst
			(setq new_lst (append (mapcar '(lambda (x / y) (setq y (nth x pt_lst)) (if (zerop x) (list 10 (* (cadr y) 1000.0) (caddr y)) y)) '(0 1 2 3)) new_lst))
			(setq pt_lst (cddddr pt_lst))
		)
		(setq up_def (subst (cons 90 (/ (length new_lst) 4)) (assoc 90 up_def) up_def))
		(entmod (append (subst (cons 90 (/ (length new_lst) 4)) (assoc 90 up_def) up_def) new_lst))
	)
	(T
		(princ "\nN'est pas une polyligne 2D optimisée!") 
	)
)
(princ)
)

Utilise alors la commande MILLE_X au clavier

Fais un zoom étendu.

Tu auras ta courbe décompressée en X

Par la suite pour jouer avec les SCU pour compresser la courbe tu peux utiliser le code suivant:

(defun c:compress_view ( / echll)
(initget 8)
(setq echll (getpoint "\nEchelle de déformation <1000,1>: "))
(if (eq echll ()) (setq echll '(1000 1)))
 (setvar "ucsfollow" 0)
 (command "_.ucs" "_world")
 (command "_.ucs" "_y"
	(angtos
		(atan
			(/
				(sqrt
					(-
						(* (car echll) (car echll))
						(* (cadr echll) (cadr echll))
					)
				)
				(cadr echll)
			)
		)
		0
		4
	)
)
(if (tblsearch "UCS" (strcat (itoa (fix (car echll))) "-" (itoa (fix (cadr echll)))))
   (command "_.ucs" "_save" (strcat (itoa (fix (car echll))) "-" (itoa (fix (cadr echll)))) "_yes")
   (command "_.ucs" "_save" (strcat (itoa (fix (car echll))) "-" (itoa (fix (cadr echll)))))
 )
(command "_.plan" "_current")
(command "_.ucs" "_previous")
)

Avec la commande COMPRESS_VIEW tu pourras alors déformer ta courbe sans changer les coordonnées

Avec le facteur 1000pour1 (1000,1) tu retrouvera ta vue initiale

Si tu prends un facteur de 100,1 tu auras une courbe bien lisible.

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

Posté(e)

Ok la solution de faire un bloc puis de l'inserer avec la commande _insert + facteur d'echelle sur l'axe x

permet de me déplier ma courbe .Les coordonnées bougent sur l'axe des x mais cela ne me dérange pas .

C'est plus de boulot à coder pas évident du tout ...

 

J'aie encore plein de question évidemment ...

Par exemple pourquoi est-ce-si important de transformer ma polyligne2D en LWPolyligne ?

 

Respects BonusCad !

 

J'aie bien utilisé ta fonction MILLE_X etj'aie le problème inverse .Maintenant la fonction est tellement

étirée qu'elle est quasiment plate .(sans compter que le langage lisp je ne comprend pas grand chose , je comprend seulement un peu le VBA)

 

La fonction compress_view ne m'aide pas simplement la courbe maintenant plate est zoomée en avant ou en arrière .

Si tu es interessé , je veux bien t'envoyer ce que j'aie codé en vba ...

 

EN tout cas , je crois que je vais laisser tomber , c'est un peu trop raide pour moi .Surtout que je maitrise plus manuellement les lignes de commandes d'autocad .Alors à coder bonjour ...

Posté(e)

 

La fonction compress_view ne m'aide pas simplement la courbe maintenant plate est zoomée en avant ou en arrière .

 

 

Normalement elle devrait fonctionner... !

Si tu ne prends pas l'échelle proposée par défaut, il faut rentrer le rapport sous forme de liste de point en X,Y

par exemple 125,1 la virgule sert de séparateur.

 

J'aie encore plein de question évidemment ...

Par exemple pourquoi est-ce-si important de transformer ma polyligne2D en LWPolyligne ?

Ce n'était pas important, mais juste plus simple pour moi pour travailler dessus avec du code lisp.

 

EN tout cas , je crois que je vais laisser tomber , c'est un peu trop raide pour moi .Surtout que je maitrise plus manuellement les lignes de commandes d'autocad .Alors à coder bonjour ...
Les coordonnées bougent sur l'axe des x mais cela ne me dérange pas .

Si ça te dérange pas, l'insertion déformé en bloc est le plus simple et suffisante alors.

Dans ton premier message il était stipulé : Donc il faut que j'étire ma courbe mais sans perdre mes coordonnées . j'avais envisagé ma réponse dans cet optique.

Sauf qu'après relecture je m’aperçoit que j'aurais du appliquer la rotation du SCU autour de l'axe des X au lieu de celui des Y comme je l'ai fais, de cette façon je n'aurait pas eu besoin de modifier la courbe originale avec MILLE_X

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

Posté(e)
J'aie bien créer un bloc mais je n'aie pas trouvé l'endroit pour jouer sur l'échelle des axes .

 

affiche les propriété de ton objet, il y a des case échelle pour les 3 axes

 

http://img28.imageshack.us/img28/580/nord11.jpg

 

http://img42.imageshack.us/img42/7259/nord13.jpg

Posté(e)

coucou

 

on va dire que je ne comprends rien mais j'y suis habitué

je suis aussi habitué à rabâcher.

 

Saltz: Puisque tu as fait un programme qui dessine cette courbe

tu pars de valeurs que tu déformes en X pour étaler ta courbe sur la largeur de l'écran.

 

qu'est-ce qui t'empêche de faire un autre programme

qui va lire les valeurs dans la courbe créée en tenant compte de la déformation appliquée ?

 

sans compter que ce programme sera valable dans le temps,

on souhaite que les courbes du CAC40 n'aient pas toujours

cette déformation erratique signe d'une fièvre qui perdure.

si demain elle s'avère aussi plate que l'électro-encéphalogramme d'un présentateur de télé

comment vas tu la dessiner, réponse, en déformant les Y...

 

amicalement

Posté(e)

Merci à tous .

 

BonusCad j'aie enfin réussi à faire tourner la routine compress_view .(Je n'aie pas encore bien en main l'utilisation de la ligne de commande c'est pour ça que j'aie échoué la 1 ère fois)

Comme tu viens de nous le démontrer , il est possible d'obtenir des "effets zoom avant/arrière" juste en manipulant le SCU .

 

Pour la fonction MILLE_X à part qu'elle convertit la polyligne2D en LWpolyligne , je n'aie pas saisis ce qu'elle fait .

 

J'aie retrouvé la fenêtre des propriétés en sélectionnant la courbe + clic droit /propriétés .

 

A présent je suis bien armé pour coder dans mon coin si le courage m'en dit .Je considère le topic comme résolu .

 

à++

 

nb: Didier oui pour tes idées mais compliqué .

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é