CADxp: Intersection de ligne - CADxp

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Intersection de ligne Comment les repérer?

#1 L'utilisateur est hors-ligne   fiesta13310 

  • ceinture noire
  • Groupe : Membres
  • Messages : 310
  • Inscrit(e) : 09-février 12

Posté 23 avril 2014 - 07:26

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
0

#2 L'utilisateur est hors-ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 8320
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 23 avril 2014 - 08:18

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

Fichier(s) joint(s)


Autodesk Expert Elite Team
0

#3 L'utilisateur est hors-ligne   bonuscad 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 4655
  • Inscrit(e) : 20-juin 03

Posté 23 avril 2014 - 08:37

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
0

#4 L'utilisateur est hors-ligne   VDH-Bruno 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 920
  • Inscrit(e) : 29-avril 10

Posté 23 avril 2014 - 08:45

Bonjour,

Voir le messagefiesta13310, le 23 avril 2014 - 07:26 , dit :

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/top...u-de-selection/
http://cadxp.com/ind...n-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
0

#5 L'utilisateur est hors-ligne   fiesta13310 

  • ceinture noire
  • Groupe : Membres
  • Messages : 310
  • Inscrit(e) : 09-février 12

Posté 23 avril 2014 - 08:52

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 ! :)
0

#6 L'utilisateur est hors-ligne   fiesta13310 

  • ceinture noire
  • Groupe : Membres
  • Messages : 310
  • Inscrit(e) : 09-février 12

Posté 09 avril 2019 - 15:06

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
0

#7 L'utilisateur est hors-ligne   fiesta13310 

  • ceinture noire
  • Groupe : Membres
  • Messages : 310
  • Inscrit(e) : 09-février 12

Posté 09 avril 2019 - 15:19

Voir le messagefiesta13310, le 09 avril 2019 - 15:06 , dit :

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!
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)