lolobala Posté(e) le 16 mars 2010 Posté(e) le 16 mars 2010 Bonjour à tous. Voilà ma demande, je ne sais pas si c'est réalisable mais bon...qui tente rien n'a rien. J'ai une polyligne 2d ouverte sur laquelle je souhaiterai insérer des blocs. (blocs identiques)Mes 2 premiers blocs seront insérer aux extrémitées de ma polyligne. Ensuite je souhaite diviser cette polyligne, en y insérant les mêmes blocs, à distance égal mais inférieur à 2500 mm.Et pour compliquer la tâche, il faut que mes blocs soit perpendiculaire à la polyligne. C'est peut être pas très clair... J'ai essayé de repartir de lisp éxistant comme celui-ci : http://cadxp.cadmag.info/modules.php?op=modload&name=XForum&file=viewthread&tid=20362#pid85057 Et aussi de MES3D et DIV3D de Gile, mais le principe est complètement différent.Si quelqu'un à une idée, je suis preneur. Merci d'avance
(gile) Posté(e) le 16 mars 2010 Posté(e) le 16 mars 2010 Salut, Vu ce que je comprends de la demande, la commande native DIVISER ou le LISP Div3d devraient permettre de faire ce que tu veux à condition de redéfinir auparavant le bloc pivoté de 90°.Ensuite, choisir l'option Bloc, puis Aligner avec l'objet = Oui, puis à l'invite nombre de segments, utiliser la calculatrice géométrique en mode transparent : Entrez le nombre de segments: 'cal >>>> Expression: trunc(63400/2500)+1ne pas mettre + 1 si le nombre est divisible par 2500 (il se termine par : 0000, 2500, 5000 ou 7500) ou encore une expression LISP :Entrez le nombre de segments: (+ 1 (/ 63400 2500)) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lolobala Posté(e) le 17 mars 2010 Auteur Posté(e) le 17 mars 2010 Bonjour Gile, petite question à quoi correspond 63400 ? Autre chose, je pense qu'il y a un petit soucis. Quand j'utilise DIV3D et que j'utilise la calculatrice en mode transparent, en tapant >>>> Expression: trunc(63400/2500)+1 il me redemande le nombre de segment comme s'il ne prenait pas en compte la calculette. Par contre la calculette marche avec le lisp DIVISER. Autre question l'expression LISP, doit être inséré en dur dans le code ? ou au moment de l'exécution du lisp ? Si cest le deuxième cas, ça ne marche pas, ni dans DIV3D, ni dans DIVISER
(gile) Posté(e) le 17 mars 2010 Posté(e) le 17 mars 2010 Salut, 63400 est un exemple, à remplacer par la longueur de ta polyligne. Effectivement Div3d (qui est une commande définie en LISP) n'accepte pas directement le résultat de la calculatrice (mais le résultat est affiché en ligne de commande, il suffit de le rentrer à nouveau). Avec la commande native DIVISER il n'y a aucun problème. L'expression LISP remplace l'appel à la calculatrice et ne peut être utilisé qu'avec la commande native DIVISER. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lolobala Posté(e) le 17 mars 2010 Auteur Posté(e) le 17 mars 2010 C'est ce qu'il me semblait pour la valeur 63400, mais n'y aurait-il pas un moyen de procédé comme ça : On lance le lisp,On sélectionne la polyligne, (l'objet à diviser) et on récupère la variable longueur XOn sélectionne le bloc qui sera répété. Et c'est tout !La distance entre les blocs sera de : (+1(/X 2500)). Autre chose, par rapport a ma demande de départ je dois avoir un bloc au début de la polyligne mais aussi à la fin.
philouie Posté(e) le 17 mars 2010 Posté(e) le 17 mars 2010 Salam, La commande "mesurer" ne fait-elle pas la même chose que la commande diviser sauf qu'au lieu de donner le nombre de segment on donne la longueur du segment ? phil
lolobala Posté(e) le 17 mars 2010 Auteur Posté(e) le 17 mars 2010 Salut philouie. Tu as raison, mais dans mon cas il faut que je sache en combien de segment je dois diviser ma polyligne. Je ne connais pas la longueur du segment, je sais juste qu'il doit être inférieur ou égal à 2500 mm.
(gile) Posté(e) le 17 mars 2010 Posté(e) le 17 mars 2010 On lance le lisp,On sélectionne la polyligne, (l'objet à diviser) et on récupère la variable longueur XOn sélectionne le bloc qui sera répété. Et c'est tout ! Bien sûr que c'est faisable en LISP...Mais tu as des demandes spécifiques de la sorte, il faudrait envisager d'apprendre ce langage ou de faire appel à un professionnel. Si quelqu'un veut bien écrire ce type de routine sur un site comme CADxp, c'est qu'il y trouve son intérêt : c'est un excellent exercice pour apprendre (je l'ai beaucoup pratiqué) et, accessoirement, ça peut flatter l'ego. Personnellement, insérer des blocs ou des textes le long d'une courbe ne m'intéresse plus. J'ai encore dû le faire 3 ou 4 fois avec des demandes particulières différentes depuis la semaine dernière.Je le fais encore une fois, mais je pense que c'est la dernière... ;;; Getblock (gile) 03/11/07 ;;; Retourne le nom du bloc entré ou choisi par l'utilisateur ;;; dans une liste déroulante de la boite de dialogue ou depuis la boite ;;; de dialogue standard d'AutoCAD ;;; Argument : le titre (string) ou nil (défaut : "Choisir un bloc") (defun getblock (titre / bloc n lst tmp file what_next dcl_id nom) (while (setq bloc (tblnext "BLOCK" (not bloc))) (setq lst (cons (cdr (assoc 2 bloc)) lst) ) ) (setq lst (acad_strlsort (vl-remove-if (function (lambda (n) (= (substr n 1 1) "*"))) lst ) ) tmp (vl-filename-mktemp "Tmp.dcl") file (open tmp "w") ) (write-line (strcat "getblock:dialog{label=" (cond (titre (vl-prin1-to-string titre)) ("\"Choisir un bloc\"") ) ";initial_focus=\"bl\";:boxed_column{ :row{:text{label=\"Sélectionner\";alignment=left;} :button{label=\">>\";key=\"sel\";alignment=right;fixed_width=true;}} spacer; :column{:button{label=\"Parcourir...\";key=\"wbl\";alignment=right;fixed_width=true;}} :column{:text{label=\"Nom :\";alignment=left;}} :edit_box{key=\"tp\";edit_width=25;} :popup_list{key=\"bl\";edit_width=25;}spacer;} spacer; ok_cancel;}" ) file ) (close file) (setq dcl_id (load_dialog tmp)) (setq what_next 2) (while (>= what_next 2) (if (not (new_dialog "getblock" dcl_id)) (exit) ) (start_list "bl") (mapcar 'add_list lst) (end_list) (if (setq n (vl-position (strcase (getvar "INSNAME")) (mapcar 'strcase lst) ) ) (setq nom (nth n lst)) (setq nom (car lst) n 0 ) ) (set_tile "bl" (itoa n)) (action_tile "sel" "(done_dialog 5)") (action_tile "bl" "(setq nom (nth (atoi $value) lst))") (action_tile "wbl" "(done_dialog 3)") (action_tile "tp" "(setq nom $value) (done_dialog 4)") (action_tile "accept" "(setq nom (nth (atoi (get_tile \"bl\")) lst)) (done_dialog 1)" ) (setq what_next (start_dialog)) (cond ((= what_next 3) (if (setq nom (getfiled "Sélectionner un fichier" "" "dwg" 0)) (setq what_next 1) (setq what_next 2) ) ) ((= what_next 4) (cond ((not (read nom)) (setq what_next 2) ) ((tblsearch "BLOCK" nom) (setq what_next 1) ) ((findfile (setq nom (strcat nom ".dwg"))) (setq what_next 1) ) (T (alert (strcat "Le fichier \"" nom "\" est introuvable.")) (setq nom nil what_next 2 ) ) ) ) ((= what_next 5) (if (and (setq ent (car (entsel))) (= "INSERT" (cdr (assoc 0 (entget ent)))) ) (setq nom (cdr (assoc 2 (entget ent))) what_next 1 ) (setq what_next 2) ) ) ((= what_next 0) (setq nom nil) ) ) ) (unload_dialog dcl_id) (vl-file-delete tmp) nom ) (defun c:DemandeSpeciale (/ curve param blk len num inc dist space) (vl-load-com) (and (setq curve (car (entsel "\nSélectionnez la courbe: "))) (setq param (vlax-curve-getEndParam curve)) (setq blk (getblock "Choix du bloc")) (setq len (vlax-curve-getDistAtParam curve param) num (/ len 2500.) inc (/ len (if (= (fix num) num) num (1+ (fix num)) ) ) dist 0. space (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) (while ( (vla-InsertBlock space (vlax-3d-point (vlax-curve-getPointAtDist curve dist)) blk 1. 1. 1. (+ (angle '(0. 0. 0.) (vlax-curve-getFirstDeriv curve (vlax-curve-getParamAtDist curve dist) ) ) (/ pi 2.) ) ) (setq dist (+ dist inc)) ) (vla-InsertBlock space (vlax-3d-point (vlax-curve-getEndPoint curve)) blk 1. 1. 1. (+ (angle '(0. 0. 0.) (vlax-curve-getFirstDeriv curve param)) (/ pi 2.) ) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lolobala Posté(e) le 17 mars 2010 Auteur Posté(e) le 17 mars 2010 Bien sûr que c'est faisable en LISP...Je me doutais que tu dirais ça... Mais tu as des demandes spécifiques de la sorte, il faudrait envisager d'apprendre ce langage....Je ne demande que ça mais, je ne trouve rien de concret sur le site. Je dirais même que trouver son bonheur la dedans, c'est pas évident....en plus je manque cruellement de temps.Il n'y a aucun tuto, j'ai trouvé le site de Reb CAO mais c'est ennuyant de devoir payer. .... ou de faire appel à un professionnel...J'aimerai aussi mais ça ne dépend pas de moi, mon patron ne fera rien dans ce sens là, même le service informatique ne serait pas y mettre du sien. Je me retrouve seul au pied du mur.... mon seul recours est ce forum, ou il y a des choses très intéressante. Personnellement, insérer des blocs ou des textes le long d'une courbe ne m'intéresse plus Dommage, tu étais mon sauveur. Je comprend que ça puisse t'ennuyer au bout d'un moment, mais pour moi c'est la solution de faciliter. Désolé. Merci encore pour ton professionnalisme et ta patience. Je m'empresse de tester ça, je te tiens au courant et je ne te dérangerai plus.
lolobala Posté(e) le 17 mars 2010 Auteur Posté(e) le 17 mars 2010 MERCI, tout marche à la perfection. Comme d'hab C'était la dernière, au revoir
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant