-
Compteur de contenus
20 -
Inscription
-
Dernière visite
À propos de charlie69
- Date de naissance 10/11/1985
Contact Methods
-
Website URL
http://
Profile Information
-
Gender
Male
charlie69's Achievements
Newbie (1/14)
0
Réputation sur la communauté
-
Renommer certains calques
charlie69 a répondu à un(e) sujet de charlie69 dans Pour aller plus loin en LISP
Bonjour, J'ai repris la routine de DenisHen et j'ai créé une liste des calques qui m’intéressaient comme ce qu'il y a ci-dessous : (setq LstCalq '(("AncienNom01" . "NouveauNom01") ("AncienNom02" . "NouveauNom02") ;; Et ainsi de suite... ) Voici la liste des calques de base qu'il y a dans mon dessin : 0 AAPID14 CALID09 CALID14 DEFPOINTS DES DIVERS09 DIVERS14 ECID09 ECID14 FIS01ID09 FIS01ID14 FIS02ID09 FIS02ID14 PHOID14 PRID14 REAID09 REAID10 REAID14 Tout ce passe bien. Les calques sont bien renommés.Sauf que le LISP change la couleur des calques renommés. Je pense qu'il utilise la couleur du calque "0". Je ne comprends pas d'où ça vient. Avez vous des idées? Voici la routine que j'ai complété : ;;; ************************************************************ ;;; Exemple de gestion des calques, existants et/ou nouveaux ;;; ************************************************************ (defun c:GestCalq (/ calq LstCalqOBS LstCalqFIS LstCalqPH LstCalqDIVERS LstCalq PosLst) (setq calq (tblnext "LAYER" T)) (while calq (setq LstCalq (cons (cdr (assoc 2 calq)) LstCalq) calq (tblnext "LAYER") ) ) (while LstCalq (if (> (strlen (car LstCalq)) 3) (cond ((= "REA" (substr (car LstCalq) 1 (-(strlen (car LstCalq)) 4))) (setq LstCalqOBS (cons (cons (car LstCalq) (strcat "OBS" (substr (car LstCalq) (-(strlen (car LstCalq)) 3)))) LstCalqOBS)) ) ((= "FIS02" (substr (car LstCalq) 1 (-(strlen (car LstCalq)) 4))) (setq LstCalqFIS (cons (cons (car LstCalq) (strcat "FIS" (substr (car LstCalq) (-(strlen (car LstCalq)) 3)))) LstCalqFIS)) ) ((= "PHO" (substr (car LstCalq) 1 (-(strlen (car LstCalq)) 4))) (setq LstCalqPH (cons (cons (car LstCalq) (strcat "PH" (substr (car LstCalq) (-(strlen (car LstCalq)) 3)))) LstCalqPH)) ) ((= "DIVERS" (substr (car LstCalq) 1 (-(strlen (car LstCalq)) 2))) (setq LstCalqDIVERS (cons (cons (car LstCalq) (strcat "DIVERSID" (substr (car LstCalq) (-(strlen (car LstCalq)) 1)))) LstCalqDIVERS)) ) ) ;fin cond ) ;fin if (setq LstCalq (cdr LstCalq)) ) ;fin While (setq LstCalq (append (append (append LstCalqOBS LstCalqFIS) LstCalqPH) LstCalqDIVERS)) ;;; (("REAID09" . "OBSID09") ("REAID14" . "OBSID14") ("REAID10" . "OBSID10") ("FIS02ID09" . "FISID09") ("FIS02ID14" . "FISID14") ("PHOID14" . "PHID14") ("DIVERS09" . "DIVERSID09") ("DIVERS14" . "DIVERSID14")) ;;; (setq LstCalq '(("AncienNom01" . "NouveauNom01") ;;; ("AncienNom02" . "NouveauNom02") ;;; ;; Et ainsi de suite... ;;; ) ;;; ) ;_ Fin de setq (princ "\nRemplacement / fusion des calques...") (foreach PosLst LstCalq (if (tblsearch "layer" (car PosLst)) (progn (if (not (tblsearch "layer" (cdr (assoc (car PosLst) LstCalq)))) (command "-calque" "n" (cdr (assoc (car PosLst) LstCalq)) "") ) ;_ Fin de if (command "fuscalques" "n" (car PosLst) "" "n" (cdr (assoc (car PosLst) LstCalq)) "o") ;_ Fin de command ) ;_ Fin de progn ) ;_ Fin de if ) ;_ Fin de foreach (princ) ) ;_ Fin de defun ******************************************************************************************************************* Merci d'avance. -
Renommer certains calques
charlie69 a répondu à un(e) sujet de charlie69 dans Pour aller plus loin en LISP
Après je ne sais pas si mes propos sont clairs... je vais essayer de reformuler tout ça. Voici la liste des anciens calques dont certains devront être renommer (liste non exhaustive car il peut y avoir un certain nombre d'années antérieure) : Nom Couleur 0 blanc AAPID14 blanc CALID09 bleu CALID14 cyan DEFPOINTS blanc DES blanc DIVERS09 blanc DIVERS14 blanc ECID09 bleu ECID14 cyan FIS01ID09 blanc FIS01ID14 rouge FIS02ID09 blanc FIS02ID14 magenta PHOID14 rouge PRID14 blanc REAID09 75 REAID10 vert REAID14 vert Les calques commençant par "FIS02" devront se commencer par "FIS" Les calques commençant par "REA" devront se commencer par "OBS" Les calques commençant par "PHO" devront se commencer par "PH" Pour les calques DIVERS(xx), xx étant l'année, ceux-ci devront se nommer DIVERSID(xx) Et ceci pour toutes les années. Je vais m'inspirer de ce que vous m'avez envoyer et voir ce que ça donne. Merci. -
Renommer certains calques
charlie69 a répondu à un(e) sujet de charlie69 dans Pour aller plus loin en LISP
Bonjour, Merci pourvos réponses. Il m'est arrivé de perdre des messages mais surtout je ne peuxmettre aucune pièce jointe donc c'est embêtant. Avez-vous le même problème? Je n'aijamais utilisé les "vl" contrairement à toi bseb67 du coup je ne suispas forcement à l'aise. Je trouve cela plus complexe. Lorsque ceLISP est lancé le nom des nouveaux calques ne sont pas censés exister. Une foisutilisé cette routine ne sera plus utilisée. Effectivement,si les calques sont déjà présents cela stoppe le LISP. C'est une bonne idée. Doit-onfaire une boucle de comptage (sachant que les deux derniers chiffres du calquereprésentent une année) avec les deux derniers chiffres des calques? Pour information l'erreur de doublon avec le calque DIVERSID(xx) ne vient pas du fait que celui-ci avait été déjà créé mais parce que le LISP renomme un autre calque. Je ne comprends pas d'où vient le problème. Avez-vous des méthodes pour détecter ce genre d'erreur? -
Bonjour, J’ai créé un LISP pour renommer certains calques. FIS02ID09 -> FISID09 REAID09-> OBSID09 DIVERS09-> DIVERSID09 PHOID09 -> PHID09 Le LISPmarche pas trop mal et puis à un moment il plante car je me suis rendu compted’un doublon dans les calques. En Effet, Il va renommer le calque ECID14 en DIVERSID14. Ce quifait que lorsque le LISP veut renommer le LISP DIVERS14 en DIVERSID14 le programmeplante car il y a un doublon. Je ne comprends pas d’où vient le problème.Pourtant, les espions que j’ai positionné me renvoient la bonne valeur. Si vous avez une idée je suis preneur. Voici le LISP en question, désolé je n'arrive pas à le mettre en pièce jointe ça me mets une erreur du coups je ne peux pas joindre le DWG pour aider : (defun c:bonannee () (setvar "cmdecho" 0) (setq typdefaut "0") (setq calque (tblnext "layer" 1)) (while calque ;;sélection de l'entité calque (setq nom (nth 1 calque)) ;;sélection du nom du calque (setq nomcalque (cdr nom)) (if (<= (strlen nomcalque) 3) "" (setq idannee (substr nomcalque (-(strlen nomcalque) 3))) ) (cond ((<= (strlen nomcalque) 3) "") ((= (strlen nomcalque) 7) (setq typdefaut (substr nomcalque 1 (- (strlen nomcalque) 4)))) ;;;calques ayant 7 caractères ((= (strlen nomcalque) 8) (setq typdefaut (substr nomcalque 1 (- (strlen nomcalque) 2)))) ;;;calques ayant 8 caractères ((= (strlen nomcalque) 9) (setq typdefaut (substr nomcalque 1 (- (strlen nomcalque) 4)))) ;;;calques ayant 9 caractères ) (if (= "PHO" typdefaut) ;;;calques avec 7 caractères (command "renommer" "ca" nomcalque (strcat "PH" idannee ) ) ) (if (= "REA" typdefaut) ;;;calques avec 7 caractères (command "renommer" "ca" nomcalque (strcat "OBS" idannee ) ) ) (if (= "FIS02" typdefaut) ;;;calques avec 9 caractères (command "renommer" "ca" nomcalque (strcat "FIS" idannee ) ) ) (if (= "DIVERS" typdefaut) (command "renommer" "ca" nomcalque (strcat "DIVERSID" (substr nomcalque (- (strlen nomcalque) 1)) ) ) "" ) (setq calque (tblnext "layer")) ) (setvar "cmdecho" 1) ) Merci d'avance.
-
Programmes LISP non fonctionnels
charlie69 a répondu à un(e) sujet de charlie69 dans LISP et Visual LISP
Génial!!! Je viens de faire la modif et ça marche!!! Le talus3D.LSP est génial aussi. Comment peut savoir les évolution qu'il y a d'une version à l'autre? Merci beaucoup. Bon week end à tous! -
Programmes LISP non fonctionnels
charlie69 a répondu à un(e) sujet de charlie69 dans LISP et Visual LISP
Désolé pour toutes ces lignes de code mais je n'arrivais pas à charger le fichier en PJ. Pour SECURELOAD, cela ne change rien. Voici les dernières lignes affichées : Commande: TALUS "Selectionner les elements composant le bord superieur de talus :" Sélectionner des objets: 1 trouvé(s) Sélectionner des objets: Choix de l'option incorrect. Entrez une option [Haut/Bas/Avant/ARrière/Gauche/Droite]<Bas>: *Annuler* En ce qui concerne les fichiers support, oui ils sont bien tous chargé car dans la version d'autocad 2014 cela marchait. -
Bonjour, J'ai un problème un peu...incohérent. Dans ma société, j'ai installer des programmes LISP sur divers PC qui ont autocad 2017 à autocad 2019. Le problème est que d'un PC à l'autre certains des programmes LISP ne fonctionnent pas malgré que les chemins de recherche soient les mêmes (notamment un programme qui permet de dessiner des talus). Est ce que des variables ont évoluées d'une version autocad à une autre ce qui pourrait expliquer le problème. Je suis désolé je n'arrive pas joindre le programme en question. Voici la boite de dialogue : ) ;_ fin de defun Merci d'avance.
-
extraction de données provenant d'une liste déroulante
charlie69 a répondu à un(e) sujet de charlie69 dans Pour aller plus loin en LISP
CHAR.LSP COR.txt Bonsoir, Merci de m'avoir répondu. Tout d'abord, je ne comprend pas comment il faut faire pour extraire les valeurs situées dans la liste "(mapcar 'atof (str2lst "30x20x6" "x")) retourne (30.0 20.0 6.0)" puis les affecter à des variable. Ensuite, J'ai repensé le déroulement de mon LISP et je vais le détailler par la suite. Tout, d'abord j'ai un fichier texte "COR.txt" qui liste toute les dimensions dont j'ai besoin pour dessiner des cornières à ailes égales. Les colonnes se présentent de la façon suivante: Dimension des deux ailes, épaisseur des deux ailes, rayon, dimension des rayons aux extrémités, poids par mètre Je souhaite utiliser les deux premières valeurs qui sont les dimensions et l'épaisseur des ailes pour créer une liste déroulante à l'aide d'une boite de dialogue. Je souhaite que les valeurs de la liste déroulante aient la forme suivant: (setq type_corniere '(Dimension des deux ailesxDimension des deux ailesxépaisseur des deux ailes) Comme vous pouvez le voir ci-dessous lorsque j'ai créé manuellement la liste déroulante. (setq type_corniere '("20x20x3" "25x25x3" "25x25x4" "25x25x5" "30x30x3" "30x30x3.5" "30x30x4" "30x30x5" "35x35x3.5" "35x35x4" "35x35x5" "40x40x3" "40x40x4" "40x40x5" "40x40x6" "45x45x3" "45x45x4" "45x45x4.5" "45x45x5" "45x45x6" "50x50x3" "50x50x4" "50x50x5" "50x50x6" "50x50x7" "50x50x8" "55x55x6" "60x60x4" "60x60x5" "60x60x6" "60x60x7" "60x60x8" "60x60x10" "65x65x5" "65x65x6" "65x65x7" "65x65x8" "65x65x9" "70x70x5" "70x70x6" "70x70x7" "70x70x9" "75x75x5" "75x75x6" "75x75x7" "75x75x8" "75x75x10" "80x80x5" "80x80x5.5" "80x80x6" "80x80x6.5" "80x80x8" "80x80x10" "90x90x6" "90x90x7" "90x90x8" "90x90x9" "90x90x10" "90x90x11" "90x90x12" "100x100x7" "100x100x8" "100x100x9" "100x100x10" "100x100x11" "100x100x12" "110x110x10" "110x110x12" "120x120x8" "120x120x9" "120x120x10" "120x120x11" "120x120x12" "120x120x13" "120x120x14" "120x120x15" "130x130x12" "140x140x13" "150x150x10" "150x150x12" "150x150x14" "150x150x15" "150x150x16" "150x150x18" "160x160x15" "160x160x17" "180x180x16" "180x180x18" "180x180x20" "200x200x16" "200x200x18" "200x200x20" "200x200x24" )) Ensuite, en fonction du type de cornière sélectionné dans la liste déroulant le LISP va chercher les valeurs des quatre premières colonnes pour pouvoir dessiner la cornière. Je vous ai mis en pièce jointe les fichiers "cor.txt", "Cornière.DCL" et "CHAR.LSP" pour que vous compreniez mieux ce que je souhaite faire.Le programme est un peu brouillon car j'ai fait plusieurs essais, observé plusieurs pistes sans trop savoir comment m'y prendre. Vous risquez de rigoler sur certaines lignes :-) SI quelqu'un pouvait m'aider ce serait super car là je galère pas mal. je pense avoir exposer l'ensemble du problème et n'avoir rien oublier si vous avez des questions n'hésitez pas. Merci d'avance. -
extraction de données provenant d'une liste déroulante
charlie69 a posté un sujet dans Pour aller plus loin en LISP
Bonjour, J'ai un problème pour la réalisation de mon programme LISP. J'ai une liste déroulante que je réalise avec avec un fichier DCL contenant les valeurs de la forme suivante: '("30x20x6" "40x30x5.5" "160x110x4.5") je cherches à extraire les chiffres composant la chaine de caractère et les convertir en nombre décimal pour les affecter ensuite à trois variables différentes. Comment faut il faire? Merci -
Salut a tous, voici un programme de métré. 3 cas sont possibles que l'on sélectionne à l'aide d'une boite de dialogue: - métré des ligne et polylignes - métré des surfaces prédéfinies (surface déjà tracé) - métré des surfaces non définies (que l'on dessine en lancant le programme) Pour le "métré des ligne et polylignes" les données sont enregistré sur excel. Mais pour le métré des surfaces je n'arrive pas à enregistrer les surfaces sur excel. Pouvez m'aider? merci. Je vous ai mis la boite de dialogue et le programme. Metre : dialog {label="Métré pour les lignes, polylignes et surfaces"; :column { spacer_1; :radio_column { :radio_button {label="Lignes et polylignes"; key=cas0; value = "0";} :radio_button {label="Surfaces prédéfinies"; key=cas1; value = "0";} :radio_button {label="Surfaces non définies"; key=cas2; value = "0";} } spacer_1; } :row {ok_cancel;} } ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Boite DCL ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun c:metre_ligne_surfaces () (setq dcl_id (load_dialog "Boite de dialogue métré.dcl")) (if (not (new_dialog "Metre" dcl_id)) (exit) ) (action_tile "cas0" "(setq cas \"0\")") (action_tile "cas1" "(setq cas \"1\")") (action_tile "cas2" "(setq cas \"2\")") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq ok (start_dialog)) (unload_dialog dcl_id) (metre) (princ) ) (defun metre () (setq cas (atoi cas)) (cond ((= cas 0) (progn ;;; C:LONG_LINE Calcule la longueur des lignes et lwpolylignes du calque spécifié ;;; Retourne la valeur du code dxf (defun val_dxf (code ent) (cdr (assoc code (entget ent))) ) ;;; LONGOBJT Retourne la longueur ou le périmètre d'un objet (ename) (defun LONGOBJT (ent) (vl-load-com) (vla-get-length (vlax-ename->vla-object ent)) ) ;;; Fonction principale ;;; (defun long_line (/ clq js cnt tot nb_l nb_pl lo_l lo_pl) (setq pt '(0 0)) (setq Nom_calque (strcat "Nom du calque")) (setq Nombre_lignes (strcat "Nombre de lignes")) (setq Longueur_ligne (strcat "Longueur de ligne")) (setq Nombre_polylignes (strcat "Nombre de polylignes")) (setq Longueur_polyligne (strcat "Longueur de polyligne")) (setq Longueur_totale (strcat "Longueur totale")) (setq descr (strcat Nom_calque "\t" Nombre_lignes "\t" Longueur_ligne "\t" Nombre_polylignes "\t" Longueur_polyligne "\t" Longueur_totale "\n" ) ) (textscr) (princ descr) (initget "Oui Non") (if (= (getkword "\nEnregistrer dans un fichier ? : " ;[Oui/Non] < Non > ) "Oui" ) (progn (setq file (open (getfiled "Créez ou sélectionnez un fichier" "" "xls" 33) "a" ) ) (princ descr file) (close file) ) ) (while Pt (setq pt nil) (if (setq clq (entsel "\nSélectionnez un objet sur le calque : " ; ou < Nom > ) ) (setq clq1 (val_dxf 8 (car clq))) (setq clq1 (getstring "\nNom du calque : ") ) ) (setq pt (cadr clq)) (if (tblsearch "LAYER" clq1) (progn (setq js (ssget "_X" (list '(0 . "LINE,LWPOLYLINE") (cons 8 clq1)) ) nb_l 0 nb_pl 0 lo_l 0.0 lo_pl 0.0 ) (repeat (sslength js) (setq ent (ssname js (+ nb_l nb_pl))) (cond ((= (val_dxf 0 ent) "LINE") (setq nb_l (1+ nb_l) lo_l (+ lo_l (LONGOBJT ent)) ) ) ((= (val_dxf 0 ent) "LWPOLYLINE") (setq nb_pl (1+ nb_pl) lo_pl (+ lo_pl (LONGOBJT ent)) ) ) ) ) (setq descr (strcat ;"\nNom de calque..........\t" ;clq1 ;"Nombre de lignes.......\t" ;(itoa nb_l) ;"Longueur de ligne......\t" ;(rtos lo_l) ;"Nombre de polylignes...\t" ;(itoa nb_pl) ;"Longueur de polyligne..\t" ;(rtos lo_pl) ;"Longueur totale........\t" ;(rtos (+ lo_l lo_pl)) clq1 "\t" (itoa nb_l) "\t" (rtos lo_l) "\t" (itoa nb_pl) "\t" (rtos lo_pl) "\t" (rtos (+ lo_l lo_pl)) "\n" ) ) (textscr) (princ descr) (initget "Oui Non") (if (= (getkword "\nEnregistrer dans un fichier ? [Oui/Non] < Non >: " ) "Oui" ) (progn (setq file (open (getfiled "Créez ou sélectionnez un fichier" "" "xls" 33 ) "a" ) ) (princ descr file) (close file) ) ) (graphscr) ) (princ "\nNom de calque invalide.") ) (princ) ) ;fin while ) ) ;;;) ;------------- ((= cas 2) ;surfaces non définies (progn ;;;(defun c:aires() (setq a (getvar "osmode")) (setvar "osmode" 0) (setvar "cmdecho" 0) (command "ortho" "in") (command "echltp" "1") (command "-calque" "et" "surface_non_def" "co" "blanc" "" "tl" "continuous" "" "" ) (Prompt "\nCliquer le contour de votre aire " ) (terpri) (setq pt (getpoint "\nPoint d'origine:")) (command "polylign" pt "la" 0 0) (while pt (setq pt (getpoint "\nPoint suivant (return pour FIN): ")) (command pt) ) ;;; (setq xg 0) ;;; (setq yg 0) ;;; (setq nc 0) ;;; (setq n 0) ;;; (setq nom (entlast)) ;;; (setq lt (entget nom)) ;;; (setq len (length lt)) ;;; (repeat len ;;; (setq e1 (car (nth n lt))) ;;; (if (= e1 10) ;;; (progn ;;; (setq xg (+ xg (cadr (nth n lt)))) ;;; (setq yg (+ yg (caddr (nth n lt)))) ;;; (setq nc (1+ nc)) ;;; ) ;;; ) ;;; (setq n (1+ n)) ;;; ) ;;; (setq p1 (list (/ xg nc) (/ yg nc))) (setq txt (getstring "\nEntrer votre texte:")) (command "aire" "O" (entlast)) (setq surfa (getvar "area")) (setq surfa (rtos surfa 2 2)) (princ "\nSurface totale en m²: ") (princ surfa) (setq txt1 (strcat "surface: " surfa " m²")) (command "texte" "m" pause 1 0 txt) (command "texte" "" txt1) (command "redess") (princ) ) ) ;;; ) ;-------------- ((= cas 1) ;surfaces prédéfinies (progn ;;; (defun c:surface ( / gr txt cont) (setvar "cmdecho" 0) (command "calque" "et" "surface_predef" "co" "7" "" "") (prompt "\nChoisir les polylignes ....") (setq gr (ssget)) (setq surfa1 0 cont 0 ) (repeat (sslength gr) (command "_area" "_o" (ssname gr cont)) (setq surfa1 (+ surfa1 (getvar "area"))) (setq cont (+ 1 cont)) ) (setq surfa1 (rtos surfa1 2 2)) (princ "\nSurface totale en m²: ") (princ surfa1) (setq txt2 (getstring "\nEntrer votre texte:")) (setq txt3 (strcat "surface: " surfa1 " m²")) (command "texte" "m" pause 1 0 txt2) (command "texte" "" txt3) (princ) ; calcul des surfaces prédéfinies et insertion dans un tableau excel ; Retourne la valeur du code dxf (defun val_dxf1 (code1 ent1) (cdr (assoc code1 (entget ent1))) ) ;LONGOBJT Retourne la longueur ou le périmètre d'un objet (ename) (defun LONGOBJT1 (ent1) (vl-load-com) (vla-get-length (vlax-ename->vla-object ent1)) ) ;Fonction principale ; (defun long_line (/ clq js cnt tot nb_l nb_pl lo_l lo_pl) (setq pt1 '(0 0)) (setq Nom_calque1 (strcat "Nom du calque")) (setq Nombre_surface (strcat "Nombre de surfaces")) (setq surface_totale (strcat "Surface totale")) (setq descr1 (strcat Nom_calque "\t" Nombre_surface "\t" surface_totale "\n" ) ) (textscr) (princ descr1) (initget "Oui Non") (if (= (getkword "\nEnregistrer dans un fichier ? : " ;[Oui/Non] < Non > ) "Oui" ) (progn (setq file1 (open (getfiled "Créez ou sélectionnez un fichier" "" "xls" 33) "a" ) ) (princ descr1 file1) (close file1) ) ) (while Pt1 (setq pt1 nil) (if (setq clq2 (entsel "\nSélectionnez un objet sur le calque : " ; ou < Nom > ) ) (setq clq3 (val_dxf1 8 (car clq2))) (setq clq3 (getstring "\nNom du calque : ") ) ) (setq pt1 (cadr clq2)) (if (tblsearch "LAYER" clq3) (progn (setq js1 (ssget "_X" (list '(0 . "LINE LWPOLYLINE") (cons 8 clq3)) ) nb_s 0 s_t 0.0 ) (repeat (sslength js1) (setq ent1 (ssname js1 (+ nb_s s_t))) (cond ((= (val_dxf1 0 ent1) "LINE") (setq nb_s (1+ nb_s) s_t (+ s_t (LONGOBJT1 ent1)) ) ) ((= (val_dxf1 0 ent1) "LWPOLYLINE") (setq nb_s (1+ nb_s) s_t (+ s_t (LONGOBJT1 ent1)) ) ) ) ) (setq descr1 (strcat ;"\nNom de calque..........\t" ;clq1 ;"Nombre de lignes.......\t" ;(itoa nb_l) ;"Longueur de ligne......\t" ;(rtos lo_l) ;"Nombre de polylignes...\t" ;(itoa nb_pl) ;"Longueur de polyligne..\t" ;(rtos lo_pl) ;"Longueur totale........\t" ;(rtos (+ lo_l lo_pl)) clq3 "\t" (itoa nb_s) "\t" (rtos s_t) "\n" ) ) (textscr) (princ descr1) (initget "Oui Non") (if (= (getkword "\nEnregistrer dans un fichier ? [Oui/Non] < Non >: " ) "Oui" ) (progn (setq file1 (open (getfiled "Créez ou sélectionnez un fichier" "" "xls" 33 ) "a" ) ) (princ descr1 file1) (close file1) ) ) (graphscr) ) (princ "\nNom de calque invalide.") ) (princ) ) ;fin while ) ) ;;; ) ) ) Charlie69
-
création d\'intersection et reconstitution de contour
charlie69 a répondu à un(e) sujet de doy dans Débuter en LISP
Salut à toi Doy ca gaz? tu me fera signe quand tu aura avancé avec ton programme car avec le monde qui t'aide ca devrai avancé. @+ Nico -
salut à toi Zébulon je te remercie je vais essayer de voir ce que ca donne. en fait c'est pas pour moi c'est pour une pote qui doit faire un projet. @+ amicalement charlie69
-
salut a tous, j'aurai voulu savoir comment on peut insérer des blocs grace a la liste déroulante d'un boite de dialogue DCL? DCL boite_de_dialogue_corridor:dialog {label="Corridor"; :edit_box {label="largeur du corridor en m:"; edit_limit=4; edit_width=4; key=larg_corridor;} :boxed_row {label="Longueur des boîtes"; :radio_column { :radio_button {label="1Km"; key=cas0; value="1";} :radio_button {label="5Km"; key=cas1; value="0";} } } :popup_list {label="Blocs:"; value="16"; edit_width=4; key=bloc;} :row {ok_cancel;} } LISP (defun c:corridor () (setq cas "0") (setq dcl_id (load_dialog "Boite de dialogue corridor.dcl")) (if (not (new_dialog "boite_de_dialogue_corridor" dcl_id)) (exit) ) ;si il n'y a pas de boite de dialogue alors on lance le programme sans elle ;largeur du corridor (action_tile "larg_corridor" "(setq largeur_corridor $value)") ;largeur des boites (action_tile "cas0" "(setq cas \"0\")") (action_tile "cas1" "(setq cas \"1\")") ;j'établit la liste des blocs qui seront insérés dans les listes déroulantes (setq liste_bloc '("li3" "lib" "b600")) (start_list "bloc") (mapcar 'add_list liste_bloc) (end_list) ;;; (action_tile "bloc" "(setq bloc_largeur (nth (atoi $value) liste_bloc))") > problème à ce niveau là ;aide autoLISP done_dialog (action_tile "accept" "(done_dialog 1)") ;1 pour OK ; (setq userclick T) (action_tile "cancel" "(done_dialog 0)") ;o pour Cancel ; (setq userclick nil) (start_dialog) (unload_dialog dcl_id) (setq ok (start_dialog)) (boite) ; on lance le programme boite (princ) ) merci @+ charlie69
-
Salut, je te remercie car toute ma boite de dialogue marche impécable!!!!!!! @+ charlie69 :D
-
Bonjour, Je vais essayer de faire comme tu me dis. OK je vais l'éditer ici mais je ne pourrai pas le consulter souvent car je n'ai accés à internet qu'au bureau le matin, à midi et un peu le soir; chez moi je n'ai pas internet. je vais mettre le code DCL et le LISP qui traite la boite de dialogue mais pas le reste car le programme fait pas moins de 5000 lignes ca risquerai d'etre un peu long!!!!!! ;) je le met directement ici? DCL: boite_de_dialogue_massif_de_fondation:dialog {label="Massif de fondation"; :boxed_column {label="Coffrage"; :row{ :image {width=70;height=20;color=0;key=img1;} :column{ :row { :boxed_column {label="Semelle"; :edit_box {label="Largueur A (cm):"; edit_limit=4; edit_width=4; //value="350"; key=larg_semelle;} :edit_box {label="Longueur B (cm):"; edit_limit=4; edit_width=4; //value="350"; key=long_semelle;} :edit_box {label="Hauteur H (cm):"; edit_limit=4; edit_width=4; //value="70"; key=haut_semelle;} } :boxed_column {label="Fût (Si il existe)"; :edit_box {label="Largeur a (cm):"; edit_limit=4; edit_width=4; //value="110"; key=larg_fût;} :edit_box {label="Longueur b (cm):"; edit_limit=4; edit_width=4; //value="110"; key=long_fût;} :edit_box {label="Hauteur h (cm):"; edit_limit=4; edit_width=4; //value="70"; key=haut_fût;} } } :boxed_row {label="Autres paramètres"; :boxed_column {label="Excentricité du fût"; :edit_box {label="Delta X (cm):"; edit_limit=5; edit_width=5; //value="-85"; key=deltax;} :edit_box {label="Delta Y (cm):"; edit_limit=5; edit_width=5; //value="0"; key=deltay;} spacer_1; } spacer_1; :column{ spacer_1; :edit_box {label="Arase inférieure (cm):"; edit_limit=4; edit_width=4; key=arase_inf;} :edit_box {label="Epaisseur du béton de propreté bp (cm):"; edit_limit=5; edit_width=5; //value="5"; key=epaisseur_bp;} spacer_1; } } } } } :boxed_row {label="Ferraillge"; :row { :image {width=70;height=20;aspect_ratio=1;color=0;key=img2;} } :row { :boxed_column {label="Semelle"; :edit_box {label="Enrobage (cm):"; edit_limit=1; edit_width=1; // value="5"; key=enrobage_semel;} spacer_1; :row { :boxed_column {label="Ax"; :edit_box {label="Nombre de lits:"; edit_limit=4; edit_width=4; //value="32"; key=nbre_ax_semelle;} :popup_list {label="Diamètre:"; value="16"; edit_width=4; key=dia_ax_semelle;} spacer_1; } } :row { :boxed_column {label="Ay"; :edit_box {label="Nombre de lits:"; edit_limit=4; edit_width=4; //value="32"; key=nbre_ay_semelle;} :popup_list {label="Diamètre:"; value="16"; edit_width=4; key=dia_ay_semelle;} spacer_1; } } :row { :boxed_row {label="Armatures de peau"; :image {width=20;height=20;aspect_ratio=1;color=0;key=img3; } :radio_column { :radio_button {label="En U"; key=cas0; value="1";} :radio_button {label="En L"; key=cas1; value="0";} } :column{ :edit_box {label="Nombre de lits:"; edit_limit=4; edit_width=4; //value="3"; key=nbre_armature_peau;} :popup_list {label="Diamètre:"; value="10"; edit_width=4; key=dia_armature_peau;} } } spacer_1; } } } :boxed_column {label="Fût (Si il existe)"; :edit_box {label="Enrobage (cm):"; edit_limit=1; edit_width=1; //value="3"; key=enrob_fût;} :boxed_column {label="Ax"; :edit_box {label="Nombre de lits:"; edit_limit=2; edit_width=2; //value="4"; key=nbre_ax_fût;} :popup_list {label="Diamètre:"; value="18"; edit_width=4; key=dia_ax_fût;} } :boxed_column {label="Ay"; :edit_box {label="Nombre de lits:"; edit_limit=2; edit_width=2; //value="4"; key=nbre_ay_fût;} :popup_list {label="Diamètre:"; value="18"; edit_width=4; key=dia_ay_fût;} } :boxed_column {label="Cadres"; :edit_box {label="Espacement:"; edit_limit=2; edit_width=2; //value="20"; key=espace_cadre;} :popup_list {label="Diamètre:"; value="13"; edit_width=4; key=dia_cadre;} } } } :row {ok_cancel;} } LISP: (defun c:massif_de_fondation () (setq cas "0") (setq dcl_id (load_dialog "Boite de dialogue massif de fondation.dcl")) (if (not (new_dialog "boite_de_dialogue_massif_de_fondation" dcl_id)) (exit) ) ;si il n'y a pas de boite de dialogue alors on lance le programme sans elle ;image en .sld (setq x1 (dimx_tile "img1") ;coordonnées x du coin inférieur droit de l'image nom de l'image que l'on donne dans la boite de dialogue y1 (dimy_tile "img1")) ;coordonnées y du coin inférieur droit de l'image (start_image "img1") ;Début du traitement d'un controle image (fill_image 0 0 (dimx_tile "img1") (dimy_tile "img1") 0) (slide_image 20 0 x1 y1 "massif_image1") ;centrage de la diapo (end_image) (setq x2 (dimx_tile "img2") y2 (dimy_tile "img2")) (start_image "img2");nom de la diapo (fill_image 0 0 (dimx_tile "img2") (dimy_tile "img2") 0) (slide_image 0 -60 x2 y2 "massif_image2") ;centrage de la diapo (end_image) (setq x3 (dimx_tile "img3") y3 (dimy_tile "img3")) (start_image "img3");nom de la diapo (fill_image 0 0 (dimx_tile "img3") (dimy_tile "img3") 0) (slide_image 0 0 x3 y3 "massif_image3") ;centrage de la diapo (end_image) ;j'établit la liste des diamètres qui seront insérés dans les listes déroulantes (setq diametre '("6" "8" "10" "12" "14" "16" "20")) ;coffrage ;semelle (action_tile "larg_semelle" "(setq largeur_semelle $value)") (action_tile "long_semelle" "(setq longueur_semelle $value)") (action_tile "haut_semelle" "(setq hauteur_semelle $value)") ;fût (si il existe) (action_tile "larg_fût" "(setq largeur_fût $value)") (action_tile "long_fût" "(setq longueur_fût $value)") (action_tile "haut_fût" "(setq hauteur_fût $value)") ;autre paramètres ;exentricité du fût (action_tile "deltax" "(setq delta_x $value)") (action_tile "deltay" "(setq delta_y $value)") ;arase inférieure (action_tile "arase_inferieure" "(setq arase_inferieure $value)") ;épasseur gros béton (action_tile "epaisseur_bp" "(setq epaisseur_beton_proprete $value)") ;ferraillage ;semelle (action_tile "enrobage_semel" "(setq enrobage_semelle $value)") ;acier Ax (action_tile "nbre_ax_semelle" "(setq nombre_ax_semelle $value)") (start_list "dia_ax_semelle") (mapcar 'add_list diametre) (end_list) (action_tile "dia_ax_semelle" "(setq diametre_ax_semelle (nth (atoi $value) diametre))") ;;; (setq dia_ax_semelle (nth (atoi "dia_ax_semelle") diametre)) ;;; (action_tile "dia_ax_semelle" "(setq diametre_ax_semelle $value)") ;acier Ay (action_tile "nbre_ay_semelle" "(setq nombre_ay_semelle $value)") (start_list "dia_ay_semelle") (mapcar 'add_list diametre) (end_list) (action_tile "dia_ay_semelle" "(setq diametre_ay_semelle (nth (atoi $value) diametre))") ;;; (setq dia_ay_semelle (nth (atoi "dia_ay_semelle") diametre)) ;;; (action_tile "diametre_ay_semelle" "(setq dia_ay_semelle $value)") ;armature de peau (action_tile "cas0" "(setq cas \"0\")") (action_tile "cas1" "(setq cas \"1\")") (action_tile "nbre_armature_peau" "(setq nombre_armature_peau $value)") (start_list "dia_armature_peau") (mapcar 'add_list diametre) (end_list) (action_tile "dia_armature_peau" "(setq diametre_armature_peau1 (nth (atoi $value) diametre))") ;;; (setq dia_armature_peau2 (nth (atoi "dia_armature_peau") diametre)) ;;; (action_tile "diametre_armature_peau1" "(setq dia_armature_peau2 $value)") ;fût (action_tile "enrob_fût" "(setq enrobage_fût $value)") ;acier Ax (action_tile "nbre_ax_fût" "(setq nombre_ax_fût $value)") (start_list "dia_ax_fût") (mapcar 'add_list diametre) (end_list) (action_tile "dia_ax_fût" "(setq diametre_ax_fût (nth (atoi $value) diametre))") ;;; (setq dia_ax_fût (nth (atoi "dia_ax_fût") diametre)) ;;; (action_tile "diametre_ax_fût" "(setq dia_ax_fût $value)") ;acier Ay (action_tile "nbre_ay_fût" "(setq nombre_ay_fût $value)") (start_list "dia_ay_fût") (mapcar 'add_list diametre) (end_list) (action_tile "dia_ay_fût" "(setq diametre_ay_fût (nth (atoi $value) diametre))") ;;; (setq dia_ay_fût (nth (atoi "dia_ay_fût") diametre)) ;;; (action_tile "diametre_ay_fût" "(setq dia_ay_fût $value)") ;cadres (action_tile "espace_cadre" "(setq espacement_cadre $value)") (start_list "dia_cadre") (mapcar 'add_list diametre) (end_list) (action_tile "dia_cadre" "(setq diametre_cadre (nth (atoi $value) diametre))") (setq dia_cadre (nth (atoi "dia_cadre") diametre)) (action_tile "diametre_cadre" "(setq dia_cadre $value)") ;aide autoLISP done_dialog (action_tile "accept" "(done_dialog 1)") ;1 pour OK ; (setq userclick T) (action_tile "cancel" "(done_dialog 0)") ;o pour Cancel ; (setq userclick nil) (start_dialog) (unload_dialog dcl_id) (setq ok (start_dialog)) ;;; (if ;;; (and (= ok 1) (and (/= largeur_semelle nil) (/= longueur_semelle nil) (/= hauteur_semelle nil))) ; si toutes les données sont rentrées (massif) ; on lance le programme massif ;;; ) (princ) ) Il y un aussi un petit souci avec les image que l'on insere dans la boite de dialogue, elle sont trop grande. Merci @+ charlie69
