Aller au contenu

Annoter une polyligne ou multiligne


Max73

Messages recommandés

L idée et la, mais serait t il possible plutôt que de choisir un bloc qui et déjà sur la polyligne, un bloc qui vient d une bibliothèque ,( sélectionne le bloc comme sélectionne le diamètre des polyligne dans précèdent lisp).

et aussi une fois pose pouvoir encore un positionne un autre a la suite.

Merci.

Lien vers le commentaire
Partager sur d’autres sites

C'est faisable, mais dans ce cas je me limite à la bibliothèque de bloc interne au dessin et ne propose que les blocs sans attributs.

;; ListBox (gile)
;; Boite de dialogue permettant un ou plusieurs choix dans une liste
;;
;; Arguments
;; title : le titre de la boite de dialogue (chaîne)
;; msg ; message (chaîne), "" ou nil pour aucun
;; keylab : une liste d'association du type ((key1 . label1) (key2 . label2) ...)
;; flag : 0 = liste déroulante
;; 1 = liste choix unique
;; 2 = liste choix multipes
;;
;; Retour : la clé de l'option (flag = 0 ou 1) ou la liste des clés des options (flag = 2)
;;
;; Exemple d'utilisation
;; (listbox "Présentation" "Choisir une présentation" (mapcar 'cons (layoutlist) (layoutlist)) 1)
(vl-load-com)
(defun str2lst (str sep / pos)
  (if (setq pos (vl-string-search sep str))
    (cons
      (substr str 1 pos)
      (str2lst (substr str (+ (strlen sep) pos 1)) sep)
    )
    (list str)
  )
)
(defun ListBox (title msg keylab flag / tmp file dcl_id choice)
  (setq
    tmp (vl-filename-mktemp "tmp.dcl")
    file (open tmp "w")
  )
  (write-line
    (strcat "ListBox:dialog{label=\"" title "\";")
    file
  )
  (if (and msg (/= msg ""))
    (write-line (strcat ":text{label=\"" msg "\";}") file)
  )
  (write-line
    (cond
      ((= 0 flag) "spacer;:popup_list{key=\"lst\";")
      ((= 1 flag) "spacer;:list_box{key=\"lst\";width=32;")
      (T "spacer;:list_box{key=\"lst\";width=32;multiple_select=true;")
    )
    file
  )
  (write-line "}ok_cancel_err;}" file)
  (close file)
  (setq dcl_id (load_dialog tmp))
  (if (not (new_dialog "ListBox" dcl_id))
    (exit)
  )
  (start_list "lst")
  (mapcar 'add_list (mapcar 'cdr keylab))
  (end_list)
  (action_tile
    "accept"
    "(or (= (get_tile \"lst\") \"\")
      (if (= 2 flag)
        (progn
          (foreach n (str2lst (get_tile \"lst\") \" \")
            (setq choice (cons (nth (atoi n) (mapcar 'car keylab)) choice))
          )
          (setq choice (reverse choice))
        )
        (setq choice (nth (atoi (get_tile \"lst\")) (mapcar 'car keylab)))
      )
    )
    (done_dialog)"
  )
  (start_dialog)
  (unload_dialog dcl_id)
  (vl-file-delete tmp)
  choice
)
(defun c:Max73 ( / js ent dxf_210 vla_obj flag tbl_blk lst_blk sel_blk blk tmp nw_pt param deriv alpha )
  (vl-load-com)
  (princ "\nSélectionner un objet curviligne sur lequel vous voulez effectuer une animation.")
  (while
    (not
      (setq js
        (ssget "_+.:E:S"
          (list
            (cons -4 "<OR")
              (cons -4 "<AND")
                (cons 0 "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE")
                (cons -4 "<NOT")
                  (cons -4 "&") (cons 70 112)
                (cons -4 "NOT>")
              (cons -4 "AND>")
              (cons 0 "SPLINE")
            (cons -4 "OR>")
          )
        )
      )
    )
  )
  (setq
    ent (ssname js 0)
    dxf_210 (cdr (assoc 210 (entget ent)))
    vla_obj (vlax-ename->vla-object ent)
    flag T
  )
  (while (setq tbl_blk (tblnext "BLOCK" flag))
    (if (zerop (cdr (assoc 70 tbl_blk)))
      (setq lst_blk (cons (cdr (assoc 2 tbl_blk)) lst_blk))
    )
    (setq flag nil)
  )
  (cond
    (lst_blk
      (setq lst_blk (vl-sort lst_blk '<))
      (while (setq sel_blk (listbox "Bibliothèque interne de blocs" "Choisir un bloc" (mapcar 'cons lst_blk lst_blk) 1))
        (setq blk
          (vlax-ename->vla-object
            (entmakex
              (list
                (cons 0 "INSERT")
                (cons 100 "AcDbEntity")
                (cons 8 (getvar "CLAYER"))
                (cons 100 "AcDbBlockReference")
                (cons 2 sel_blk)
                (cons 10 (trans '(0.0 0.0 0.0) 0 dxf_210))
                (cons 50 (angle (trans '(0.0 0.0 0.0) 0 dxf_210) (trans '(0.0 1.0 0.0) 0 dxf_210)))
                (cons 210 dxf_210)
              )
            )
          )
        )
        (princ "\nGuider votre objet")
        (while (= 5 (car (setq tmp (grread t 5 1))))
          (cond
            ((= 5 (car tmp))
              (setq
                nw_pt (vlax-curve-getClosestPointTo vla_obj (trans (cadr tmp) 1 0))
                param (vlax-curve-getparamatpoint vla_obj nw_pt)
                deriv (vlax-curve-getfirstderiv vla_obj param)
                alpha (atan (cadr deriv) (car deriv))
              )
              (vlax-put blk 'InsertionPoint nw_pt)
              (vlax-put blk 'Rotation alpha)
            )
            (T (princ "\nArrêt anormal de la commande "))
          )
        )
      )
    )
    (T (princ "\nAucun bloc simple sans attributs défini dans ce dessin"))
  )
  (prin1)
)

 

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

  • 3 semaines aprè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 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é