Aller au contenu

SVP Correction sur Routine CROIX ?


lecrabe

Messages recommandés

Hello Les Pros du Lisp/VLisp

 

J'ai une petite routine CROIX qui marche bien ou presque ...

 

Mais parfois/souvent elle deconne sur les simples rectangles !!

 

Elle doit traiter les cercles et les Polylignes 2D

avec 4 vertex ou PLUS (et les rectangles/trapezes/etc avec 4 vertex)

en dessinant une simple croix en ligne : vertex 1 au vertex 3 ET vertex 2 au vertex 4

 

DE plus SVP il ne faut pas traiter les Polylignes avec seulement 3 Vertex !!

La routine CROIX ACTUELLE dessine une ligne sur un Cote du triangle !!

 

>>> ; erreur: groupe DXF incorrect: (11)

 

Merci d'avance de la petite correction, Bye, lecrabe

 


;; 
;; Dessiner une croix (a 45 degres) sur des cercles
;; et sur les 4 premiers sommets d une polyligne (1 a 3 et 2 a 4)
;; http://cadxp.cadmag.info/modules.php?op=modload&name=XForum&file=viewthread&tid=28279#pid124035
;; par Titifonky le 11/06/2010
;; 

(defun c:croix	(/ sel i obj ent)

 ;; Trace une croix dans le cercle
 (defun trc_cercle  (obj)
   (setq d  (/ (cdr (assoc '40 obj)) (sqrt 2.0))
  ct (cdr (assoc '10 obj)))
   (entmake (list '(0 . "LINE")
	   (cons '10 (mapcar '+ ct (list d d 0)))
	   (cons '11 (mapcar '- ct (list d d 0)))
	   )
     )
   (entmake
     (list '(0 . "LINE")
    (cons '10 (mapcar '+ ct (list d (* -1 d) 0)))
    (cons '11 (mapcar '- ct (list d (* -1 d) 0)))
    )
     )
   )

 ;; Trace une croix dans un rectangle
 (defun trc_rect  (obj)
   (setq obj (vl-remove-if-not
	'(lambda (x) (= (car x) 10))
	obj))
   (entmake (list '(0 . "LINE")
	   (nth 0 obj)
	   (cons '11 (cdr (nth 2 obj)))
	   )
     )
   (entmake (list '(0 . "LINE")
	   (nth 1 obj)
	   (cons '11 (cdr (nth 3 obj)))
	   )
     )
   )

 ;; Fonction principale
 (setq	i   -1
sel (ssget '((-4 . "<OR")
	     (0 . "CIRCLE")
	     (0 . "LWPOLYLINE")
	     (-4 . "OR>")
	     )
	   )
)
 
 (if sel
   (while (setq i   (1+ i)
	 obj (ssname sel i))
     (setq obj	(entget obj)
    ent	(cdr (assoc '0 obj)))
     (cond
((= ent "CIRCLE") (trc_cercle obj))
((= ent "LWPOLYLINE") (trc_rect obj))
)
     )
   )
 (princ)
 )

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Et si tu améliorait simplement ton filtre?

Par exemple:

(ssget '((-4 . "<OR")
                	(0 . "CIRCLE")
                	(-4 . "<AND")
                  	(0 . "LWPOLYLINE")
                  	(90 . 4) ; ne possède que 4 sommets
                  	(-4 . "&") ;opération logique AND sur le bit du code 70 -> 1 ou 129 (génération type de ligne) seront reconnue comme fermée
                    	(70 . 1)
                	(-4 . "AND>")
                	(-4 . "OR>")
                	)
              	)

C'est qu'un exemple...

 

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

Coucou

 

Ça n'a pas l'air compliqué a priori, du moins ce que j'en comprends

Par contre avant de six mètres de s'y mettre j'aimerais recevoir un fichier ou voir une image

Car lorsque tu écris ligne du vertex 1 au vertex 3 et du vertex 2 au vertex 4

Cela signifie : du point de départ du vertex 1 au point départ du vertex 3 et du point de départ du vertex 2 au point départ du vertex 4

Donc il faut gérer les sens de construction s'il y a plus de quatre vertex, non ?

 

Est-ce que tu veux voir quelque chose de volatil avant de valider le dessin ?

Est-ce qu'il faut avoir la possibilité de sélectionner plusieurs polylignes ? (dans ce cas le temporaire sera plus gênant qu'autre chose)

 

Amicalement

 

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Qq rappels, sur ce que je desire :

 

- A partir d'une selection AutoCAD classique / normale ...

( DONC on peut selectionner des centaines/milliers d'objets pour action )

- Traiter (Filtrer) les Cercles et les Polylignes 2D (et 3D si possible en se basant sur le Z du 1er vertex 3D)

( Pour les Cercles , c facile on fait la croix a 45 degres - Voir routine actuelle )

- Ne pas traiter du tout les Polylignes avec 2 ou 3 Vertex/Sommet !

- Traiter BIEN SUR les Polylignes rectangles/trapezes/etc (avec 4 cotes) ...

- MAIS traiter AUSSI les Polylignes avec 5/6/7/etc vertex/sommet

ALORS dans ce cas, on ne s'occupe QUE des 4 PREMIERS Vertex/sommet !

- Dessiner sur le calque courant 2 lignes : V1 a V3 et V2 a V4 ...

par exemple si Polyligne 2D (ou 3D) en forme de rectangle, cela cree les 2 diagonales ...

 

J'espere etre CLAIR dans mon CDC/CCTP !?

 

A propos si la Polyligne est DEBILE du genre croisement/papillon : TANT PIS !

On dessine quand meme les 2 lignes qui seront dessus sans doute !?

 

Merci d'avance, Bon WE, Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello Olivier

 

1) MERCI pour la correction !

 

2) Apres si qq'un pouvait ajouter le traitement special pour les 3D Polys !?

Ca serait Tip-Top ... Mais BON ce n'est pas VITAL !

Car il y a des routines Lisp pour mettre A PLAT les 3D Polys !

ET avec Covadis : CovaPolyEn2D

 

Encore MERCI, Bon WE, Bye, lecrabe

Autodesk Expert Elite Team

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é