Aller au contenu

Echelles non uniformes pour polylignes


Messages recommandés

Posté(e)

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

Posté(e)

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

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

Posté(e)

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

Posté(e)

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

Posté(e)

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

 

Les axes de déformation sont les axes X et Y du SCU courant.

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

Posté(e)

 

Hello

 

Sinon apres qq tests sur MAP 2066, ca marche bien et en effet la deformation suit les axes du SCU courant !

 

J'aime bien ce developpement ... :)

 

Le Decapode

 

Autodesk Expert Elite Team

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é