Aller au contenu

Didier-AD

Membres
  • Compteur de contenus

    130
  • Inscription

  • Dernière visite

Tout ce qui a été posté par Didier-AD

  1. Il y a une amélioration par rapport à (Command "_.Undo" "1") c'est que je n'ai plus de message d'erreur ; je pense donc qu'avec vl_cmdf AutoCAD sait qu'il n'a pas le droit de lancer une commande à l'intérieur d'un réacteur sur commande et donc il ne l'exécute pas par contre il n'annule pas la commande etirer merci quand même
  2. ben oui mais le rectangle initial il a été modifié par la commande, justement; quoi que..... en utilisant les réacteurs de début de commande et de fin de commande çà doit pouvoir marcher.... çà nécessite toutefois de mémoriser l'état avant tout action... si j'ai rien de plus simple je creuse cette piste
  3. Salut, çà faisait longtemps que je n'étais pas venu vous voir, me revoici avec un petit problème je cherche une solution pour revenir à un état initial si une modification d'un objet par une command autocad ne me satisfait pas je prends un exemple simple pour faire comprendre mon problème imaginons une fonction qui crée un rectangle (lwpolyline) à partir de deux points de sa diagonale jusque là pas de problème. Dans cette fonction, on effectue un test : si le périmètre du rectangle est supérieur à une valeur maxi, on affiche un message et on ne dessine rien. jusque là, çà va encore je sais implémenter un réacteur sur commande de façon à ce que mon rectangle reste rectangle après avoir étiré un de ses coins. (avoir un comportement du rectangle un peu comme les fenêtre d'espace papier) jusque là çà va toujours là ou je bloque c'est que je voudrais que si le nouveau rectangle a un périmètre supérieur à la longueur maxi le rectangle initial se redessine ; autrement dit annuler complètement la commande ETIRER ou GRIP_STRETCH Inutile de m'écrire le code pour un rectangle, en réalité ma figure est beaucoup plus complexe mais le problème reste le même : En gros, il s'agit de pouvoir lancer UNDO ou son équivalent dans un réacteur sur fin de commande (et si je pose la question c'est qu'autoCAD n'en veut pas) merci pour toute idée
  4. Salut, et si tu lances ta macro VBA avec AutoCAD et non pas avec le LISP, est-ce que le problème se produit également ? parce que dans ce cas, il faudrait voir du coté de ta macro....
  5. bonjour Ben voilà qui simplifie le tout merci Gile
  6. J'ai retrouvé la fonction c'est vl-symbol-name si les lignes de ton fichier sont de la forme 100-201 201-302 alors tu peux utiliser ce code modifié (defun c:modifietextes (/ nf fich sligne lligne js n ent) (setq nf (getfiled "Fichier de conversion" "" "TXT" 0) fich (open nf "r") ) (while (setq sligne (read-line fich)) (setq lligne (read (strcat "(" sligne ")"))) (if (= 'SYM (type (car lligne))) (setq lligne (mapcar 'vl-symbol-name lligne)) ) (setq js (ssget "X" (list (cons 0 "*TEXT") (cons 1 (car lligne)))) n 0 ) (repeat (if js (sslength js) 0) (setq ent (entget (ssname js n)) ent (subst (cons 1 (cadr lligne)) (assoc 1 ent) ent) n (1+ n) ) (entmod ent) ) ) (close fich) ) si par hasard, il existe des lignes où le tiret (-) n'existe pas alors, (setq lligne (read (strcat "(" sligne ")"))) va trouver des nombres et non plus des symboles et il faudra alors traiter différemment en cas de besoin, fais signe
  7. Tu penses bien que j'ai essayé et çà marche j'ai cependant utilisé un fichier dans lequel il y a déjà les guillemets comme dans la question de départ si les guillemets ne sont pas présents dans le fichier, 100-002 est alors reconnu comme un symbole ; il faut alors utiliser une fonction vl dont j'ai oublié le nom pour transformer ce nom de symbole en chaine
  8. Bonjour essaie çà, çà devrait marcher avec ce que tu demandes (defun c:modifietextes (/ nf fich sligne lligne js n ent) (setq nf (getfiled "Fichier de conversion" "" "TXT" 0) fich (open nf "r") ) (while (setq sligne (read-line fich)) (setq lligne (read (strcat "(" sligne ")")) js (ssget "X" (list (cons 0 "*TEXT") (cons 1 (car lligne)))) n 0 ) (repeat (if js (sslength js) 0) (setq ent (entget (ssname js n)) ent (subst (cons 1 (cadr lligne)) (assoc 1 ent) ent) n (1+ n) ) (entmod ent) ) ) (close fich) )
  9. Et même avec une orthographe correcte..... Cà c'est classe ! Bravo Bred.
  10. Bonjour, Dans les deux premiers exemples, tu utilises "_F" ou "_W" comme clef de sélection de mémoire "_F" signifie Fence ou trajet en Français "_W" signifie Window ou Fenêtre dans le premier cas, seuls les objets traversés par ton trajet, donc le segment défini par tes deux points sont sélectionnés dans le second cas, seuls les objets entièrement compris dans la fenêtre définie par tes deux points sont sélectionnés ton troisième essai correspond à une capture ; il est normal que tous les objets soient sélectionnés. bon courage
  11. il y a un réacteur sur le changement d'onglet qui est activable essaie ceci ; (vl-load-com) (vlr-miscellaneous-reactor nil (list (cons ':vlr-layoutSwitched 'essai))) (Defun essai (sert-a-rien llayout / ) (alert (car llayout)) ) ensuite tu peux utiliser les outils de gestion des présentations que j'ai déposé ici bon courage
  12. Waouh ! moi je n'aime pas çà les droits ne concernent pas que le nom du produit mais en général également les concepts donc les sources Si une société a les droits légaux sur des sources, l'utilisation et la modification de ces sources même dans un cadre communautaire ne me parait pas très orthodoxe/légale. Chad, avec tout le respect que je lui porte n'a pas été très rigoureux dans cette affaire....
  13. C'est effectivement GRREAD qu'il te faut employer éventuellement associée à une boucle while (while (setq x (grread t)) (print (cadr x)) ) mais attention, tu perds alors les notions d'accrochage aux objets ou alors il te faut gérer toi même ceux ci..... pas simple bon courage
  14. pour les JPG, tu choisis comme traceur "PublishToWebJPG.pc3" pour les WMF, le plus simple c'est la touche qui comlle ton écran sans le presse papier; après tu en fais ce que tu veux
  15. pourquoi Ex ObjectDCL, il me semble que sur le site de DuctiSoft, on parle bien d'ObjectDCL et non pas d'OpenDCL
  16. oui, mais pas simplement il te faudrait - soit une boite modeless faite avec ObjectDcl - soit un bouton qui afficherait un DCL simple avec la liste des états de calque [Edité le 3/7/2007 par Didier-AD]
  17. tu parles de Pdf reDirect ? ou de la routine lisp , parce que la routine lisp, il n'y a pas besoin d'être administrateur, il te suffit de sauvegarder le fichier LSP à un endroit quelconque où tu as le droit d'écriture....
  18. Je pense que çà devrait te convenir les boites sont tracées, ce sont des polylignes fermées par contre, je te laisse gérer les couleurs et les calques. je n'ai pas choisi de créer des blocs et des lignes comme giles mais plutôt de générer directement les boites ; pour çà j'ai ressorti des vieux outils que j'ai remis au gout du jour vlax... notamment pour ceux que çà interesse comment isoler "en mémoire" un morceau de polyligne entre deux points en gérant ce que j'appelle des listes de points courbure (voir la fonction l_out_morcopt) ;---------------------------------------------------------------------------- ;; diverses fonctions sur les listes ;---------------------------------------------------------------------------- ; retourne le car du dernier élément (defun l_out_carl (l) (car (last l))) ; retourne une liste sauf le dernier (defun l_out_rdc (l) (reverse (cdr (reverse l)))) ; retourne l'avant dernier d'une liste (defun l_out_rdac (l) (cadr (reverse l))) ; fonction tangente (defun L_out_tang (alpha) (if (= (abs alpha) (/ pi 2)) 10000.0 (/ (sin alpha) (cos alpha)) ) ) ;---------------------------------------------------------------------------- ;;---Début---------------------------------------------------l_out_defaut------------ ;; << retourne le second élément si le premier est nil>> ;; << >> ;; ;; créée le : mercredi 1 octobre 1997 à 08:27 ;; ;; Admet : ;; ======= ;; ;; prem : varaiant ;; defaut ;; ;; Retourne : liste ;; ========== ;------------------------------------------------------------------------------- (defun l_out_defaut (prem defaut) (if prem prem defaut) ) ;;---Fin---------------------------------------------------l_out_defaut------------ ;;---Début---------------------------------------------------l_out_xy------------ ;; << retourne les deux premiers émémnts d'une liste>> ;; << >> ;; ;; créée le : mercredi 1 octobre 1997 à 08:27 ;; ;; Admet : ;; ======= ;; ;; lst : liste ;; ;; Retourne : liste ;; ========== ;------------------------------------------------------------------------------- (defun l_out_xy (lst) (list (car lst) (cadr lst)) ) ;;---Fin---------------------------------------------------l_out_xy------------ ;;---Début---------------------------------------------------l_out_snoc------------ ;; << inverse de cons >> ;; << >> ;; ;; créée le : mercredi 1 octobre 1997 à 08:27 ;; ;; Admet : ;; ======= ;; dern : variant ;; lst : liste ;; ;; Retourne : liste avec dern comme dernier élément ;; ========== ;------------------------------------------------------------------------------- (defun l_out_snoc (dern lst) (append lst (list dern)) ) ;;---Fin---------------------------------------------------l_out_snoc------------ ;;---Début---------------------------------------------------l_out_ext------------ ;; << extrait une information d'un handle, une entité ou une liste (entget) >> ;; << >> ;; ;; créée le : mercredi 1 octobre 1997 à 08:27 ;; ;; Admet : ;; ======= ;; e : Nom d'entité = entuité considérée ;; ;; Retourne : Booléen = T si OK ;; ========== ;------------------------------------------------------------------------------- (defun L_out_ext (cle ent / xx) (if (= 'STR (type ent)) (setq ent (handent ent))) (setq xx (if (= 'ENAME (type ent)) (cdr (assoc cle (entget ent))) (cdr (assoc cle ent)) ) ) xx ); ;;---fin---------------------------------------------------l_out_ext------------ ;;---Début---------------------------------------------------l_out_estpol------------ ;; << vérifie qu'une entité est du type polyligne ou LWplyligne >> ;; << >> ;; ;; créée le : mercredi 1 octobre 1997 à 08:27 ;; ;; Admet : ;; ======= ;; e : Nom d'entité = entuité considérée ;; ;; Retourne : Booléen = T si OK ;; ========== ;------------------------------------------------------------------------------- (Defun l_out_estpol ( e / ) (member (cdr (assoc 0 (entget e))) (list "POLYLINE" "LWPOLYLINE")) ) ;;---fin-----------------------------------------------------l_out_estpol------------ ;;---Début---------------------------------------------------l_out_analpol------------ ;; << etablit une liste de points courbure à partir d'une polyligne >> ;; << >> ;; ;; créée le : mercredi 1 octobre 1997 à 08:27 ;; ;; Admet : ;; ======= ;; e : Nom d'entité = entuité considérée ;; ;; Retourne : Booléen = T si OK ;; ========== ;------------------------------------------------------------------------------- (defun l_out_analpol (pol / e ent ll alti ptcrb) (setq ll '() e pol) (cond ((= "POLYLINE" (l_out_ext 0 pol)) (while (/= "SEQEND" (l_out_ext 0 (setq ent (entget (setq e (entnext e)))))) (setq ll (cons (list (trans (l_out_ext 10 ent) pol 1) (l_out_ext 42 ent)) ll)) ) ) ((= "LWPOLYLINE" (l_out_ext 0 pol)) (setq ent (entget pol) ptcrb nil alti 0.0) (while ent (if (= 38 (caar ent)) (setq alti (cdar ent)) ) (if (= 10 (caar ent)) (setq ptcrb (l_out_defaut (trans (l_out_snoc alti (l_out_xy (cdar ent))) pol 1) (trans (l_out_snoc alti (l_out_xy (cdar ent))) 0 1) ) ) ) (if (= 42 (caar ent)) (setq ll (cons (list ptcrb (cdar ent)) ll))) (setq ent (cdr ent)) ) ) ) (if (and $ferferme (= 1 (logand (l_out_ext 70 pol) 1))) (l_out_snoc (last ll) (reverse ll)) (setq ll (reverse ll) ll (l_out_snoc (list (l_out_carl ll) 0.0) (l_out_rdc ll)) ) ) );........... ;;---Fin---------------------------------------------------l_out_analpol------------ ;;---Début---------------------------------------------------l_out_transpol-------- ;; << inverse une liste point courbure >> ;; << >> ;; ;; créée le : mercredi 27 juin 2007 à 21:28 ;; ;; Admet : ;; ======= ;; pol : liste point courbure ;; ;; Retourne : liste point courbure inversée ;; ========== ;------------------------------------------------------------------------------- (defun l_out_transpol (pol / l) (setq l (mapcar (function (lambda (x1 x2) (list (car x1) (* (cadr x2) -1)) ) ) (reverse pol) (l_out_snoc (last pol) (cdr (reverse pol))) ) ) l ) ;;---fin---------------------------------------------------l_out_transpol-------- ;;---Début---------------------------------------------------l_out_centre-------- ;; << centre d'un arc de polyligne >> ;; << >> ;; ;; créée le : mercredi 27 juin 2007 à 21:28 ;; ;; Admet : ;; ======= ;; p1 : Point = premier point ;; p2 : Point = second point ;; alpha : Réel = courbure associée au premier point ;; ;; Retourne : Point = centre de l'arc ;; ========== ;------------------------------------------------------------------------------- (Defun l_out_centre ( p1 p2 alpha / signe ang pt ang1 ang2) (setq pt (if (equal 1.0 (abs alpha) 0.00001) (l_milieu p1 p2) (progn (setq signe (/ alpha (abs alpha)) ang1 (+ (angle p1 p2) (* signe 0.5 (- pi (abs(* 4 (atan alpha)))))) ang2 (- (angle p2 p1) (* signe 0.5 (- pi (abs(* 4 (atan alpha)))))) ) (inters p1 (polar p1 ang1 10) p2 (polar p2 ang2 10) nil) ) ) ) pt ) ;;---fin-----------------------------------------------------l_out_centre-------- ;;---Début---------------------------------------------------l_out_rayon--------- ;; << trouve le rayon d'un arc de polyligne >> ;; << >> ;; ;; créée le : mercredi 19 novembre 1997 à 17:06 ;; ;; Admet : ;; ======= ;; p1 : Point = premier point ;; p2 : Point = point suivant ;; courb : Réel = courbure ;; ;; Retourne : Réel = rayon ;; ========== ;------------------------------------------------------------------------------- (Defun l_out_rayon ( p1 p2 courb / d alpha) (setq d (/ (distance p1 p2) 2.0) alpha (* (atan (abs courb)) 2.0) ) (/ d (if (zerop (sin alpha)) 1.0 (sin alpha))) );........... ;;---fin-----------------------------------------------------l_out_rayon--------- ;;---Début---------------------------------------------------l_out_longsegpol---- ;; << calcule la longueur d'un segment de polyligne >> ;; << droit ou courbe >> ;; ;; créée le : mercredi 27 juin 2007 à 21:24 ;; ;; Admet : ;; ======= ;; ptc1 : Point courbure = premier point courbure ;; ptc2 : Point courbure = point suivant ;; ;; Retourne : Réel = longueur ;; ========== ;------------------------------------------------------------------------------- (Defun l_out_longsegpol ( ptc1 ptc2 / long centre0 rayon) (if (equal (cadr ptc1) 0.0 0.0000001) (setq long (distance (car ptc1) (car ptc2))) (setq centre0 (l_out_centre (car ptc1) (car ptc2) (cadr ptc1)) rayon (distance (car ptc1) centre0) long (abs (* 4 rayon (atan (cadr ptc1)))) ) ) long ) ;;---fin-----------------------------------------------------l_out_longsegpol---- ;;---Début---------------------------------------------------l_out_longpol------- ;; << longueur d'une liste point courbure >> ;; << >> ;; ;; créée le : mercredi 27 juin 2007 à 21:40 ;; ;; Admet : ;; ======= ;; pol : Liste points courbure = ou entité polyligne ;; ;; Retourne : Réel = longueur ;; ========== ;------------------------------------------------------------------------------- (Defun l_out_longpol ( pol / n longcour ) (if (= 'ENAME (type pol)) (setq pol (l_out_analpol pol)) ) (setq n 0 longcour 0) (repeat (- (length pol) 1) (setq longcour (+ longcour (l_out_longsegpol (nth n pol) (nth (+ 1 n) pol)))) (setq n (+ 1 n)) ) longcour ) ;;---fin-----------------------------------------------------l_out_longpol------- ;;---Début---------------------------------------------------l_out_pointsurseg--- ;; << positionne un point sur un segment à une distance donnée du premier point >> ;; << >> ;; ;; créée le : mercredi 27 juin 2007 à 21:34 ;; ;; Admet : ;; ======= ;; lon : Réel = longueur à partir du premir point ;; ptc1 : Point courbure = premier point et sa courbure ;; ptc2 : Point courbure = second point et sa courbure ;; ;; Retourne : Liste = (point angle_orthogonal_au_segment) ;; ========== ;------------------------------------------------------------------------------- (Defun l_out_pointsurseg ( lon ptc1 ptc2 / ang angr ang0 pt centre rayon signe) (if (zerop (cadr ptc1)) (setq ang (angle (car ptc1) (car ptc2)) pt (polar (car ptc1) ang lon) angr (+ ang (/ pi 2)) ) (setq centre (l_out_centre (car ptc1) (car ptc2) (cadr ptc1)) rayon (distance (car ptc1) centre) ang0 (angle centre (car ptc1)) signe (/ (cadr ptc1) (abs (cadr ptc1))) ang (* signe (/ lon rayon)) pt (polar centre (+ ang0 ang) rayon) angr (+ ang0 ang) angr (if (minusp signe) angr (+ angr pi)) ) ) (list pt (rem angr (* 2 pi))) ) ;;---fin-----------------------------------------------------l_out_pointsurseg--- ;;---Début---------------------------------------------------l_out_morcopt------- ;; << donne une sous liste de points courbure >> ;; << entre deux points quelconque situés sur la polyligne associée >> ;; ;; créée le : lundi 22 décembre 2003 à 19:06 ;; ;; Admet : ;; ======= ;; pol : objet polyligne ;; ptdeb : Point = debut ;; ptfin : Point = fin ;; ;; Retourne : Liste points courbure ;; ========== ;------------------------------------------------------------------------------- (Defun l_out_morcopt ( pol ptdeb ptfin / lg1 lg2 lpc) (setq lg1 (if ptdeb (vlax-curve-getDistAtPoint pol ptdeb)) lg2 (if ptfin (vlax-curve-getDistAtPoint pol ptfin)) lpc (l_out_analpol (vlax-vla-object->ename pol)) ) (l_out_morco lpc (l_out_defaut lg1 0) (l_out_defaut lg2 (l_out_longpol lpc))) ) ;;---fin-----------------------------------------------------l_out_morcopt------- ;;---Début---------------------------------------------------l_Out_Ptc&Dc-------- ;; << constitue une liste pointcourbure_distance cumulée >> ;; << >> ;; ;; créée le : jeudi 14 novembre 1996 à 18:37 ;; ;; Admet : POL : nom d'entité ou liste point courbure ;; ======= ;; ;; Retourne : Liste = ((pt courb dc) (....)....) ;; ========== ;------------------------------------------------------------------------------- (Defun l_Out_Ptc&Dc (Pol / poldc n long longtot ) (if (= 'ENAME (type pol)) (setq pol (l_out_analpol pol)) ) (setq poldc (list (append (car pol) (list 0.0))) longtot 0.0 n 1) (repeat (- (length pol) 1) (setq long (l_out_longsegpol (nth (- n 1) pol) (nth n pol)) longtot (+ longtot long) poldc (l_out_snoc (append (nth n pol) (list longtot)) poldc) n (+ 1 n) ) ) poldc );........... ;;---fin-----------------------------------------------------l_Out_Ptc&Dc-------- ;;---Début---------------------------------------------------l_Out_Insere-------- ;; << insere un point courbure distance_cumulée >> ;; << dans une liste point courbure distance cumulée >> ;; ;; créée le : jeudi 14 novembre 1996 à 21:35 ;; ;; Admet : ;; ======= ;; pol : Liste = liste point courbure distance cumuée ;; dist : Réel = distance cumulée ;; ;; Retourne : Liste = liste point courbure distance cumulée ;; ========== ;------------------------------------------------------------------------------- (Defun l_Out_Insere ( pol dist / OK n lp1 n1) (setq Ok nil n 0 lp1 nil) (while (<= n (- (length pol) 1)) (if (and (not OK) (> (caddr (nth (1+ n) pol)) dist)) (setq OK t n1 n lp1 (append lp1 (l_Out_Unbout (nth n pol) (nth (1+ n) pol) dist)) ) (setq lp1 (l_out_snoc (nth n pol) lp1)) ) (setq n (1+ n)) ) (if (/= n1 (- (length pol) 1)) lp1 (ad_snoc (last pol) lp1) ) );........... ;;---fin-----------------------------------------------------l_Out_Insere-------- ;;---Début---------------------------------------------------l_Out_Unbout-------- ;; << insere un point courbure distance entre deux autres >> ;; << >> ;; ;; créée le : jeudi 14 novembre 1996 à 21:45 ;; ;; Admet : ;; ======= ;; pcd1 : Liste = premier point courbure distance ;; pcd2 : Liste = second point courbure distance ;; dist : Réel = distance cumulée où placer le point ;; ;; Retourne : Liste = ((pt1 c1 d1) (ptnouv cnouv dist)) c1 est modifié ;; ========== ;------------------------------------------------------------------------------- (Defun l_Out_Unbout ( pcd1 pcd2 dist / ang ang1 ang2 pt bidon ) (if (zerop (cadr pcd1)) (list pcd1 (list (polar (car pcd1) (angle (car pcd1) (car pcd2)) (- dist (caddr pcd1)) ) 0.0 dist ) ) (setq ang (* 4 (atan (cadr pcd1))) ;; on travaille en rapport d'angle donc pas besoin de * 4 ang1 (* ang (/ (- dist (caddr pcd1)) (- (caddr pcd2) (caddr pcd1)))) ang2 (- ang ang1) pt (l_out_pointsurseg (- dist (caddr pcd1)) (l_out_xy pcd1) (l_out_xy pcd2)) bidon (list (list (car pcd1)(l_out_tang (/ ang1 4.0)) (caddr pcd1)) (list (car pt) (l_out_tang (/ ang2 4.0)) dist) ) ) ) );........... ;;---fin-----------------------------------------------------l_Out_Unbout-------- ;;---Début---------------------------------------------------l_Out_Allonge------- ;; << allonge à son extrémité une liste point courbure >> ;; << >> ;; ;; créée le : vendredi 24 octobre 1997 à 15:56 ;; ;; Admet : ;; ======= ;; pol : Liste = points courbure ;; delta : Réel = longueur ;; ;; Retourne : Liste = points courbure modifiée ;; ========== ;------------------------------------------------------------------------------- (Defun l_Out_Allonge ( pol delta / ptc ang dist centre ray ang1 alpha pt) (setq ptc (last (l_out_rdc pol))) (if (zerop (cadr ptc)) (progn (setq ang (angle (car ptc) (car (last pol))) dist (+ (distance (car ptc) (car (last pol))) delta) ) (append (l_out_rdc pol) (list (list (polar (car ptc) ang dist) 0.0))) ) (progn (setq centre (l_out_centre (car ptc) (car (last pol)) (cadr ptc)) ray (distance centre (car ptc)) ang (* 4 (atan (cadr ptc))) dist (+ delta (* ray (abs ang))) ang1 (* (/ dist ray ang) (abs ang)) alpha (l_out_tang (/ ang1 4)) pt (polar centre (+ (angle centre (car ptc)) ang1) ray) ) (append (l_out_rdc (l_out_rdc pol)) (list (list (car ptc) alpha)) (list (list pt 0.0)) ) ) ) );........... ;;---fin-----------------------------------------------------l_Out_Allonge------- ;;---Début---------------------------------------------------l_Out_Morco--------- ;; << donne une sous liste de point courbure >> ;; << entre une distance cumulée et une autre >> ;; << ces distances peuvent être en dehors de la plage--->> allngée dans ce cas>> ;; ;; créée le : jeudi 14 novembre 1996 à 18:43 ;; ;; Admet : ;; ======= ;; pol : Nom d'entité = entité ou liste point courbure distance cumulée ;; debut : Réel = abscisse curviligne de début ;; fin : Réel = abscisse curviligne de fin ;; ;; Retourne : Liste = liste point courbure ;; ========== ;------------------------------------------------------------------------------- (Defun l_Out_Morco ( pol debut fin / pol1 tmp long ) (mapcar 'set (list 'debut 'fin) (vl-sort (list debut fin) '<)) (if (> fin (setq long (l_out_longpol pol))) (setq pol (l_out_allonge pol (- fin long))) ) (if (< debut 0.0) (setq pol (l_out_transpol (l_out_allonge (l_out_transpol pol) (abs debut))) fin (- fin debut) debut 0.0 ) ) (setq tmp (l_out_longpol pol)) (setq pol (l_Out_Ptc&Dc pol)) (setq pol (l_Out_Insere Pol debut) pol (l_Out_Insere Pol fin) pol1 nil ) (foreach elm pol (if (and (>= (caddr elm) (- debut 0.001)) (<= (caddr elm) (+ fin 0.001)) ) (setq pol1 (cons (l_out_xy elm) pol1)) ) ) (setq pol1 (reverse pol1)) (while (equal (l_out_xy (caar pol1)) (l_out_xy (caadr pol1)) (/ 0.001)) (setq pol1 (cdr pol1)) ) (setq pol1 (l_out_transpol pol1)) (while (equal (l_out_xy (caar pol1)) (l_out_xy (caadr pol1)) (/ 0.001)) (setq pol1 (cdr pol1)) ) (l_out_transpol pol1) ) ;........... ;;---fin-----------------------------------------------------l_Out_Morco--------- ;;---Début---------------------------------------------------l_traceptcrb-------- ;; << trace une LWpolyligne à partir d'une liste point courbure >> ;; << >> ;; ;; créée le : mardi 7 octobre 1997 à 22:21 ;; ;; Admet : ;; ======= ;; pol : Liste = de points courbure ;; plan : Chaine = calque ;; epais : Réel = épaisseur ;; ;; Retourne : Nom d'entité = polyligne créée ;; ========== ;------------------------------------------------------------------------------- (Defun l_out_traceptcrb ( pol plan epais / l lp) (setq lp (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 67 0)(cons 8 plan) (cons 100 "AcDbPolyline") (cons 90 (length pol)) (cons 70 0) (cons 43 (if (minusp epais) 0 epais)) (cons 38 0.0) (cons 39 0.0) (cons 60 (if (minusp epais) 1 0)) ) ) (foreach vert pol (setq lp (append lp (list (cons 10 (trans (car vert) 1 0)) ;; correction alain le 06/01/2001 si SCU /= SCG ;(cons 40 epais)(cons 41 epais) (cons 42 (cadr vert)) ) ) ) ) (setq lp (append lp (list (cons 210 (list 0.0 0.0 1.0))))) (entmake lp) (entlast) ) ;;---fin-----------------------------------------------------l_out_traceptcrb-------- ;;---Début---------------------------------------------------l_cor_trace1boite--- ;; << trace une boite >> ;; << >> ;; ;; créée le : mercredi 27 juin 2007 à 21:54 ;; ;; Admet : ;; ======= ;; pt1 : point ;; pt2 : point ;; limd : Liste points courbure = limite droite du corridor ;; limg : Liste points courbure = limite gauche du corridor ;; ;; Retourne : Nom d'entité = nom de la polyligne boite ;; ========== ;------------------------------------------------------------------------------- (Defun l_cor_trace1boite ( pt1 pt2 limd limg / ptdd ptdf ptgd ptgf lpcd lpcg) (setq ptdd (vlax-curve-getClosestPointTo limd pt1) ptdf (vlax-curve-getClosestPointTo limd pt2) ptgd (vlax-curve-getClosestPointTo limg pt1) ptgf (vlax-curve-getClosestPointTo limg pt2) lpcd (l_out_morcopt limd ptdd ptdf) ;; liste pointcourbure en limite droite de la boite lpcg (l_out_transpol (l_out_morcopt limg ptgd ptgf)) ;; liste pointcourbure en limite gauche de la boite ) (setq boite (l_out_traceptcrb (append (l_out_snoc (list (l_out_carl lpcd) 0) (l_out_rdc lpcd)) (l_out_snoc (list (l_out_carl lpcg) 0) (l_out_rdc lpcg)) ) (getvar "clayer") 0 ) ) (setq entboite (entget boite)) (entmod (subst (cons 70 1) (assoc 70 entboite) entboite)) ) ;;---fin-----------------------------------------------------l_cor_trace1boite--- ;;---Début---------------------------------------------------l_cor_traceboites--- ;; << trace les boites >> ;; << >> ;; ;; créée le : mercredi 27 juin 2007 à 21:15 ;; ;; Admet : ;; ======= ;; lpc : Liste points courbure = axe du tracé ;; limd : Liste points courbure = limite droite du corridor ;; limg : Liste points courbure = limite gauche du corridor ;; long : Réel = longueur de la boite ;; ;; Retourne : Sans intéret = ;; ========== ;------------------------------------------------------------------------------- (Defun l_cor_traceboites ( lpc limd limg long / cumul lgtotal pt1 pt2 ) (setq cumul 0 lgtotal (vlax-curve-getDistAtParam lpc (vlax-curve-getEndParam lpc)) ) (while (> (- lgtotal cumul) 0.01) (setq pt1 (vlax-curve-getPointAtDist lpc cumul) pt2 (vlax-curve-getPointAtDist lpc (setq cumul (min lgtotal (+ long cumul)))) ) (l_cor_trace1boite pt1 pt2 limd limg) ) ) ;;---fin-----------------------------------------------------l_cor_traceboites--- ;;---Début---------------------------------------------------c:corridor---------- ;; << tracé du corridor et des boites >> ;; << >> ;; ;; créée le : mercredi 27 juin 2007 à 18:37 ;; ;; Admet : ;; ======= ;; ;; Retourne : Sans intéret = ;; ========== ;------------------------------------------------------------------------------- (Defun c:corridor ( / larg long ep lpc oep limd limg) (setq ep (car (entsel "\n pointez l'axe du corridor"))) (if (l_out_estpol ep) (progn (setq lpc (l_out_analpol ep)) (setq larg (getdist (caar lpc) "\ndemi largeur du corridor")) (setq long (getdist (caar lpc) "\n longueur des boites ")) (setq oep (vlax-ename->vla-object ep)) (setq limd (car (vlax-invoke oep 'Offset larg))) (setq limg (car (vlax-invoke oep 'Offset (* -1 larg)))) (l_cor_traceboites oep limd limg long) ) ) (princ) ) (alert "commande CORRIDOR chargée") ;;---fin-----------------------------------------------------c:corridor---------- [Edité le 27/6/2007 par Didier-AD]
  19. il faut que tu charges les fonctions au préalable donc les rapatrier à partir de ce forum dans un fichier à toi 1°) sélectionne la partie source LISP que tu trouveras ici 2°) controle C pour les copier dans le presse papier 3°) ouvrir le bloc notes 4°) controle V pour les coller dans le bloc notes 5°) sauvegarder le fichier sous le nom "presentation.lsp" ensuite, à chaque fois que tu en auras besoin, tu charges ce fichier "presentation.lsp " (menu déroulant "outils" --> charger une application) la commande ImprimeTout est alors définie
  20. je m'en occupe ce soir, tu auras çà demain
  21. je crois que j'ai à peu près compris ce que tu veux si j'ai bien compris, à partir d'une trajectoire (en rouge), tu définis un coridor (en jaune) par sa largeur et tu veux découper çà en zones que tu appelles des boites et qui doivent être des polylignes fermées (et numérotées) http://xs116.xs.to/xs116/07263/Image4.jpg si c'est çà, je dois avoir les outils qui vont bien
  22. Je viens de faire l'essai, en fait, çà fonctionne très bien sans que l'utilisateur soit obligé d'intervenir les pdf sont créés dans le dossier du dessin avec comme nom NomDuDessin-NomdeLaPresentation.pdf il te suffit de mettre en forme tes présentations, charger les fonctions pré citées et écrire un petit bout de code qui les utilise : (defun c:TraceToutEnPdf () (Pres_Plot (cdr (Pres_ListePres)) ) La fonction ci dessus fonctionne quelquesoit le périphérique de tracé demandé par contre, AutoCAD ne sait pas faire un seul PDF de l'ensemble; et moi non plus en fait, je vais ajouter cette fonction à la liste des fonctions ; tu n'auras qu'à charger et utiliser [Edité le 26/6/2007 par Didier-AD]
  23. j'avais posté toute série de fonctions qui devraient pouvoir te servir ici la toute dernière associée à celle qui établit la liste des présentations doit faire ce que tu lui demandes ; reste à voir comment çà se comporte avec le dialogue qui demande le nom du PDF [Edité le 26/6/2007 par Didier-AD]
  24. Didier-AD

    percage

    Je n'en ai pas la certitude mais tes soucis ne viendraient ils pas des manipulations de la variable x (repeat (setq x (length lst-vla-sel)) (setq c-p (vla-copy c)) (vla-boolean (nth (setq x (1- x)) lst-vla-sel) acSubtraction c-p) ) pourtant à y regarder çà a l'air correct, c'est un traitement de liste donc l'indice reste bon, pas comme dans le cas de l'utilisation de ssdel. je l'aurais écrite comme çà : (foreach piece lst-vla-sel (setq c-p (vla-copy c)) (vla-boolean piece acSubtraction c-p) ) ou si tu veux absolument commencer par la fin (foreach piece (reverse lst-vla-sel) (setq c-p (vla-copy c)) (vla-boolean piece acSubtraction c-p) ) mais c'est à vérifier
  25. Salut, moi, ce que je fais de plus en plus, c'est passer une liste comme argument; ainsi j'y mets ce que je veux et je traite les éléments dans la fonction exemple ;; syntaxes possibles ;; (efface_bloc (list Nombloc)) ;; (efface_bloc (list Nombloc Pointinsertion)) ;;----------------------------------------------------------------------------------- (defun efface_bloc (lparam) (if (cadr lparam) ;; le point d'insertion est fourni (progn (etcaetera.si le point est fourni) ) (progn (etcaetera.si le point n'est pas fourni) ) ) si je reprends l'exemple de la sousliste ;; (sublst '((1 2 3 4 5 6) 3 2)) -> (3 4) ;; (sublst '((1 2 3 4 5 6) 3 )) -> (3 4 5 6) (defun sublst (lparam/ lst start leng rslt) (mapcar 'set (list 'lst 'start 'leng) lparam (or (<= 1 leng (- (length lst) start)) (setq leng (- (length lst) (1- start))) ) (repeat leng (setq rslt (cons (nth (1- start) lst) rslt) start (1+ start) ) ) (reverse rslt) ) je suis venu à cette technique à force de vouloir faire évoluer mes fonctions sans devoir réécrire toutes celles qui y font appel
×
×
  • 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é