Classement
Contenu populaire
Affichage du contenu avec la meilleure réputation le 16/04/2024 dans toutes les zones
-
Bonjour, Je te propose un code qui va modifier tes attributs concernés et placer un MTEXT avec le diamètre du tuyau au milieu de la polyligne 3D. Je ne modifie pas la polyligne3D mais lui ajoute une XDATA qui lui attribue le diamètre du tuyau en mm en tant que réel. A toi de faire ce que tu veux de cette donnée XData (modifier ta polyligne, ou exporter la donnée ou encore autre chose) Sur ton dessin cela à l'air de fonctionner, mais le traitement peut être long (forcément, tu as énormément de blocs dans ton dessin et de polylignes3D) Pour info sur ma machine cela dure environ 4mn avec le processeur qui s’emballe à 20%), mais si tu es patient cela fait le job: Autocad n'es pas planté mais il bosse... A la fin toutes tes polylignes3D concernées sont sélectionnées, tu peux donc les changer de couleur, de calque ou autre propriétés pour mieux les repérer. Cela va t-il t'avancer? (defun l-coor2l-pt (obj lst / ) (if lst (cons (list (car lst) (cadr lst) (caddr lst) ) (l-coor2l-pt obj (cdddr lst)) ) ) ) (defun make_mtext (pt rot txt lay / ) (setq nw_obj (vla-addMtext Space (vlax-3d-point pt) 0.0 txt ) ) (mapcar '(lambda (pr val) (vlax-put nw_obj pr val) ) (list 'AttachmentPoint 'Height 'DrawingDirection 'StyleName 'Layer 'Rotation 'BackgroundFill) (list 5 0.3 5 "Réseaux_Arial" lay rot -1) ) ) (defun c:test ( / js dfzz AcDoc Space n ss ent obj_vla l_coor l_diam atts dlt_z) (while (null (setq js (ssget "_X" (list '(0 . "POLYLINE") '(-4 . "&") '(70 . 8) (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) ) ) ) ) ) (if (not dfzz) (setvar "USERR1" 1E-02)) (initget 4) (if (not (setq dfzz (getdist (strcat "\nRayon de recherche? <" (rtos (getvar "USERR1") 2 2) "> : ")))) (setq dfzz (getvar "USERR1")) (setvar "USERR1" dfzz) ) (if (null (tblsearch "appid" "RESEAU_TUYAUX")) (regapp "RESEAU_TUYAUX") ) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (repeat (setq n (sslength js)) (setq ss (ssadd) ent (ssname js (setq n (1- n))) obj_vla (vlax-ename->vla-object ent) l_coor (l-coor2l-pt obj_vla (vlax-get obj_vla 'Coordinates)) l_diam nil ) (mapcar '(lambda (x) (cond ( (ssget "_X" (list '(0 . "INSERT") '(2 . "IC_11_*") '(66 . 1) (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) '(-4 . "<AND") '(-4 . ">=,>=") (cons 10 (mapcar '- (list (car x) (cadr x)) (list dfzz dfzz))) '(-4 . "<=,<=") (cons 10 (mapcar '+ (list (car x) (cadr x)) (list dfzz dfzz))) '(-4 . "AND>") ) ) (setq ss (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object) ) ) ) (vlax-for blk ss (setq atts (vlax-invoke blk 'getattributes)) (foreach att atts (if (and (eq (vla-get-tagstring att) "DIAM") (/= (vla-get-textstring att) "")) (setq l_diam (vla-get-textstring att)) ) ) ) (cond (l_diam (setq dlt_z (read (substr l_diam 4))) (vlax-for blk ss (setq atts (vlax-invoke blk 'getattributes)) (foreach att atts (if (eq (vla-get-tagstring att) "Altitude_GS") (vla-put-textstring att (rtos (- (read (vla-get-textstring att)) (* 1E-3 dlt_z)) 2 2)) ) ) ) (entmod (append (entget ent) (list (list -3 (list "RESEAU_TUYAUX" (cons 1002 "{") (cons 1000 "DIAM") (cons 1040 dlt_z) (cons 1002 "}") ) ) ) ) ) (make_mtext (vlax-curve-getPointAtParam obj_vla (* 0.5 (vlax-curve-getEndParam obj_vla))) (angle '(0. 0. 0.) (vlax-curve-getfirstderiv obj_vla (* 0.5 (vlax-curve-getEndParam obj_vla)))) l_diam (vla-get-layer obj_vla) ) ) ) ) ) ) l_coor ) ) (sssetfirst nil (ssget "_X" (list '(0 . "POLYLINE") '(-4 . "&") '(70 . 8) (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) '(-3 ("RESEAU_TUYAUX")) ) ) ) (prin1) ) NB: Fait un _AUDIT de ton dessin avant car tu as beaucoup d'erreur sur tes POLY3D (option corriger les erreurs)1 point
