Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

J'essaye de me créer un outils de cotation de masse.

 

Je butte déjà sur la création d'une polyligne qui passera par le point d'insertion de chaque bloc sélectionné.

 

Il est possible que je n'adopte pas la meilleure méthode. Voici celle que j'ai choisie :

- balayage des blocs un par un, avec à chaque fois création d'un point supplémentaire de la polyligne

- cotation rapide de cette polyligne

 

(defun c:cotmas ()

 (setq OSMOLD (getvar "Osmode"))
 (setvar "Osmode" 0)

(princ "Sélectionnez les blocs à côter")
(setq jeu (ssget '((0 . "INSERT"))))

(if (< (sslength jeu ) 3)(progn
		   (princ "Il faut sélectionner au moins 2 blocs\n")
		   (exit)))

(setq n 0)
(repeat (sslength jeu)

(setq bloc (entget (ssname jeu n)))

   (setq X (cdr (assoc 41 bloc)))
   (setq Y (cdr (assoc 42 bloc)))
   (setq Z (cdr (assoc 43 bloc)))  

 ;si c'est la première entité : entmake polyligne sinon entmake vertex
(if (eq n 0) (entmake '((0 . "POLYLINE")(67 . 0) (10 X Y Z) (40 . 0.0) (41 . 0.0)(210 0.0 0.0 1.0) (71 . 0) (72 . 0) (73 . 0) (74 . 0)(75 . 0))) ; INCORRECT
	(entmake '((0 . "VERTEX")(67 . 0) (10 X Y Z)))) ; INCORRECT

(setq n (+ 1 n)) ; bloc suivant
 
(entmake '((0 . "SEQEND")(67 . 0) (8 . "PL"))) ; ; INCORRECT séquence de fin de la polygne

 

J'aurais pu passer par une méthode plus rigoureuse :

- balayage des blocs sélectionnés et enregistrement des coordonnées dans une liste

- création de la polyligne selon la liste.

 

Si une âme charitable pouvait me guider (sans me faire le lisp).

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

bonjour LUDWIG,

voici une version en tentant de simplement répondre à tes questions et à ce que tu as posté.

Il reste encore des problèmes potentiels.

Comme je ne sais pas ce qui détermine l'ordre de tes sommets, j'ai donc choisi de les trier suivant l'axe des x.

 

(defun c:cotmas ( / osmodeSave ss n eList xyz lwpolyPts)

 ; sauvegarde osmode pour ne pas prendre le risque d'interférer avec le lisp
 (setq osmodeSave (getvar "osmode"))
 (setvar "osmode" 0)
 
 (setq ss (ssget '((0 . "INSERT"))))
 (setq n 0 lwpolyPts nil)
 (repeat (sslength ss)
   (setq eList (entget (ssname ss n)))
   ; les coordonnées du point d'insertion sont dans le code du groupe 10
   (setq xyz (cdr (assoc 10 eList)))
   ; construction de la liste des sommets de la lwpolyligne
   (setq lwpolyPts (cons (list 10 (car xyz) (cadr xyz)) lwpolyPts))
   (setq n (1+ n))
 )
 
 ; tri des sommets suivants les x, ou autre chose à déterminer...
 (setq lwpolyPts (vl-sort lwpolyPts '(lambda (x1 x2) (< (cadr x1) (cadr x2)))))
 
 ; création de la lwpolyligne, le code 90 contient le nombre de sommets
 (entmake
   (append
     (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length lwpolyPts)))
     lwpolyPts
   )
 )
 
 ; restauration du osmode
 (setvar "osmode" osmodeSave)
 (princ)
)

 

Bruno Toniutti

 

[Edité le 22/10/2008 par Bruno_T]

Posté(e)

Salut Ludwig,

 

Il y avait ce sujet un peu similaire, mais lui s'appuyait sur des matricules (attribut du bloc) pour relier des insertions de bloc dans l'ordre des attributs.

Cela ne répond pas à ta question précise mais pourrait t'aider à orienter ta démarche.

 

Car le big problème (je trouves) est l'ordre des insertions des points qui ne correspondra pas forcément à l'ordre de montage des points de la polyligne. Dès lors comment la mettre en place?...

 

 

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

Posté(e)

Merci les amis !

 

Bon ce n'était pas forcement utile de me faire le lisp, car je voulais tenter tout seul.

Cependant ça m'arrange quand même car j'essayais de m'y remettre (j'ai arrêté en changeant de boulot il y a deux ans et demi) et c'est plutôt dur...

 

Concernant l'ordre des point s de la polyligne : aucune importance. En effet, elle me sert à faire une "cotation rapide" et sera ensuite supprimée. J'ai testé, les cotes créées sont bonnes, même si la polyligne fait des boucles.

Autocad 2021 - Revit 2022 - Windows 10

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é