Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous!

 

J,'aimerai savoir si quelqu'un aurait une routine pour marquer les intersetions de lignes ou polylignes?

 

Je m'explique. J'ai toute une façade en panneau de bardage. j'ai déjà fait le calepinage de la façade, et j'ai tracé des axes vertical et horizontal qui déterminent l'emplacement des fixations. Autrement dit, à chaque intersection de ces axes, j'ai un perçage. Mais le problème c'est qu'il y en a énormément des intersections, et surtout je n'ai pas que cette façade à réaliser. J'aurai bien utilisé la fonction réseau, mais comme chaque panneau n'a pas les mêmes dimensions, l'espacement des trous ne sera pas la même non plus.

 

Donc si quelqu'un a une routine qui me permettrait de marquer ces intersetions d'une croix, ou d'un rond... peu importe... en sélectionnant seulement tous mes axes, je suis preneuse.

 

Merci, et bonne journée

Posté(e)

Hello

 

Voici donc une excellente routine de Bill Kramer amelioree par www.cadstudio.cz

Cette routine fonctionne avec les entites suivantes (et peut etre d'autres) : Ligne, Arc, Cercle, PolyLigne 2D, Ellipses, Splines

 

Chargement par la commande clavier: APPLOAD ...

Commande au clavier : INTLINES

 

Cette routine convient elle a son Altesse Supreme Fiesta13310 ?

 

Bye, lecrabe

 

Autodesk Expert Elite Team

Posté(e)

Bonjours

 

De façon très basique, j'ai fais ceci:

 

((lambda ( / lst_pt js e_name obj js_b nb tmp_name tmp_obj vrt_pt pt)
 (vl-load-com)
 (setq js (ssget) n -1)
 (repeat (sslength js)
   (setq e_name (ssname js (setq n (1+ n))))
   (cond
     (e_name
       (setq
         obj (vlax-ename->vla-object e_name)
         js_b js
         nb -1
       )
       (repeat (sslength js_B)
         (setq tmp_name (ssname js (setq nb (1+ nb))))
         (cond
           (tmp_name
             (setq
               tmp_obj (vlax-ename->vla-object tmp_name)
               vrt_pt (vlax-variant-value (vla-IntersectWith obj tmp_obj 0))
             )
             (if (>= (vlax-safearray-get-u-bound vrt_pt 1) 0)
               (progn
                 (setq pt (vlax-safearray->list vrt_pt))
                 (if pt
                   (if (> (length pt) 3)
                     (repeat (/ (length pt) 3)
                       (setq lst_pt (cons (list (car pt) (cadr pt) (caddr pt)) lst_pt) pt (cdddr pt))
                     )
                     (setq lst_pt (cons pt lst_pt))
                   )
                 )
               )
             )
           )
         )
       )
     )
   )
 )
 (initget 7)
 (setvar "FILLETRAD" (getdist "Rayon des cercles: ")) (setvar "CMDECHO" 0)
 (if (and lst_pt (listp lst_pt)) (foreach el lst_pt (command "_.circle" "_none" (trans el 0 1) (getvar "FILLETRAD"))))
 lst_pt
))

 

Tu peux aussi essayer l'utilitaire Qbrick de Jamal

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

Posté(e)

Bonjour,

 

Donc si quelqu'un a une routine qui me permettrait de marquer ces intersetions d'une croix, ou d'un rond... peu importe... en sélectionnant seulement tous mes axes, je suis preneuse.

 

Sinon sur ce forum, je m’étais également essayé à un problème similaire..

http://cadxp.com/topic/33361-lister-les-intersections-d%E2%80%99objets-dun-jeu-de-selection/

http://cadxp.com/index.php?/topic/33341-lisp-pour-extraire-les-coordonnees-de-lintersection-des-axes/Lisp

 

Dans ton cas je te propose de symboliser l’intersection par une entité point, dont tu pourras faire varier l’aspect (PDMODE) et la taille (PDSIZE) au moyen des variables AutoCAD

 

Le code principal :

(defun c:fiesta ()
 (mapcar '(lambda (pt) (entmake (list '(0 . "POINT") (cons 10 pt)))) (bv:ListInters (ssget)))
)

 

Les routines associées :

;; -----------------------------------------------------------------------------
;; Liste toutes les intersections présentent dans le jeu de sélection
;; (Avec suppression des points en doublons)
;; -----------------------------------------------------------------------------
;; Argument: Un jeu de sélection du type <Selection set: 2a>
;; Retourne: Une liste de point du type ((x1 y1 z1) (x2 y2 z2) (x3 y3 z3) ...)
(defun bv:ListInters (ss / lst sel)
 (cond
   (ss
    (vlax-for obj
              (setq
                sel (vla-get-activeselectionset
                      (vla-get-activedocument (vlax-get-acad-object))
                    )
              )
      (setq lst (cons obj lst))
    )
    (vla-delete sel)
    (remove_doubles
      (apply
        'append
        (mapcar
          '(lambda (x)
             (bv:xyz->Pt
               (vlax-invoke (car x) 'IntersectWith (cadr x) 0)
             )
           )
          (bv:matches lst)
        )
      )
    )
   )
 )
)

;; Transforme une liste de coordonnées en liste de point
;; Argument: Une liste du type (x1 y1 z1 x2 y2 z2 x3 y3 z3 ...)
;; Retourne: Une liste du type ((x1 y1 z1) (x2 y2 z2) (x3 y3 z3) ...)
;;                        soit (p1 p2 p3 ...)
;; Exemples :
;;   (bv:xyz->Pt '(x1 y1 z1 x2 y2 z2)) -> ((X1 Y1 Z1) (X2 Y2 Z2))
;;   (bv:xyz->Pt '(x1 y1 z1)) -> ((X1 Y1 Z1))

(defun bv:xyz->Pt (L)
 (if L
   (cons (list (car L) (cadr L) (caddr L))
         (bv:xyz->Pt (cdddr L))
   )
 )
)

;; matches (renvoie les combinaisons 2 à 2 sans répétition). 
;; Argument: Une liste du type (A B C D)
;; Retourne: Une liste du type ((A B) (A C) (A D) (B C) (B D) (C D))

(defun bv:matches (L)
 (if (cdr L)
   (append (mapcar '(lambda (x) (list (car L) x)) (cdr L))
           (bv:matches (cdr L))
   )
 )
)

;; Extrait du fichier Listes.lsp
;; REMOVE_DOUBLES - Auteur (gile)
;; Suprime tous les doublons d'une liste

(defun remove_doubles (lst)
 (if lst
   (cons (car lst) (remove_doubles (vl-remove (car lst) lst)))
 )
)

 

Voilà maintenant tu n'as plus que l'embarras du choix ;)

 

A+

Apprendre => Prendre => Rendre

Posté(e)

Cette routine convient elle a son Altesse Supreme Fiesta13310 ?

 

ouiiii XD... l'Altesse supreme est servie! :)

 

Bon ben c'est génial tout ça, je vais pouvoir avancer à grand pas!

 

Merci beaucoup encore une fois de votre aide!

Bonne journée à tous et à bientôt ! :)

  • 4 ans après...
Posté(e)

Bonjour,

 

Je voudrais revenir sur ce sujet, et faire la même chose en insérant un bloc a chaque intersection d'axes.Je suis sous autocad 2019 maintenant :D

 

Est-ce possible?

 

Merci d'avance

Posté(e)

Bonjour,

 

Je voudrais revenir sur ce sujet, et faire la même chose en insérant un bloc a chaque intersection d'axes.Je suis sous autocad 2019 maintenant :D

 

Est-ce possible?

 

Merci d'avance

 

C'est bon j'ai trouvé,

J'ai simplement modifier le lisp B)

A bientôt!

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é