Aller au contenu

Changer l\'origine d\'une polyligne 2D


thierry.garré

Messages recommandés

Amis lispeurs Bonsoir

 

 

je cherche à modifier le point origine d'une polyligne 2D fermée

 

en principe dans les propriété de la polyligne le sommet appelé numéro 1 est le premier clicquer lors de la création.

 

moi j'aimerai bien pouvoir en changer en en choisissant un autre

 

merci d'avange aux bonnes ames.....

Thierry Garré

 

Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Tu cherches à faire quoi, exactement ?

 

pour info, tu peux extraire tous les sommets d'une lwpolyligne avec ça :

(setq ent (entget (car (entsel "\n choisir lwpolyligne :"))))
(foreach n ent (if (equal (car n) 10) (setq lst (append lst (list (cdr n))))))

(la liste des coordonnées se trouvant dans lst)

 

... si tu cherches à modifier les coordonnées du premier point, tu peux faire un

(setq nvlle-coord '(0 0))
(entmod (subst (cons 10 nvlle-coord) (assoc 10 ent) ent))

 

par contre,

j'aimerai bien pouvoir en changer en en choisissant un autre

... je ne comprends pas....

 

[Edité le 1/3/2007 par Bred]

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

vite fait, et pas testé en profondeur.

 

Edit : Fonctionne désormais avec les polylignes créées dans des systèmes de coordonnées non parallèles au SCG.

 

Edit 2 : Prise en compte de remarques et suggestions de Bonuscad.

 

;;; MEMBER-FUZZ Comme MEMBER avec une tolérance dans la comparaison

(defun member-fuzz (expr lst fuzz)
 (while (and lst (not (equal (car lst) expr fuzz)))
   (setq lst (cdr lst))
 )
)

;;; TRUNC-FUZZ Retourne la liste tronquée à partir de la première occurrence
;;; de l'expression (liste complémentaire de celle retournée par MEMBER-FUZZ)

(defun trunc-fuzz (expr lst fuzz)
 (if (and lst
   (not (equal (car lst) expr))
     )
   (cons (car lst) (trunc-fuzz expr (cdr lst) fuzz))
 )
)

;;; PlineOrg Change le point de départ de la polyligne fermée

(defun c:plineorg (/ erreur os pt ent plst dlst elst)

 (defun erreur	(msg)
   (if	(= msg "Fonction annulée")
     (princ)
     (princ (strcat "\nErreur: " msg))
   )
   (setvar "OSMODE" os)
   (setq *error* m:err
  m:err	nil
   )
 )

 (setq m:err *error*
*error* erreur
 os (getvar "OSMODE"))
(setvar "OSMODE" 1)
 (if (and
(setq pt
       (getpoint
	 "\nSélectionnez le nouveau point de départ sur la polyligne: "
       )
)
(setq ent (car (nentselp pt)))
(setq elst (entget ent))
(= "LWPOLYLINE" (cdr (assoc 0 elst)))
(= 1 (logand 1 (cdr (assoc 70 elst))))
(setq plst (vl-remove-if-not
	     '(lambda (x)
		(member (car x) '(10 40 41 42))
	      )
	     elst
	   )
)
(setq dlst
       (member-fuzz
	 (setq pt
		(cons
		  10
		  (reverse
		    (cdr
		      (reverse (trans pt 1 ent)
		      )
		    )
		  )
		)
	 )
	 plst
	 1e-9
       )
)
(setq elst (vl-remove-if
	     '(lambda (x)
		(member (car x) '(10 40 41 42))
	      )
	     elst
	   )
)
     )
(entmod (append elst dlst (trunc-fuzz pt plst 1e-9)))
(prompt "\nEntité non valide.")
     )
   (setvar "OSMODE" os)
   (setq *error* m:err
  m:err	nil
   )
   (princ)
 )

[Edité le 2/3/2007 par (gile)]

 

[Edité le 4/3/2007 par (gile)]

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

Lien vers le commentaire
Partager sur d’autres sites

J'ai modifié le LISP pour qu'il fonctionne aussi avec les polylignes créées dans des systèmes de coordonnées non parallèles au SCG.

 

Il faut une légère tolérance dans la comparaison du point acquis par la sélection avec ceux de la base de données (fonctions member-fuzz et trunc-fuzz).

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

Lien vers le commentaire
Partager sur d’autres sites

Gilles,

 

Un oubli de parenthèse fermante pour le (and , [le premier dans plineorg], fausse le message final.

"entité non valide" est retourné dans le cas d'un bon déroulement et rien dans le cas contraire.

 

En fait tes instructions font partie du and, mais cela n'empêche pas le bon déroulement.

 

Bon travail, j'aurais peut être simplement rajouté une indication visuelle sur le sommet concerné comme peut le faire pedit lors de la modification des sommets. ;)

 

NB lors de mes test, ta fonction avant modification, fonctionnait dans les scu non parallèles. Mais je n'ai peut être pas assez poussé les tests.

 

 

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

Merci à tous

 

Pour Bred. l'utilité c'est que j'ai un aplicatif qui me permet de gérer cette polyligne comme un contour de parking "par exemple" et je peu jouer sur l'altitude de chaque sommet par interpolation . Sauf le premier qui est fixe dans la liste......

Thierry Garré

 

Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap

Lien vers le commentaire
Partager sur d’autres sites

Re,

Il y a quelque chose qui m'échappe là, je dois me tromper, car pour moi, une "LWPOLYLIGNE" ne peut avoir qu'une seule altitude (Z) pour tout ces sommets, et c'est ce que traite le lisp de (gile).

Par contre, une "POLYLIGNE" (dites "3D") peut avoir des sommets de valeurs Z différent, mais le premier point peut se déplacer sur les Z comme on le désire....

...non ? :casstet:

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

oui bien d'accord avec toi, mais mon soucis c'est que dans mon logiciel (covadis) je saisis une polyligne 2D et le logiciel me la transforme en polyligne 3D avec un assistant pour fixer les z des différents sommets (interpolation de pente etc)

 

par contre le premier sommet de ma polyligne 2D de base qui devient le premier point de ma nouvelle polyligne 3D (plateforme) et je ne peut pas interpoler l'altitude de ce sommet entre deux autres sommets car il est en tête de liste dans mon assistant et c'est tres ennuyeux...

 

je ne sais pas si je suis tres clair , mais je pense qu'il faudrait le voir pour comprendre mieux. Je pense que ceux qui utilise cette partie du logiciel COVADIS doivent voir de quoi je parle...

 

:) :) :)

Thierry Garré

 

Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap

Lien vers le commentaire
Partager sur d’autres sites

OK, je comprends.

En fait, COVADIS aurait dû te proposer dans la liste de ton "assistant" une "copie" du dernier point avant le premier.... (en laissant le dernier point où il est), afin d'extrapoler le premier point entre le dernier et le second....

 

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

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é