aboumouiz Posté(e) le 19 décembre 2011 Partager Posté(e) le 19 décembre 2011 bonjour;je suis entrain de monter un programme qui permet de dessiner des profils en travers types;j'ai besoin d'une routine qui permet de: 1- personaser le style de cotaion; 2- faire la cotation automatique de mon desssin merci pour votre aide ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
bonuscad Posté(e) le 19 décembre 2011 Partager Posté(e) le 19 décembre 2011 Bonjour, Je suis tombé ces derniers mois sur un bout de code sur un forum US (je n'ai pas retrouvé le lien) qui je pense est à creuser pour faire ce que tu désire.D'ailleurs je l'avais mis de coté dans cette attention de le peaufiner, mais le temps me manque... Voici le bout de code trouvé et non travaillé. Pour faire un test, dessiner une polyligne optimisée et brisée (comme une ligne de TN d'un profil en travers ET une ligne (en mode ortho) qui sera la ligne du plan de comparaison. (defun c:DimTwo(/ adoc space obj_dim pl refl pt pt2 ss) (vl-load-com) (setq adoc (vla-get-activedocument (vlax-get-acad-object)) space (if (= 1 (getvar "CVPORT")) (vla-get-paperspace adoc) (vla-get-modelspace adoc) ) obj_dim (vla-add (vla-get-Dimstyles adoc) "CADXP") ) (vla-put-activedimstyle adoc obj_dim) (mapcar '(lambda (dimvar value / ) (vla-setvariable adoc dimvar Value)) '("DIMPOST" "DIMAPOST" "DIMSCALE" "DIMASZ" "DIMEXO" "DIMDLI" "DIMEXE" "DIMRND" "DIMDLE" "DIMTP" "DIMTM" "DIMTXT" "DIMCEN" "DIMTSZ" "DIMALTF" "DIMLFAC" "DIMTVP" "DIMTFAC" "DIMGAP" "DIMALTRND" "DIMTOL" "DIMLIM" "DIMTIH" "DIMTOH" "DIMSE1" "DIMSE2" "DIMTAD" "DIMZIN" "DIMALT" "DIMALTD" "DIMTOFL" "DIMSAH" "DIMTIX" "DIMSOXD" "DIMCLRD" "DIMCLRE" "DIMCLRT" "DIMADEC" "DIMDEC" "DIMTDEC" "DIMALTU" "DIMALTTD" "DIMAUNIT" "DIMFRAC" "DIMLUNIT" "DIMDSEP" "DIMTMOVE" "DIMJUST" "DIMSD1" "DIMSD2" "DIMTOLJ" "DIMTZIN" "DIMALTZ" "DIMALTTZ" "DIMUPT" "DIMATFIT") '("" "" 1.0 2.5 0.625 3.75 1.25 0.0 0.0 0.0 0.0 2.5 2.5 0.0 0.0393701 1.0 0.0 1.0 0.625 0.0 0 0 0 0 1 1 1 8 0 3 1 0 0 0 0 0 0 0 2 2 2 3 0 0 2 "." 0 2 1 1 0 8 0 0 0 3) ) (vla-copyfrom obj_dim adoc) (princ "\nSelectionner la Polyligne: ") (if (and (setq pl (ssget "_:E:S:L" '((0 . "LWPOLYLINE")))) (progn (princ "\nSelectionner la ligne du Plan de Comparaison: ") (setq refl (ssget "_:E:S:L" '((0 . "*LINE")))) ) ) (progn (setq refl (vlax-ename->vla-object (ssname refl 0))) (foreach pt (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget (ssname pl 0)) ) ) (vla-addDimRotated space (vlax-3d-point (append pt '(0.0))) (vlax-3d-point (setq pt2 (vlax-curve-getclosestpointto refl pt)) ) (vlax-3d-point (mapcar (function (lambda (a B) (* (+ a B) 0.5))) pt pt2) ) (* pi 0.5) ) ) ) ) (princ) ) Pour avoir une cotation avec une présentation correcte façon profil en travers ou long, il suffirait d'utiliser un style de cotation approprié.Je pense que ça peut être un bon départ, en plus si l'on fait un groupe de toutes les cotations, de la polyligne et de la ligne; une modification à l'aide des "grips" sur les sommets ou le déplacement de la ligne de comparaison mettrait à jour les cotations automatiquement (ou après un Regen). Y a déjà de la matière! ;) 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 More sharing options...
aboumouiz Posté(e) le 20 décembre 2011 Auteur Partager Posté(e) le 20 décembre 2011 mérci pour votre éffort;ce que je cherche exactement c'est:1- une première routine qui permet de personnaliser le style de cotation (type de fléche, hauteur de texte, precision....)pour cela j'ai déjà essayer l'istruction (command "-cotstyle" "R" "S" "")qui réstaure le style de cote nommé "S" nom d'un style défini au paravant, mais il fallait toujours créer ce nom de style pour chaque nouveau dessin, je me demande s'il y a une methode pour créer des style de cotes qui pevent être appelés pour n'importe quel dessin et non suelement liéer au dessin courant; 2- une deuxième routine qui permet de faire la cotation entre des points qlq près définis, j'ai déjà essayer l'istruction (command "dimaligned" pt01 pt02 (* 2 (getvar "DIMTXT")) ) (command "dimaligned" pt03 pt04 (* 2 (getvar "DIMTXT")) ) (command "dimaligned" pt05 pt06 (* 2 (getvar "DIMTXT")) ) ect........ avec Pt01, Pt02, Pt03 .... points définis au paravantle problème est que la routine s'arréte après la premier cotaion est donne un msg d'érreur , elle ne reconnue pas la positon de l'isertion de la cotation.Mérci si vous pouvez m'aider! Lien vers le commentaire Partager sur d’autres sites More sharing options...
bonuscad Posté(e) le 20 décembre 2011 Partager Posté(e) le 20 décembre 2011 J'ai édité le code lisp précédent pour inclure la création d'un nouveau style de cotation nommé "CADXP" qui sera plus approprié pour ce style de cotation. Donc ce code va coter le delta Z entre les sommets de la polyligne et la ligne de référence. Je te laisse maintenant voir pour coter les distances entre sommets (ou en cumulé), je rappelle que le temps me manque <_< 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 More sharing options...
aboumouiz Posté(e) le 23 décembre 2011 Auteur Partager Posté(e) le 23 décembre 2011 merci BONUSDAD, j'ai éssayé votre code, j'arrive à regler le problème de style de cotation, mais il me reste faire la cotation sur tout indiquer la position du texte de cotation par rapport à la ligne cotée Lien vers le commentaire Partager sur d’autres sites More sharing options...
bonuscad Posté(e) le 23 décembre 2011 Partager Posté(e) le 23 décembre 2011 Un dernier coup de pouce! (c'est Noël) :) Je te laisse comparer au dernier code donné pour comprendre l'évolution.Ce qui a changé:Ne cote plus le deltaZ mais bien l'altitude des sommets de la polyligne, les cotes sont placées sous la ligne sélectionnée.Puis les distances cumulées et les distances partielles. (defun c:DimTwo (/ adoc space obj_dim height_dim pl refl lst_pt pt_o nw_obj pt2) (vl-load-com) (setq adoc (vla-get-activedocument (vlax-get-acad-object)) space (if (= 1 (getvar "CVPORT")) (vla-get-paperspace adoc) (vla-get-modelspace adoc) ) obj_dim (vla-add (vla-get-Dimstyles adoc) "COTE-PT_VERT") ) (vla-put-activedimstyle adoc obj_dim) (initget 6) (setq height_dim (getdist (getvar "VIEWCTR") (strcat "\nHauteur du texte de cotation <" (rtos (getvar "DIMTXT")) ">: "))) (if height_dim (vla-setvariable adoc "DIMTXT" height_dim) (setq height_dim (getvar "DIMTXT"))) (mapcar '(lambda (dimvar value / ) (vla-setvariable adoc dimvar Value)) '("DIMPOST" "DIMAPOST" "DIMSCALE" "DIMASZ" "DIMEXO" "DIMDLI" "DIMEXE" "DIMRND" "DIMDLE" "DIMTP" "DIMTM" "DIMCEN" "DIMTSZ" "DIMALTF" "DIMLFAC" "DIMTVP" "DIMTFAC" "DIMGAP" "DIMALTRND" "DIMTOL" "DIMLIM" "DIMTIH" "DIMTOH" "DIMSE1" "DIMSE2" "DIMTAD" "DIMZIN" "DIMALT" "DIMALTD" "DIMTOFL" "DIMSAH" "DIMTIX" "DIMSOXD" "DIMCLRD" "DIMCLRE" "DIMCLRT" "DIMADEC" "DIMDEC" "DIMTDEC" "DIMALTU" "DIMALTTD" "DIMAUNIT" "DIMFRAC" "DIMLUNIT" "DIMDSEP" "DIMTMOVE" "DIMJUST" "DIMSD1" "DIMSD2" "DIMTOLJ" "DIMTZIN" "DIMALTZ" "DIMALTTZ" "DIMUPT" "DIMATFIT") '("" "" 1.0 2.5 0.625 3.75 1.25 0.0 0.0 0.0 0.0 2.5 0.0 0.0393701 1.0 0.0 1.0 0.625 0.0 0 0 0 0 1 1 1 8 0 3 1 0 0 0 0 0 0 0 2 2 2 3 0 0 2 "." 0 2 1 1 0 8 0 0 0 3) ) (vla-copyfrom obj_dim adoc) (princ "\nSelectionner la Polyligne: ") (while (null (setq pl (ssget "_+.:E:S:L" '((0 . "LWPOLYLINE"))))) (princ "\nCe n'est pas une polyligne optimisée!")) (princ "\nSelectionner la ligne du Plan de Comparaison: ") (while (null (setq refl (ssget "_+.:E:S:L" '((0 . "LINE"))))) (princ "\nCe n'est pas une ligne!")) (setq pt_o (cdr (assoc 10 (entget (ssname refl 0))))) (vla-addLine space (vlax-3d-point '(0.0 0.0 0.0)) (vlax-3d-point '(100000.0 0.0 0.0)) ) (setq refl (vlax-ename->vla-object (setq ent_line (entlast))) lst_pt (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget (ssname pl 0)))) ) (foreach pt lst_pt (setq nw_obj (vla-addDimRotated space (vlax-3d-point (append pt '(0.0))) (vlax-3d-point (setq pt2 (vlax-curve-getclosestpointto refl pt)) ) (vlax-3d-point (mapcar '(lambda (a B) (* (+ a B) 0.5)) pt pt2) ) (* pi 0.5) ) ) (vlax-put nw_obj 'TextPosition (list (car (vlax-get nw_obj 'TextPosition)) (- (cadr pt_o) (* 3.0 (getvar "DIMTXT"))) (caddr pt2))) ) (foreach pt (cdr lst_pt) (setq nw_obj (vla-addDimRotated space (vlax-3d-point (append (car lst_pt) '(0.0))) (vlax-3d-point (append pt '(0.0))) (vlax-3d-point (setq pt2 (vlax-curve-getclosestpointto refl pt)) ) 0.0 ) ) (vlax-put nw_obj 'TextRotation (* pi 0.5)) (vlax-put nw_obj 'TextPosition (list (- (car pt2) (* 1.0 (getvar "DIMTXT"))) (- (cadr pt_o) (* 10.0 (getvar "DIMTXT"))) (caddr pt2))) ) (setq obj_dim (vla-add (vla-get-Dimstyles adoc) "COTE-PT_HORI")) (vla-put-activedimstyle adoc obj_dim) (vla-setvariable adoc "DIMTXT" height_dim) (mapcar '(lambda (dimvar value / ) (vla-setvariable adoc dimvar Value)) '("DIMPOST" "DIMAPOST" "DIMSCALE" "DIMASZ" "DIMEXO" "DIMDLI" "DIMEXE" "DIMRND" "DIMDLE" "DIMTP" "DIMTM" "DIMCEN" "DIMTSZ" "DIMALTF" "DIMLFAC" "DIMTVP" "DIMTFAC" "DIMGAP" "DIMALTRND" "DIMTOL" "DIMLIM" "DIMTIH" "DIMTOH" "DIMSE1" "DIMSE2" "DIMTAD" "DIMZIN" "DIMALT" "DIMALTD" "DIMTOFL" "DIMSAH" "DIMTIX" "DIMSOXD" "DIMCLRD" "DIMCLRE" "DIMCLRT" "DIMADEC" "DIMDEC" "DIMTDEC" "DIMALTU" "DIMALTTD" "DIMAUNIT" "DIMFRAC" "DIMLUNIT" "DIMDSEP" "DIMTMOVE" "DIMJUST" "DIMSD1" "DIMSD2" "DIMTOLJ" "DIMTZIN" "DIMALTZ" "DIMALTTZ" "DIMUPT" "DIMATFIT") '("" "" 1.0 2.5 0.625 3.75 1.25 0.0 0.0 0.0 0.0 2.5 0.0 0.0393701 1.0 0.0 1.0 0.625 0.0 0 0 0 0 1 1 0 8 0 3 1 0 0 0 0 0 0 0 2 2 2 3 0 0 2 "." 0 0 1 1 0 8 0 0 0 3) ) (vla-copyfrom obj_dim adoc) (while (cdr lst_pt) (setq nw_obj (vla-addDimRotated space (vlax-3d-point (append (car lst_pt) '(0.0))) (vlax-3d-point (append (cadr lst_pt) '(0.0))) (vlax-3d-point (vlax-curve-getclosestpointto refl (mapcar '(lambda (a B) (* (+ a B) 0.5)) (car lst_pt) (cadr lst_pt))) ) 0.0 ) lst_pt (cdr lst_pt) ) (vlax-put nw_obj 'TextPosition (list (car (vlax-get nw_obj 'TextPosition)) (- (cadr pt_o) (* 15.0 (getvar "DIMTXT"))) (caddr pt2))) ) (entdel ent_line) (princ) ) Tester que très rapidement, le principe est là, il faut améliorer encore... 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 More sharing options...
aboumouiz Posté(e) le 26 décembre 2011 Auteur Partager Posté(e) le 26 décembre 2011 merci pour votre aide Lien vers le commentaire Partager sur d’autres sites More sharing options...
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