lecrabe Posté(e) le 1 mars 2019 Posté(e) le 1 mars 2019 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
lecrabe Posté(e) le 1 mars 2019 Auteur Posté(e) le 1 mars 2019 Hello Et si qq'un a le courage !? SI Polyligne 3D avec 4 vertex ou PLUS, alors on genere 2 lignes (V1 to V3 et V2 to V4) a l'altitude Z du 1er vertex ... Merci d'avance, Bon WE, Bye, lecrabe Autodesk Expert Elite Team
bonuscad Posté(e) le 1 mars 2019 Posté(e) le 1 mars 2019 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
didier Posté(e) le 1 mars 2019 Posté(e) le 1 mars 2019 Coucou Ça n'a pas l'air compliqué a priori, du moins ce que j'en comprendsPar contre avant de six mètres de s'y mettre j'aimerais recevoir un fichier ou voir une imageCar lorsque tu écris ligne du vertex 1 au vertex 3 et du vertex 2 au vertex 4Cela 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 4Donc 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 Éternel débutant... Mon site perso : Programmer dans AutoCAD
lecrabe Posté(e) le 1 mars 2019 Auteur Posté(e) le 1 mars 2019 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/sommetALORS 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
Olivier Eckmann Posté(e) le 1 mars 2019 Posté(e) le 1 mars 2019 Salut, la 6ème ligne avant la fin, tu remplaces : ((= ent "LWPOLYLINE") (trc_rect obj))par ((and (>= (cdr (assoc 90 obj)) 4) (= ent "LWPOLYLINE")) (trc_rect obj)) Olivier
lecrabe Posté(e) le 2 mars 2019 Auteur Posté(e) le 2 mars 2019 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
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant