-
Compteur de contenus
4 029 -
Inscription
-
Dernière visite
-
Jours gagnés
21
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par DenisHen
-
comment faire pour transformer les coords
DenisHen a répondu à un(e) sujet de chehilidjamel2009 dans Débuter en LISP
Mille mercis lili2006 ! ! ! Denis... -
comment faire pour transformer les coords
DenisHen a répondu à un(e) sujet de chehilidjamel2009 dans Débuter en LISP
Salut à tous... Quelqu'un aurait une formule pour calculer la distance entre deux coordonnées géodésique ? LatD = 47.79: LonD = 3.57 LatA = 49.81 : LonA = 1.85 Je la transformerais en VB... Merci d'avance, Denis... -
Tri des calques selon les (n) caractères de gauche
DenisHen a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Salut, Merci encore (gile)... Je vais apprendre "par coeur" tes liens.. Je serai peut-être compétant après... Denis... -
Tri des calques selon les (n) caractères de gauche
DenisHen a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Salut, Merci (gile), mais l'aide sur wcmatch est en anglais, et c'est ce que j'en avais compris... Mais tu m'a montré ma faute... Je vais reconstruire ma routine plus clairement... Merci encore... Je ne sais pas si tu te souviens, mais tu m'avais énormément aidé il y à 4/5 ans... Mais depuis, je n'ai pas retouché au lisp... Merci, Denis... -
Tri des calques selon les (n) caractères de gauche
DenisHen a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Merci Fraid, J'avais oublié le retour d'argument de MetreCAD_Niveau... J'ai donc, maintenant : (defun c:LayerNivP (/ x_plan) (command "-calque" "e" "0" "") ; calque courant 0 (command "-calque" "l" "*" "") ; libère tous les calques ;(command "-calque" "ac" "*" ""); active tous les calques ;(setq x_plan (tblnext "layer" T)) ; liste des calques (princ x_plan) (setq x_plan (layerstate-getnames)) ; liste des calques (princ x_plan) (if (= (vlax-ldata-get "MetreCAD" "NivCour") "") ; vérifi le niveau courant (c:MetreCAD_Niveau) ; demande un niveau courant ) ;_ Fin de if [surligneur] (setq Niv (vlax-ldata-get "MetreCAD" "NivCour")) [/surligneur] (while (/= x_plan nil) (if (= (wcmatch x_plan Niv)) ; compare nom du calque avec niveau courant (command "-calque" "a" x_plan "") ; si niveau contenu dans nom du calque -> active le calque (command "-calque" "i" x_plan "") ; si niveau non contenu dans nom du calque -> inactive le calque ) ;_ Fin de if (setq x_plan (tblnext "layer") ; calque suivant ) ; loop ) ;_ Fin de if ) ;_ Fin de defun Merci encore, mais j'ai toujours le même problème... Denis... -
Tri des calques selon les (n) caractères de gauche
DenisHen a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Salut, Mile excuses... Voici le lisp : ; Nom du fichier : MetreCAD_Niveau.lsp ; Créé par DenisH ; cadxp@phalenecad.fr (defun c:MetreCAD_Niveau (/ liste nbr Niv) (setvar "cmdecho" 0) ;Saisie du Niveau courant (setq liste (list "Rdc" "Comble" "Etage" "Charp" "Toit" "TP" "VS" "Ss" "Fond" ) ;_ Fin de list ) ;_ Fin de setq (setq dcl_id (load_dialog "MetreCAD_Niveau.dcl")) (if (not (new_dialog "pop_up" dcl_id)) (exit) ) ;_ Fin de if (start_list "nbr") (mapcar 'add_list liste) (end_list) (action_tile "accept" "(setq Niv (nth (atoi (get_tile \"nbr\")) liste)) (done_dialog))" ) ;_ Fin de action_tile (start_dialog) (unload_dialog dcl_id) (vlax-ldata-put "MetreCAD" "NivCour" Niv) (princ (strcat "Niveau choisi : " (vlax-ldata-get "MetreCAD" "NivCour"))) (c:MetreCtrl) ) ;_ Fin de defun ;|«Visual LISP© Format Options» (80 2 2 2 T "Fin de " 80 9 0 0 nil nil T nil T) ;*** NE PAS AJOUTER de texte au-dessous du commentaire! ***|; Et voici son dcl (merci à (gile)): pop_up:dialog{ label="MétréCAD :"; :boxed_column{ label="Choisissez un niveau"; :list_box{ label="Nom :"; key="nbr"; edit_width=70; } } ok_cancel; } Voilà et merci, Denis... -
Tri des calques selon les (n) caractères de gauche
DenisHen a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Salut à tous, Merci mille fois (gile)... J'ai réussi à faire une ébauche : (defun c:LayerNivP (/ x_plan) (command "-calque" "e" "0" "") ; calque courant 0 (command "-calque" "l" "*" "") ; libère tous les calques ;(command "-calque" "ac" "*" ""); active tous les calques ;(setq x_plan (tblnext "layer" T)) ; liste des calques (princ x_plan) (setq x_plan (layerstate-getnames)) ; liste des calques (princ x_plan) (if (= (vlax-ldata-get "MetreCAD" "NivCour") "") ; vérifi le niveau courant (c:MetreCAD_Niveau) ; demande un niveau courant ) ;_ Fin de if (while (/= x_plan nil) (if (= (wcmatch x_plan Niv)) ; compare nom du calque avec niveau courant (command "-calque" "a" x_plan "") ; si niveau contenu dans nom du calque -> active le calque (command "-calque" "i" x_plan "") ; si niveau non contenu dans nom du calque -> inactive le calque ) ;_ Fin de if (setq x_plan (tblnext "layer") ; calque suivant ) ; loop ) ;_ Fin de if ) ;_ Fin de defun Mais je ne sais pas encore pourquoi cela ne fonctionne pas... Réponse d'AutoCAD : Commande: (c:LayerNivP) nilnilnil Mais bon... Je continu de chercher... Merci encore, Denis... -
Bonjours à tous, Voilà, j'essai d'activer tous les calques commençant par "le premier mot" correspondant à une chaine, je m'explique : Voici les noms de mes calques : 0 Comble Charpente (Sap_08-23) Comble ...... Etage Mur_agglos_creux (AgCr) Etage Cloison_placostyl (ClPl) Etage Menuiserie (...) Rdc Mur_agglos_creux (AgCr) Rdc Cloison_placostyl (ClPl) Rdc Menuiserie.......(...) Je choisi mon niveau grace à un petit dcl qui me retourne le nom du niveau (ex "Rdc"), j'aimerai activer tous les calques "Rdc" et inactiver tous les autres. Sachant qu'il y aura toujours le nom du niveau en premier dans le nom du calque et qu'il sera toujours suivi d'un espace... J'ai déjà commencé mon lisp (defun c:LayerNivP (Niv / x_plan); active le niveau courant (command "-calque" "e" "0" ""); calque courant : 0 (command "-calque" "l" "*" ""); libère tous les calques (command "-calque" "ac" "*" ""); active tous les calques (setq x_plan (tblnext "layer" T)); rempli x_plan avec le liste des calques (c:MetreCAD_Niveau); DCL pour le choix du niveau (while (/= x_plan nil); début de listage des calques [surligneur] (if (= (read ((vl-string-position (x_plan " ")))) (command "-calque" "g" (cdr (assoc 2 x_plan)) "") (command "-calque" "l" (cdr (assoc 2 x_plan)) "")[/surligneur] ) ;_ Fin de if (setq x_plan (tblnext "layer")) ) ;_ Fin de while ) ;_ Fin de defun Je sais que je vais devoir utiliser "(vl-string-position (x_plan " "))" mais je ne trouve pas la commande lisp qui me donnerai la taille de la chaine "x_plan, ou l'équivalent de Mid$ en VB... Merci pour vos éventuelles réponses, Bon week-end à tous, Denis...
-
Salut, Je ne comprends plus rien, ma routine qui fonctionnait me sort maintenant : ; erreur: type d'argument incorrect: FILE nil Alors que je n'ai pas changé une seule virgule et mon TXT est toujours à la même place ! ! J'ai essayé çà : Mon txt en une ligne : Alexamdre M.,Christian B.,François B.,Issam B.A.,Jérémy R.,Johan B.,Kévin R.,Marc D. et mon lsp : (defun c:TestTXT (/ Liste Fich) (setq Fich (open "Vendeur.txt" "r")) (setq Liste (read-line Fich)) (strtok Liste ",") (close Fich) (princ Liste) ) ;_ Fin de defun ;;; STRTOK (Vladimir Nesterovsky) Retourne une liste de chaines ;;; ex : (strtok "abc,def" ",") -> ("abc" "def") ;Merci à (gile) (defun strtok (strng chs / len c l s cnt chsl) (setq chsl (strtol chs)) (setq len (strlen strng) s "" cnt (1+ len) ) ;_ Fin de setq (while (> (setq cnt (1- cnt)) 0) (setq c (substr strng cnt 1)) (if (member c chsl) (if (strp s) (setq l (cons s l) s "" ) ;_ Fin de setq ) ;_ Fin de if (setq s (strcat c s)) ) ;_ Fin de if ) ;_ Fin de while (if (strp s) (cons s l) l ) ;_ Fin de if ) ;_ Fin de defun Je vais me tourner vers VBA, dommage, j'aime bien le Lisp... Bonne nuit à tous, Denis...
-
Salut, Merci à vous deux... Je vais tenter de faire une boucle "while"... Je vais chercher la bonne syntaxe... Ca ne doit pas être sorcier ;) Merci encore Denis...
-
Bonjour à tous, Je cherche à alimenter une liste issue du contenu d'un .txt J'ai fini par choisir cette structure pour le fichier "Vendeur.txt" sans être convaincu que ce soit la meilleure : "Alexamdre M." "Christian B." "François B." "Issam B.A." "Jérémy R." "Johan B." "Kévin R." "Marc D." Et voici mon code : (defun c:TestTXT (/ Liste Fich) (setq Fich (open "Vendeur.txt" "r")) ;ouverture du TXT (setq Liste (read-line Fich)) ;remplit le liste avec lecture de la ligne du TXT (close Fich) ;fermeture du fichier TXT (princ Liste) ;affiche la liste ) ;_ Fin de defun Mon problème ? Le résultat : "\"Alexamdre M.\" \"Christian B.\" \"François B.\" \"Issam B.A.\" \"Jérémy R.\" \"Johan B.\" \"Kévin R.\" \"Marc D.\"" Mon code lit la totalité de la ligne (normal) et je me retrouve avec un seul élément dans ma liste... Ce qui est logique... Je pense donc à placer un seul nom par ligne dans le TXT et faire un "while not eof" pour remplire ma liste... Mais avant de me lancer, j'aimerai avoir vos avis sur ma "méthode"... Si c'est la bonne, s'il y a plus simple, plus court, plus sûr... Merci pour votre aide éventuelle, Denis...
-
Salut, Autant pour moi Tramber, j'avais oublié... Et merci encore... Denis...
-
Salut, Merci à tous... J'ai enfin saisie quelque chose ! ! ! Mais en DCL...( donc, pas "chargé" mais juste "appelé" ) Mais il me reste un petit problème, (gile) a posté çà en 2005 : pop_up:dialog{ label="Pop_up exemple"; :boxed_column{ label="Choisissez un nombre"; :popup_list{ label="Nombre :"; key="nbr"; edit_width=10; } } ok_cancel; } Le LISP qui le controle : (defun c:pop_up (/ liste n nbre) (setq liste (list "10" "20" "30" "40")) (setq dcl_id (load_dialog "pop_up.dcl")) (if (not (new_dialog "pop_up" dcl_id)) (exit) ) (start_list "nbr") (mapcar 'add_list liste) (end_list) (action_tile "accept" "(setq nbre (atof (nth (atoi (get_tile \"nbr\")) liste))) (done_dialog))" ) (start_dialog) (unload_dialog dcl_id) (princ nbre) (princ) ) Mais j'ai remplacé les nombres "10" "20" "30" ".... par des chaines "Denis" "Jean" "Albert"... Et maintenant, le retour de la valeur cliqué dans le dcl retourne un "string" et non un "integer" Je dois donc changer [surligneur] "atoi" [/surligneur] dans [surligneur] "(setq nbre (atof (nth (atoi (get_tile \"nbr\")) liste))) [/surligneur] par un [surligneur] "atos" [/surligneur]? Il y a des années que je n'ai pas touché au LiSP... Et là, je rame... Merci encore pour toute cette aide... J'ai bien dégrossis mon projet... Je vois de bonnes perspectives avec le DCL (inclu dans AutoCAD) mais si je n'y arrive pas, ObjectDCL devrait bien m'aider... Mais je vais voir avec mon BE pour une licence, sinon, je me l'achèterais personnellement... Encore merci... Denis...
-
CADy, Je débute en "dcl" depuis une journée, en fait, depuis hier... Je comprend mieux maintenant, après le forum dont je parlais et tes explications... Et dans ce forum, les trois exemples de (gile) sont excellents... Je vais faire quelques petites recherches pour en savoir plus sur la structure des dcl (Dialog Control Language)... Merci encore pour tout... Denis...
-
Salutations... Pour Tramber : mon lien indiquait le forum "LISP et Visual LISP > Débuter en LISP > Editeur DCL", réponse n°3 de (gile) Pour CADy : merci beaucoup, je n'hésiterait pas... Pour mon Pb de license, j'ai fait la désinstallation 2h après l'installe... Peut-être que... Pour les deux... Effectivement, pour le développement, je préfère le français, surtout qu'en lisp, je débute depuis quelques années ;). Par contre, je ne comprend pas pourquoi en lisp, on charge toujours un fichier .dcl alors qu'ils sont tous en .odcl... Bref, merci à tous, Denis...
-
Resalut... Je pense que l'on peut clore cette discution au sujet de OpenDCL... Je me suis légèrement trompé de forum... Je reviendrais avec une licience ObjectDCL... Pour l'instant, je pense avoir trouvé une réponse ici : http://www.cadxp.com/modules.php?op=modload&name=XForum=viewthread&tid=19292#pid79279 merci à (gil) Denis... Encore un grand merci à Tramber...
-
Bonjour à tous, Au sujet d'OpenDCL, il faut un "arx" quelquonque ? Denis...
-
Bonjour à tous ! ! Merci beaucoup Tramber... J'ai bien l'onglet supplémentaire dans [Outils] d'AutoCAD, comme prévu... Mais ObjectDCL m'écrit dans cet onglet: "ObjectDCL ARX Activation Status: The trial is over." Alors que je viens de l'installer... Je suis donc allé faire un tour sur le site et j'ai vu qu'il coûtait 44€... Donc, pour 44€, j'ai procédé à l'achat... Mais il ne veut pas par CB... Je tente la création d'un compte PayPal ! ! ! Mais j'aimerai savoir s'il n'y a pas un distributeur européen voir français avant... En tous cas... 1000 Merci... Denis...
-
Bonjour à tous... Merci beaucoup, Tramber, une fois de plus CadXP me sauve ! ! Mais j'ai un affreux doute, "ObjectDCL AutoCAD® Runtime Extension (ARX)" n'est pas payant ? J'ai la version trial pour 15 jours... Mais après ? Sinon, je m'y colle immédiatement... Et merci encore ! ! ! Denis...
-
Bonjour à tous, Effectivement Tramber, je ne trouve aucun ObjectDCL.arx sur mon disque ni sur le net, même après l'installation de "ObjectDCL Editor" et de "ObjectDCL AutoCAD® Runtime Extension (ARX)". Mais dans le dernier prog, j'ai trouvé un "ObjectDCL.18.arx" qui ne fonctionne pas avec mon AutoCAD 2010 (peut-être faut-il le 17)... Merci pour cette réponse... je vais continuer, et je trouverai... Je vais tenter maintenant le méthode décrite qui est : faire le DCL en même temps que le LSP... Je vais chercher une aide en Français... PS : j'ajoute le "CHEMIN", même s'il est déjà défini dans le "chemin de recherche de fichiers de support" dans AutoCAD... En tous cas, grand merci, Denis...
-
Bonjour à tous, J'ai installé ObjectDCL (via http://www.objectdcl.com). J'ai fait une fenêtre avec ObjectDCL que j'ai enregistré sous "MetreCAD_AvantProjet.odc" dans un répertoire connu d'AutoCAD... J'ai, dans le même répertoire, un fichier nommé "MetreCAD_AvantProjet.lsp" Mon ODC est associé avec mon LSP J'ai posé dans mon LSP : (Odcl_LoadProject "MetreCAD_AvantProjet_FrmDossier.odc") ou encore (Setq rValue (Odcl_Form_Show "MetreCAD_AvantProjet_FrmDossier.odc")) Enfin, toutes les orthographes que j'ai trouvé sur CadXP ou ailleurs... Rien... AutoCAD 2010 me répond toujours... ..........; erreur: no function definition: ODCL_LOADPROJECT Je pense qu'il me faut ObjectDCL.arx... ou un fichier dans ce genre pour intégrer avant toute commande : (Commande "OPENDCL") ou (Commande "_OPENDCL") Une âme charitable pourrait-elle me sauver ? Merci d'avance, Denis...
-
Insérer un champs dans un attribut de block
DenisHen a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Re à tous... En fait, je que je cherche ressemble à "Pline_block" (de gile je pense), mais il est trop complexe pour moi... Je dessine la pline "depuis" le lisp... J'ai donc cette entité dans "jspoly" Il ne me reste qu'à cliquer un point pour insérer mon block, car j'ai déjà toutes les données dans différentes variables... Merci à tous -
Bonjour à tous, J'ai un peu le même problème... ThisDrawing.SendCommand "(vlax-ldata-put " & """MetreCAD""" & " " & """Vend""" & " " & LstVend.Value & ")" & vbCr ThisDrawing.SendCommand "(vlax-ldata-put " & """MetreCAD""" & " " & """Vend""" & " " & """ & LstVend.Value & """ & ")" & vbCr Aucun des deux ne fonctionnent... J'ai pour les deux ces réponses : Commande: (vlax-ldata-put "MetreCAD" "Vend" LaBonneValeur) nil Commande: (vlax-ldata-put "MetreCAD" "Vend" " & LstVend.Value & ")" & LstVend.Value & " Je ne sais pas trop comment faire... Mais on ne sait jamais, merci, DenisH...
-
Bonjour à tous, J'ai cherché dans les forums mais je n'ai rien trouvé, ou alors, je n'ai pas sûs comprendre leur fonctionnement, comme dans l'exemple de Maître (gile) dans "Totalarea.lsp" ou "Totalperim.lsp" bien trop complexes pour moi... Voilà, j'ai une routine LiSP qui trace une polyligne fermée. Ensuite, j'insert un bloc avec différents attributs dont 2 que j'aimerai être des champs : - l'aire de la popyligne - la longueur de cette polyligne... Voici ma commande du menu : [ Plancher hourdis béton ep=16+4]^c^c(c:Plancher "pl" "bt" 20); Et voici mon LiSP : (defun c:Plancher (Styl Typ Ep /) (setvar "cmdecho" 1) (cond ((eq Styl "dl") (setq Style "dalle ")) ((eq Styl "pl") (setq Style "plancher ")) (T (setq Style "INCONNU")) ) ;_ Fin de cond(cond (cond ((eq Typ "bt") (setq Planch "béton")) ((eq Typ "tc") (setq Planch "TCI")) ((eq Typ "pf") (setq Planch "Polystyrène+fibralith")) ((eq Typ "pl") (setq Planch "Polystyrène+languette")) (T (setq Planch "INCONNU")) ) ;_ Fin de cond (setq Niv (vlax-ldata-get "MetreCAD" "NivCour")) (command "-calque" "e" (strcat Niv "_" Style Planch "_" (rtos (fix Ep) 2 0) "cm") "co" "6" "" "T" "A" "" "" (princ "\nDessinez le contour du plancher :") (command "_.pline" (while (not (zerop (getvar "cmdactive"))) (command pause)) ;_ Fin de while ) ;_ Fin de command ) ;_ Fin de command (setq jspoly (ssadd (entlast) jspoly)) (setq ename (ssname jspoly 0)) (getVertices ename) ) ;_ Fin de defun Voici la structure des attribut de mon bloc : STYDALLE : Style TYPDALLE : Planch EPDALLE : Ep SURFDALLE : le champs "aire" PERIDALLE : le champs "longueur" Mon but et de garder un lien entre la polyligne et le bloc... Merci pour toutes réponses éventuelles, Denis...
-
Bonjours à tous, J'utilise le ruban pour des commandes AutoCAD mais le "menubar" classique pour mes commandes perso(LiSP/VBA...) via une série de menu ;)
