Aller au contenu

nouveau defi


Invité ingoenius

Messages recommandés

Invité ingoenius
Posté(e)

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)

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)

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))
)  

)


Posté(e)

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

 

./__\.
(.°=°.)
Posté(e)

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)

Posté(e)

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)

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,

Posté(e)
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

 

./__\.
(.°=°.)

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é