Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

Je suis nouveau sur le forum, je rencontre un problème que je pense pourrait être résolu en lisp.

 

Je voudrais modifier le lisp de Gile spécial sélection pour y ajouter la possibilité de sélectionné tous les blocs se trouvant sur une polyligne (bloc tcpoint créer avec instopo)

 

Pour pousser plus loin la même action, mais sur toutes les polylignes se trouvant dans le même calque.

 

Encore plus loin déplacer ces blocs dans le même calque que les polylignes.

 

J'aimerais le faire moi-même, mais je viens tout juste de me décider de lire l'introduction a autolisp de Gile, alors au passage si vous pouvez me donner quelque bonne adresse pour débuter.

 

Merci à tous

Posté(e)

Bonjour,

 

Alors voila j'ai trouver ce code qui fait appel à listpol de Gille:

 

defun c:test (/ fence)

(setq fence (listpol (car (entsel "\nSelectionnez le polyligne: "))))

(sssetfirst nil (ssget "_F" fence '((0 . "INSERT"))))

)

 

;;; listpol by Gille Chanteau ;

;;; Returns the vertices list of any type of polyline (WCS coordinates) ;

;;; ;

;;; Argument ;

;;; en, a polyline (ename or vla-object) ;

 

(defun listpol (en / i p l)

(setq i (if (vlax-curve-IsClosed en)

(vlax-curve-getEndParam en)

(+ (vlax-curve-getEndParam en) 1)

)

)

(while (setq p (vlax-curve-getPointAtParam en (setq i (1- i))))

(setq l (cons (trans p 0 1 ) l))

)

)

 

je voudrais pouvoir effectuer cette opération sur la totalité des polyligne d'un calque ou y intégré le code suivant:

(or

(setq js (ssget "_I"))

(setq js (ssget "_P"))

)

(cond

(js

(sssetfirst nil js)

(initget "Existant Nouveau _Existent New")

(if (eq (getkword "\nTraiter jeu de sélection [Existant/Nouveau] <Existant>: ") "New")

(progn (sssetfirst nil nil) (setq js (ssadd) js (ssget)))

)

)

(T (setq js (ssget)))

)

 

merci pour votre aide.

Posté(e)

Bonjour

 

En faisant ta fonction TEST comme ceci:

(defun c:test ( / js js_all n fence js_ins nb)
 (princ "\nSélectionnez les polylignes: ")
 (setq js (ssget '((0 . "LWPOLYLINE"))) js_all (ssadd))
 (cond
   (js
     (repeat (setq n (sslength js))
       (setq
         fence (listpol (ssname js (setq n (1- n))))
         js_ins (ssget "_F" fence '((0 . "INSERT")))
       )
       (cond
         (js_ins
           (repeat (setq nb (sslength js_ins))
             (ssadd (ssname js_ins (setq nb (1- nb))) js_all)
           )
         )
       )
     )
     (sssetfirst nil js_all)
   )
 )
)

;;; listpol by Gille Chanteau ;
;;; Returns the vertices list of any type of polyline (WCS coordinates) ;
;;; ;
;;; Argument ;
;;; en, a polyline (ename or vla-object) ;

(defun listpol (en / i p l)
 (setq i
   (if (vlax-curve-IsClosed en)
     (vlax-curve-getEndParam en)
     (+ (vlax-curve-getEndParam en) 1)
   )
 )
 (while (setq p (vlax-curve-getPointAtParam en (setq i (1- i))))
   (setq l (cons (trans p 0 1 ) l))
 )
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

j'ai essayé une nouvelle approche mais ça ne fonctionne pas;

 

(defun c:test (/ js fence ss i pl)

(or

(setq js (ssget "_I"))

(setq js (ssget "_P"))

)

(cond

(js

(sssetfirst nil js)

(initget "Existant Nouveau _Existent New")

(if (eq (getkword "\nTraiter jeu de sélection [Existant/Nouveau] <Existant>: ") "New")

(progn (sssetfirst nil nil) (setq js (ssadd) js (ssget)))

)

)

(T (setq js (ssget)))

)

(cond

(js

(setq fence (listpol(ssname js (setq n (1- n)))))

setq ss (ssget "_F" fence '((0 . "INSERT"))))

(repeat (setq i (sslength ss))

(setq pl (cons (cdr (assoc 10 (entget (ssname ss (setq i (1- i)))))) pl))

)

)

)

 

;;; listpol by Gille Chanteau ;

;;; Returns the vertices list of any type of polyline (WCS coordinates) ;

;;; ;

;;; Argument ;

;;; en, a polyline (ename or vla-object) ;

 

(defun listpol (en / i p l)

(setq i (if (vlax-curve-IsClosed en)

(vlax-curve-getEndParam en)

(+ (vlax-curve-getEndParam en) 1)

)

)

(while (setq p (vlax-curve-getPointAtParam en (setq i (1- i))))

(setq l (cons (trans p 0 1 ) l))

)

)

Posté(e)

Pour inclure la sélection Implicite ou Précédente, ce n'est pas bien difficile a intégrer au code!

 

Je me suis aussi aperçu que tu as aussi sollicité de l'aide sur des forum anglophone, ce qui n'a pas motivé une réponse rapide de ma part et ce qui me fais penser que tu ne cherche pas à construire mais avoir une réponse prête à l'emploi.

 

Bon voici malgré tout la petite modification incluse dans le code complet.

 

(defun c:test ( / js js_all n fence js_ins nb)
 (princ "\nSélectionnez les polylignes: ")
 (or
   (setq js (ssget "_I" '((0 . "LWPOLYLINE"))))
   (setq js (ssget "_P" '((0 . "LWPOLYLINE"))))
 )
 (cond
   (js
     (sssetfirst nil js)
     (initget "Existant Nouveau _Existent New")
     (if (eq (getkword "\nTraiter jeu de sélection [Existant/Nouveau] <Existant>: ") "New")
       (progn (sssetfirst nil nil) (setq js (ssadd) js (ssget)))
     )
   )
   (T
     (setq js (ssget '((0 . "LWPOLYLINE"))))
   )
 )
 (setq js_all (ssadd))
 (cond
   (js
     (repeat (setq n (sslength js))
       (setq
         fence (listpol (ssname js (setq n (1- n))))
         js_ins (ssget "_F" fence '((0 . "INSERT")))
       )
       (cond
         (js_ins
           (repeat (setq nb (sslength js_ins))
             (ssadd (ssname js_ins (setq nb (1- nb))) js_all)
           )
         )
       )
     )
     (sssetfirst nil js_all)
   )
 )
 (prin1)
)

;;; listpol by Gille Chanteau ;
;;; Returns the vertices list of any type of polyline (WCS coordinates) ;
;;; ;
;;; Argument ;
;;; en, a polyline (ename or vla-object) ;

(defun listpol (en / i p l)
 (setq i
   (if (vlax-curve-IsClosed en)
     (vlax-curve-getEndParam en)
     (+ (vlax-curve-getEndParam en) 1)
   )
 )
 (while (setq p (vlax-curve-getPointAtParam en (setq i (1- i))))
   (setq l (cons (trans p 0 1 ) l))
 )
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Merci pour le code modifier.

 

Je ne cherche pas de code tout prêt, mais des informations pour apprendre à coder, effectivement j'ai posé un sujet sur un forum anglophone, mais je n'ai toujours pas la solution. La personne qui m'aide à coder une version différente de ton code (sélectionne le bloc uniquement par son point d'insertion) me donne la marche à suivre et des informations sur mes erreurs.

 

Je souhaite vraiment apprendre, tous les soirs je travaille dessus avec le guide du développeur d' autodesk et l'introduction de Gile.

 

Pour finir ton code m'a deja servi mais mon but, comme expliqué plus haut est de le faire moi meme avec les condition qe j'ai fixer.

 

En tout cas merci, j'espere ne pas t'avoir froissé et pouvoir un jour beneficié de tes connaissances.

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é