Aller au contenu

Déformer une courbe sur l'axe de x


Messages recommandés

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 !

Lien à poster
Partager sur d’autres sites

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

Lien à poster
Partager sur d’autres sites

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

Lien à poster
Partager sur d’autres sites

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

Autodesk Architecture 2019 sous windows 10 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien à poster
Partager sur d’autres sites

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

Lien à poster
Partager sur d’autres sites

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 ?

Lien à poster
Partager sur d’autres sites

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 -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien à poster
Partager sur d’autres sites

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é

Lien à poster
Partager sur d’autres sites

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

Lien à poster
Partager sur d’autres sites

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

Lien à poster
Partager sur d’autres sites

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 ...

Lien à poster
Partager sur d’autres sites

 

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

Lien à poster
Partager sur d’autres sites
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

"Rien n’est impossible à l’homme qui n’a pas à le faire lui-même." (Marcel Achard)

 

quelques trucs sur autocad

Lien à poster
Partager sur d’autres sites

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

Lien à poster
Partager sur d’autres sites

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é .

Lien à poster
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
×
×
  • Créer...