Aller au contenu

(gile)

Moderateurs
  • Compteur de contenus

    12 247
  • Inscription

  • Dernière visite

  • Jours gagnés

    209

Tout ce qui a été posté par (gile)

  1. (gile)

    polyligne 3d avec arc

    Mode d'emploi En blanc, (selectionnée) la polyligne 2D qui sert de base, en gris, les points 3D à l'altitude voulue. Commande: INTERPOLY3D Paramètre courant - Nombre de segments par arc: 20 Spécifiez le point de départ de la polyligne ou [segments]: Spécifier le point à l'écran ou entrer les coordonnée au clavier (posibilité d'utiliser un filtre de coordonnées) http://img329.imageshack.us/img329/8069/interpol1ul5.png Spécifiez le deuxième point de l'arc ou [annUler]: Spécifier le point 2D ou 3D http://img179.imageshack.us/img179/5579/interpol2xq0.png Spécifiez l'extrémité de l'arc [annUler]: Spécifier le point 3D http://img155.imageshack.us/img155/1179/interpol3bo9.png Spécifiez le deuxième point de l'arc ou [annUler]: _nea à http://img174.imageshack.us/img174/9041/interpol4kl9.png Spécifiez l'extrémité de l'arc [annUler]: http://img155.imageshack.us/img155/4654/interpol5qa8.png Spécifiez le deuxième point de l'arc ou [annUler]: http://img165.imageshack.us/img165/170/interpol6vd3.png Valider (ENTER ou clic droit) http://img329.imageshack.us/img329/6772/interpol7xn6.png
  2. (gile)

    polyligne 3d avec arc

    J'ai un peu "peaufiné" la dernière version (désormais version 1.1) : Possibilité de faire des segments rectilignes en cliquant sur le point pécédent ou en entrant @ aux invites "Spécifiez le deuxième point de l'arc ou [annUler]:" ou "Spécifiez l'extrémité de l'arc [annUler]:", dans ce cas un seul sommet est ajouté à la polyligne. Les options "annUler" ont été modifiées en conséquence Pour plus de polyvalence, le LISP fonctionne désormais par rapport au SCU courant (projection des points spécifié et calcul des sommets de la poly 3D).
  3. Ça doit être à cause de la police ;)
  4. (gile)

    polyligne 3d avec arc

    C'est celle qui est au dessus (Nouvelle version). J'ai édité mon message.
  5. (gile)

    polyligne 3d avec arc

    Voilà j'ai modifié le dernier LISP qui me semble être celui qui correspond le mieux à vos besoins. Les trois points spécifiés pour chaque arc sont projetés sur le plan XY du SCG pour permettre de définir l'arc de cercle sur lequel sont calculés les points équidistants qui après interpolation serviront de sommets à la polyligne3D. L'altitude du deuxième point de chaque arc n'est donc pas prise en compte, seules les altitudes des points au départ et à l'extrémité de l'arc sont considérées pour calculer celles de tous les autres sommets. Les dysfonctionnements que j'avais vu ont été réparés. Il est possible d'annuler le ou les derniers points saisis en tapant U au lieu de spécifier un point. Le nombre de segments par arc (paramétrable en tapant S au lieu de spécifier le premier point) est conservé dans le dessin.
  6. (gile)

    Test 2007

    Salut, c'est modifiable dans Options > Onglet Dessin > Paramètre AutoSnap > Couleurs ... et dans la boite de dialogue Couleurs de la fenêtre de dessin cocher ou décocher Teiter les coordonnées X, Y, Z
  7. (gile)

    polyligne 3d avec arc

    Bonuscad dit ça parceque je suis menuisier et pas géomètre ou topographe, mais la géométrie est notre outil commun. Le dernier LISP que je donne est une interpolation 2D vers 3D d'un arc de cercle, les points ainsi trouvés sont situés sur une portion d'hélice, comme pour un escalier hélicoïdal, pour refaire le lien avec la menuiserie. Il reste des dysfonctionnements suivant les points spécifiés (arcs supérieurs à 90° ou 100 grades, pardon ...). Je rajouterais des options pour annuler la ddernière entré sur le LISP qui vous agrée le mieux.
  8. (gile)

    polyligne 3d avec arc

    Je ne suis pas sûr de bien comprendre l'interpolation. Le LISP ci-dessus dispose les sommets de la polyligne 3D suivant un arc de cercle contenu dans le plan défini par les trois points spécifés. L'altitude des trois points 3D est donc prise en compte comme tu le demandais. Au vu de ce que tu me dis sur l'interpolation, et de la demande de Didier de ne prendre en compte que l'altitude du premier et du troisième point et d'interpoler celle du point intermédiaire, j'ai fais un autre LISP (ci-dessous). Son fonctionnement est différent, les trois points sont projetés sur le plan XY du SCG* (Z = 0) pour définir un arc de cercle dans ce plan, lequel est divisé en autant de segments que spécifié. Chaque point ainsi obtenu est repositionné en altitude de manière incrémentielle. Est-ce bien une interpolation ? *Version 1.1 : les points sont projetés sur le plan XY du SCU courant. Version 1.2 ;;; InterPoly3D -Gilles Chanteau- 24/11/06 Version 1.2 ;;; Crée une polyligne 3D. ;;; En option "Arc" les sommets s'inscrivent sur une helicoïde, ;;; - leur altitude est calculée par interpolation linéaire en fonction ;;; de l'altitude du premier et troisième point ;;; - la courbure est celle de l'arc défini par la projection des points ;;; spécifiés sur le plan XY du SCU courant. (defun c:InterPoly3d (/ 3dPolyArc_err drawvecs segmentundo AcDoc ModSp prec p1 p2 p3 opt lst cnt) (vl-load-com) ;;***********************************************************;; (defun 3dPolyArc_err (msg) (if (= msg "Fonction annulée") (princ) (princ (strcat "\nErreur: " msg)) ) (redraw) (vla-EndUndoMark AcDoc) (setq *error* m:err m:err nil ) (princ) ) ;;***********************************************************;; (defun drawvecs (lst) (setq p1 (last lst)) (redraw) (if ( (grvecs (apply 'append (mapcar '(lambda (x1 x2) (list -255 x1 x2) ) (reverse (cdr (reverse lst))) (cdr lst) ) ) ) ) ) ;;***********************************************************;; (defun segmentundo () (if ( (progn (prompt "\nTous les segments ont déjà été annulés.") ) (setq lst (sublst lst 1 (- (length lst) (car cnt))) cnt (cdr cnt) ) ) ) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) ModSp (vla-get-ModelSpace AcDoc) m:err *error* *error* 3dPolyArc_err ) (vla-StartUndoMark AcDoc) (if (not (vlax-ldata-get "interpoly3d" "prec")) (vlax-ldata-put "interpoly3d" "prec" 20) ) (prompt (strcat "\nParamètre courant - Nombre de segments par arc: " (itoa (vlax-ldata-get "interpoly3d" "prec")) ) ) (while (not (vl-consp p1)) (initget 1 "Segments") (setq p1 (getpoint "\nSpécifiez le point de départ de la polyligne ou [segments]: " ) ) (if (= p1 "Segments") (progn (initget 6) (if (setq prec (getint (strcat "\nSpécifiez le nombre de segments pour les arcs (itoa (vlax-ldata-get "interpoly3d" "prec")) ">: " ) ) ) (vlax-ldata-put "interpoly3d" "prec" prec) ) ) ) ) (setq prec (vlax-ldata-get "interpoly3d" "prec") lst (cons p1 lst) cnt (cons 1 cnt) loop1 T ) (while loop1 (initget "Arc annUler") (setq p1 (last lst) p2 (getpoint p1 "\nSpécifiez l'extrémité de la ligne ou [Arc/annUler]: " ) ) (if p2 (progn (if (= p2 "annUler") (segmentundo) (if (= p2 "Arc") (progn (setq loop2 T) (while loop2 (setq p2 p1) (while (equal p1 p2 1e-9) (initget "Ligne annUler") (setq p2 (getpoint p1 "\nSpécifiez le deuxième point de l'arc ou [Ligne/annUler]: " ) ) ) (if p2 (if (= p2 "Ligne") (setq loop2 nil) (if (= p2 "annUler") (progn (segmentundo) (drawvecs lst) ) (progn (setq p3 p2) (while (equal p2 p3) (initget 1 "annUler") (setq p3 (getpoint p2 "\nSpécifiez l'extrémité de l'arc: ") ) ) (setq new (interpol (last lst) p2 p3 prec) lst (append lst new) cnt (cons (length new) cnt) ) (drawvecs lst) ) ) ) (setq loop2 nil loop1 nil ) ) ) ) (setq lst (append lst (list p2)) cnt (cons 1 cnt) ) ) ) (drawvecs lst) ) (setq loop1 nil) ) ) (if ( (vlax-invoke ModSp 'add3dPoly (apply 'append (mapcar '(lambda (p) (trans p 1 0)) lst)) ) ) (redraw) (vla-EndUndoMark AcDoc) (setq *error* m:err m:err nil ) (princ) ) (defun interpol (pt1 pt2 pt3 prec / alt1 alt3 p1 p2 p3 mid1 mid2 cen rad ang i_ang i_alt n p_int ptlst ) (setq alt1 (caddr pt1) alt3 (caddr pt3) ) (mapcar '(lambda (p pt) (set p (list (car pt) (cadr pt) 0.0))) '(p1 p2 p3) (list pt1 pt2 pt3) ) (if (or (equal p1 p2 1e-9) (not (inters p1 p2 p2 p3))) (setq ptlst (list pt3)) (progn (setq mid1 (mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2)) p1 p2) mid2 (mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2)) p2 p3) cen (inters mid1 (polar mid1 (+ (angle p1 p2) (/ pi 2)) 1.0) mid2 (polar mid2 (+ (angle p2 p3) (/ pi 2)) 1.0) nil ) rad (distance cen p1) ang (ang ) (if ( (setq ang (- ang (* 2 pi))) ) (setq i_ang (/ ang prec) i_alt (/ (- alt1 alt3) prec) n 0 ) (repeat prec (setq p_int (polar cen (- (angle cen p3) (* i_ang n)) rad) p_int (list (car p_int) (cadr p_int) (+ alt3 (* i_alt n))) ptlst (cons p_int ptlst) n (1+ n) ) ) ) ) ptlst ) ;;; Ang (defun ang (if (and ( ang (ang ) ) ;;; SUBLST Retourne une sous-liste ;;; Premier élément : 1 ;;; (sublst '(1 2 3 4 5 6) 3 2) -> (3 4) ;;; (sublst '(1 2 3 4 5 6) 3 nil) -> (3 4 5 6) (defun sublst (lst start leng / rslt) (if (not ( (setq leng (- (length lst) (1- start))) ) (repeat leng (setq rslt (cons (nth (1- start) lst) rslt) start (1+ start) ) ) (reverse rslt) ) [Edité le 11/11/2006 par (gile)][Edité le 12/11/2006 par (gile)] [Edité le 24/11/2006 par (gile)]
  9. (gile)

    pline_block

    Bien sûr, sinon je ne le ferais pas, même si parfois je tiques un peu devant des demandes trop spécifiques. Ça, c'est toujours avec plaisir ;)
  10. Pline_block permet d'insérer un bloc contenant des attributs dont certains sont des champs dynamiques liés à un objet (polyligne). Le bloc "Pline_block" doit exister et être présent en tant que bloc dans la collection du le dessin courant ou comme un fichier "Pline_block.dwg" (wbloc) dans un répertoire du chemin de recherche. Le bloc doit être défini avec le même nombre d'attributs que dans le LISP (3 dans l'exemple ci-dessous). Le LISP donné ici est un exemple, il peut être modifié en fonction des besoins : nature des attributs et format des champs dynamiques. Dans l'exemple, les trois attributs sont : - le nom de la pièce (acquis avec getname) : ;; attribut "nom de la pièce" (if (not (setq [b]nom[/b] (getname))) (setq [b]nom[/b] "") ) -son périmètre (champ dynamique) : ;; Attribut "périmètre" (mm -> m) [b]long[/b] (strcat [surligneur]"% (itoa id) [surligneur]">%).Length \\f \"%lu2%pr2%ct8[0.001]\">%"[/surligneur] ) - son aire (champ dynamique) : ;; Attribut surface (mm² -> m²) [b]aire[/b] (strcat [surligneur]"% (itoa id) [surligneur]">%).Area \\f \"%lu2%pr2%ct8[1e-006]\">%"[/surligneur] ) Les valeurs des attributs leur sont données ici : ;; attribution de leur valeur aux attributs (mapcar '(lambda (x y) (vla-put-TextString x y)) (vlax-invoke ref 'GetAttributes) (list [b]nom long aire[/b]) ) Pour ajouter ou supprimer un ou des attributs, il faut modifier ces lignes (attention à l'ordre dans la liste). Pour le format des champs dynamiques, le plus simple est de créer un champ et de le formater selon ses désir puis de copier la syntaxe en bas de la boite de dialogue (Expression de champ). http://img67.imageshack.us/img67/5931/champll2.png %%).Length \f "%lu2%pr2%ct8[0.001]">% %lu2 : unités décimales (CF LUNITS) %pr2 : nombre de décimales affichées (CF LUPREC) [0.001] : facteur de conversion (ici mm -> m) L'expression est séparée "en deux parties" par l'ID de l'objet sélectionné, elle le sera aussi dans le LISP par l'expression (itoa id). Il suffit donc de mettre entre guillemets chaque partie après avoir rajouté un "anti-slash" (\) devant chaque anti-slash et guillemet : "%%).Length [surligneur]\[/surligneur]\f [surligneur]\[/surligneur]"%lu2%pr2%ct8[0.001][surligneur]\[/surligneur]">%" Le code DCL de la boite de dialogue GetName, à enregistrer sous Getname.dcl dans un répertoire du chemin de recherce des fichiers de support. Boite de dialogue modifiée le 13/04/07 getname:dialog{ value="Choisir un nom"; key="box"; initial_focus="tp"; :boxed_column{ label="Modifier la liste"; :row{ spacer; :edit_box{ key="tp"; edit_width=20; alignment=left; allow_accept=true; } spacer; } :row{ :button{ label="Ajouter"; key="add"; } :button{ label="Retirer"; key="del"; } } } spacer_1; :row{ spacer; :list_box{ key="pop"; width=25; } spacer; } spacer_1; ok_cancel; } Le LISP GetName (13/04/07) : ;;; GetName Retourne le nom spécifié ou choisi dans la liste. ;;; Les noms entrés sont ajoutés à la liste. ;;; La liste est conservée dans le dessin. (defun getname (titre / lst what_next dcl_id nom) (if (not (vlax-ldata-get "Pline_block" "Name")) (vlax-ldata-put "Pline_block" "Name" '("Bain" "Cuisine" "Entrée" "Séjour" "WC")) ) (setq lst (vlax-ldata-get "Pline_block" "Name")) (setq dcl_id (load_dialog "GetName.dcl")) (setq what_next 2) (while (>= what_next 2) (if (not (new_dialog "getname" dcl_id)) (exit) ) (start_list "pop") (mapcar 'add_list lst) (end_list) (if titre (set_tile "box" titre) ) (action_tile "pop" (strcat "(if (or (= $reason 1) (= $reason 4))" "(set_tile \"tp\" (nth (atoi $value) lst)))" "(mode_tile \"accept\" 2)" ) ) (action_tile "add" (strcat "(if (not (member (get_tile \"tp\") lst))" "(setq lst (acad_strlsort (cons (get_tile \"tp\") lst))))" "(done_dialog 2)" ) ) (action_tile "del" (strcat "(setq lst (vl-remove (get_tile \"tp\") lst))" "(done_dialog 2)" ) ) (action_tile "accept" (strcat "(if (not (read (get_tile \"tp\")))" "(progn (alert \"Spécifiez un nom, svp.\")" "(done_dialog 2))" "(progn (setq nom (get_tile \"tp\"))" "(if (and (not (member nom lst)) (/= nom ""))" "(setq lst (acad_strlsort (cons (get_tile \"tp\") lst))))" "(vlax-ldata-put \"Pline_block\" \"Name\" lst)" "(done_dialog 1)))" ) ) (setq what_next (start_dialog)) (if (= what_next 0) (setq nom nil) ) ) (unload_dialog dcl_id) nom ) Le LISP Pline_Block (13/04/07) ;;; Pline_block -Gilles Chanteau- 13/04/07 ;;; Insère le bloc "pline_block" après sélection d'une polyligne ;;; Attribut 1 : Nom de la pièce ;;; Attribut 2 : Longueur de la polyligne ;;; Attribut 3 : Aire de la polyligne (defun c:pline_block (/ AcDoc Space bloc nom ent obj ins op reg ech id long aire ref) (vl-load-com) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (if (or (tblsearch "BLOCK" (setq bloc "Pline_block")) (findfile (setq bloc "Pline_block.dwg")) ) (progn ;; attribut "nom de la pièce" ;; possibilité de changer le titre de la boite de dialogue "Choisir un nom" (if (not (setq [b]nom[/b] (getname "Choisir un nom"))) (setq nom "") ) (while (not (setq ent (car (entsel))))) (setq obj (vlax-ename->vla-object ent)) (if (= "AcDbPolyline" (vla-get-ObjectName obj)) (progn (if (not (setq ins (getpoint "\nSpécifiez le point d'insertion ou : " ) ) ) (progn (if (= (vla-get-closed obj) :vlax-false) (progn (vla-put-closed obj :vlax-true) (setq op T) ) ) (setq reg (vlax-invoke space 'addRegion (list obj)) ins (vlax-get (car reg) 'Centroid) ) (if op (vla-put-closed obj :vlax-false) ) (vla-delete (car reg)) ) ) (if (not (vlax-ldata-get "Pline_block" "ech")) (vlax-ldata-put "Pline_block" "ech" 1) ) (if (not (setq ech (getreal (strcat "\nEntrez le facteur d'échelle (rtos (vlax-ldata-get "Pline_block" "ech")) ">: " ) ) ) ) (setq ech (vlax-ldata-get "Pline_block" "ech")) (vlax-ldata-put "Pline_block" "ech" ech) ) (setq id (vla-get-ObjectID obj) ;; Attribut périmètre (mm -> m) [b]long[/b] (strcat [surligneur]"% (itoa id) [surligneur]">%).Length \\f \"%lu2%pr2%ct8[0.001]\">%"[/surligneur] ) ;; Attribut surface (mm² -> m²) [b]aire[/b] (strcat [surligneur]"% (itoa id) [surligneur]">%).Area \\f \"%lu2%pr2%ct8[1e-006]\">%"[/surligneur] ) ) (setq ref (vla-InsertBlock Space (vlax-3d-point (trans ins 1 0)) bloc ech ech 1 0.0 ) ) ;; attribution de leur valeur aux attributs (mapcar '(lambda (x y) (vla-put-TextString x y)) (vlax-invoke ref 'GetAttributes) (list [b]nom long aire[/b]) ) (vla-regen AcDoc acActiveViewport) ) (alert "L'objet sélectionné n'est pas une polyligne.") ) ) (alert "Le bloc \"Pline_block\" est introuvable.") ) (princ) ) [Edité le 10/11/2006 par (gile)][Edité le 12/11/2006 par (gile)][Edité le 14/11/2006 par (gile)] [Edité le 13/4/2007 par (gile)]
  11. (gile)

    polyligne 3d avec arc

    Interpolation ??? :casstet: Je ne sais pas ce que c'est...
  12. (gile)

    polyligne 3d avec arc

    Ce que tu as copié est bon mais pas ce que tapes à la ligne de commande. Norm_3pts est une routine qui est appelée par le LISP, mais comme elle sert aussi dans d'autres elle est juste ajoutée au fichier. Pour lancer la commande, il faut taper : Gile3dPoly C'est, comme dans toutes les commandes défine en LISP, ce qui est écrit juste après le c: dans (defun c:Gile3dPoly ...), tu peux changer ce nom en remplaçant Gile3dPoly par ce que tu veux (pas d'espace entre c: et le nom de la commande.
  13. (gile)

    pline_block

    Salut, Il y a eu en effet pas mal de versions pour répondre au désir des uns et des autres : qui veut deux attributs, qui n'en veut qu'un, qui veut des suffixes, qui n'en veut pas, qui veut une rotation ... La "petite dernière" relève plus de l'effet de style, il faut en effet que les deux routines SelByObj et SelPlineByPoint soient chargées mais elle ne fonctionne qu'avec des polylignes fermées (tout ça pour gagner 1 clic). :casstet: La boite de dialogue GetName peut être utilisée avec chacune des versions à condition de faire les modifications citées plus haut et que le fichier getname.lsp soit chargé et que getcnme.dcl soit dans le chemin de recherche, bien sûr.
  14. (gile)

    polyligne 3d avec arc

    Tu dois avoir copier trop ou pas assez, il faut prendre tout le code et seulement le code (ce qui apparaît sur fond de papier. Sinon le reste de la procédure semble bon.
  15. (gile)

    pline_block

    Je l'ai fait parceque je suis suffisament "gamin" pour relever les "défis" de l'hirsute Patrick_35.
  16. (gile)

    pline_block

    Voilà une nouvelle version, avec possibilité de modifier la liste de noms (ajouter/retirer) directement depuis la boite de dialogue. Le DCL : getname:dialog{ label="Choisir un nom"; initial_focus="tp"; :boxed_column{ label="Modifier la liste"; :row{ spacer; :edit_box{ key="tp"; edit_width=20; alignment=left; } spacer; } :row{ :button{ label="Ajouter"; key="add"; } :button{ label="Retirer"; key="del"; } } } spacer_1; :row{ spacer; :popup_list{ key="pop"; width=25; } spacer; } spacer_1; ok_cancel; } Le LISP : ;;; GetName Retourne le nom spécifié ou choisi dans la liste. ;;; Les noms entrés sont ajoutés à la liste. ;;; La liste est conservée dans le dessin. (defun getname (/ lst what_next dcl_id nom) (if (not (vlax-ldata-get "Pline_block" "Name")) (vlax-ldata-put "Pline_block" "Name" '("Entrée" "Séjour" "WC" "Bain")) ) (setq lst (vlax-ldata-get "Pline_block" "Name")) (setq dcl_id (load_dialog "GetName.dcl")) (setq what_next 2) (while (>= what_next 2) (if (not (new_dialog "getname" dcl_id)) (exit) ) (start_list "pop") (mapcar 'add_list lst) (end_list) (action_tile "pop" (strcat "(if (or (= $reason 1) (= $reason 4))" "(set_tile \"tp\" (nth (atoi $value) lst)))" ) ) (action_tile "add" (strcat "(if (not (member (get_tile \"tp\") lst))" "(setq lst (cons (get_tile \"tp\") lst)))" "(done_dialog 2)" ) ) (action_tile "del" (strcat "(setq lst (vl-remove (get_tile \"tp\") lst))" "(done_dialog 5)" ) ) (action_tile "accept" (strcat "(setq nom (nth (atoi (get_tile \"pop\")) lst))" "(vlax-ldata-put \"Pline_block\" \"Name\" lst)" "(done_dialog 1)" ) ) (setq what_next (start_dialog)) (if (= what_next 0) (setq nom nil) ) ) (unload_dialog dcl_id) nom )
  17. (gile)

    pline_block

    Tu as de la chance que j'ai du temps... :cool: Voici une petite boite de dialogue pour choisir un nom dans une liste déroulante ou le rentrer au clavier. Les nouveaux noms entrés sont ajoutés à la liste. La liste est conservée dans le dessin. Le fichier DCL à enregistrer sous GetName.dcl dans un dossier du chemin de recherche des fichiers de support. getname:dialog{ label="Choisir un nom"; initial_focus="pop"; :boxed_column{ :row{ :column{ spacer; :text{ label="Nom :"; alignment=left; } } } :edit_box{ key="tp"; edit_width=25; } :popup_list{ key="pop"; edit_width=25; } spacer; } ok_cancel; } Le LISP, la [surligneur]liste d'origine[/surligneur] peut être modifiée. ;;; GetName Retourne le nom spécifié ou choisi dans la liste. ;;; Les noms entrés sont ajoutés à la liste. ;;; La liste est conservée dans le dessin. (defun getname (/ lst what_next dcl_id nom) (if (not (vlax-ldata-get "Pline_block" "Name")) (vlax-ldata-put "Pline_block" "Name" '([surligneur]"Entrée" "Séjour" "WC" "Bain"[/surligneur])) ) (setq dcl_id (load_dialog "GetName.dcl")) (setq what_next 2) (while (>= what_next 2) (if (not (new_dialog "getname" dcl_id)) (exit) ) (setq lst (vlax-ldata-get "Pline_block" "Name")) (start_list "pop") (mapcar 'add_list lst) (end_list) (action_tile "tp" "(setq nom (get_tile \"tp\")) (done_dialog 3)" ) (action_tile "accept" (strcat "(progn" "(setq nom (nth (atoi (get_tile \"pop\")) lst)))" "(done_dialog 1))" ) ) (setq what_next (start_dialog)) (cond ((= what_next 3) (vlax-ldata-put "Pline_block" "Name" (cons nom lst)) (setq what_next 1) ) ((= what_next 0) (setq nom nil) ) ) ) (unload_dialog dcl_id) nom ) Dans ta version de Pline_Block, remplace : (initget 1) (setq nom (getstring T "\nNom de la pièce: ")) par : (if (not (setq nom (getname))) (setq nom "") )
  18. (gile)

    Raccords sur polylignes 3D

    Version 1.2 Les dernières valeurs entrées pour le nombre de segments et le rayon des arcs sont conservées dans le dessin et seront reproposées par défaut au prochain lancement de la commande, et ce, même après fermeture et enregistrement du dessin.
  19. Salut, solprof est une commande externe (Externally Defined Command) Il faut que l'arx soit chargé, donc faire d'abord : (if (not (member "acsolids.arx" (arx))) (arxload "acsolids") ) et ensuite : (c:solprof ss1 "_y" "_y" "_y")
  20. Salut, Si tu utilises Pline_block, le champ est un attribut du bloc, quand tu fais une extraction c'est al valeur de l'attribut qui est extraite et avec le suffixe cette valeur ne peut pas être considérée comme un nombre. C'est pour ça que je continue à penser qu'il est préférable de ne pas mettre de suffixe dans le champ mais plutôt de les mettre comme objet texte ou attribut constant dans le bloc. Par contre, si dans un tableau AutoCAD, tu insère un champ avec suffixe, tu pourras dans ce tableau faire la somme.
  21. Si ce LISP t'intéresse je te conseille de copier cette version, c'est la plus aboutie et les précédentes sont plus un dialogue entre "lispeurs" (Bred et moi). Toutefois, comme le dit Boris cette routine crée une région suivant le contour d'une polyligne de largeur constante, et il ne me semble pas que ce soit ta demande. Si j'ai bien compris ce que tu veux faire la solution de pingoo666 me semble la meilleure, tu fais un rectangle ou une polyligne autour du contour que tu veux récupérer, puis tu lances CONTOUR et tu cliques un point entre la poly que tu viens de dessiner et le contour que tu veux récupérer, tu n'as ensuite qu'à effacer la poly que tu as dessiné et celle qui s'est faites par dessus. [Edité le 9/11/2006 par (gile)]
  22. (gile)

    Champs

    Je crois que j'avais lu un peu trop vite la question. Un suffixe par défaut, je ne pense pas qu'on puisse, mais avec un petitLISP tu peux te faire une commande pour le champ "aire" d'une polyligne avec un suffixe : m² Voici un exemple : (defun c:champ-aire (/ ss obj ins id) (vl-load-com) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (if (setq ss (ssget "_:S:E" '((0 . "LWPOLYLINE")))) (progn (initget 1) (setq ins (getpoint "\nSpécifiez le point d'insertion: ") obj (vlax-ename->vla-object (ssname ss 0)) id (vla-get-ObjectID obj) ) (vla-addMtext Space (vlax-3d-point ins) 0.0 (strcat "% (itoa id) ">%).Area \\f \"%lu2%pr2%ps[, m²]\">%" ) ) ) ) (princ) ) Si tu veux ajouter ou modifier des options, vois ce message.
  23. (gile)

    Champs

    Salut, Dans la boite de dialogue "Champ" clique sur le bouton "Outils supplémentaires" et dans la nouvelle boite qui s'ouvre, tu ajoutes ton suffixe.
  24. (gile)

    Polyligne 3B

    Re, Pour une extraction vers un fichier Excel : (defun c:3dpoly2Xl (/ ss file ent pts) (if (and (setq ss (ssget "_:S:E" '((0 . "POLYLINE") (-4 . "&") (70 . 8)))) (setq file (getfiled "Choisir ou créer un fichier" "" "xls" 1)) ) (progn (setq ent (ssname ss 0) desc (open file "a") ) (while (setq pt (cdr (assoc 10 (entget (entnext ent))))) (setq ent (entnext ent) pts (cons pt pts) ) ) (princ "X\tY\tZ\n" desc) (repeat (setq n (length pts)) (setq n (1- n)) (mapcar '(lambda (x) (princ x desc) (nth n pts))) (princ "\n" desc) ) (close desc) ) ) (princ) ) PS : si tu veux mettre les coordonnées de plusieurs polylignes dans le même fichier à la question "bla-bla.xls existe déjà. Voulez vous le remplacer ?" réponds "oui" et les coordonnées de la nouvelle polyligne seront rajoutées à la suite.[Edité le 9/11/2006 par (gile)] [Edité le 9/11/2006 par (gile)]
  25. (gile)

    Polyligne 3B

    Salut, Peut tu préciser, extraire vers où ? la fenêtre de texte, un fichier texte, un fichier Excel ? Pour avoir les coordonnées d'une poly 3D dans la fenêtre de texte, charge ce petit LISP et tape 3dpoly2lst à la ligne de commande. (defun 3dpoly_pts (ent / pt pts) (while (setq pt (cdr (assoc 10 (entget (entnext ent))))) (setq ent (entnext ent) pts (cons pt pts) ) ) (reverse pts) ) (defun c:3dpoly2lst(/ ss) (if (setq ss (ssget "_:S:E" '((0 . "POLYLINE") (-4 . "&") (70 . 8)))) (mapcar 'print (3dpoly_pts (ssname ss 0))) ) (textscr) (princ) )
×
×
  • 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é