Aller au contenu

bonuscad

Membres
  • Compteur de contenus

    5 029
  • Inscription

  • Dernière visite

  • Jours gagnés

    56

Tout ce qui a été posté par bonuscad

  1. Cet affichage n'étant pas dynamique, c'est vrai que l'interêt du 1er nom dans la liste en tant que dernière visite n'apporte aucune info puisque ce sera toujours notre nom. (affichage statique, ou reactualisation de la page ce sera toujours notre nom) Donc un affichage n-1 POUR l'utilisateur (sans changer la gestion de n qui est faite actuellement) de la page serais suffisant pour l'info qu'elle doit apporter à l'utilisateur connecté! L'utilisateur a la bienvenue personalisée pour savoir qu'il est/était connecté... (faut pas s'endormir ;) )
  2. Bonjour à toi "Ho Décapode!" Bizzare cela fonctionne chez moi! :( N'as tu pas le mode "insertion" actif pour l'accroche objet lors de la demande du point relatif, car je ne vois que ça qui pourrait expliquer ce comportement. Très simple tu remplaces: (setq js (ssget "_X" (list (assoc 0 dxf_ent) (assoc 67 dxf_ent) (assoc 410 dxf_ent) (assoc 8 dxf_ent))) n -1) par (initget "Tous Sélection _All Select") (if (eq (getkword "\nChoix des textes filtrés par le modèle? [Tous/Sélection] < Sélection >: ") "All") (setq js (ssget "_X" (list (assoc 0 dxf_ent) (assoc 67 dxf_ent) (assoc 410 dxf_ent) (assoc 8 dxf_ent))) n -1) (setq js (ssget (list (assoc 0 dxf_ent) (assoc 67 dxf_ent) (assoc 410 dxf_ent) (assoc 8 dxf_ent))) n -1) )
  3. Essayes la proposition suivante, "ça devrait l' faire" bien que je n'ai pas testé en profondeur. ;) (defun cv_str (alpha / nb nw_car carac) (setq nb 1 nw_car "") (while (> (strlen alpha) 0) (cond ((wcmatch alpha "*',*") (while (and (/= (substr alpha nb 1) ",") (<= nb (strlen alpha))) (setq nb (1+ nb)) ) (setq carac (substr (rtos (* 0.0001 (read (substr alpha 1 (1- nb)))) 2 4) 3)) (setq nw_car (strcat nw_car (if (/= nw_car "") "," "") carac)) (setq alpha (substr alpha (1+ nb))) ) ) (setq nb 1) ) (setq a nw_car) ) (defun c:re-index ( / ent dxf_ent nw_pt ang lg flag prfx js n) (while (not (setq ent (entsel "\nChoisir un texte: ")))) (cond ((eq (cdr (assoc 0 (setq dxf_ent (entget (car ent))))) "TEXT") (setq nw_pt (trans (getpoint (trans (cdr (assoc 10 dxf_ent)) (car ent) 1) "\nPosition relative pour le nouveau texte?: ") 1 (car ent)) ang (angle (cdr (assoc 10 dxf_ent)) nw_pt) lg (distance (cdr (assoc 10 dxf_ent)) nw_pt) ) (initget "Oui Non _Yes No") (if (eq (getkword "\nAjouter un prefix [Oui/Non]? < Non >: ") "Yes") (setq flag T) (setq flag nil)) (if flag (setq prfx (getstring T "\nEntrez le préfixe souhaité?: "))) (setq js (ssget "_X" (list (assoc 0 dxf_ent) (assoc 67 dxf_ent) (assoc 410 dxf_ent) (assoc 8 dxf_ent))) n -1) (while (setq ent (ssname js (setq n (1+ n)))) (setq dxf_ent (entget ent)) (entmake (list (cons 0 "TEXT") (cons 100 "AcDbEntity") (assoc 67 dxf_ent) (assoc 410 dxf_ent) (cons 8 (getvar "CLAYER")) (cons 100 "AcDbText") (cons 10 (polar (cdr (assoc 10 dxf_ent)) ang lg)) (assoc 40 dxf_ent) (cons 1 (if flag (strcat prfx (cv_str (cdr (assoc 1 dxf_ent)))) (cv_str (cdr (assoc 1 dxf_ent))))) (assoc 50 dxf_ent) (assoc 41 dxf_ent) (assoc 51 dxf_ent) (cons 7 (getvar "TEXTSTYLE")) (assoc 71 dxf_ent) (assoc 72 dxf_ent) (assoc 11 dxf_ent) (assoc 210 dxf_ent) (cons 100 "AcDbText") (assoc 73 dxf_ent) ) ) ) ) (T (princ "\nCe n'est pas un texte!") ) ) (prin1) )
  4. Ce qu'il ne faut pas faire c'est de créer une entité avec la liste (-1 . < Nom d'entité: 1509e28 >) par exemple. Le (cdr de ce type liste est traité par une Incrémentation binaire d'Autocad pour le référencer correctement. Par contre pour les groupe de type > 300 (avec < Nom d'entité: 1509e28 > ) , s'il ne faut pas s'en servir pour (entmake), tu peux t'en servir avec (entget) pour récupérer le code DXF des entités contenus en tant que définition complexe. Donc pratique pour t'aider à faire un bloc ou autre entité complexe pour les soumettres correctement à (entmake). Tu pratiques le chemin inverse ;)
  5. bonuscad

    Polylignes

    Les épaisseurs de polyligne peut être globale (pour l'ensemble de la polyligne) ou définies par segment (VERTEX) Dans le premier cas, pour un raccord, le second objet héritera de l'épaisseur globale de la polyligne. Il prendra donc l'épaisseur de la 1ere polyligne. Dans le second cas, l'objet gardera son épaisseur propre par segment. Voilà, je pense que tout vient de là ;)
  6. bonuscad

    a la vitesse de l escargot

    Sur la 2005, j'ai eu des problèmes de lenteur lors de la première ouverture d'AutoCAD. Personellement j'ai désactivé tout ce qui concerne le centre de communication. Depuis cela va un peu mieux, mais une lenteur persiste. Je cherche encore comment améliorer cet état. Je pense que des connexions internet cherchent à se faire lors de l'utilisation d'AutoCAD (DesignCenter, Recherche de composants supplémentaires d'applications et j'en passes) Tout ceci contribue à un ralentissement plus marqué si ton poste et dans un réseau très surveillé d'entreprise (pare-feu, anti-virus, masquage d'adresses...). Mais comme c'est l'initialisation lors de la première ouverture qui est longue, car après l'utilisation est fluide, je me suis pas plus penché sur ce problème. Je penses cependant que c'est dans cette direction qu'il faut chercher (des recherches sur le reseau peuvent être pénalisantes pour la phase de chargement d'un logiciel) Désolé pas d'indices plus précis à te fournir :(
  7. bonuscad

    Bonus Cad sur Autocad 2007

    Salut, Je n'ai pas testé une seule installation sous 2007, je ne peux affirmer que pour 2000(avec quelque fois des erreurs) -2002-2004 et 2005. A priori cela ne devrait pas poser de problème, il suffit de déclarer un chemin de recherche pointant vers le dossier où sont copier les fichiers. N'ayant pas le temps, et étant en retard d'une guerre sur l'utilisation de la dernière version d'Autocad. Je ne peux assurer un suivi des routines que je propose. Cependant pour ceux que ça interresse je vous livre en vrac, tous les fichiers que j'ai à ce jour, et qui peuvent remplacer certaines procédures anciennes. Beaucoup de fichier ne sont pas inclus dans les menus, il va falloir vous plonger dedans pour comprendre comment les exploiter et faire un tri. Mais on a rien sans rien ;) C'est ICI 21 jours mini. J'espère que je n'ais rien oublié :(
  8. bonuscad

    recréer mnt

    Si les points sont de pas trop nombreux, car si c'est un semis de 10 000 pts.., va avoir une crampe à l'index. Dans le même registre il y avait eu cette discussion Mais ces deux méthodes semi-assistées sont les plus fiables, car c'est toi qui désigne le texte. Cela pourrait être automatisé si les écritures sont implantées et formatées toute pareilles ET SANS CHEVAUCHEMENT (texte unique). On pourrait alors faire un (ssget "_C" p1 p 2 '((0 . "TEXT"))) pour faire une capture de la valeur à chaque point. Le plus simple et de récupérer le semis 3D auprès du géomètre.
  9. bonuscad

    degrouper

    Regardes du côté de la variable "EXPLMODE" car si tu as des blocs avec des échelles différentes en X et Y, elle influe sur le résultat de la commande "DECOMPOS"
  10. bonuscad

    Je suis resté perplexe

    Ben c'est sutout la date de mise à jours du site ainsi que les dates des liens possible dans ce même site qui m'as fait réagir car j'avoue ne pas tout avoir compris. Un lien découlant du site même, répond à la question sur les SIG Celui-ci ci viens de la page concernant "Orfeo ToolBox" dont ils parlent comme logiciel libre :exclam: Je reconnais que j'ai posté en primant sur le thème internet du forum. Désolé, tu peux le reclassé si tu le désire.
  11. Je viens de tombé par le hazard sur ce site Vos réactions m'interesse... :P
  12. On ne cherche pas à les éditer :exclam: Je penses que si des attributs enfants existe, ils peut être interressant ou util d'inscrire les infos en Xdata, car si elles existent c'est que les infos sont à priori nescessaire pour une identication avec un outil SIG... Lecrabe le prendra avec des pince(ttes) car le but de l'écriture n'est pas révélé, seul lui sait ce qu'il veut faire de ces infos.... ;)
  13. Outre ceci, ce code ne fonctionne que pour des blocs parent (1er niveau d'imbrication) des attributs imbriqués à un second niveau ne sont pas traités. On pourrait affiner le cas échant le filtre de sélection: -> les espaces courant Model et Onglet Papier. -> rajouter le '(66 . 1) pour avoir que des blocs avec attributs non-constants -> écarter les XRef du jeu de sélection (traitement inutile d'entités "INSERT") Voilà les écueils de ce code présenté en exemple et les possibilités qu'il peut avoir sans trop de modifications.i
  14. Bonsoir, Le principal de l'exemple est bon et fonctionne en remettant les guillemets "Zappés".... Corrigé ça donne ça : (regapp "B2XD") (setq jeu (ssget "_X" '((0 . "INSERT")))) (if jeu (progn (setq n 0) (while (setq blk (ssname jeu n)) (setq e (entnext blk)) (setq ent (entget e)) (setq data nil) (while (/= "SEQEND" (cdr (assoc 0 ent))) (setq ETIQ (cdr (assoc 2 ent))) (setq contenu (cdr (assoc 1 ent))) (setq data (cons (cons 1000 (strcat etiq " " contenu)) data)) (setq e (entnext e)) (setq ent (entget e)) ) ; while (setq data (cons (cons 1002 "}") data)) (setq data (reverse data)) (setq data (cons (cons 1002 "{") data)) (setq exdata (list (list -3 (cons "B2XD" data)))) (setq entblk (entget blk)) (setq newent (append entblk exdata)) (entmod newent) (setq n (1+ n)) ) ; while ) ; progn (alert "Pas de blocs") ) ; if jeu (princ) Cependant j'ai déja remarqué que (entmod) ne fonctionne pas sur des atributs placés dans un calque verrouillé, alors attention honorable "Décapode"
  15. Désolé pour ma réponse hative, en fait cela fonctionne si j'applique le même test pour le code 410 (while (not (setq js (ssget "_+.:E:S" (list (cons 0 "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE,SPLINE") (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) (cons -4 "< NOT") (cons -4 "&") (cons 70 112) (cons -4 "NOT>") ) ) ) ) (princ "\nCe n'est pas un objet curviligne valable pour cette fonction!") ) Fonctionne dans toutes les fenêtres :P Pour ssget avec cette option, la définition de ces codes n'est pas utile car cela fonctionne à l'identique sans définition de ceux-ci, par contre avec l'option "_X" cela peut être utile pour d'autre cas donc, encore merci pour le rectificatif ;)
  16. Merci pour la remarque ;) effectivement la selection ne peut se faire. Comme ta proposition ne vas non plus, je pense que la solution est de bêtement enlever ou mettre en remarque le code 67 et 410, car ça fonctionne très bien sans. :P
  17. En récupérant cette ligne dans revcloud.lsp ? (getenv "ACET-REVCLOUD-BULGE")
  18. Tu devrais te pencher sur ce problème avec ton admid. réseaux. Il ce peut que ce soit un problème de propriétaire de fichier sous un dossier réseaux partagé, ou simplement encore une gestion correcte des droits d'accés à ce dossier. En tout cas pour ma part, je chercherais dans cette voie, mais j'ai peut être tout faux. :(
  19. bonuscad

    deplacement zoom clavier

    Salut, Après la question posée en privé, je réponds ici car la réponse concerne ce message et pourrait être reposée. Pour essayer, sans faire quoi que ce soit comme modification à AutoCAD. -> faire un copier-coller depuis la 1ère paranthèse ((lambda ....)) à la dernière. -> mettre la ligne de commande d'autocad "active" par un click dans la barre de commande -> coller directement dans cette barre active et valider la dernière parenthèse par "Entrée". Cela te permettra d'essayer la fonction 1 fois, si tu veux la relancer, tu recolles en ligne de commande. (en effet la fonction Lambda est supprimé de la mémoire après execution) Si cela t'interesse pour l'avoir en permanence tu fais un coller dans le bloc-note Tu modifie "((lambda" en "(defun c:qz" par exemple, (mnémonique de Quick Zoom pour la ligne de commande) Tu supprimes la dernière paranthèse (il y a une paranthèse en moins dans la modif ci dessus) et tu enregistres sous QZ.LSP et tu pourras l'utiliser comme tout autres lisps (le chargé et l'executer)
  20. bonuscad

    Generals notes

    Moins non plus je n'ai pas tout bien compris! :P Cependant j'ai trouvé un lisp ici -> MyxNotes qui est fort symphatique et pourrait de donner des idées et qui va dans le sens de ta recherche.
  21. Alméliorations apportées et possibilités augmentées. Voir le message d'entête
  22. Merci. ;) Je pense pas que ce soit PDMODE qui pose problème, mais plutôt PDSIZE. Une valeur négative se fera par rapport à la vue écran, une valeur positive se fera par rapport aux unités dessin. A mon avis la valeur positive est souhaitable, personellement j'utillise ce mode de PDSIZE, mais chacun peut l'ajuster selon son désir, comme PDMODE d'ailleurs. Cela est tellement simple à modifier dans la boite de dialogue "Style des points" qu'il est inutile de paraméter celle-ci dans une routine à mon avis... Les facteurs d'échelle dont tu parles ont plutôt une incidence sur la taille du texte de l'attribut.
  23. Ayant répondu sur un forum US pour effectuer une mesure avec un attribut incrémenté. Je reposte ici pour ceux qui ne fréquente pas ces forums et que ça pourrait interesser. Gile pourrait aussi améliorer son diviser/mesurer-3D pour inclure cette possibilité, car l'optique est similaire ( c'est juste une idée ;) ) NB: Le code se charge de créer le bloc avec attribut. L'échelle du texte d'attribut s'adapte à la longueur donnée comme incrémentation. (defun make_blk_measure ( / ) (if (not (tblsearch "STYLE" "$BLK_MEAS")) (entmake '((0 . "STYLE") (5 . "40") (100 . "AcDbSymbolTableRecord") (100 . "AcDbTextStyleTableRecord") (2 . "$BLK_MEAS") (70 . 0) (40 . 0.0) (41 . 1.0) (50 . 0.0) (71 . 0) (42 . 0.1) (3 . "simplex.shx") (4 . "") ) ) ) (if (not (tblsearch "BLOCK" "BLK_MEASURE_CURVE")) (progn (entmake '((0 . "BLOCK") (8 . "0") (2 . "BLK_MEASURE_CURVE") (70 . 2) (4 . "") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (10 0.0 0.0 0.0)) ) (entmake '((0 . "POINT") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbPoint") (10 0.0 0.0 0.0) (210 0.0 0.0 1.0) (50 . 0.0)) ) (entmake '( (0 . "ATTDEF") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbText") (10 0.05 0.1 0.0) (40 . 0.1) (1 . "0.0") (50 . 1.570796326794896) (41 . 1.0) (51 . 0.0) (7 . "$BLK_MEAS") (71 . 0) (72 . 0) (11 0.0 0.1 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (3 . "measure") (2 . "VALUE_MEASURE") (70 . 0) (73 . 2) (74 . 2) ) ) (entmake '((0 . "ENDBLK") (8 . "0") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2))) ) ) ) (defun z_dir (p1 p2 / ) (trans '(0.0 1.0 0.0) (mapcar '(lambda (k) (/ k (sqrt (apply '+ (mapcar '(lambda (x) (* x x)) (mapcar '- p2 p1) ) ) ) ) ) (mapcar '- p2 p1) ) 0 ) ) (defun c:blk-att_measure ( / js dxf_obj obj_vlax pt_start pt_end total_dist partial_dist lst_pt increment_dist sv_luprec sv_dzin ang dxf_210) (princ "\nSélectionner un objet curviligne à mesurer/diviser: ") (while (not (setq js (ssget "_+.:E:S" (list (cons 0 "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE,SPLINE") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) (cons -4 "[b]<[/b]NOT") (cons -4 "&") (cons 70 112) (cons -4 "NOT>") ) ) ) ) (princ "\nCe n'est pas un objet curviligne valable pour cette fonction!") ) (vl-load-com) (setq dxf_obj (entget (ssname js 0)) obj_vlax (vlax-ename->vla-object (ssname js 0)) pt_start (vlax-curve-getStartPoint obj_vlax) pt_end (vlax-curve-getEndPoint obj_vlax) total_dist (vlax-curve-getDistAtParam obj_vlax (vlax-curve-getEndParam obj_vlax)) ) (initget "Mesurer Diviser _Measure Divide") (if (eq (getkword (strcat "\n[Mesurer/Diviser] l'objet d'une longueur de " (rtos total_dist) "? [b]<[/b]M>: ")) "Divide") (progn (initget 7) (setq partial_dist (getint "\nEntrez le nombre de segments: ") partial_dist (/ total_dist partial_dist) ) ) (progn (initget 7) (setq partial_dist (getdist "\nSpécifiez la longueur du segment: ")) ) ) (cond ((> total_dist partial_dist) (make_blk_measure) (setq lst_pt (list pt_start) increment_dist partial_dist sv_luprec (getvar "LUPREC") sv_dzin (getvar "DIMZIN") ) (setvar "CMDECHO" 1) (setvar "DIMZIN" 0) (command "_.luprec" pause) (while ([b]<[/b] increment_dist total_dist) (setq lst_pt (cons (vlax-curve-getPointAtDist obj_vlax increment_dist) lst_pt) increment_dist (+ increment_dist partial_dist) ) ) (setq lst_pt (reverse (cons pt_end lst_pt))) (foreach n lst_pt (setq ang (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv obj_vlax (vlax-curve-getParamAtPoint obj_vlax n))) dxf_210 (z_dir n (polar n ang (* 0.1 partial_dist))) ) (entmake (list (cons 0 "INSERT") (cons 100 "AcDbEntity") (assoc 67 dxf_obj) (assoc 410 dxf_obj) (cons 8 (getvar "CLAYER")) (cons 100 "AcDbBlockReference") (cons 66 1) (cons 2 "BLK_MEASURE_CURVE") (cons 10 (trans n 0 dxf_210)) (cons 41 (* 0.1 partial_dist)) (cons 42 (* 0.1 partial_dist)) (cons 43 (* 0.1 partial_dist)) (cons 50 ang) (cons 210 dxf_210) ) ) (entmake (list (cons 0 "ATTRIB") (cons 100 "AcDbEntity") (assoc 67 dxf_obj) (assoc 410 dxf_obj) (cons 8 (getvar "CLAYER")) (cons 100 "AcDbText") (cons 10 (polar (polar (trans n 0 dxf_210) (+ (/ pi 2) ang) (* 0.1 partial_dist)) ang (* 0.05 partial_dist) ) ) (cons 40 (* 0.1 partial_dist)) (cons 1 (rtos (vlax-curve-getDistAtPoint obj_vlax n))) (cons 50 (+ (/ pi 2) ang)) (cons 41 1.0) (cons 51 0.0) (cons 7 "$BLK_MEAS") (cons 71 0) (cons 72 0) (cons 11 (polar (trans n 0 dxf_210) (+ (/ pi 2) ang) (* 0.1 partial_dist))) (cons 210 dxf_210) (cons 100 "AcDbAttribute") (cons 2 "VALUE_MEASURE") (cons 70 0) (cons 73 2) (cons 74 2) ) ) (entmake (list (cons 0 "SEQEND") (cons 8 (getvar "CLAYER")) (cons 62 0) (cons 6 "ByBlock") (cons 370 -2))) ) (setvar "LUPREC" sv_luprec) (setvar "DIMZIN" sv_dzin) ) (T (princ "\nLa longueur est trop grande pour l'objet!")) ) (prin1) ) L'amélioration concerne l'orientation de l'attribut par rapport à l'objet curviligne, le choix de la police a utiliser pour celui-ci, ainsi que la possibilité de faire une incrémentation soit numérique, soit alphabétique avec un pas d'incrémentation pour les valeurs numériques. La routine est influencée par les variables PDMODE, PDSIZE et DIMPOST. Donc l'aspect peut être différent suivant l'état de ces variables. (DimPost = préfixe et/ou suffixe ajouté à l'attribut) Je vous laisse découvrir les possibilités plus en détail en l'essayant! [Edité le 20/9/2008 par bonuscad]
  24. Merci à toi Gilles car c'est toi qui m'a aidé a neutraliser l'usage de (osnap "_near") qui posait beaucoup de problème. Ta fonction de remplacement fonctionne à merveille, sauf sur une 2000 (dans le cas d'un SCU non parrallèle) il y a un décalage sur le point retourné. Mais j'oubli cette version capricieuse, et je suis content de savoir que cela fonctionne sous 2007, car c'est une fonction qui me sert beaucoup pour d'autre lisps. le code proposé s'est alourdi a cause de la 2002 qui avait un comportement différent avec (vlax-curve-getPointAtParam). Ceci pour info, si un jour tu dois chercher un bug avec une 2002 avec cette fonction. ;)
  25. Grâce à la suggestion de Gilles, j'ai refondu une fonction que j'avais proposée. Celle-ci semble fonctionner correctement à partir des versions 2002 (testé jusqu' à 2005, sous 2000 des problème persistent) Cette fonction retourne les sommets les plus proches (dans le SCU courrant) du segment de Polylignes ou LwPolyligne, ainsi que l'arrondi qui lui est affecté sous forme de liste ((1er point) (2ème point) arrondi) Voici donc le corp principale de la fonction qui doit être utilisé sous la forme (near_vertex (entsel "\nChoisir un segment de polyligne: ")) (defun near_vertex (obj / dxf_obj obj_vlax pt_sel par i pt_first pt_snd bulge e_next) (cond ((or (eq (cdr (assoc 0 (setq dxf_obj (entget (car obj))))) "LWPOLYLINE") (and (eq (cdr (assoc 0 dxf_obj)) "POLYLINE") (zerop (boole 1 112 (cdr (assoc 70 dxf_obj)))) ) ) (vl-load-com) (setq obj_vlax (vlax-ename->vla-object (car obj)) pt_sel (vlax-curve-getClosestPointToProjection obj_vlax (trans (cadr obj) 1 0) (mapcar '- (trans (getvar "VIEWDIR") 1 0) (trans '(0 0 0) 1 0)) ) par (vlax-curve-getParamAtPoint obj_vlax pt_sel) i 0 ) (if (>= par (vlax-curve-getEndParam obj_vlax)) (setq par (1- par))) (setq pt_first (trans (vlax-curve-getPointAtParam obj_vlax (fix par)) 0 1) ) (if (= (1+ (fix par)) (vlax-curve-getEndParam obj_vlax)) (setq pt_snd (trans (vlax-curve-getEndPoint obj_vlax) 0 1)) (setq pt_snd (trans (vlax-curve-getPointAtParam obj_vlax (1+ (fix par))) 0 1)) ) (cond ((eq (cdr (assoc 0 dxf_obj)) "LWPOLYLINE") (while (or (/= (caar dxf_obj) 42) (if (< i (fix par)) (setq i (1+ i)))) (setq bulge (cdadr dxf_obj) dxf_obj (cdr dxf_obj)) ) ) (T (setq e_next (entnext (cdar dxf_obj))) (repeat (fix par) (setq e_next (entnext e_next))) (setq bulge (cdr (assoc 42 (entget e_next)))) ) ) (list pt_first pt_snd bulge) ) (T (princ "\nN'est pas une polyligne2D valable pour cette fonction!") nil ) ) ) Cette fonction ouvre de nombreuses possibilités pour ceux qui voudraient exploités ces informations en lisp. Voici par exemple une fonction test pour la tester: (defun c:test ( / ent pair_pt) (defun draw_pt (pt / rap) (setq rap (/ (getvar "viewsize") 50)) (foreach n (mapcar '(lambda (x) (list ((eval (car x)) (car pt) rap) ((eval (cadr x)) (cadr pt) rap))) '((+ +) (+ -) (- +) (- -)) ) (grdraw pt n -1) ) ) (while (not (setq ent (entsel "\nChoix d'une polyligne ")))) (setq pair_pt (near_vertex ent)) (if pair_pt (progn (redraw) (draw_pt (car pair_pt)) (draw_pt (cadr pair_pt)) (print pair_pt) ) ) (prin1) ) Ou encore un exemple simple plus concret pour interroger le rayon d'un segment d'arc (defun c:q_ray ( / old_osmd pt_sel ent dxf_ent typ_ent id_rad l_2pt) (setvar "cmdecho" 0) (while (not (setq ent (entsel "\nInterroger le rayon du segment arrondi: ")))) (setq dxf_ent (entget (car ent)) typ_ent (cdr (assoc 0 dxf_ent))) (cond ((or (eq typ_ent "ARC") (eq typ_ent "CIRCLE")) (setq id_rad (cdr (assoc 40 dxf_ent))) ) ((or (eq typ_ent "LWPOLYLINE") (eq typ_ent "POLYLINE")) (if (setq l_2pt (near_vertex ent)) (if (zerop (caddr l_2pt)) (progn (princ "\nCe segment est droit!") (setq id_rad nil) ) (setq id_rad (/ (distance (car l_2pt) (cadr l_2pt)) (sin (* 2.0 (atan (caddr l_2pt)))) 2.0)) ) (setq id_rad nil) ) ) (T (setq id_rad nil) (princ "\nCet objet ne peut être interrogé!") ) ) (if (eq (type id_rad) 'REAL) (progn (alert (strcat "\nRayon = " (rtos (abs id_rad) 2 3))) (princ (strcat "\nRayon = " (rtos (abs id_rad) 2 3))) ) ) (setvar "cmdecho" 1) (princ) ) NB: Bien sur la fonction (near_vertex) doit être d'abord chargée ou intégré au lisp que vous construirez.
×
×
  • 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é