Aller au contenu

Echelles non uniformes pour polylignes


(gile)

Messages recommandés

Salut,

 

Un petit truc qui permet de modifier l'échelle de polylignes de manière non uniforme (échelles différentes suivant les axes X et Y du SCU courant).

Ne fonctionne qu'avec les polylignes optimisées qui ne contiennent que des segments droits.

 

;; SCL2PL (gile)
;; Modifie non uniformément l'échelle des ploylignes sélectionnées.
;; Les échelles X et Y sont définies parallèlement aux axes du SCU courant.
;; Ne fonctionne qu'avec les polylignes optimisées ne comportant que des
;; segments droits et dont le plan est parallèle à celui du SCU courant.

(defun c:sclpl (/ ss base scl cnt n elst norm)
 (if (setq ss (ssget (list '(0 . "LWPOLYLINE"))))
   (progn
     (setq base (cond ((getpoint "\nPoint de base : "))
		 ('(0. 0.))
	   )
    scl	 (list
	   (progn
	     (initget 6)
	     (cond ((getdist "\nEchelle en X : "))
		   (1.0)
	     )
	   )
	   (progn
	     (initget 6)
	     (cond ((getdist "\nEchelle en Y : "))
		   (1.0)
	     )
	   )
	 )
    base (mapcar '(lambda (x s) (- (* x s) x)) base scl)
    cnt	 0
     )
     (repeat (setq n (sslength ss))
(setq elst (entget (ssname ss (setq n (1- n)))))
(if (and (equal (trans '(0. 0. 1.) 1 0 T) (setq norm (cdr (assoc 210 elst))) 1e-9)
	 (vl-every 'zerop (gc:massoc 42 elst))
    )
  (entmod
    (append
      (vl-remove-if '(lambda (x) (= (car x) 10)) elst)
      (mapcar
	'(lambda (p)
	   (cons 10
		 (trans	(mapcar '(lambda (x s b) (- (* x s) b)) (trans p norm 1) scl base)
			1
			norm
		 )
	   )
	 )
	(gc:massoc 10 elst)
      )
    )
  )
  (setq cnt (1+ cnt))
)
     )
     (if (	(princ
  (strcat
    "\n"
    (itoa cnt)
    (if	(= 1 cnt)
      " polyligne n'a pu être traitée "
      " polylignes n'ont pu être traitées "
    )
    "(segment(s) en arc et/ou plan non parallèle au SCU)"
  )
)
     )
   )
 )
 (princ)
)

;; gc:massoc
;; Retourne la liste de toutes les valeurs pour le code spécifié dans une liste d'association
;;
;; Arguments
;; code : le code de groupe pour les entrées
;; alst : la liste d'association

(defun gc:massoc (code alst)
 (if (setq alst (member (assoc code alst) alst))
   (cons (cdar alst) (gc:massoc code (cdr alst)))
 )
)

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

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir à toutes et toutes,

 

Salut Gilles,

 

l'échelle de polylignes

 

C'est à dire ?

 

Chez moi (V2008) =>

 

Commande:

SCLPL

Choix des objets: Spécifiez le coin opposé: 3 trouvé(s)

Choix des objets:

Echelle en X : 15

Echelle en Y : 60

Point de base : *Annuler*

Commande:

erreur: no function definition: MASSOC

 

2 petite erreurs (peut-être,..) en début de lisp =>

 

;; [b][color=#FF0000]SCL2PL[/color][/b] (gile)

;; Modifie non uniformément l'échelle des [b][color=#FF0000]ploylignes[/color][/b] sélectionnées.

;; Les échelles X et Y sont définies parallèlement aux axes du SCU courant.

;; Ne fonctionne qu'avec les polylignes optimisées ne comportant que des

;; segments droits et dont le plan est parallèle à celui du SCU courant.



(defun c:sclpl (/ ss scl base cnt n elst norm)

 

;; SCLPL (gile)

;; Modifie non uniformément l'échelle des polylignes sélectionnées.

;; Les échelles X et Y sont définies parallèlement aux axes du SCU courant.

;; Ne fonctionne qu'avec les polylignes optimisées ne comportant que des

;; segments droits et dont le plan est parallèle à celui du SCU courant.



(defun c:sclpl (/ ss scl base cnt n elst norm)

Civil 3D 2025 - COVADIS_18.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Oupss !...

J'avais oublié de préfixer certains appels à massoc (-> gc:massoc).

 

Sinon, la commande fonctionne comme la commande ECHELLE (_SCALE) :

- sélection des objets

- spécification du point de base

- spécification des échelles en X et Y (au lieu d'un échelle globale)

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

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir (gile)

 

Je ne comprends pas pourquoi tu as crée cette fonction ! :o

 

Mais je l'ai testée rapidement...

 

Je me suis donc dit, je vais compresser un ressort dessiné schématiquement.

 

Cela fonctionne si on respecte le système de coordonnée, mais si mon ressort est incliné, ben c'est pas top (déforme mon ressort).

 

Passer par un bloc (en acceptant la décomposition d'échelle déformée), me donne un meilleur résultat.

 

Je pense qu'il faudrait au minimum pouvoir choisir l'orientation des axes de déformation pour que cette fonction puisse devenir intéressante.

 

Bonne soirée ;)

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

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é