Gilles1 Posté(e) le 10 juin 2010 Posté(e) le 10 juin 2010 Bonjour à tous. J'ai très souvent besoin de dessiner des croix orientées à 45° centrées dans des cercles de différents diamètres. Ceci pour désigner les alvéoles occupées au sein d'un masque de chambre de réseau. Exemple: http://img217.imageshack.us/img217/796/capture01qe.jpg Je voudrais créer un bouton qui insère, centre, oriente et ajuste une croix dans l'alvéole, ou mieux encore dans plusieurs alvéoles à sélectionner. Qu'est-ce que vous me conseillez ?Une macro ?Un lisp ? J'ai essayé via l'enregistreur d'actions, mais la croix est tjrs. placée au même point... :casstet: Pas concluant, donc.Ou alors j'ai raté qquechose. Merci de me donner une piste.
lecrabe Posté(e) le 10 juin 2010 Posté(e) le 10 juin 2010 Hello Je pense qu'il faut un Lisp pour pouvoir s'ajuster a TOUS les cas de figure et surtout permettre une selection de N objets (cercles) ! D'ailleurs si quelqu'un developpe ce petit programme, je suggere une amelioration : Traiter les cercles et les polylignes en tracant une ligne du point 1 au point 3 et du point 2 au point 4, ainsi on traitera AUSSI les polylignes en forme de carre ou rectangle car on n'utilise pas toujours des cercles Merci d'avance, Le Decapode Autodesk Expert Elite Team
Titifonky Posté(e) le 10 juin 2010 Posté(e) le 10 juin 2010 Bonsoir, Un début ? (defun c:croix (/ sel i obj ent) ;; Trace une croix dans le cercle (defun trc_cercle (obj) (setq d (/ (cdr (assoc '40 obj)) (sqrt 2.0)) ct (cdr (assoc '10 obj))) (entmake (list '(0 . "LINE") (cons '10 (mapcar '+ ct (list d d 0))) (cons '11 (mapcar '- ct (list d d 0))) ) ) (entmake (list '(0 . "LINE") (cons '10 (mapcar '+ ct (list d (* -1 d) 0))) (cons '11 (mapcar '- ct (list d (* -1 d) 0))) ) ) ) ;; Trace une croix dans un rectangle (defun trc_rect (obj) (setq obj (vl-remove-if-not '(lambda (x) (= (car x) 10)) obj)) (entmake (list '(0 . "LINE") (nth 0 obj) (cons '11 (cdr (nth 2 obj))) ) ) (entmake (list '(0 . "LINE") (nth 1 obj) (cons '11 (cdr (nth 3 obj))) ) ) ) ;; Fonction principale (setq i -1 sel (ssget '((-4 . " (0 . "CIRCLE") (0 . "LWPOLYLINE") (-4 . "OR>") ) ) ) (if sel (while (setq i (1+ i) obj (ssname sel i)) (setq obj (entget obj) ent (cdr (assoc '0 obj))) (cond ((= ent "CIRCLE") (trc_cercle obj)) ((= ent "LWPOLYLINE") (trc_rect obj)) ) ) ) (princ) ) Sujet à déplacer dans le forum "Débuter en lisp" ? www.le-metal.net, sur la métallerie
lecrabe Posté(e) le 11 juin 2010 Posté(e) le 11 juin 2010 Hello Merci beaucoup, ton Lisp marche parfaitement sur MAP 3D 2006 et donc on peut supposer qu'il fonctionnera tout aussi bien sur les versions 2007-2001 ! A verifier quand meme ? Encore merci pour tes efforts, Bon WE, Le Decapode Autodesk Expert Elite Team
Gilles1 Posté(e) le 11 juin 2010 Auteur Posté(e) le 11 juin 2010 Merci pour ce lisp, Titifonky Il fonctionne parfaitement sur autocad 2009 et donne le résultat escompté. Bonne journée à tous.
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