Invité ingoenius Posté(e) le 27 mars 2006 Posté(e) le 27 mars 2006 bonjours, vus la rapidité et competence du forum je vous soumet une nouvelle requette , pour une routine lisp a venir (routine pour cree des ponts lumieres) je voudrais cree une routine qui en utilisant la commande _cylindre en selectionnant une ou plusieurs lignes me demande le rayon du cilindre (une seule fois) et qui me dessine sur chaque ligne un cilindre avec le rayon donne et avec les centre des cercles superieur et inferieur sur les extremitees des lignes selectionnes auparavant de facon de passer d'un trellis filaire a un trelli 3d constitue de ces cilindres, c'est faisable??? encore merci a tous je suis en train d'essaiyer, mais le gros probleme est a partir de la selection sauver la liste de chaque ligne et les coordonner de chaque extremite de ligne pour apres appliquer le script a une a une sur ttoute les lignes , j'aspere de m'etre arrivé a m'expliquer clairement [Edité le 27/3/2006 par ingoenius]
Invité ingoenius Posté(e) le 27 mars 2006 Posté(e) le 27 mars 2006 j'ai commencée pour l'instant ca fonctionne seulement sur une seule ligne, commene faire l'iteration sur toutes les lignes selectionnees?????? (defun C:XX () (setq Rayon (getdist "\nRayon des cylindres?")) ;(setq Rayon 0.008) ;(setq nome (ssget )) (setq nome (car (entsel "\nSelect Lines"))) (setq DTIPO (entget nome)) (setq TIPO (cdr (assoc 0 DTIPO))) ;determine le type d'objet (setq dati (entget nome)) ;dati linea (setq Dep (cdr (assoc 10 dati))); list coordonne depart (setq Fin (cdr (assoc 11 dati))); list coordonne fin (command "cylindre" Dep Rayon "C" Fin "") )
Invité ingoenius Posté(e) le 27 mars 2006 Posté(e) le 27 mars 2006 Ca y ' est ji suis arrivéé tout seul ! ici le code si peut servir a quelqun ;-) ;creation de cilindres sur lignes selectionnees et orientees (defun C:XTRUSS () (setq Rayon (getdist "\nRayon des cylindres?")) ;(setq Rayon 0.008) (setq INDEX 0) (setq SS (ssget (list (cons 0 "line"))));selctionne que li lignes (setq Quanti (sslength ss)); compte des lignes (repeat Quanti (setq EL (entget (SSNAME SS INDEX))) (setq Dep (cdr (assoc 10 EL))); list coordonne depart (setq Fin (cdr (assoc 11 EL))); list coordonne fin (command "cylindre" Dep Rayon "C" Fin "") (setq INDEX (1+ INDEX)) ) )
Tramber Posté(e) le 27 mars 2006 Posté(e) le 27 mars 2006 Itération sur un jeu de selection : (defun C:XX () (setq Rayon (getdist "\nRayon des cylindres?")) (princ "\nSelect Lines") (setq nome (ssget '((0 . "LINE"))) compt 0) (repeat(sslength nome) (setq dati (entget(ssname nome compt)) Dep (cdr (assoc 10 dati)) Fin (cdr (assoc 11 dati))) (command "cylindre" Dep Rayon "C" Fin "") (setq compt(1+ compt)) ) ) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
zebulon_ Posté(e) le 27 mars 2006 Posté(e) le 27 mars 2006 Traber était plus rapide... (defun C:XX () (setvar "cmdecho" 0) (command "_.undo" "_group") (setq Rayon (getdist "\nRayon des cylindres?")) (setq ss (ssget '(( 0 . "LINE")))) (if ss (progn (setq SSL (sslength SS)) (setq I 0) (while (< I SSL) (setq E (ssname SS I)) (setq A (entget E)) (setq I (+ I 1)) (setq Dep (cdr (assoc 10 A))); list coordonne depart (setq Fin (cdr (assoc 11 A))); list coordonne fin (command "_cylinder" Dep Rayon "_C" Fin) ) ) ) (command "_.undo" "_end") (princ) ) C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
(gile) Posté(e) le 27 mars 2006 Posté(e) le 27 mars 2006 Encore une routine élégante piquée à Reini Urban (Faq AutoLISP). : ;;; Applique une fonction a chaque entité de ss, dans un ordre inverse. ;;; [renommé de SSAPPLY en SSMAP pour se conformer au nom de stdlib] ;;; Ex: (ssmap 'entupd (ssget)) ; régénère seulement quelques entités (defun SSMAP (fun ss / n) (if (= 'PICKSET (type ss)) (repeat (setq n (sslength ss)) (apply fun (list (ssname ss (setq n (1- n))))) ) ) ) Dans le cas présent : (defun c:xx (/ rad) (command "_.undo" "_begin") (setq rad (getdist "\nRayon des cylindres?")) (SSMAP '(lambda (x) (command "_.cylinder" (trans (cdr (assoc 10 (entget x))) 0 1) rad "_c" (trans (cdr (assoc 11 (entget x))) 0 1) ) ) (ssget '((0 . "LINE"))) ) (command "_.undo" "_end") (princ) ) [Edité le 27/3/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Invité ingoenius Posté(e) le 28 mars 2006 Posté(e) le 28 mars 2006 merci a tous, j'ai une derniere question, est possible a partir de autolisp d'inserer un bloc qui est a l'interieur d'un fichier ou il y a toute une librerie de differents blocs? ou il faut absolument avoir un wbloc? (soit un bloc par fichiers?) merci,
Tramber Posté(e) le 28 mars 2006 Posté(e) le 28 mars 2006 est possible a partir de autolisp d'inserer un bloc qui est a l'interieur d'un fichier ou il y a toute une librerie de differents blocs? ou il faut absolument avoir un wbloc? (soit un bloc par fichiers?) C'est possible, si le fichier contenant les blocs est ouvert. Mais c'est quand même de la programmation de haut vol. Je ne te le conseille pas si tu débutes et si tu ne connais pas le Visual Lisp. Il me faudrait qqes heures pour mettre le truc au point avec mes modestes connaissances. Sinon, une toute petite remarque, poste dans "débuter en lisp", ici, c'est pour publier des routines complètes ! Salut Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
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