-
Compteur de contenus
1 489 -
Inscription
-
Dernière visite
-
Jours gagnés
19
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par zebulon_
-
Bonjour, Ah les problèmes de traduction... A l'avenir, je veillerai à utiliser aussi les termes français. A la place de "zappé", je te propose "occulté" ou "passé outre", c'est plus Académique. Amicalement Zebulon_
-
Bonjour, Sur la boîte de dialogue, il y a trois zones. La première : - Type (de faux plafond) : en fonction du choix (gyptone ou dune), le lisp mettra la hachure et le contour sur un calque spécifique La deuxième : - Contour : -> choix contour : permet de sélectionner une polyligne existante pour y coller la hachure de faux plafond -> Créer avec Bpoly : permet de cliquer une point dans une zone fermée pour créer un contour grâce à la commande _bpoly (ou fpoly) -> Créer avec points : permet de lancer la commande _pline pour définir un contour point par point La troisième : - Origine SCU -> Automatique : les dalles de 0.60x0.60 seront centrées par rapport au contour -> Angle dalle : on peut cliquer un point par lequel passera les hachures de 0.60x0.60 -> Centre dalle : on peut cliquer un point qui sera le centre d'une dalle de 0.60x0.60 et on aura donc un décalage de 0.30x0.30 par rapport à ce point. (Pratique quand on a des couloirs, ou deux couloirs qui se croisent) Voilà... Après, pour placer les luminaires, qui sont des blocs, j'utilise la commande reseau. Puis je place d'autres blocs au droit des portes pour matérialiser les interrupteurs VV et SA et BP. Puis je lance un autre lisp qui met des petits arcs entre les interrupteurs et chaque loupiotte sélectionnée, pour matérialiser le réseau électrique (quel interrupteur avec quel spot etc...) Mais ça c'est une autre histoire... Amicalement Zebulon_
-
Bonjour, Dernièrement, j'avais une série de feuilles A4 dessinées sur mon espace objet, dessinées l'une à côté de l'autre dans le sens des X avec une décalage de 24500.00. Je devais les mettre en page, chacune séparément, dans l'espace objet. Chaque feuille son onglet. J'ai mis en page la première feuille A4 sur un onglet et à partir de là j'ai lancé le lisp suivant (defun llayouts (/ acadobject ActDoc LAYOUTS LLAY n) (setq acadObject (vlax-get-acad-object)) (setq ActDoc (vla-get-ActiveDocument (vlax-get-Acad-Object))) (setq LAYOUTS (vla-get-Layouts ActDoc)) (setq LLAY nil) (vlax-for n LAYOUTS (setq LLAY (cons (vla-get-name n) LLAY)) ) LLAY ) (defun NewNameLayout (OLDLAY NEWLAY) (setq RES nil) (while NEWLAY (setq ELEM (car NEWLAY)) (setq NEWLAY (cdr NEWLAY)) (if (not (member ELEM OLDLAY)) (setq RES ELEM) ) ) RES ) (defun c:clayout () (vl-load-com) (setq NBPAGE (getint "\nNombre de copies : ")) (repeat NBPAGE (setq OLDLLAY (llayouts)) (command "_layout" "_c" "" "") (setq NEWLLAY (llayouts)) (setq NNAME (NewNameLayout OLDLLAY NEWLLAY)) (command "_layout" "_s" NNAME) (command "_MSPACE") (command "_-pan" "_non" '(0 0) "_non" '(-24500.0 0)) (command "_PSPACE") ) (princ) ) Bien entendu, la fonction (llayouts) peut être remplacée par (layoutlist) comme le suggère Patrick. C'est juste pour vous montrer que je fais des progrès en vlisp. Amicalement Zebulon_ [Edité le 12/9/2006 par zebulon_]
-
Bonjour, http://www.cadxp.com/sujetXForum-7370.htm traite du même sujet mais avec des menu .mns, qui sont chargés via vlisp. Mais je pense qu'avec les .cui, ça doit marcher pareil. Amicalement Zebulon_
-
Ami électricien bonjour, à la place de je préfère utiliser les antiques hachures "définies par l'utilisateur" en prenant une distance de 0.60 et en cochant l'option "double". du genre... (command "-fhach" "P" "_u" "0" "0.60" "o" "A" "A" "o" "" "S" e "" "") Sinon, j'ai fait quelque chose de similaire pour le même usage. le fichier Fxplaf.dcl dcl_settings : default_dcl_settings { audit_level = 0 ;} Fxplaf : dialog { label = "Faux Plafond"; initial_focus = "fx_choix"; : row { : column { : boxed_radio_column { label = "Type : "; key = "fx_typ"; : radio_button { label = "Gyptone"; key = "fx_typ1"; } : radio_button { label = "Dune"; key = "fx_typ2"; } } : boxed_column { fixed_height = true; label = "Contour"; : button { label = "Choix contour <"; key = "fx_choix"; } : button { label = "Créer avec bpoly <"; key = "fx_bpoly"; } : button { label = "Créer avec points <"; key = "fx_poly"; } } } : column { : boxed_column { label = "Origine SCU"; : button { label = "Automatique <"; key = "fx_auto"; } : button { label = "Angle dalle <"; key = "fx_angle"; } : button { label = "Centre dalle <"; key = "fx_centre"; } : text { key = "fx_methode"; } : text { key = "fx_xscg"; } : text { key = "fx_yscg"; } } } } spacer_1; ok_cancel; } Le fichier Fxplaf.lsp ;;; ;;; créer un calque (defun calque (NewLayer ColLayer TlLayer) (if (not (tblsearch "LTYPE" TlLayer)) (command "typeligne" "CH" TlLayer "acadiso" "") ) (if (not (tblsearch "LAYER" NewLayer)) (command "_layer" "_M" NewLayer "_CO" ColLayer "" "_LT" TlLayer "" "") (command "_LAYER" "L" NewLayer "AC" NewLayer "_S" NewLayer "") ) ) ;;; ;;; lancer une commande autocad (defun mycmd (LCMD / CMD ETL LELEM RES OLDCMDECHO) (setq ETL (entlast)) (setq OLDCMDECHO (getvar "CMDECHO")) (setvar "CMDECHO" 1) (foreach CMD LCMD (command CMD) ) (while (not (zerop (getvar "cmdactive"))) (command pause) ) (setvar "CMDECHO" OLDCMDECHO) (setq LELEM nil) (if (not ETL) (setq ETL (entnext)) (setq ETL (entnext ETL)) ) (while ETL (setq LELEM (cons ETL LELEM)) (setq ETL (entnext ETL)) ) (setq RES LELEM) ) (defun text_fx_methode (fx_methode) (cond ((= FX_METHODE 0) "Méthode : Non définie") ((= FX_METHODE 1) "Méthode : Automatique") ((= FX_METHODE 2) "Méthode : Angle") ((= FX_METHODE 3) "Méthode : Centre") ) ) (defun test_poly_fermee (e / a TYPent TYPlw RES) (if e (progn (setq a (entget e)) (setq TYPent (cdr (assoc 0 a))) (redraw e 3) (princ) (if (= TYPent "LWPOLYLINE") (progn (setq TYPlw (cdr (assoc 70 a))) (if (= TYPlw 0) (progn (alert "La polyligne n'est pas fermée !\nElle le sera") (command "_pedit" e "_c" "") (redraw e 3) (princ) ) ) ) (progn ; sinon (alert "Ce n'est pas une polyligne !") (redraw e 4) (princ) (setq e nil) ) ) ) ) (setq RES e) ) (defun do_accept_fxplaf () (if e (done_dialog 2) (alert "Aucune polyligne sélectionnée !!!") ) ) (defun do_fx_auto () (if E (progn (setq A (entget E)) (setq LL (length A)) (setq LSOM nil) (repeat LL (setq ELEM (car A)) (setq A (cdr A)) (if (= (car ELEM) 10) (setq LSOM (append LSOM (list (trans (cdr ELEM) 0 1)))) ) ) (setq XMIN (car (car LSOM))) (setq YMIN (cadr (car LSOM))) (setq XMAX XMIN) (setq YMAX YMIN) (foreach SOM LSOM (if (< (car SOM) XMIN) (setq XMIN (car SOM)) ) (if (> (car SOM) XMAX) (setq XMAX (car SOM)) ) (if (< (cadr SOM) YMIN) (setq YMIN (cadr SOM)) ) (if (> (cadr SOM) YMAX) (setq YMAX (cadr SOM)) ) ) (setq DELTAX (- XMAX XMIN)) (setq NBPAS (fix (/ DELTAX 0.60))) (setq RABX (/ (- DELTAX (* NBPAS 0.60)) 2)) (if (and (not (zerop RABX)) (< RABX 0.10)) (setq RABX (/ (- DELTAX (* (- NBPAS 1) 0.60)) 2)) ) (setq DELTAY (- YMAX YMIN)) (setq NBPAS (fix (/ DELTAY 0.60))) (setq RABY (/ (- DELTAY (* NBPAS 0.60)) 2)) (if (and (not (zerop RABY)) (< RABY 0.10)) (setq RABY (/ (- DELTAY (* (- NBPAS 1) 0.60)) 2)) ) (setq OSCU (list (+ XMIN RABX) (+ YMIN RABY))) (setq FX_METHODE 1) (setq FX_XSCG (strcat "Xscg = " (rtos (car (trans OSCU 1 0)) 2 3))) (setq FX_YSCG (strcat "Yscg = " (rtos (cadr (trans OSCU 1 0)) 2 3))) (set_tile "fx_methode" (text_fx_methode FX_METHODE)) (set_tile "fx_xscg" FX_XSCG) (set_tile "fx_yscg" FX_YSCG) ) ) ) (defun main_fxplaf () (setq e nil) (if (not FX_TYP) (setq FX_TYP "fx_typ1")) (setq FX_METHODE 0) (setq FX_XSCG "Xscg = ") (setq FX_YSCG "Yscg = ") (setq OSCU '(0 0)) ;ouverture de la boîte de dialogue (setq What_next 5) (setq dcl_id (load_dialog "fxplaf.dcl")) (While (> What_next 2) (if (not (new_dialog "Fxplaf" dcl_id)) (exit)) (set_tile "fx_typ" FX_TYP) (set_tile "fx_methode" (text_fx_methode FX_METHODE)) (set_tile "fx_xscg" FX_XSCG) (set_tile "fx_yscg" FX_YSCG) (if e (mode_tile "fx_auto" 0) (mode_tile "fx_auto" 1) ) (action_tile "fx_typ" "(setq FX_TYP $value)") (action_tile "fx_auto" "(do_fx_auto)") (action_tile "fx_poly" "(done_dialog 7)") (action_tile "fx_centre" "(done_dialog 6)") (action_tile "fx_angle" "(done_dialog 5)") (action_tile "fx_bpoly" "(done_dialog 4)") (action_tile "fx_choix" "(done_dialog 3)") (action_tile "accept" "(do_accept_fxplaf)") (action_tile "cancel" "(done_dialog 0)") (setq What_next (start_dialog)) (if (= What_next 5) ;;; fx_angle (progn (setq PTEMP (getpoint "\nAngle de dalle : ")) (if PTEMP (progn (setq OSCU PTEMP) (setq FX_METHODE 2) (setq FX_XSCG (strcat "Xscg = " (rtos (car (trans OSCU 1 0)) 2 3))) (setq FX_YSCG (strcat "Yscg = " (rtos (cadr (trans OSCU 1 0)) 2 3))) ) ) ) ) (if (= What_next 6) ;;; fx_centre (progn (setq PTEMP (getpoint "\nCentre de dalle : ")) (if PTEMP (progn (setq OSCU (list (+ (car PTEMP) 0.30) (+ (cadr PTEMP) 0.30))) (setq FX_METHODE 3) (setq FX_XSCG (strcat "Xscg = " (rtos (car (trans OSCU 1 0)) 2 3))) (setq FX_YSCG (strcat "Yscg = " (rtos (cadr (trans OSCU 1 0)) 2 3))) ) ) ) ) (if (= What_next 7) ;;; fx_poly (progn (if e (redraw e 4)) (calque "0" "7" "continuous") (setq LELEM (mycmd '("_.pline"))) (if LELEM (progn (setq e (car LELEM)) (test_poly_fermee e) (if (or (= FX_METHODE 0) (= FX_METHODE 1)) (do_fx_auto) ) ) ) ) ) (if (= What_next 3) ;;; fx_choix (progn (setq eTEMP (car (entsel "\Sélectionner un polyligne fermée : "))) (if (test_poly_fermee eTEMP) (progn (if e (progn (redraw e 4) (princ) ) ) (setq e eTEMP) (if (or (= FX_METHODE 0) (= FX_METHODE 1)) (do_fx_auto) ) ) ) ) ) (if (= What_next 4) ;;; bpoly (progn (setq PTemp (getpoint "\nPoint intérieur : ")) (calque "0" "7" "continuous") (setq eTEMP (bpoly PTemp)) (if (not eTEMP) (alert "Point hors du contours !") (progn (if e (redraw e 4)) (setq e eTEMP) (redraw e 3) (princ) (if (or (= FX_METHODE 0) (= FX_METHODE 1)) (do_fx_auto) ) ) ) ) ) ) ; fin du while (unload_dialog dcl_id) (if (= What_next 2) (progn (setq OLDOS (getvar "OSMODE")) (setvar "OSMODE" 0) (command "_ucs" "_o" OSCU) (if (= FX_TYP "fx_typ1") (calque "Fau$gyptone_vu" "10" "continuous") (calque "Fau$dune_vu" "70" "continuous") ) (command "-fhach" "P" "_u" "0" "0.60" "o" "A" "A" "o" "" "S" e "" "") (if (= FX_TYP "fx_typ1") (calque "Fau$zonegyptone_ha" "9" "continuous") (calque "Fau$zonedune_ha" "9" "continuous") ) (command "_.change" e "" "_properties" "_layer" (getvar "CLAYER") "") (command "_ucs" "_o" (trans PTORI 0 1)) (setvar "OSMODE" OLDOS) ) ; fin du alors ) (if e (redraw e 4) ; enlever la surbrillance ) ) (defun C:fxplaf () (setq OLD_ATT (getvar "attdia")) (setvar "attdia" 0) (setq OLD_CMD (getvar "cmdecho")) (setvar "cmdecho" 0) (setq CLAY (getvar "CLAYER")) (setvar "MEASUREMENT" 1) (setq PTORI (trans '(0 0) 1 0)) (main_fxplaf) (setvar "CLAYER" CLAY) (setvar "cmdecho" OLD_CMD) (setvar "attdia" OLD_ATT) (princ) ) si ça peut t'inspirer... Amicalement Zebulon_
-
créer la bonne boucle ???
zebulon_ a répondu à un(e) sujet de TitOoN dans Pour aller plus loin en LISP
Bonjour, Pour éviter ce genre de problèmes, je mets les blocs que je veux insérer avec un lisp par (command "_insert"...) dans un répertoire référencé dans les chemins de recherche de fichier de support (outils / options), comme ça je n'ai pas besoin d'indiquer de chemin dans la commande _insert mais seulement le nom. Alors, soit le bloc n'est pas défini et autocad va le piocher dans le répertoire de fichier de support ,soit le bloc est déjà défini et autocad va le piocher dans la table de blocs du fichier. Ce qui est intéressant, c'est que les 2 opérations se font avec la même ligne de commande du genre : (command "_INSERT" NOMBLOC pick_pt "1" "1" "0") Amicalement Zebulon_ [Edité le 31/8/2006 par zebulon_] -
Bonjour, En essayant de trouver les traductions en "international" de certaines options de la commande -calque (ou _-layer), je me suis apperçu d'un petit détail intéressant : on peut geler, désactiver, vérrouiller et déverrouiller en désignant des objets. ex : et là vous appuyez sur entrée et vous désignez des objets dont les calques sont à geler, vous validez la sélection puis vous validez encore une fois pour quitter la commande. Et hop, les calques sont gelés. Un synonyme de "layfrz" des express tools en quelque sorte. Je voulais essayer un truc de ce style (defun c:frz () (setq ss (ssget)) (command "_layer" "_f" "" ss "" "") (princ) ) ça ne marche pas comme j'espérai... Mais c'est pas grave... Amicalement Zebulon_
-
Bonjour, ça fait longtemps... Bon, c'est pas le sujet. Donc, la commande REVCLOUD revue pour qu'elle corresponde à ce que je fais toujours : -> des arcs de 3 unités de long -> avec un petit texte à côté qui indique l'indice -> le petit texte encadré avec un polygone de trois côtés. Je fais toujours mes nuages de révision sur l'espace papier, comme ça je ne m'embête pas avec les échelles. (defun c:nuage (/ OLDCLAYER OLDWID OLDORTHO LAYTXNAME STYTXNAME PT1 PT2 PT3 PT4) (setvar "cmdecho" 0) (command "_.undo" "_group") (setq OLDCLAYER (getvar "clayer")) (setq OLDWID (getvar "plinewid")) (setvar "plinewid" 0) ;; enlever le mode ortho, c'est plus joli (setq oldORTHO (getvar "ORTHOMODE")) (setvar "ORTHOMODE" 0) ;; créer un style de texte de 3 de haut (setq LayTxName "txt30-1000") (setq StyTxName "txt30-1000") (if (not (tblsearch "LAYER" LayTxName)) (command "_layer" "_M" LayTxName "") (command "_layer" "_t" LayTxName "_on" LayTxName "_S" LayTxName "") ) (if (not (tblsearch "STYLE" StyTxName)) (command "style" StyTxName "arial.ttf" "3" "1.00" "0.00" "N" "N") (command "_textstyle" StyTxName) ) ;; initialiser la variable NUAGE_INDICE (if (not NUAGE_INDICE) (setq NUAGE_INDICE "A")) (prompt (strcat "Indice de révision : " NUAGE_INDICE)) (setq PT1 nil) (while (/= (type PT1) 'LIST) (initget 1 "Indice") (setq PT1 (getpoint "\nPremier point ou [indice] ")) (cond ((= PT1 "Indice") (setq NUAGE_INDICE (getstring "\nIndice : ")) ) ) ) ;; lancer la commande NUAGEREV (command "_revcloud" "_a" "3" "3" "_non" PT1) (while (not (zerop (getvar "cmdactive"))) (command pause) ) ;; placer le texte de l'indice (setq PT2 (getpoint "\nPoint d'insertion du texte")) (command "_text" "_mc" "_non" PT2 "0" NUAGE_INDICE) (setq PT3 (list (- (car PT2) 3.5) (- (cadr PT2) 2.0))) (setq PT4 (list (+ (car PT2) 3.5) (- (cadr PT2) 2.0))) (command "_polygon" "3" "_e" "_non" PT3 "_non" PT4) (setvar "PLINEWID" OLDWID) (setvar "ORTHOMODE" oldORTHO) (setvar "CLAYER" OLDCLAYER) (command "_.undo" "_end") (princ) ) La subtilité de ce lisp était de pouvoir coller un "pause" dans la commande REVCLOUD, ce que j'ai fait avec (while (not (zerop (getvar "cmdactive"))) (command pause) ) On avait déjà utilisé ce subterfuge pour saisir des polylignes avec n points à l'intérieur d'un lisp ici http://www.cadxp.com/sujetXForum-4847.htm Amicalement Zebulon_
-
je ne passe pas les 1000...
-
saisir une polyligne dans lisp
zebulon_ a répondu à un(e) sujet de zebulon_ dans Pour aller plus loin en LISP
Bonjour, un bout de code qui permet de dessiner une polyligne, de créer une autre polyligne à partir de la première en faisant un simple décaler et de fermer ce deux polylignes par deux lignes (defun LwEdge (e) (setq LSOM nil) (setq COUNT 0) (setq NBELEM (length e)) (repeat NBELEM (setq ELEM (nth COUNT e)) (if (= (car ELEM) 10) (setq LSOM (append LSOM (list (cdr ELEM)))) ) (setq COUNT (+ COUNT 1)) ) (setq TEMP LSOM) ) ;;; ;;; lancer une commande autocad (defun mycmd (LCMD / CMD ETL LELEM RES OLDCMDECHO) (setq ETL (entlast)) (setq OLDCMDECHO (getvar "CMDECHO")) (setvar "CMDECHO" 1) (foreach CMD LCMD (command CMD) ) (while (not (zerop (getvar "cmdactive"))) (command pause) ) (setvar "CMDECHO" OLDCMDECHO) (setq LELEM nil) (if (not ETL) (setq ETL (entnext)) (setq ETL (entnext ETL)) ) (while ETL (setq LELEM (cons ETL LELEM)) (setq ETL (entnext ETL)) ) (setq RES LELEM) ) (defun c:batiouvert () (setq P (mycmd '("_.pline"))) (if P (progn (setq P (car P)) (setq D (getdist "\nDistance de décalage :")) (setq C (getpoint "\nCôté :")) (command "_.offset" D P C "") (setq L (entlast)) (setq LSOM1 (LwEdge (entget P))) (setq LSOM2 (LwEdge (entget L))) (setq P3 (trans (car LSOM1) 0 1)) (setq P4 (trans (car LSOM2) 0 1)) (setq P5 (trans (car (reverse LSOM1)) 0 1)) (setq P6 (trans (car (reverse LSOM2)) 0 1)) (command "_LINE" P3 P4 "") (setq e3 (entlast)) (command "_LINE" P5 P6 "") (setq e4 (entlast)) ) ) (princ) ) amicalement zebulon_ -
Probleme sur viewsIO.lsp
zebulon_ a répondu à un(e) sujet de fabcad dans Pour aller plus loin en LISP
En fait, ça ne marche que pour des vues sans scu associé. D'ailleurs l'auteur semble l'indiquer mias je suis trop nul en anglais pour l'affirmer. Amicalement Zebulon_ -
Probleme sur viewsIO.lsp
zebulon_ a répondu à un(e) sujet de fabcad dans Pour aller plus loin en LISP
Bonjour, il y a déjà un problème avec la fonction open qui se trouve dans importviews : elle renvoie toujours nil. parce que fn ne contient que le nom du fichier et pas son chemin. Il faudra sans doute changer : et mettre 16 à la place du 8 pour avoir tout le chemin. Mais ça plante encore plus loin ... Amicalement Zebulon_ -
Traber était plus rapide... (defun C:XX () (setvar "cmdecho" 0) (command "_.undo" "_group") (setq Rayon (getdist "\nRayon des cylindres?")) (setq ss (ssget '(( 0 . "LINE")))) (if ss (progn (setq SSL (sslength SS)) (setq I 0) (while (< I SSL) (setq E (ssname SS I)) (setq A (entget E)) (setq I (+ I 1)) (setq Dep (cdr (assoc 10 A))); list coordonne depart (setq Fin (cdr (assoc 11 A))); list coordonne fin (command "_cylinder" Dep Rayon "_C" Fin) ) ) ) (command "_.undo" "_end") (princ) )
-
Ecrire du txt parallelement à une ligne tracé ..
zebulon_ a répondu à un(e) sujet de cadpolo dans Débuter en LISP
Bonjour, je vous suggère l'utilisation de la commande (getangle) au lieu de (angle). Getangle, associé avec angtos, ça marche assez bien. (command "texte" (setq lp (getpoint)) (getdist lp) (angtos (getangle lp)) "texte") ça marche à tous les coups, sauf quand on a changer l'orientation de l'angle 0 (à l'est par défaut, qu'on aurait mis au nord) ou le sens de rotation des angles (mathématique ou horaire) Amicalement Zebulon_ -
Bonjour, essaye ça... Amicalement Zebulon_
-
Euhh, le frigo belge, il me semble. Nous les alsaciens, on n'est pas assez intelligent pour inventer un truc aussi complexe... D'ailleurs, c'est de la Buckler qu'on croit deviner. Une bière blonde sans alcool Hollandaise brassée chez Heineken... à Schiltigheim en Alsace. Une tireuse de bière, directement dans la porte de son réfrigérateur, fallait y penser. Bien entendu, l'abus de bière est dangereux pour la santé. A consommer avec modération. Même quand c'est sans alcool. Amicalement Zebulon_
-
Calcul d\'aire par sélection (suite)
zebulon_ a répondu à un(e) sujet de jalna dans Pour aller plus loin en LISP
(setvar "DIMZIN" 0) ; pour que le rtos ne sucre pas les zero à rajouter tout au début et (setq RESULT (rtos(/(vla-get-Area(vlax-ename->vla-object ent1))10000.0)2 2)) à remplacer par (setq RESULT (strcat (rtos(/(vla-get-Area(vlax-ename->vla-object ent1))10000.0)2 2) " m2")) Amicalement Zebulon_ -
Calcul d\'aire par sélection (suite)
zebulon_ a répondu à un(e) sujet de jalna dans Pour aller plus loin en LISP
Donc le bloc SURFPIEC est déjà inséré dans le fichier et il faut éditer son attribut "000" pour y coller le résultat du calcul ? (defun c:stot ( / ) (setq *delobj*(getvar "DELOBJ")) (setvar "DELOBJ" 0) (prompt "\nChoisir les polylignes ....") (setq gr (ssget '((0 . "LWPOLYLINE"))) ) (setq tot 0 cont 0) (setq ent1(vlax-ename->vla-object(ssname gr cont))) (if(=(vla-get-closed ent1):vlax-true) (progn (command "_region" (ssname gr cont)"") (setq ent1(entlast)) (if(=(vla-get-ObjectName(vlax-ename->vla-object(entlast)))"AcDbRegion") (progn (repeat(1- (sslength gr)) (setq cont (+ 1 cont)) (setq ent2(vlax-ename->vla-object(ssname gr cont))) (if(=(vla-get-closed ent2):vlax-true) (progn (command "_region" (ssname gr cont)"") (if(=(vla-get-ObjectName(vlax-ename->vla-object(entlast)))"AcDbRegion") (progn (command "_union" ent1 (entlast)"") ))))))))) (if(=(vla-get-ObjectName(vlax-ename->vla-object ent1))"AcDbRegion") (progn (setq RESULT (rtos(/(vla-get-Area(vlax-ename->vla-object ent1))10000.0)2 2)) (command "_Erase" ent1 "") (alert(strcat "\nSurface totale: " RESULT)) (prompt "\nSélectionner le bloc de destination : ") (setq ss (ssget "_+.:e:s" '((0 . "INSERT") (2 . "SURFPIEC")))) (if ss (progn (setq e (ssname ss 0)) (setq a (entget e)) (while (/= (cdr (assoc 0 a)) "SEQEND") (if (= (cdr (assoc 0 a)) "ATTRIB") (progn (setq NOMATT (cdr (assoc 2 a))) (cond ((= NOMATT "000") (setq a (subst (cons 1 RESULT) (assoc 1 a) a ) ) (entmod a) (command "_REGEN") ) ) ) ) (setq e (entnext e)) (setq a (entget e)) ) ) ) ) (princ"\Pas de résultat") ) (setvar "DELOBJ" *delobj*) (princ) ) -
Calcul d\'aire par sélection (suite)
zebulon_ a répondu à un(e) sujet de jalna dans Pour aller plus loin en LISP
en rajoutant la commande insérer après le alert (ou à la place ?) (command "_INSERT" "SURFPIEC" Pause "1" "1" "0" (rtos(/(vla-get-Area(vlax-ename->vla-object ent1))10000.0)2 2)) ou quelque chose comme ça. Attention à la variable ATTREQ qui devrait être à 1. Pour l'echelle du bloc, j'ai mis 1. On peut imaginer mettre une echelle en fonction de l'echelle de tracé. Il faudrait aussi que le bloc se situe dans un répertoire référencé dans la liste des chemins de fichiers de support, sinon le lisp ne va pas le trouver. Amicalement Zebulon_ -
Il y a quelque temps, j'ai vu passer une question concernant le type de ligne Isolation http://www.cadxp.com/sujetXForum-8487.htm Je voudrais revenir sur ce sujet (un peu tard, je m'en excuse), pour dire que je n'utilise jamais ce type de ligne que je trouve, comme REBCAO, trop instable et dépendant de trop de paramètres. Donc, j'utilise une hachure. *ISOL,Isolation 0, 0,0, 0,1 21.8014, 0,0, -0.4642,0.1857, 0.1683,-2.5242 63.4349, 0.1563,0.0625, -0.2236,0.4472, 0.9783,-0.1398 21.8014, 0.5938,0.9375, -0.4642,0.1857, 0.1683,-2.5242 338.1986, 0.7500,1.0000, 0.4642,0.1857, 0.1683,-2.5242 116.5651, 0.9063,0.9375, 0.2236,0.4472, -0.1398,0.9783 338.1986, 1.3438,0.0625, 0.4642,0.1857, 0.1683,-2.5242 dont le module à l'avantage de faire une unité de haut. Si, vous voulez hachurer une cloison de 7cm, par exemple, il faut mettre l'echelle à 0.07 (si vous travaillez en mètre) et fixer le scu en fonction de cette cloison (origine et direction), par un SCU Objet (c'est le plus simple). Malheureusement, on ne sait pas (encore ?) faire de courbes dans les hachures, mais bon, compte tenu de l'usage, je pense que ça le fait que d'avoir des bouts de segments à la place d'un arc. Au moins, avec la hachure, on ne se casse plus la tête avec des ECHLTP, PSLTSCALE etc ... et on peut avoir tous les avantages de la hachure associative. Amicalement Zebulon_
-
de temps en temps, il est intéressant d'ouvrir quand même la boîte de dialogue, quand par exemple la ligne (command "_plot") est la dernière ligne de ton lisp. Et si on ne dit rien, la commande _plot se lance en ligne de commande, comme le dit Bonuscad. Sauf si on fait (initdia) (command "_plot") où (initdia) force l'ouverture de la boîte de dialogue. C'est quelques fois utile. La liste des fonctions "influençables" par initdia : _ATTDEF,_ ATTEXT,_ BHATCH, _BLOCK, _COLOR, _IMAGE, _IMAGEADJUST, _INSERT, _LAYER, _LINETYPE, _MTEXT, _PLOT, _RENAME, _STYLE, _TOOLBAR et _VIEW. Amicalement Zebulon_
-
Je pense que c'est ce qu'il faut faire. Mettre la variable VISRETAIN à 0 puis recharger la XREF. Mais attention à remettre la variable à 1 après. Amicalement Zebulon_
-
commande MAINLEV !!!! ou que t\'es ??????
zebulon_ a répondu à un(e) sujet de rebcao dans AutoCAD LT 2006
Il n'y a pas de question idiote, il n'y a que les réponses qui peuvent l'être. ou encore à sotte question, point de réponse Ce qui est bien avec les citations, c'est que tu peux trouver tout et son contraire. Quant à la commande MAINLEV, elle se dit aussi _SKETCH. Alors si jamais c'était quand même un problème de traduction, ça devrait marcher. Mais bon je n'ai pas de LT... Mais je crois que tu as LT extender et j'ai dans mes archives un lisp qui s'appelle CLOUD.LSP (il date de 95, la préhistoire quoi) qui fait un peu la même chose, sauf avec des arcs. Entre temps, il y la commande REVCLOUD dans autocad. Peut-être pas dans LT ? ; CLOUD.LSP On-the-fly Clouds (c)1995, David Harrington (defun MYERROR (S ) ;;error trap program (if (/= S "\nFunction cancelled" ) (princ "\nEnding cloud..." ) ) (setq *ERROR* OLDERR ) (princ ) ) (defun C:CLOUD ( ) (setvar "cmdecho" 0 ) (setq LAST_PT (getpoint "\nPick cloud start point: " ) START_PT LAST_PT ARC_DIST (* 0.3125 (getvar "dimscale" ) ) ;; adjust arc size here! INC_ANGLE 110 ;; adjust arc angle here! OLDERR *ERROR* *ERROR* MYERROR ) (prompt "\nGuide crosshairs along cloud path..." ) (command "_pline" LAST_PT "_w" "0" "0" "_a" "_a" INC_ANGLE ) (while LAST_PT (setq NEXT_PT (cadr (grread 1 ) ) ) (if (> (distance LAST_PT NEXT_PT ) ARC_DIST ) (progn (command NEXT_PT "_a" INC_ANGLE ) (setq LAST_PT NEXT_PT ) ) ) (if (> (distance LAST_PT NEXT_PT ) (distance START_PT NEXT_PT ) ) (progn (command START_PT "_cl" ) (setq LAST_PT nil ) ) ) ) (princ "\nClosing cloud..." ) );end cloud.lsp il suffirait de changer les commandes _pline pour faire tracer des segments plutôt que des arcs pour obtenir un peu la même chose. Amicalement Zebulon_ -
Bonjour, pour ma part je fais toujours ma mise en page en mettant la variable PSLTSCALE à 1 comme ça la longueur des tirets est toujours définie en fonction des unites de dessin de l'espace papier, donc en fonction du mm. Même si j'ai plusieurs FMULT à différentes échelles, la représentation des tirets dans les différents FMULT sera identique. Je trouve ça plus joli. Par contre, comme je travaille en mètre dans l'espace objet, les ECHLTP qui vont bien pour l'espace papier ne vont pas bien pour l'espace objet : les tirets sont représentés comme de traits continus. Donc je me suis fait un ptit lisp qui passe de l'espace objet à l'espace papier en changeant les ECHLTP (defun c:tmmo() (setvar "PSLTSCALE" 1) (setvar "REGENMODE" 0) (if (= 0 (getvar "TILEMODE")) (progn (setvar "LTSCALE" 0.02) (setvar "TILEMODE" 1) ) (progn (setvar "LTSCALE" 0.20) (setvar "TILEMODE" 0) ) ) (setvar "REGENMODE" 1) (princ) ) Pour finir, encore un point à évoquer, c'est le fichier AutoCAD.lin ou acadiso.lin qui servent à définir de nouveaux types de lignes dans un fichier. Il faut toujours utiliser le même, de préférence acadiso.lin, parce que ce n'est pas parce que les type de ligne s'appellent pareil qu'elles sont definies de la même manière. voir le variable MEASUREMENT Il m'est arrivé de récupérer un fichier avec un MEASUREMENT à 0, et là mes echelles habituelles de type de ligne et de hachures ne fonctionnent plus du tout. Donc, j'ai mis MEASUREMENT à 1, j'ai rechargé tout les styles de lignes à partir de acadiso.lin en écrasant ceux qui existaient dans le fichier pour revenir à mon standart. Tiens, un petit exercice assez intéressant pour les hachures : Vous faites 2 carrés de 10x10 côte à côte. Vous mettez MEASUREMENT à 1 Vous faites une hachure prédéfinie avec un motif ANGLE à une echelle 1 dans le premier carré Vous mettez MEASUREMENT à 0 Vous faites la même hachure prédéfinie avec un motif ANGLE à une echelle 1 dans le deuxième carré C'est pas la même chose au niveau de l'affichage même si les 2 hachures ont les mêmes propriétés. Amicalement Zebulon_ [Edité le 27/1/2006 par zebulon_]
-
Peut-être en changeant les paramètrages du dessin ? _aecDwgSetup puis choisir l'onglet : Afficher puis changer la représentation d'affichage pour choisir celle que tu a définie quand tu as créé ton style de mur avec _aecWallStyle (Propriété des styles de murs/ Propriété d'affichage) Parce que, pour autan que je sache, un style de mur peut contenir plusieurs propriétés d'affichage (de l'esquisse jusqu'au plan d'exe) Amicalement Zebulon_
