Aller au contenu

DenisHen

Membres
  • Compteur de contenus

    4 029
  • Inscription

  • Dernière visite

  • Jours gagnés

    21

Tout ce qui a été posté par DenisHen

  1. nil T
  2. Merci encore à toi (gile) Mais là, je ne saisi pas... Dans mon cas, (* (last (trans '(0 0 1) 3 2)) 1000) est bien égale à 200.00000..... Mais je note ta routine "arrondi" forte utile... Merci encore, Denis...
  3. Merci à toi Tramber, Très intéressant, je croix que j'utiliserais : (setq Ech (* (last (trans '(0 0 1) 3 2)) 1000)) puisque je suis à l'intérieur de la fenêtre... J'ai (* (last (trans '(0 0 1) 3 2)) 1000) Qui me renvoi bien 200.0 (pour du 200ème). Mais j'ai (fix (* (last (trans '(0 0 1) 3 2)) 1000)) qui me renvoi 199 ? ? ? D'où qu'il est passé où le 1 ? ? Merci encore, Denis...
  4. Alors je dois passer par le nom de l'entité et non par un jeu de sélection ? comme ça : (setq ename (ssname jspoly 0)) (getVertices ename) Bon, ici ça marche, je dois avoir bon... Merci (gile) pour toutes ces précisions, Denis...
  5. Je suis désolé, mais je n'ai pas compris, je me reprend : dans ma première routine, mon jeu de sélection "jspoly" ne comporte qu'une polyligne et est correcte pour l'utilisation de "(getVertices jspoly)" (qui ne veut qu'une polyligne) Mais arrivé dans la fonction "getVertices", ename est vide... Si non, mon jeux de sélection est bon, puisque dans la première routine, je fais un décalage de "jspoly" et ça fonctionne ... Soit, j'ai mal exposé mon problème, soit je n'ai pas compris ta réponse... :( Je n'en donne peut-être pas toujours l'impression mais, oui, je lis toujours vos réponses, et avec le plus grand intérêt... Si non, je n'arriverais à rien... C'est ma faculté à comprendre le Lisp qui n'est pas toujours là ;) Merci encore, je vais quand même voir si je peut comprendre, Denis...
  6. Merci beaucoup (gile) pour ce lien, que je lirais demain... Il est 2h50... Là, et las, je vais me coucher... ;) Merci encore, Denis...
  7. Bonjour à tous... Dans une routine, j'ai : (setq jspoly (ssadd)) (command "_.pline" (while (not (zerop (getvar "cmdactive"))) (command pause) ) ;_ Fin de while ) ;_ Fin de command (setq jspoly (ssadd (entlast) jspoly)) (.......) (.......) (getVertices jspoly) (.......) (.......) Et dans une autre (qui n'est pas de moi, j'ai : (defun getVertices (ename / plineGet vertex vertexGet ) (setq return nil) (cond ((or (/= (type ename) 'ENAME) (not (setq plineGet (entget ename)))) (setq return nil)) ((= "POLYLINE" (cdr (assoc 0 plineGet))) (setq vertex (entnext ename)) (while (= "VERTEX" (cdr (assoc 0 (setq vertexGet (entget vertex))))) (setq return (cons (cdr (assoc 10 vertexGet)) return)) (setq vertex (entnext vertex)) ) ;_ Fin de while (setq return (reverse return)) ) ((= "LWPOLYLINE" (cdr (assoc 0 plineGet))) (setq return (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) plineGet))) ) (t (setq return nil)) ) ;_ Fin de cond ;return ) ;_ Fin de defun Et maintenant ... ... ... Ma question : Est'il possible de passer un argument "jspoly" de cette façon ? Là, je nage, et en plus, je suis creuvé... Je m'en vais me coucher ! ! Au revoir et bonne nuit à tous, Denis... (qui baaaAAAaaayyyye... zzZZZzzzzZZZzzzZZZ)
  8. Tu as raison... CabinetD, c'est moi, mais au boulo... Je n'avais pas mon mot de passe à l'époque... Et merci pour ton aide, Denis...
  9. Bonsoir à tous... Beaucoup de mes calques se terminent par l'échelle des entité qu'ils contiennent : "Poteaux EDF 200" "Poteaux EDF 500" "Cadastre adresse 200" "Cadastre adresse 500" "...... .... ...1250" ".... ... .. .. .. 25000" "... ........ ...." Mais j'ai aussi des calques où les entités n'on pas d'échelle : "Cadastre limite" "Bâtiment contour" "Bordure de trottoir" "....." Pour, biensur, les geler ou les libérer dans une fenêtre de l'espace papier qui elle a une échelle... Mais voilà, je ne sais pas comment, une fois "dans" la fenêtre, savoir quelle est sont "échelle personnalisée"... Si quelqu'un peut me sortir une variable ou une astuce... J'ai déjà fais ça : (defun c:LayerEchP ( / x_plan) (setq x_plan (tblnext "layer" T)) (while (/= x_plan nil) ;(princ "\nPlan en cours :") ;(princ (cdr (assoc 2 x_plan))) (if (= (numberp (read (FinChaine (cdr (assoc 2 x_plan))))) T) ;(gèle ou libère le calque selon échelle) ;(ne touche à rien) ) ;_ Fin de if (setq x_plan (tblnext "layer")) ) ;_ Fin de while ) (defun FinChaine (chaine / pos) (setq pos (strlen chaine)) (while (and (not (equal (substr chaine pos 1) " ")) (> pos 1)) (setq pos (- pos 1)) ) ;_ Fin de while (setq chaine (substr chaine (+ pos 1) (- (strlen chaine) pos))) ) ;_ Fin de defun Je sais, j'ai encore beaucoup de boulo... Mais j'y arriverais... Merci, Denis... ( qui est fatigué mais qui arrive à faire plein de truc...)
  10. Bonsoir à tous... J'aimerais savoir, justement, comment remplir cette liste pour y avoir celle de mes calques... Merci, Denis...
  11. Bien m'sieur... J'aurais donc ça ? (defun c:phTest (chaine /) (if (= (numberp (read (FinChaine chaine))) T) (princ (strcat "\n " chaine " se fini par un nombre")) (princ (strcat "\n " chaine " se fini par une chaine")) ) ;_ Fin de if (princ) ) ;_ Fin de defun (defun FinChaine (chaine / pos) (setq pos (strlen chaine)) (while (and (not (equal (substr chaine pos 1) " ")) (> pos 1)) (setq pos (- pos 1)) ) ;_ Fin de while (setq chaine (substr chaine (+ pos 1) (- (strlen chaine) pos))) ) ;_ Fin de defun Merci encore... Désolé de ne pas suivre ton idée avec (vl-string.... mais pour l'instant, je préfere m'en tenir à ce que je comprend, j'ai déjà assez de mal avec le Lisp, le VLisp sera pour plus tard... Tu ne penses pas ? Denis...
  12. Bonsoir (gile), Merci mille fois... (defun c:phTest (chaine) (FinChaine chaine) (if (= (numberp (read Result)) T) (princ (strcat "\n " Result " est un nombre")) (princ (strcat "\n " Result " est une chaine")) ) ;_ Fin de if (princ) ) ;_ Fin de defun (defun FinChaine (chaine /) (setq pos (strlen chaine)) (while (not (equal (substr chaine pos 1) " ")) (setq pos (- pos 1)) ) ;_ Fin de while (setq Result (substr chaine (+ pos 1) (- (strlen chaine) pos))) (princ) ) ;_ Fin de defun Et avec (c:phtest "Blabla patati patata") J'ai bien : patata est une chaine Et avec (c:phtest "Blabla patati patata 200") J'ai bien : 200 est un nombre Vraiment merci... (Tiens ? Je ne sais pas comment mon truc va réagir s'il n'y a pas d'espace dans mon nom de calque, comme "0" ou "Defpoints"... Je m'en occupe) Me reste plus qu'à savoir comment obtenir la liste des calques du dwg... Merci encore à toi (gile), Denis... (qui est très content cette semaine...)
  13. Bonsoir à tous... Beaucoup de mes calques se terminent par l'échelle des entité qu'ils contiennent : "Poteaux EDF 200" "Poteaux EDF 500" "Cadastre adresse 200" "Cadastre adresse 500" "...... .... ...1250" ".... ... .. .. .. 25000" "... ........ ...." Mais j'ai aussi des calques où les entités n'on pas d'échelle : "Cadastre limite" "Bâtiment contour" "Bordure de trottoir" "....." Pour, biensur, les geler ou les libérer dans une fenêtre de l'espace papier qui elle a une échelle J'ai déjà fais cette routine pour cherché la dernière chaine du calque : (defun FinChaine (chaine /) (setq pos (strlen chaine)) (while (not (equal (substr chaine pos 1) " ")) (setq pos (- pos 1)) ) ;_ Fin de while (setq Result (substr chaine (+ pos 1) (- (strlen chaine) pos))) (princ) ) ;_ Fin de defun J'aimerai maintenant savoir si Result est une chaine ("contour", "limite"...) ou une valeur ("200", "500"...) Je chercherai après la variable du zoom de la fenêtre... Voilà, bonne nuit, Denis...
  14. Merci Bred... A force de chercher compliqué, on ne voit pas ce qui est simple... Merci encore, Denis...
  15. Bonjour à tous, Je cherche à créer un style de multiligne : dessin par un coté, épaisseur, remplie...... Merci d'avance, Denis...
  16. Bonjour à tous, Je cherche à inactiver une liste de calques, exelmple : Dans le 1er projet d'un lotissement, mes calques commencent par : "Loti 1 - Lot 1 (cote...." Dans le 2ème projet, les calques commencent par : "Loti 2 - Lot 1 (cote...." J'aimerai, quand je travaille dans le projet 1, inactiver tous les calques commençant par "Loti " sauf "Loti 1"... Merci d'avance, Denis...
  17. Oui, merci à toi (gile)... J'ai cherché à faire la même chose plustard... et c'est bien ça... (mais je confondais encore les car, cdr, cadar, caarddrdaccad... ;) Merci encore, Denis...
  18. Je vais essayé de faire claire : ThisDrawing et SendCommand : tu devrais connaitre, En lisp, chaque terme à interpréter (termes Lisp) est précédé d'une parenthèse et mis en premier, puis, la parenthèse doit être refermé à la fin, exemple : en VBA : If a=1 then a=2 else a=3 en Lisp : (if (= a 1) (setq a 2) (setq a 3)) "setq" correspond à peu près à "Set" en VB Cette phrase : (setvar " & """useri1""" & " (vlax-ldata-get " & """Phalene""" & " " & """Ech1""" & "))" & vbCr Donne en LiSP : (setvar "useri1" (vlax-ldata-get "Phalene" "Ech1")) setvar : Set Variable (variables d'AutoCAD comme "Othtomode" ou autre...) useri1 : nom de la variable "user", type de la variable "i" (integer), incrément de la variable "1" car je croix qu'on en a droit à 5 ou 6... de chaque type (i=integer, r=réel et s=string). Quand à (vlax-ldata-get "Phalene" "Ech1"), là, c'est du Visual Lisp "Phalène" et "Ech1" sont des attribut de "xdata", c'est pour placer une variable dans le dwg. Tu places ta valeur dans "Phalene" "Ech1", comme 250, en faisant (vlax-ldata-put "Phalene" "Ech1" 250), tu sauvegardes ton dwg, tu fermes AutoCAD, tu ouvres à nouveau ton dwg puis tu récupère ta variable en tapant (vlax-ldata-get "Phalene" "Ech1"), Et AutoCAD te renvoie 250... J'avais cette ligne parceque la quazi totalité de mes routines sont en Lisp, et quand je n'arrive pas à les faire en Lisp, je me tourne en VBA. Voilà, j'en connais bien plus en VB qu'en Lisp... Mon explication n'est peut-être pas parfaite, mais j'espère qu'elle t'a un peu aider... Bonne journée, Denis...
  19. Ah ah ah ! ! ! Des milliers de millons de milliards de mercis à vous tous ! ! Voici ma routine qui cote une polyligne, si elle peut vous servir... (defun c:CotPoly (Haut) ; Haut=Hauteur de texte en milimètre papier (setq Haut 2) (setvar "cmdecho" 0) (setvar "dimzin" 3) (if (= (setq Ech (vlax-ldata-get "Phalene" "Ech1")) nil) (c:phEch) ) ;_ Fin de if (setq ename (car (entsel "\nSelectionnez la polyligne: "))) (getVertices ename) (setq pp (car return)) (while (not (equal (car return) (car (reverse return)))) ;(setq dp (car return) (setq p1 (car return)) (setq p2 (car (cdr return))) (setq rot (- 500 (* 200 (/ (angle p1 p2) pi)))) (if (<= rot 400) (- rot 400) ) ;_ Fin de if (setq p4 (polar p1 (angle p1 p2) (/ (distance p1 p2) 2))) (setq p5 (polar p4 (- (angle p1 p2) (/ pi 2)) (/ Ech 1000))) ;(command "point" p4) ;(command "point" p5) (princ (strcat (rtos (Distance p1 p2) 2 2) " m")) (command "-style" "Cote" "simplex.shx" "0" "0.7" "1" "N" "N" "N") (setq Texte (strcat (rtos (Distance p1 p2) 2 2) " m")) (command "_.text" "j" "hc" "_none" p5 (/ (* Haut Ech) 1000.0) rot Texte) ;_ Fin de command (setq return (cdr return)) ) ;_ Fin de while (princ "\nSorti de While\nReturn = ") (setq return (car return)) (setq rot (- 500 (* 200 (/ (angle return pp) pi)))) (if (<= rot 400) (- rot 400) ) ;_ Fin de if (setq p4 (polar return (angle return pp) (/ (distance return pp) 2))) (setq p5 (polar p4 (- (angle return pp) (/ pi 2)) (/ Ech 1000))) ;(command "point" p4) ;(command "point" p5) (princ (strcat (rtos (Distance return pp) 2 2) " m")) (command "-style" "Cote" "simplex.shx" "0" "0.7" "1" "N" "N" "N") (setq Texte (strcat (rtos (Distance return pp) 2 2) " m")) (command "_.text" "j" "hc" "_none" p5 (/ (* Haut Ech) 1000.0) rot Texte) ;_ Fin de command ) ;_ Fin de defun Et je donne aussi la routine pour l'échelle du dessin que "cotpoly" utilise : Faire du nettoyage dans cette routine... Elle me sert à plusieurs trucs, j'en ai déjà fais, mais si j'en fais de trop, j'ai peur qu'elle ne fonctionne plus ou mal... (defun c:phEch ( ) (setq Ech (vlax-ldata-get "Phalene" "Ech1")) (if Ech ;; si Ech est déjà défini (progn (if (setq Ech (getreal (strcat "\nAncienne échelle primaire (1/" (rtos Ech 2 0) ") - Nouvelle échelle primaire : 1/" ))) ;; Si Ech est re-défini (vlax-ldata-put "Phalene" "Ech1" Ech) ) ;_ Fin de if ;(princ (strcat "\nEchelle primaire = 1/" (rtos (vlax-ldata-get "Phalene" "Ech1") 2 0))) ;_ Fin de princ ) ;_ Fin de progn ;; si Ech n'est pas encore défini (progn (setq Ech (getreal "\nÉchelle du dessin primaire 1/")) (vlax-ldata-put "Phalene" "Ech1" Ech) ;(princ (strcat "\nEchelle primaire = 1/" (rtos (vlax-ldata-get "Phalene" "Ech1") 2 0))) ) ;_ Fin de progn ) ;_ Fin de if (menucmd (strcat "GPhalene.ID_echa" (rtos Ech 2 0) "=!.")) ) Je suis super content ! ! :D C'était un truc dont j'avais besoin depuis TRÈS lontemps ! ! ! :D Je ne penssais pas y arrivé ! ! :D Même en utilisans un maximum de routine extérieur ( = autre auteur que moi) ! ! :D Sincèrement, merci... :D Denis... (super content) ;)
  20. Bonjour à tous, J'ai fais une petite routine avec une liste de coordonnées (x y uniquement). Mais à la fin de cette routine, je me retrouve avec une liste dans une liste, exemple (princ return) ((12503.214 52141.265)) Comment extraire cet liste unique de l'autre ? Parce que LiSP refuse (setq return (car return)) Merci, Denis...
  21. Merci des milliards de fois (gile) ! ! Je dois confondre encore, mais grace à tes liens, j'ai réussi à faire un truc qui me servira dans ma cotation de polyligne : J'ai ma routine : (defun c:CotPoly () (setq ename (car (entsel "\nSelectionnez la polyligne: "))) (princ (strcat "\nEntité sélectionnée :" (cdr (assoc 0 (entget ename))))) (getVertices ename) ;au retour, mes coordonnées sont dans return (XY du premier point : (car return) ) ;_ Fin de defun Et une routine piquée à Serge : ;;; getVertices ;;; Retourne une liste de sommets ;;; Usage (getVertices ename), où le ename s'obtient par un entsel, un ssget, etc. (defun getVertices ( ename / plineGet return vertex vertexGet ) (setq return nil) (cond ((or (/= (type ename) 'ENAME) (not (setq plineGet (entget ename)))) (setq return nil)) ((= "POLYLINE" (cdr (assoc 0 plineGet))) (setq vertex (entnext ename)) (while (= "VERTEX" (cdr (assoc 0 (setq vertexGet (entget vertex))))) (setq return (cons (cdr (assoc 10 vertexGet)) return)) (setq vertex (entnext vertex)) ) (setq return (reverse return)) ) ((= "LWPOLYLINE" (cdr (assoc 0 plineGet))) (setq return (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) plineGet))) ) (t (setq return nil)) ) return ) J'ai du mal à comprendre cette routine car elle mélange LiSP et Visual LiSP... Merci encore (gile).... Une petite question encore : peut-on compter les éléments dans une liste... J'aimerai savoir combien de point j'ai dans ma lwpolyligne ou dans ma polyligne... En tous cas, merci encore, Denis...
  22. Merci (gile), J'avais oublié çe sujet... Mais dans "(mapcar 'print (entget (car (entsel))))", je ne comprend pas commant "mapcar" sait quand il faut passer au code DXF suivant... J'aimerai isoler tous les code DXF 10, en gros, j'avais fais ça : (cond ((= (cdr (assoc 0 (entget poly))) "POLYLINE") ) ((= (cdr (assoc 0 (entget poly))) "LWPOLYLINE") (progn ;(princ entlast) (while (/= "SEQEND" (cdr (assoc 0 (entget poly)))) (setq som (cdr (assoc 10 (entget poly)))) (princ som) (setq som_x (rtos (car som) 2 3)) (princ som_x) (setq som_y (rtos (cadr som) 2 3)) (princ som_y) ) ;_ Fin de while ;(close f) ) ;_ Fin de progn ((T) (princ "\nMaivaise pioche") ) ) (princ) ) Mais j'ai encore dû me plonter quelque part, J'ai ça en réponse : Bref, les coordonnées du premier sommet... som=(1045.66 5039.44) som_x=1045.661 som_y=5039.441 Mais je n'arrive pas à obtenir les autres coordonnées, T'as un truc pour m'aider à m'en sortir ? Merci encore, Denis...
  23. Merci à tous.... J'ai plein de boulo grace à vous ! :casstet: Mais je pense progresser avec tous çà :) Il ne me reste plus, enfin presque, qu'à coter ma Polyligne... J'ai réccupérer cette routine de Dominique Vaquant que j'ai retouché pour mes besoins (le or avec POLYLIGNE et LWPOLYLIGNE ) Mais c'ést loin d'être fini... Une fois les coordonnées récupérées, je pourrais coter ses segments... (defun c:sompoly () (setq poly (car (entsel "\nSelectionnez la polyligne: "))) (princ (strcat "\nEntité sélectionnée : une " (cdr (assoc 0 (entget poly))))) (if (or (= (cdr (assoc 0 (entget poly))) "POLYLINE") (= (cdr (assoc 0 (entget poly))) "LWPOLYLINE") ) ;_ Fin de or (progn (princ ent) (while (/= "SEQEND" (cdr (assoc 0 (entget ent)))) (setq som (cdr (assoc 10 (entget ent)))) (setq som_x (rtos (car som) 2 (getvar "luprec"))) (setq som_y (rtos (cadr som) 2 (getvar "luprec"))) (setq som_z (rtos (caddr som) 2 (getvar "luprec"))) (setq ent (entnext ent)) ) ;_ Fin de while ) ;_ Fin de progn (princ "\nMaivaise pioche") ) ;_ Fin de if (princ) ) Mais elle ne fonctionne pas : à mon avis, il est trop vieux (1990) et ne comprend pas les LWPolylognes..., je pense donc que c'est dans (setq ent (entnext poly)) qu'il y a un problème... Bon, c'est dimanche et je doute qu'il y ai foule sur le site... Je vais donc faire ma promenade familliale le long du Canal de Bourgogne... Bonne fin de W-E à tous, Denis...
  24. J'y ai appris aussi beaucoup, mais j'ai plus appris sur CadXP... Et son bouquin reste une référence, il ne quitte pas mon bureau... Bon, j'ai du boulo.... Denis...
  25. WAOW ! ! rea et rea-att ! ! ! J'y cours ! ! Et merci pour m'avoir lancé les truc sur le (vlax-ldata-get et put ...) Tu peut pas savoir à quel point je l'utilise ! ! Lier une variable à un dessin ! ! C'est extraordinaire (pour moi) ! ! Et qu'es-ce que ça sera quand je maitriserais les listes ! ! Mais il me manque 2 cours, et j'en appel à votre secours ! ! Il faut que j'apprenne à controler les "listes" et les "saisie" (ssget.....) Je vous en supplie ! ! Je cherche, je lis, je fais tous ce qui est en mon pauvre pouvoir... Mais je n'y arrive pas ! ! J'ai les idées, j'ai le "fonds" et la "forme" mais pas le langage... Je connais un peu le VBA, mais je sais que la puissance du LiSP est beaucoup plus grande avec AutoCAD ! ! Et en plus, la force est avec lui... ;) Il faut que je termine mes LiSP avant lundi ! ! Waow ! ! Je sais que je n'y arriverais pas, Car je veux les faires moi-même, mais je ne permet pas qu'un autre me les servent, Merci à tous... Je bosse... ( pour une fois ! ! ;) )
×
×
  • 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é