
ddb64
Membres-
Compteur de contenus
10 -
Inscription
-
Dernière visite
Tout ce qui a été posté par ddb64
-
Merci beaucoup, VINZ34 je commence à maitriser tout doucement les plages de vues, donc ça devrait aller.
-
Bonjour à tous, je commence juste à utiliser Revit structure sur un projet composé d'un rez de jardin (niv 0.00) et d'un rez de chaussée (niv +4.00). Est il possible de réaliser une vue sur laquelle figureront les longrines du Rdc et celles du Rdj? Si oui quel est le cheminement ? Merci.
-
Merci beaucoup à BRED pour la réponse très rapide, c'est exactement ce que je cherchait à faire. Merci également à Philouie, mais Burst décompose le bloc, or ce bloc est lié à une nomenclature, je ne peux donc pas le décomposer. cordialement Dom :D
-
Bonjour à tous, j'essaie désepérément de récupérer la valeur d'un attribut de bloc pour inséerer cette valeur sous forme de texte (le but est de repérer les extrémités d'un acier numéroté par le bloc en question). je coince pour convertir la valeur extraite en un texte. merci d'avance à tous les cadors du lisp... voilà le code: (defun c:attlire () (setq ent(car(entsel))) (if(=(cdr(assoc 0(entget ent)))"INSERT") (if(=(cdr(assoc 66(entget ent)))1) (progn (setq liste nil) (while(if ent(not(=(cdr(assoc 0(entget ent)))"SEQEND"))) (if(=(cdr(assoc 0(entget ent)))"ATTRIB") (setq liste(append liste (list (cdr(assoc 1(entget ent))))))) (setq ent(entnext ent)) ) ) ) ) (setq ptins_txt (getpoint "\nPoint d'insertion du texte")) (setq num (rtos liste 2 0)) (command "-texte" "s" "standard" ptins_txt "4.0" "0" pause num) )
-
Ce Lisp additione la longueur des splines du calque spécifié commande: cumul (defun c:cumul () ;quel calque est concerné ? (setq CalqueTraite (getstring "\nNom du Calque à Traiter\n")) ;la variable "dec", est la précision du fichier actuel (setq dec (getvar "luprec")) ;initialisation de la longueur (setq longueur 0) ;création d'un jeu de sélection des polylignes(lw) sur le calque choisi (setq jeusel (ssget "X" (list (cons 0 "SPLINE") (cons 8 CalqueTraite)) ) ) ;initialisation du compteur d'entité (setq n 0) ;combien y a t'il d'entité dans le jeu de sélection (setq lonsel (sslength jeusel)) ; à faire autant de fois qu'il y a d'entité dans le jeu de sélection (repeat lonsel (setq ent (ssname jeusel n)) (command "aire" "ob" ent) (setq longueurtempo (getvar "perimeter")) (setq longueur (+ longueur longueurtempo)) (setq n (+ 1 n)) ) ;affichage d'un message annonçant le résultat (alert (strcat "Le cumul des longueurs des SPLINES du Calque : " calquetraite "\nest de : " (rtos longueur 2 dec) ) ) (princ) )
-
Bonuscad, Bien vu, le Lisp était foireux... En fait c'est la version béta que j'ai retrouvé hier. Et ce soir ô miracle, j'ai retrouvé sur une disquette le code correct... J'y ai intégré une partie des modifs de Giles, et voilà le résultat: Le Lisp: CARROY.lsp ; DESCRIPTION ; permet de realiser du carroyage et l'affichage des points d'intersection ; avec l'espace delimite par l'utilisateur ainsi que l'affichage des ; coordonnees de ces points d'intersection ; ;---------------------------------------------------------------------------- (defun C:CARROY (/ poly vertex som sommet closed elm fin coorx ptx mx X listx listy dx dy echel oldlayer plan echelle pas_x pas_y hautext hauteur actstyle fixedheight elmstyle yes no intext extext crox crox2) ;;--------------------------------------------------------------------------- ;; ;; Fonction point_sur_segment : un point se trouve-t-il sur un segment donne ;; ;;--------------------------------------------------------------------------- (defun point_sur_segment(pt1 pt2 ptinter / dist1 dist2 dist_ref) (setq dist1 (sqrt (+ (expt (- (nth 0 ptinter) (nth 0 pt1)) 2) (expt (- (nth 1 ptinter) (nth 1 pt1)) 2)))) (setq dist2 (sqrt (+ (expt (- (nth 0 ptinter) (nth 0 pt2)) 2) (expt (- (nth 1 ptinter) (nth 1 pt2)) 2)))) (setq dist_ref (sqrt (+ (expt (- (nth 0 pt2) (nth 0 pt1)) 2) (expt (- (nth 1 pt2) (nth 1 pt1)) 2)))) (cond ((and (<= dist1 dist_ref) (<= dist2 dist_ref)) T)) ) ;;--------------------------------------------------------------------------- ;; ;; Fonction init_variables : initialisation des valeurs des champs de la ;; case de dialogue ;; ;;--------------------------------------------------------------------------- (defun init_variables() (setq plan "CARROYAGE") (setq echelle "1:1") (setq pas_x "100") (setq pas_y "100") (setq hautext "7.5") (setq hauteur "3.0") (setq extext "0") (setq intext "0") (setq yes "0") (setq no "0") ) ;;--------------------------------------------------------------------------- ;; ;; Fonction init_tiles : initialisation des champs de la case de dialogue ;; ;;--------------------------------------------------------------------------- (defun init_tiles() (set_tile "nom_plan" "CARROYAGE") (set_tile "nb_echel" "1:1") (set_tile "nb_pasx" "100") (set_tile "nb_pasy" "100") (set_tile "nb_haut" "3.0") (set_tile "h_text" "7.5") ) ;;--------------------------------------------------------------------------- ;; ;; Fonction action_tiles : definition des actions associees aux champs ;; de la case de dialogue ;; ;;--------------------------------------------------------------------------- (defun action_tiles() (action_tile "nom_plan" "(setq plan $value)") (action_tile "nb_echel" "(setq echelle $value)") (action_tile "nb_pasx" "(setq pas_x $value)") (action_tile "nb_pasy" "(setq pas_y $value)") (action_tile "nb_haut" "(setq hauteur $value)") (action_tile "ext" "(setq extext $value)(if (= extext \"0\")(setq intext \"1\")(setq intext \"0\"))") (action_tile "int" "(setq intext $value)(if (= intext \"0\")(setq extext \"1\")(setq extext \"0\"))") (action_tile "h_text" "(setq hautext $value)") (action_tile "oui" "(setq yes $value)(if (= yes \"0\")(setq no \"1\")(setq no \"0\"))") (action_tile "non" "(setq no $value)(if (= no \"0\")(setq yes \"1\")(setq yes \"0\"))") (setq crox 0) (setq crox2 0) (action_tile "croix" "(setq crox $reason)") (action_tile "croix2" "(setq crox2 $reason)") ) ;;--------------------------------------------------------------------------- ;; ;; Fonction carroy_dialog : gestion case de dialogue ;; ;;--------------------------------------------------------------------------- (defun carroy_dialog (/ dcl_id) (init_variables) ;; Ouverture de la boite de dialogue (setq dcl_id (load_dialog "carroy.dcl")) (if (not (new_dialog "carroy" dcl_id)) (exit) ) ;; Creation de la croix pleine dans la boite de dialogue (setq width (dimx_tile "croix")) (setq height (dimy_tile "croix")) (start_image "croix") (vector_image (/ width 2) (/ height 4) (/ width 2) (- height (/ height 4)) 7) (vector_image (- (/ width 2) (/ height 4)) (/ height 2) (+ (/ width 2) (/ height 4)) (/ height 2) 7) (end_image) ;; Creation de la croix ouverte dans la boite de dialogue (setq width2 (dimx_tile "croix2")) (setq height2 (dimy_tile "croix2")) (start_image "croix2") (vector_image (/ width2 2) (/ height2 4) (/ width2 2) (- (/ height2 2) (/ height 12)) 7) (vector_image (/ width2 2) (+ (/ height2 2) (/ height2 12)) (/ width2 2) (- height2 (/ height2 4)) 7) (vector_image (- (/ width2 2) (/ height2 4)) (/ height2 2) (- (/ width2 2) (/ height2 12)) (/ height2 2) 7) (vector_image (+ (/ width2 2) (/ height2 12)) (/ height2 2) (+ (/ width 2) (/ height 4)) (/ height 2) 7) (end_image) (init_tiles) (action_tiles) (if (or (= echelle 0) (= echelle "")) (alert "Valeur de l'echelle invalide.\nVeuillez recommencer.") ) (if (or (= pas_x 0) (= pas_x "")) (alert "Valeur du pas en x invalide.\nVeuillez recommencer.") ) (if (or (= pas_y 0) (= pas_y "")) (alert "Valeur du pas en y invalide.\nVeuillez recommencer.") ) (if (or (= h_text 0) (= h_text "")) (alert "Valeur de la hauteur du text invalide.\nVeuillez recommencer.") ) (if (or (= nb_haut 0) (= nb_haut "")) (alert "Valeur de la hauteur de la croix invalide.\nVeuillez recommencer.") ) (start_dialog) (unload_dialog dcl_id) ) ;;--------------------------------------------------------------------------- ;; ;; Fonction genere_point : genere un point sous forme de chaine ;; de caractere ;; ;;--------------------------------------------------------------------------- (defun genere_point(axe valx valy / pt) (if (= axe "X") (setq pt (strcat "*"(rtos valx 2)","(rtos valy 2))) (setq pt (strcat "*"(rtos valy 2)","(rtos valx 2))) ) ) ;;--------------------------------------------------------------------------- ;; ;; Fonction place_repere : placement des reperes "horizontaux" et "verticaux" ;; ;;--------------------------------------------------------------------------- (defun place_repere(axe listxy / mxy valmax i valaxe dl intxy xy_inter j a b c d intersect ordre mxy_inter k y1 w reste f point1 point2 point2b point3 point3b pnt11 pnt22 ang ang1 textrep) (if (= axe "X") (setq dl dx) (setq dl dy)) ;; ;; Placement des reperes de coordonnees en x ou en y ;; (setq mxy (nth 0 listxy)) (setq valmax (nth 0 listxy)) (setq i 0) (while (< i (length listxy)) (setq mxy (min (nth i listxy) mxy)) (setq valmax (max (nth i listxy) valmax)) (setq i (1+ i)) ) (setq valaxe (/ mxy dl)) (if (< valaxe 0) (setq intxy (* (fix valaxe) dl)) (setq intxy (* (+ (fix valaxe) 1) dl)) ) (while (<= intxy valmax) (setq xy_inter nil) (setq j 0) (while (< j (length sommet)) (if (= axe "X") (progn (setq a (list intxy 0)) (setq b (list intxy 100)) ) (progn (setq a (list 0 intxy)) (setq b (list 100 intxy)) )) (setq c (nth j sommet)) (setq d (nth (cond ((< j (1- (length sommet)))(1+ j)) ((= j (1- (length sommet))) 0)) sommet)) (if (setq intersect (inters a b c d nil)) (if (point_sur_segment c d intersect) (if (= axe "X") (setq xy_inter (append xy_inter (list (nth 1 intersect)))) (setq xy_inter (append xy_inter (list (nth 0 intersect))))) ) ) (setq j (1+ j)) ) ; Fin du while (< j (length sommet)) ;; Remise en ordre de la liste xy_inter (setq ordre nil) (while (>= (length xy_inter) 2) (setq mxy_inter (nth 0 xy_inter)) (setq k 1) (while (< k (length xy_inter)) (setq y1 (nth k xy_inter)) (setq mxy_inter (min y1 mxy_inter)) (setq k (1+ k)) ) ; Fin du while (< k (length xy_inter)) (setq w 0) (setq reste nil) (while (< w (length xy_inter)) (if (/= mxy_inter (nth w xy_inter)) (setq reste (append reste (list (nth w xy_inter)))) (setq ordre (append ordre (list mxy_inter))) ) (setq w (1+ w)) ) ; Fin du while (< w (length xy_inter)) (setq xy_inter reste) ) ; Fin du while (>= (length xy_inter) 2) (if (/= xy_inter nil) (setq xy_inter (append ordre reste)) ) ;; Realisation des traits de repere "horizontaux" ou "verticaux" ;; avec leur texte (setq f 0) (while (< f (length xy_inter)) (setq point1 (genere_point axe intxy (nth f xy_inter))) (setq point2 (genere_point axe intxy (+ (nth f xy_inter) (/ dl 4)))) (setq point2b (genere_point axe intxy (+ (nth f xy_inter) (/ (atof hautext) 2)))) (setq point3 (genere_point axe intxy (- (nth f xy_inter) (/ dl 4)))) (setq point3b (genere_point axe intxy (- (nth f xy_inter) (/ (atof hautext) 2)))) (if (= axe "X") (progn (setq pnt11 (trans (list intxy (nth f xy_inter)) 0 1)) (setq pnt22 (trans (list intxy (+ (nth f xy_inter) 5)) 0 1)) ) (progn (setq pnt11 (trans (list (nth f xy_inter) intxy) 0 1)) (setq pnt22 (trans (list (+ (nth f xy_inter) 5) intxy) 0 1)) )) (setq ang (angle pnt11 pnt22)) (setq ang1 (atof (angtos ang nb 3))) (setq textrep (rtos (/ intxy echel) 2 0)) (if (= extext "1") (progn (if (= (rem f 2) 0) (progn (command "_line" point1 point2 "") (if (= fixedheight 0) (command "_text" "j" "MD" point3b hautext ang1 textrep) (command "_text" "j" "MD" point3b ang1 textrep)) ) (progn (command "_line" point1 point3 "") (if (= fixedheight 0) (command "_text" "j" "MG" point2b hautext ang1 textrep) (command "_text" "j" "MG" point2b ang1 textrep)) ) ) ) ) (if (= intext "1") (progn (if (= (rem f 2) 0) (progn (command "_line" point1 point2 "") (if (= fixedheight 0) (command "_text" "j" "MG" point2b hautext ang1 textrep) (command "_text" "j" "MG" point2b ang1 textrep)) ) (progn (command "_line" point1 point3 "") (if (= fixedheight 0) (command "_text" "j" "MD" point3b hautext ang1 textrep) (command "_text" "j" "MD" point3b ang1 textrep)) ) ) ) ) (setq f (1+ f)) ) ; Fin du while (< f (length xy_inter) (setq intxy (+ intxy dl)) ) ; Fin du while (<= intxy valmax) ) ;;--------------------------------------------------------------------------- ;; ;; Corps de la fonction ;; ;;--------------------------------------------------------------------------- ;;--- Fichier de deboggage ;; ;(setq df (open "carroy.dat" "w")) ;;--- (setvar "cmdecho" 0) (setvar "filedia" 0) (setq nb (getvar "AUNITS")) (setq oldlayer (getvar "clayer")) (setq actstyle (getvar "textstyle")) (setq elmstyle (tblsearch "style" actstyle)) (if (/= (cdr (assoc 40 elmstyle)) 0.0) (setq fixedheight 1) (setq fixedheight 0) ) ;; Chargement du fichier contenant la forme (carroy.shx) (command "_load" "carroy") (carroy_dialog) (print "Plan: ") (princ plan) (print "Echelle: ") (princ echelle) (print "Pas en x: ") (princ pas_x) (print "Pas en y: ") (princ pas_y) (print "Hauteur texte: ") (princ hautext) (print "Hauteur croix: ") (princ hauteur) (print) ;; Creation d'un nouveau plan pour le carroyage (command "_layer" "E" plan "CH" plan "") ;;--- ;;--- Decodage de l'echelle ;;--- (setq chaine1 "") (setq chaine2 "") (setq k 1) (while (<= k (strlen echelle)) (setq mot (substr echelle k 1)) (if (= mot ":") (progn (while (<= k (strlen echelle)) (setq k (1+ k)) (setq mot (substr echelle k 1)) (setq chaine2 (strcat chaine2 mot)) ) ) (setq chaine1 (strcat chaine1 mot)) ) (setq k (1+ k)) ) (setq reel1 (atof chaine1)) (setq reel2 (atof chaine2)) (setq echel (/ reel1 reel2)) ;;--- ;;--- (setq dx (* (atoi pas_x) echel)) (setq dy (* (atoi pas_y) echel)) (setq i 1) (setq j 0) (setq closed 0) (setq haut (atof hauteur)) (while (= closed 0) (setq poly (entget(setq elm (car (entsel "Selectionner la polyligne"))))) (setq efface elm) (setq closed (cdr (assoc 70 poly))) (if (= closed 0) (alert "La polyligne doit etre fermee! \nVeuillez recommencer.") ) ) (cond ((= (cdr (assoc 0 poly)) "POLYLINE") (setq fin (cdr (assoc 0 poly))) (while (/= fin "SEQEND") (setq vertex (entget (setq elm (entnext elm)))) (setq fin (cdr (assoc 0 vertex))) (setq coorx (cadr (assoc 10 vertex))) (setq coory (caddr (assoc 10 vertex))) (setq som (cdr (assoc 10 vertex))) (if (/= som nil) (setq sommet (append sommet (list som))) ) (if (/= coorx nil) (setq listx (append listx (list coorx))) ) (if (/= coory nil) (setq listy (append listy (list coory))) ) ) ) ((= (cdr (assoc 0 poly)) "LWPOLYLINE") (setq sommet (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) poly) ) ) (setq listx (mapcar 'car sommet)) (setq listy (mapcar 'cadr sommet)) ) (T (alert "L'objet sélectionné n'est pas une polyligne (2D ou optimisée)" ) (exit) ) ) (setq mx (nth 0 listx)) (setq xmax (nth 0 listx)) (setq i 0) (while (< i (length listx)) (setq mx (min (nth i listx) mx)) (setq xmax (max (nth i listx) xmax)) (setq i (1+ i)) ) (setq valx (/ mx dx)) (if (< valx 0) (setq intx (* (fix valx) dx)) (setq intx (* (+ (fix valx) 1) dx)) ) (while (<= intx xmax) (setq y_inter nil) (setq j 0) (while (< j (length sommet)) (setq a (list intx 0)) (setq b (list intx 100)) (setq c (nth j sommet)) (setq d (nth (cond ((< j (1- (length sommet)))(1+ j)) ((= j (1- (length sommet))) 0)) sommet)) (if (setq intersect (inters a b c d nil)) (if (point_sur_segment c d intersect) (setq y_inter (append y_inter (list (nth 1 intersect)))) ) ) (setq j (1+ j)) ) ; Fin du while (< j (length sommet)) (setq ordre nil) (while (>= (length y_inter) 2) (setq my_inter (nth 0 y_inter)) (setq k 1) (while (< k (length y_inter)) (setq y1 (nth k y_inter)) (setq my_inter (min y1 my_inter)) (setq k (1+ k)) ) ; Fin du while (< k (length y_inter)) (setq w 0) (setq reste nil) (while (< w (length y_inter)) (if (/= my_inter (nth w y_inter)) (setq reste (append reste (list (nth w y_inter)))) (setq ordre (append ordre (list my_inter))) ) (setq w (1+ w)) ) ; Fin du while (< w (length y_inter)) (setq y_inter reste) ) ; Fin du while (>= (length y_inter) 2) (setq y_inter (append ordre reste)) ;; Nombre d'intervalles a carroyer (setq nb_inter (/ (length y_inter) 2)) (setq i 1) ;; Boucle sur les intervalles a carroyer suivant la droite X = intx (while (<= i nb_inter) ;; Recherche du Y de depart pour l'intervalle (setq my (nth (* (1- i) 2) y_inter)) (setq valy (/ my dy)) (if (< valy 0) (setq inty (* (fix valy) dy)) (setq inty (* (+ (fix valy) 1) dy)) ) (setq inty (- inty dy) flag_out 0) (while (= flag_out 0) (setq inty (+ inty dy)) (if (and (>= inty (nth (* (1- i) 2) y_inter)) (<= inty (nth (+ (* (1- i) 2) 1) y_inter))) (progn (setq ptform (trans (list intx inty) 0 1)) (setq ptform1 (trans (list (+ intx dx) inty) 0 1)) (setq angl (atof (angtos (angle ptform ptform1) nb 3))) (if (or (= crox 1) (= crox 4)) (command "_shape" "crx" ptform haut angl) ) (if (or (= crox2 1) (= crox2 4)) (command "_shape" "crx2" ptform haut angl) ) ) (setq flag_out 1) ) ) ; Fin du while (= flag_out 0) (setq i (1+ i)) ) ; Fin du while (<= i nbinter) (setq intx (+ intx dx)) ) ; Fin du while (<= intx xmax) ;; ;; Placement des reperes de coordonnees en x ;; (place_repere "X" listx) ;; ;; Placement des reperes de coordonnees en y ;; (place_repere "Y" listy) (if (and (= yes "1") (= no "1")) (progn (alert "Vous avez changé plusieurs fois pour le choix du contour!\nPar defaut, le contour sera existant.") (setq no "0") ) ) (if (and (= yes "0") (= no "0")) (progn (alert "Vous n'avez pas effectue de choix pour le contour!\nPar defaut, le contour sera existant.") (setq yes "1") ) ) (if (= no "1") (entdel efface) ) (setvar "cmdecho" 1) (setvar "filedia" 1) (setvar "clayer" oldlayer) (redraw) ;(close df) (princ) ) le DCL: CARROY.dcl carroy : dialog { label = "OPTIONS POUR LE CARROYAGE"; : edit_box { label = "PLAN :"; key = "nom_plan"; } : edit_box { label = "ECHELLE :"; key = "nb_echel"; } : edit_box { label = "PAS EN X:"; key = "nb_pasx"; } : edit_box { label = "PAS EN Y:"; key = "nb_pasy"; } : text { label = "TEXTE :"; } : row { : text { label = "Position "; } : column { : radio_button { label = "Exterieur "; key = "ext"; } : radio_button { label = "Interieur "; key = "int"; } } } : edit_box { label = "Hauteur "; key = "h_text"; } : row { : text { label = "CONTOUR :"; } : column { : radio_button { label = "Existant "; key = "oui"; } : radio_button { label = "Inexistant"; key = "non"; } } } : text { label = "CROIX :"; } : edit_box { label = "Hauteur "; key = "nb_haut"; } : row { : text { label = "Style"; } : boxed_row { : image_button { key = "croix"; width = 3.5; aspect_ratio = 1.0; color = 0; allow_accept = true; } : image_button { key = "croix2"; width = 3.5; aspect_ratio = 1.0; color = 0; allow_accept = true; } } } ok_only; }
-
Merci Gile Ca fonctionne comme au bon vieux temps de la R14... J'espère que d'autres en auront l'utilité. bonne nuit...
-
Bonsoir Gile, le message obtenu est le suivant: erreur: type d'argument incorrect: lentityp nil et oui le chemin est bien correct
-
Salut tout le monde, j'ai retrouvé un lisp qui permet de tracer un carroyage à l'intérieur d'une polyligne avec insertion des coordonnées des points en périphérie de cette dernière. Ce lisp qui tournait parfaitement sous Autocad 14 (eh oui, je sais...) ne fonctionne plus sur 2006. Mes faibles connaissances en lisp ne me permettent pas de résoudre le problème. Je pense que cet outil pourrait interesser du monde, alors si une star du lisp pouvait m'aider... [surligneur] voici le lisp:[/surligneur] ; DESCRIPTION ; permet de r‚aliser du carroyage et l'affichage des points d'intersection ; avec l'espace d‚limit‚ par l'utilisateur ainsi que l'affichage des ; coordonn‚es de ces points d'intersection ; ;---------------------------------------------------------------------------- ;; Fonction d‚terminant si un point se trouve sur un segment (defun point_sur_segment(pt1 pt2 ptinter / dist1 dist2 dist_ref) (setq dist1 (sqrt (+ (expt (- (nth 0 ptinter) (nth 0 pt1)) 2) (expt (- (nth 1 ptinter) (nth 1 pt1)) 2)))) (setq dist2 (sqrt (+ (expt (- (nth 0 ptinter) (nth 0 pt2)) 2) (expt (- (nth 1 ptinter) (nth 1 pt2)) 2)))) (setq dist_ref (sqrt (+ (expt (- (nth 0 pt2) (nth 0 pt1)) 2) (expt (- (nth 1 pt2) (nth 1 pt1)) 2)))) (cond ((and (<= dist1 dist_ref) (<= dist2 dist_ref)) T)) ) (defun c:CARROY (/ poly vertex som sommet closed elm fin coorx ptx mx X listx y_inter ordre reste dx dy echel) (setvar "cmdecho" 0) ;; Chargement du fichier contenant la forme (carroy.shx) (command "charger" "carroy") ;; Initialisation des valeurs de la boite de dialogue (setq plan "CARROYAGE") (setq echelle "1:1") (setq pas_x "100") (setq pas_y "100") (setq hauteur "3.0") ;; Ouverture de la boite de dialogue (setq dcl_id (load_dialog "carroy.dcl")) (if (not (new_dialog "carroy" dcl_id)) (exit) ) ;; Cr‚ation de la croix pleine dans la boite de dialogue (setq width (dimx_tile "croix")) (setq height (dimy_tile "croix")) (start_image "croix") (vector_image (/ width 2) (/ height 4) (/ width 2) (- height (/ height 4)) 7) (vector_image (- (/ width 2) (/ height 4)) (/ height 2) (+ (/ width 2) (/ height 4)) (/ height 2) 7) (end_image) ;; Cr‚ation de la croix ouverte dans la boite de dialogue (setq width2 (dimx_tile "croix2")) (setq height2 (dimy_tile "croix2")) (start_image "croix2") (vector_image (/ width2 2) (/ height2 4) (/ width2 2) (- (/ height2 2) (/ height 12)) 7) (vector_image (/ width2 2) (+ (/ height2 2) (/ height2 12)) (/ width2 2) (- height2 (/ height2 4)) 7) (vector_image (- (/ width2 2) (/ height2 4)) (/ height2 2) (- (/ width2 2) (/ height2 12)) (/ height2 2) 7) (vector_image (+ (/ width2 2) (/ height2 12)) (/ height2 2) (+ (/ width 2) (/ height 4)) (/ height 2) 7) (end_image) (set_tile "nom_plan" "CARROYAGE") (set_tile "nb_echel" "1:1") (set_tile "nb_pasx" "100") (set_tile "nb_pasy" "100") (set_tile "nb_haut" "3.0") (action_tile "nom_plan" "(setq plan $value)") (action_tile "nb_echel" "(setq echelle $value)") (action_tile "nb_pasx" "(setq pas_x $value)") (action_tile "nb_pasy" "(setq pas_y $value)") (setq crox 0) (setq crox2 0) (action_tile "croix" "(setq crox $reason)") (action_tile "croix2" "(setq crox2 $reason)") (action_tile "nb_haut" "(setq hauteur $value)") (if (or (= echelle 0) (= echelle "")) (alert "Valeur de l'‚chelle invalide.\nVeuillez recommencer.") ) (if (or (= pas_x 0) (= pas_x "")) (alert "Valeur du pas en x invalide.\nVeuillez recommencer.") ) (if (or (= pas_y 0) (= pas_y "")) (alert "Valeur du pas en y invalide.\nVeuillez recommencer.") ) (if (or (= nb_haut 0) (= nb_haut "")) (alert "Valeur de la hauteur invalide.\nVeuillez recommencer.") ) (start_dialog) (unload_dialog dcl_id) (print "Plan: ") (princ plan) (print "Echelle: ") (princ echelle) (print "Pas en x: ") (princ pas_x) (print "Pas en y: ") (princ pas_y) (print "Hauteur croix: ") (princ hauteur) (print) ;; Cr‚ation d'un nouveau plan pour le carroyage (command "-calque" "N" plan "CH" plan "") (setq chaine1 "") (setq chaine2 "") (setq k 1) (while (<= k (strlen echelle)) (setq mot (substr echelle k 1)) (if (= mot ":") (progn (while (<= k (strlen echelle)) (setq k (1+ k)) (setq mot (substr echelle k 1)) (setq chaine2 (strcat chaine2 mot)) ) ) (setq chaine1 (strcat chaine1 mot)) ) (setq k (1+ k)) ) (setq reel1 (atof chaine1)) (setq reel2 (atof chaine2)) (setq echel (/ reel1 reel2)) (setq dx (* (atoi pas_x) echel)) (setq dy (* (atoi pas_y) echel)) (setq i 1) (setq j 0) (setq closed 0) (setq haut (atof hauteur)) (while (= closed 0) (setq poly (entget(setq elm (car (entsel "S‚lectionner la polyligne"))))) (setq efface elm) (setq closed (cdr (assoc 70 poly))) (if (= closed 0) (alert "La polyligne doit ˆtre ferm‚e! \nVeuillez recommencer.") ) ) (setq fin (cdr (assoc 0 poly))) (while (/= fin "SEQEND") (setq vertex (entget (setq elm (entnext elm)))) (setq fin (cdr (assoc 0 vertex))) (setq coorx (cadr (assoc 10 vertex))) (setq coory (caddr (assoc 10 vertex))) (setq som (cdr(assoc 10 vertex))) (if (/= som nil) (setq sommet (append sommet (list som))) ) (if (/= coorx nil) (setq listx (append listx (list coorx))) ) (if (/= coory nil) (setq listy (append listy (list coory))) ) ) (setq mx (nth 0 listx)) (setq xmax (nth 0 listx)) (setq i 0) (while (< i (length listx)) (setq mx (min (nth i listx) mx)) (setq xmax (max (nth i listx) xmax)) (setq i (1+ i)) ) (setq valx (/ mx dx)) (if (< valx 0) (setq intx (* (fix valx) dx)) (setq intx (* (+ (fix valx) 1) dx)) ) (while (<= intx xmax) (setq y_inter nil) (setq j 0) (while (< j (length sommet)) (setq a (list intx 0)) (setq b (list intx 100)) (setq c (nth j sommet)) (setq d (nth (cond ((< j (1- (length sommet)))(1+ j)) ((= j (1- (length sommet))) 0)) sommet)) (if (setq intersect (inters a b c d nil)) (if (point_sur_segment c d intersect) (setq y_inter (append y_inter (list (nth 1 intersect)))) ) ) (setq j (1+ j)) ) ; Fin du while (< j (length sommet)) (setq ordre nil) (while (>= (length y_inter) 2) (setq my_inter (nth 0 y_inter)) (setq k 1) (while (< k (length y_inter)) (setq y1 (nth k y_inter)) (setq my_inter (min y1 my_inter)) (setq k (1+ k)) ) ; Fin du while (< k (length y_inter)) (setq w 0) (setq reste nil) (while (< w (length y_inter)) (if (/= my_inter (nth w y_inter)) (setq reste (append reste (list (nth w y_inter)))) (setq ordre (append ordre (list my_inter))) ) (setq w (1+ w)) ) ; Fin du while (< w (length y_inter)) (setq y_inter reste) ) ; Fin du while (>= (length y_inter) 2) (setq y_inter (append ordre reste)) ;; Nombre d'intervalles … carroyer (setq nb_inter (/ (length y_inter) 2)) (setq i 1) ;; Boucle sur les intervalles … carroyer suivant la droite X = intx (while (<= i nb_inter) ;; Recherche du Y de d‚part pour l'intervalle (setq my (nth (* (1- i) 2) y_inter)) (setq valy (/ my dy)) (if (< valy 0) (setq inty (* (fix valy) dy)) (setq inty (* (+ (fix valy) 1) dy)) ) (setq inty (- inty dy) flag_out 0) (while (= flag_out 0) (setq inty (+ inty dy)) (if (and (>= inty (nth (* (1- i) 2) y_inter)) (<= inty (nth (+ (* (1- i) 2) 1) y_inter))) (progn (setq ptform (trans (list intx inty) 0 1)) (setq ptform1 (trans (list (+ intx dx) inty) 0 1)) (setq angl (atof (angtos (angle ptform ptform1) 0 3))) (if (or (= crox 1) (= crox 4)) (command "formes" "crx" ptform haut angl) ) (if (or (= crox2 1) (= crox2 4)) (command "formes" "crx2" ptform haut angl) ) ) (setq flag_out 1) ) ) ; Fin du while (= flag_out 0) (setq i (1+ i)) ) ; Fin du while (<= i nbinter) (setq intx (+ intx dx)) ) ; Fin du while (<= intx xmax) ;; Placement des repŠres de coordonn‚es en x (setq mx (nth 0 listx)) (setq xmax (nth 0 listx)) (setq i 0) (while (< i (length listx)) (setq mx (min (nth i listx) mx)) (setq xmax (max (nth i listx) xmax)) (setq i (1+ i)) ) (setq valx (/ mx dx)) (if (< valx 0) (setq intx (* (fix valx) dx)) (setq intx (* (+ (fix valx) 1) dx)) ) (while (<= intx xmax) (setq y_inter nil) (setq j 0) (while (< j (length sommet)) (setq a (list intx 0)) (setq b (list intx 100)) (setq c (nth j sommet)) (setq d (nth (cond ((< j (1- (length sommet)))(1+ j)) ((= j (1- (length sommet))) 0)) sommet)) (if (setq intersect (inters a b c d nil)) (if (point_sur_segment c d intersect) (setq y_inter (append y_inter (list (nth 1 intersect)))) ) ) (setq j (1+ j)) ) ; Fin du while (< j (length sommet)) ;; Remise en ordre de la liste y_inter (setq ordre nil) (while (>= (length y_inter) 2) (setq my_inter (nth 0 y_inter)) (setq k 1) (while (< k (length y_inter)) (setq y1 (nth k y_inter)) (setq my_inter (min y1 my_inter)) (setq k (1+ k)) ) ; Fin du while (< k (length y_inter)) (setq w 0) (setq reste nil) (while (< w (length y_inter)) (if (/= my_inter (nth w y_inter)) (setq reste (append reste (list (nth w y_inter)))) (setq ordre (append ordre (list my_inter))) ) (setq w (1+ w)) ) ; Fin du while (< w (length y_inter)) (setq y_inter reste) ) ; Fin du while (>= (length y_inter) 2) (if (/= y_inter nil) (setq y_inter (append ordre reste)) ) ;; R‚alisation des traits de repŠre verticaux avec leur texte (setq f 0) (while (< f (length y_inter)) (setq point1 (strcat "*" (rtos intx 2 4)","(rtos (nth f y_inter) 2 4))) (setq point2 (strcat "*" (rtos intx 2 4)","(rtos (+ (nth f y_inter) (/ dy 3)) 2 4))) (setq point3 (strcat "*" (rtos intx 2 4)","(rtos (- (nth f y_inter) (/ dy 3)) 2 4))) (setq pnt11 (trans (list intx (nth f y_inter)) 0 1)) (setq pnt22 (trans (list intx (+ (nth f y_inter) 5)) 0 1)) (setq ang (angle pnt11 pnt22)) (setq ang1 (atof (angtos ang 0 3))) (if (= (rem f 2) 0) (progn (command "ligne" point1 point2 "") (command "texte" "j" "MD" point3 (/ dy 10) ang1 (fix (/ intx echel))) ) (progn (command "ligne" point1 point3 "") (command "texte" "j" "MG" point2 (/ dy 10) ang1 (fix (/ intx echel))) ) ) (setq f (1+ f)) ) ; Fin du while (< f(length y_inter) (setq intx (+ intx dx)) ) ; Fin du while (<= intx xmax) ;; Placement des repŠres de coordonn‚es en y (setq my (nth 0 listy)) (setq ymax (nth 0 listy)) (setq i 0) (while (< i (length listy)) (setq my (min (nth i listy) my)) (setq ymax (max (nth i listy) ymax)) (setq i (1+ i)) ) (setq valy (/ my dy)) (if (< valy 0) (setq inty (* (fix valy) dy)) (setq inty (* (+ (fix valy) 1) dy)) ) (while (<= inty ymax) (setq x_inter nil) (setq j 0) (while (< j (length sommet)) (setq a (list 0 inty)) (setq b (list 100 inty)) (setq c (nth j sommet)) (setq d (nth (cond ((< j (1- (length sommet)))(1+ j)) ((= j (1- (length sommet))) 0)) sommet)) (if (setq intersect (inters a b c d nil)) (if (point_sur_segment c d intersect) (setq x_inter (append x_inter (list (nth 0 intersect)))) ) ) (setq j (1+ j)) ) ; Fin du while (< j (length sommet)) ;; Remise en ordre de la liste x_inter (setq ordre nil) (while (>= (length x_inter) 2) (setq mx_inter (nth 0 x_inter)) (setq k 1) (while (< k (length x_inter)) (setq x1 (nth k x_inter)) (setq mx_inter (min x1 mx_inter)) (setq k (1+ k)) ) ; Fin du while (< k (length x_inter)) (setq w 0) (setq reste nil) (while (< w (length x_inter)) (if (/= mx_inter (nth w x_inter)) (setq reste (append reste (list (nth w x_inter)))) (setq ordre (append ordre (list mx_inter))) ) (setq w (1+ w)) ) ; Fin du while (< w (length x_inter)) (setq x_inter reste) ) ; Fin du while (>= (length x_inter) 2) (if (/= x_inter nil) (setq x_inter (append ordre reste)) ) ;; R‚alisation des traits de repŠre horizontaux (setq f 0) (while (< f (length x_inter)) (setq point1 (strcat "*" (rtos (nth f x_inter) 2 4)","(rtos inty 2 4))) (setq point2 (strcat "*" (rtos (+ (nth f x_inter) (/ dx 3)) 2 4)","(rtos inty 2 4))) (setq point3 (strcat "*" (rtos (- (nth f x_inter) (/ dx 3)) 2 4)","(rtos inty 2 4))) (setq pnt1 (trans (list (nth f x_inter) inty) 0 1)) (setq pnt2 (trans (list (+ (nth f x_inter) 5) inty) 0 1)) (setq ang (angle pnt1 pnt2)) (setq ang1 (atof (angtos ang 0 3))) (if (= (rem f 2) 0) (progn (command "ligne" point1 point2 "") (command "texte" "j" "MD" point3 (/ dy 10) ang1 (fix (/ inty echel))) ) (progn (command "ligne" point1 point3 "") (command "texte" "j" "MG" point2 (/ dy 10) ang1 (fix (/ inty echel))) ) ) (setq f (1+ f)) ) ; Fin du while (< f(length x_inter) (setq inty (+ inty dy)) ) ; Fin du while (<= inty ymax) (entdel efface) (setvar "cmdecho" 1) (princ) ) [surligneur] et le DCL correspondant:[/surligneur] carroy : dialog { label = "OPTIONS POUR LE CARROYAGE"; : edit_box { label = "Plan: "; key = "nom_plan"; } : edit_box { label = "Echelle: "; key = "nb_echel"; } : edit_box { label = "Pas en x: "; key = "nb_pasx"; } : edit_box { label = "Pas en y: "; key = "nb_pasy"; } : edit_box { label = "Hauteur croix: "; key = "nb_haut"; } : row { : text { label = "Croix: "; } : boxed_row { : image_button { key = "croix"; width = 3.5; aspect_ratio = 1.0; color = 0; allow_accept = true; } : image_button { key = "croix2"; width = 3.5; aspect_ratio = 1.0; color = 0; allow_accept = true; } } } ok_only; } d'avance merci à tous
-
Bonjour à tous, Je suis novice sur Revit et également sur ce forum. Ma question concerne l'épaisseur de lignes en fonction de la nature du mur ex: 0.5 pour le béton; 0.3 pour la maçonnerie, 0.2 pour les cloisons... or, il semble que dans "style d'objets" il n'est possible de définir les épaisseurs (projeté et coupé)que pour le mur "parent". si vous avez une astuce, je suis preneur Merci d'avance