Aller au contenu

Patrick_35

Membres
  • Compteur de contenus

    6 374
  • Inscription

  • Dernière visite

  • Jours gagnés

    30

Tout ce qui a été posté par Patrick_35

  1. Salut Si j'ai bien compris, voici un exemple (setq ent (vlax-ename->vla-object (car (entsel)))) ; Sélection de la poly (vlax-invoke ent 'offset 30.0) ; Décalage d'un coté (vlax-invoke ent 'offset -30.0) ; Puis de l'autre @+
  2. Salut Tu cherches à savoir si la dll est chargée. Il suffit donc de tester une fonction de la dll pour avoir la réponse. La fonction désirée est présente ? --> Oui, la dll est chargée. @+
  3. Salut Tu peux tester si la fonction existe. Non --> à charger Un exemple qui me permet de savoir si la dll de (gile) est présente. (and (not (eval 'gc-vpthaw)) (setq dcl (findfile "VpLayerLisp.dll")) (if (< 18 (atoi (getvar 'acadver))) (vl-cmdf "_netload" "vplayerlisp_19.dll") (vl-cmdf "_netload" "vplayerlisp.dll") ) ) Et un autre qui me permet de savoir si je peux utiliser la progressbar des express tools (if (eval 'acet-ui-progress-done) (setq express T) ) @+
  4. Salut Pour la valeur de l'attribut, tu remplaces (setq str (strcase (getstring t "\nEntrez la ou les valeurs de l'attribut (Séparez les valeurs par une virgule) : "))) par (setq str (strcase "30")) Et pour sélectionner le bon bloc, tu remplaces (list '(0 . "INSERT") '(66 . 1) par (list '(0 . "INSERT") '(66 . 1) '(2 . "Bulle") @+
  5. Salut Tu peux faire aussi, par exemple (vl-list->string (vl-remove (ascii "_") (vl-string->list "123_456_789"))) @+
  6. Salut Sauf que tu devras le faire fenêtre par fenêtre. Comme l'indique x_all, tu as GEF, qui en 1 seule manip te fera le boulot. @+
  7. Salut Et de cette manière ? (defun pw_egal_list (lst) (apply 'and (mapcar '(lambda(x)(equal (car lst) x)) (cdr lst))) ) @+
  8. Salut Si, c'est tout à fait possible de faire un lisp avec les réacteurs, mais son utilité reste à démontrer, car avec un outil comme GEF, la manip est très rapide. @+
  9. Salut Tu ne te sers pas de la bonne fonction pour comparer deux listes Par exemple (= '(1 2) '(1 2)) Retourne nil alors que (equal '(1 2) '(1 2)) Retourne T Donc, pour ton test, il faut faire (setq maliste '((1 2)(1 2))) (apply 'equal maliste) Pour ce qui est de la fonction quote, tu as cet excelent tuto de (gile) @+
  10. Salut Tu as aussi GEF pour gérer les calques de toutes les fenêtres de présentations @+
  11. Préparez vous à une journée très spéciale le lundi 15 mai 2017 ! http://nsa38.casimages.com/img/2017/05/07/170507053747128892.jpg Pour la première fois en français, nos Expert Elite francophones répondront à toutes vos questions sur AutoCAD de 9:00 à 16:00 heure française, sur le forum AutoCAD. Vous avez des questions que vous avez toujours voulu poser? Venez passer quelques minutes, une heure ou deux, ou toute la journée (de 9:00 à 16:00) sur notre communauté! Comment ça marche? C'est facile, c'est gratuit, c'est "Des Spécialistes à votre écoute" Venez sur le forum AutoCAD, posez vos questions et attendez vous à des réponses rapides de la part de nos Expert Elite. Naturellement, c'est le principe de notre communauté, tout le monde peut répondre aux questions. PS: en savoir plus sur le programme Expert Elite http://nsa37.casimages.com/img/2017/05/07/17050705391294798.jpg
  12. Une nouvelle génération d'Autocadien. Quand tu auras des petits enfants, ils vont être biberonnés à l'Autocad. :(rires forts): Autodesk pourra bien te donner une souscription à vie. @+
  13. C'est là où c'est interessant de faire un Benchmark (defun ben_foreach() (foreach ele (list (cons "FlPtLong" Long) (cons "FlPtLarg" Larg) (cons "PlPtEpais" Epais)) (vlax-ldata-put "DenisH" (car ele) (cdr ele)) ) ) (defun ben_mapcar() (mapcar '(lambda(LstPut LstVal)(vlax-ldata-put "DenisH" LstPut LstVal)) '("FlPtLong" "FlPtLarg" "FlPtEpais") (list Long Larg Epais)) ) (benchmark (list '(ben_foreach) '(ben_mapcar))) Résultat Comme quoi ;) @+
  14. Pour trouver des exemples, dès que tu as une/des liste(s) à traiter par une boucle. Pour ton exemple, on peut très bien utiliser un foreach à la place d'un mapcar car le résultat du mapcar importe peu. Par exemple (foreach ele (list (cons "FlPtLong" Long) (cons "FlPtLarg" Larg) (cons "PlPtEpais" Epais)) (vlax-ldata-put "DenisH" (car ele) (cdr ele)) ) @+
  15. Tu peux faire (mapcar '(lambda(LstPut LstVal)(vlax-ldata-put "DenisH" LstPut LstVal)) '("FlPtLong" "FlPtLarg" "FlPtEpais") (list Long Larg Epais)) Ce qui revient à faire ce que tu as montré. @+
  16. (gile) à très bien expliqué la fonction mapcar. Une fois que tu auras intégré que c'est un boucle qui traite les listes qui lui sont fournie et retourne les arguments (sous forme de liste) en fonction de la fonction indiqué (prédéfinie ou perso), tu auras fait un grand pas :D Le mieux, est de faire des tests, de regarder les résultats afin de bien comprendre la fonction. Je vois que tu commences à jouer avec les fonctions des boites de dialogues. N'oublie pas que c'est du texte et que l'on peut condenser/optimiser ses fonctions comme le montre (gile) avec la fonction action_tile. On peut même se servir de listes pour gérer ses affichages/actions. Chaque chose en son temps ;) @+
  17. Salut Cela ne change que les calques, pas les couleurs forcées (idem pour les blocs). @+
  18. Salut Tu peux utiliser un script qui lance un lisp @+
  19. Bonjour à vous tous Juste une précision. Les listes n'ont pas obligatoirement le même nombre d'arguments. Dans ce cas, ce qui est retourné comme résultat correspond à la liste la plus petite. Par exemple (mapcar 'strcat '("a" "b" "c" "d") '("a" "b")) Retourne ("aa" "bb") @+
  20. Comme quoi, il ne faut pas rester sur ses acquis. Merci (gile) @+
  21. Salut Le plus important n'est pas de savoir quel est le temps pour ma routine, mais quelle est la fonction la plus rapide. Pour cela, tu as un outil reconnu dans la communauté du lisp --> Benchmark Un exemple test pour juste incrémenter 1 à un chiffre (benchmark (list '(1+ 1) '(+ 1 1))) Resultat @+
  22. Salut Merci (gile) @+
  23. Salut Peut-être en utilisant le vlisp Essaye ceci (non testé) (princ "\nRemplissage des données géographiques des blocs.") (setq doc (vla-get-activedocument (vlax-get-acad-object))) (and (ssget "_X" '((0 . "INSERT")))) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (ade_projsetsrc (ade_projgetwscode)) (ade_projsetdest "LL-RGF93") (setq pntLLRGF93 (ade_projptforward Coord)) ;;Ecriture des coordonnées dans un fichier CSV (write-line (strcat (vla-get-name ent) "," (rtos (car pntLLRGF93) 2 15) "," (rtos (cadr pntLLRGF93) 2 15)) FileCSV) (foreach att (vlax-invoke ent 'getattributes) (cond ((= (vla-get-tagstring att) "X") (vla-put-textstring att (rtos (car pntLLRGF93) 2 15)) ) ;_ Fin de cond ((= (vla-get-tagstring att) "Y") (vla-put-textstring att (rtos (cadr pntLLRGF93) 2 15)) ) ((= (vla-get-tagstring att) "Z-TN") (vla-put-textstring att (rtos (caddr Coord) 2 3)) ) ((= (vla-get-tagstring att) "NOMENTRGEO") (vla-put-textstring att "CERENE") ) ((= (vla-get-tagstring att) "DATERELEVE") (vla-put-textstring att (menucmd "M=$(edtime,$(getvar,date),DD/MO/YYYY)")) ) ((= (vla-get-tagstring att) "NOMPRESTACERTIGEO") (vla-put-textstring att NomOp) ) ((= (vla-get-tagstring att) "MARQUEAPP") (vla-put-textstring att NomMateriel) ) ((= (vla-get-tagstring att) "NUMSERIEAPP") (vla-put-textstring att NumMateriel) ) ((= (vla-get-tagstring att) "NUMSERIE") (vla-put-textstring att NumMateriel) ) ((= (vla-get-tagstring att) "INCERTXY") (vla-put-textstring att "5cm") ) ((= (vla-get-tagstring att) "INCERTZ") (vla-put-textstring att "5cm") ) ) ) ) (vla-delete sel) ) ) @+
  24. Regarde la fonction trans Oui, et subst. Exemple non testé (setq ent (entget (car (entsel)))) (setq ent (subst (cons 2 "MON_BLOC") (assoc 2 ent) ent) (entmod ent) @+
  25. Salut Regarde si tes blocs ont bien le même point d'insertion. Sinon, pour simplifier ton lisp, pour remplacer un bloc par un autre tout en conservant les caractéristiques du premier (mêmes les attributs), tu changes juste le code dxf 2 (le nom) du premier par le remplaçant. @+
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité