Bonjour, je viens de mettre à jour vers Autocad LT 2024, je chercher une lisp pour séparer une intersection. En décalant de 1.5mm de chaque coté l'intersection.
Si vous pouvez maider sur ce sujet, je ne connait pas du tout les lisp.
En espérant avoir été explicite.
Le titre du sujet a été modifié par un modérateur pour faciliter la recherche. Titre original:
Coupure avec décalage des sections coupées
Résolu ! Accéder à la solution.
Bonjour, je viens de mettre à jour vers Autocad LT 2024, je chercher une lisp pour séparer une intersection. En décalant de 1.5mm de chaque coté l'intersection.
Si vous pouvez maider sur ce sujet, je ne connait pas du tout les lisp.
En espérant avoir été explicite.
Le titre du sujet a été modifié par un modérateur pour faciliter la recherche. Titre original:
Coupure avec décalage des sections coupées
Résolu ! Accéder à la solution.
Résolu par CADaSchtroumpf. Accéder à la solution.
@be5RK2AV a écrit :
Bonjour, je viens de mettre à jour vers Autocad LT 2024, je chercher une lisp pour séparer une intersection. En décalant de 1.5mm de chaque coté l'intersection.
Si vous pouvez maider sur ce sujet, je ne connait pas du tout les lisp.
En espérant avoir été explicite.
Bonjour @be5RK2AV,
Avant d'utiliser un lisp, peut être existe-t-il une commande native à AutoCAD ou AutoCAD LT 2024 pour faire ce que vous souhaitez faire.
Que représente la ligne bleue puis la ligne magenta ?
@be5RK2AV a écrit :
Bonjour, je viens de mettre à jour vers Autocad LT 2024, je chercher une lisp pour séparer une intersection. En décalant de 1.5mm de chaque coté l'intersection.
Si vous pouvez maider sur ce sujet, je ne connait pas du tout les lisp.
En espérant avoir été explicite.
Bonjour @be5RK2AV,
Avant d'utiliser un lisp, peut être existe-t-il une commande native à AutoCAD ou AutoCAD LT 2024 pour faire ce que vous souhaitez faire.
Que représente la ligne bleue puis la ligne magenta ?
Bonjour,
J'ai ceci qui fonctionne avec des lignes essentiellement verticales et horizontales...
Cela répond t-il a ta demande?
(defun c:cut_line ( / js_all js_h js_v tmp_js tmp_lst lst_exth lst_extv nb_all name_ent dxf_ent dxf_10 dxf_11 gap nb_v lst_pt_brk v_name dxf_entv lst_int lst_pt_make)
(princ "\nSélectionner les lignes pour couper les lignes verticales ou horizontales: ")
(setq js_all (ssget '((0 . "LINE"))) js_h (ssadd) js_v (ssadd) lst_exth nil lst_extv nil)
(cond
(js_all
(repeat (setq nb_all (sslength js_all))
(setq
name_ent (ssname js_all (setq nb_all (1- nb_all)))
dxf_ent (entget name_ent)
dxf_10 (cdr (assoc 10 dxf_ent))
dxf_11 (cdr (assoc 11 dxf_ent))
)
(cond
((equal (cadr (trans dxf_10 0 1)) (cadr (trans dxf_11 0 1)) 1E-5)
(setq js_h (ssadd name_ent js_h) lst_exth (cons (list dxf_10 dxf_11) lst_exth))
)
((equal (car (trans dxf_10 0 1)) (car (trans dxf_11 0 1)) 1E-5)
(setq js_v (ssadd name_ent js_v) lst_extv (cons (list dxf_10 dxf_11) lst_extv))
)
)
)
)
)
(cond
((and js_h js_v)
(initget "Verticales Horizontales")
(if (eq (getkword "\nCouper avec les lignes [Verticales/Horizontales] lines? <Horizontales>: ") "Verticales")
(setq
tmp_js js_h
tmp_lst lst_exth
js_h js_v
lst_exth lst_extv
js_v tmp_js
lst_extv tmp_lst
)
(setq tmp_js nil tmp_lst nil)
)
(initget 4)
(setq gap (getdist (strcat "\nEntrer l'écart? <" (rtos (getvar "USERR3")) ">: ")))
(if gap (setvar "USERR3" gap))
(repeat (setq nb_v (sslength js_v))
(setq
lst_pt_brk nil
v_name (ssname js_v (setq nb_v (1- nb_v)))
dxf_entv (entget v_name)
dxf_10 (cdr (assoc 10 dxf_entv))
dxf_11 (cdr (assoc 11 dxf_entv))
lst_int (vl-remove nil (mapcar '(lambda (x) (inters dxf_10 dxf_11 (car x) (cadr x) T)) lst_exth))
)
(foreach xint lst_int
(if (member xint (apply 'append (if tmp_lst lst_exth lst_extv)))
(setq lst_int (vl-remove xint lst_int))
)
)
(cond
(lst_int
(mapcar
'(lambda (el)
(setq
lst_pt_brk
(cons
(polar el (+ (atan (/ (cadr (getvar "UCSXDIR")) (car (getvar "UCSXDIR")))) (if tmp_js 0 (* pi 0.5))) (getvar "USERR3" ))
(cons
(polar el (+ (atan (/ (cadr (getvar "UCSXDIR")) (car (getvar "UCSXDIR")))) (if tmp_js pi (* pi 1.5))) (getvar "USERR3" ))
lst_pt_brk
)
)
)
)
lst_int
)
(setq lst_pt_make (vl-sort (cons dxf_11 (cons dxf_10 lst_pt_brk)) '(lambda (e1 e2) (if tmp_js (< (car e1) (car e2)) (< (cadr e1) (cadr e2))))))
(while lst_pt_make
(entmake
(list
(assoc 0 dxf_entv)
'(100 . "AcDbEntity")
(assoc 67 dxf_entv)
(assoc 410 dxf_entv)
(assoc 8 dxf_entv)
(if (assoc 62 dxf_entv) (assoc 62 dxf_entv) '(62 . 256))
(if (assoc 6 dxf_entv) (assoc 6 dxf_entv) '(6 . "BYLAYER"))
(if (assoc 48 dxf_entv) (assoc 48 dxf_entv) '(48 . 1.0))
(if (assoc 370 dxf_entv) (assoc 370 dxf_entv) '(370 . -1))
'(100 . "AcDbLine")
(cons 10 (car lst_pt_make))
(cons 11 (cadr lst_pt_make))
(assoc 210 dxf_entv)
)
)
(setq lst_pt_make (cddr lst_pt_make))
)
(entdel v_name)
)
)
)
)
)
(prin1)
)
Bonjour,
J'ai ceci qui fonctionne avec des lignes essentiellement verticales et horizontales...
Cela répond t-il a ta demande?
(defun c:cut_line ( / js_all js_h js_v tmp_js tmp_lst lst_exth lst_extv nb_all name_ent dxf_ent dxf_10 dxf_11 gap nb_v lst_pt_brk v_name dxf_entv lst_int lst_pt_make)
(princ "\nSélectionner les lignes pour couper les lignes verticales ou horizontales: ")
(setq js_all (ssget '((0 . "LINE"))) js_h (ssadd) js_v (ssadd) lst_exth nil lst_extv nil)
(cond
(js_all
(repeat (setq nb_all (sslength js_all))
(setq
name_ent (ssname js_all (setq nb_all (1- nb_all)))
dxf_ent (entget name_ent)
dxf_10 (cdr (assoc 10 dxf_ent))
dxf_11 (cdr (assoc 11 dxf_ent))
)
(cond
((equal (cadr (trans dxf_10 0 1)) (cadr (trans dxf_11 0 1)) 1E-5)
(setq js_h (ssadd name_ent js_h) lst_exth (cons (list dxf_10 dxf_11) lst_exth))
)
((equal (car (trans dxf_10 0 1)) (car (trans dxf_11 0 1)) 1E-5)
(setq js_v (ssadd name_ent js_v) lst_extv (cons (list dxf_10 dxf_11) lst_extv))
)
)
)
)
)
(cond
((and js_h js_v)
(initget "Verticales Horizontales")
(if (eq (getkword "\nCouper avec les lignes [Verticales/Horizontales] lines? <Horizontales>: ") "Verticales")
(setq
tmp_js js_h
tmp_lst lst_exth
js_h js_v
lst_exth lst_extv
js_v tmp_js
lst_extv tmp_lst
)
(setq tmp_js nil tmp_lst nil)
)
(initget 4)
(setq gap (getdist (strcat "\nEntrer l'écart? <" (rtos (getvar "USERR3")) ">: ")))
(if gap (setvar "USERR3" gap))
(repeat (setq nb_v (sslength js_v))
(setq
lst_pt_brk nil
v_name (ssname js_v (setq nb_v (1- nb_v)))
dxf_entv (entget v_name)
dxf_10 (cdr (assoc 10 dxf_entv))
dxf_11 (cdr (assoc 11 dxf_entv))
lst_int (vl-remove nil (mapcar '(lambda (x) (inters dxf_10 dxf_11 (car x) (cadr x) T)) lst_exth))
)
(foreach xint lst_int
(if (member xint (apply 'append (if tmp_lst lst_exth lst_extv)))
(setq lst_int (vl-remove xint lst_int))
)
)
(cond
(lst_int
(mapcar
'(lambda (el)
(setq
lst_pt_brk
(cons
(polar el (+ (atan (/ (cadr (getvar "UCSXDIR")) (car (getvar "UCSXDIR")))) (if tmp_js 0 (* pi 0.5))) (getvar "USERR3" ))
(cons
(polar el (+ (atan (/ (cadr (getvar "UCSXDIR")) (car (getvar "UCSXDIR")))) (if tmp_js pi (* pi 1.5))) (getvar "USERR3" ))
lst_pt_brk
)
)
)
)
lst_int
)
(setq lst_pt_make (vl-sort (cons dxf_11 (cons dxf_10 lst_pt_brk)) '(lambda (e1 e2) (if tmp_js (< (car e1) (car e2)) (< (cadr e1) (cadr e2))))))
(while lst_pt_make
(entmake
(list
(assoc 0 dxf_entv)
'(100 . "AcDbEntity")
(assoc 67 dxf_entv)
(assoc 410 dxf_entv)
(assoc 8 dxf_entv)
(if (assoc 62 dxf_entv) (assoc 62 dxf_entv) '(62 . 256))
(if (assoc 6 dxf_entv) (assoc 6 dxf_entv) '(6 . "BYLAYER"))
(if (assoc 48 dxf_entv) (assoc 48 dxf_entv) '(48 . 1.0))
(if (assoc 370 dxf_entv) (assoc 370 dxf_entv) '(370 . -1))
'(100 . "AcDbLine")
(cons 10 (car lst_pt_make))
(cons 11 (cadr lst_pt_make))
(assoc 210 dxf_entv)
)
)
(setq lst_pt_make (cddr lst_pt_make))
)
(entdel v_name)
)
)
)
)
)
(prin1)
)
Merci de votre retour, Les lignes représente des tuyauteries sur un schéma PID.
Il y a pas mal de lignes qui s'entrecroisent, est faire des décalages de 1.5 de chaque coté d'une intersection est assez long. Donc comme la version 2024 prend en charge quelque lisp je me demandais si il été possible d'en intégré pour cette tache.
Merci de votre retour, Les lignes représente des tuyauteries sur un schéma PID.
Il y a pas mal de lignes qui s'entrecroisent, est faire des décalages de 1.5 de chaque coté d'une intersection est assez long. Donc comme la version 2024 prend en charge quelque lisp je me demandais si il été possible d'en intégré pour cette tache.
Merci de votre retour, je suis novice sur le sujet des lisp et ne sais pas comment les lancer, je l'ai bien intégré avec Appload, mais je ne sais pas comment exécuter cette fonction.
Est ce que vous pouvez m'indiquer la procédure svp ?
Merci de votre retour, je suis novice sur le sujet des lisp et ne sais pas comment les lancer, je l'ai bien intégré avec Appload, mais je ne sais pas comment exécuter cette fonction.
Est ce que vous pouvez m'indiquer la procédure svp ?
Bonjour,
J'ai une solution qui permet de ne pas s'occuper des coupures autour des symboles ou des "PONTS" (coupure)...
C'est simplement la manière de créer les BLOCS qui va faire le JOB...
Pourrais-tu publier un extrait et je te fais un exemple. En indiquant pour quelques symboles le périmètre de "coupure" souhaité...
Merci.
Christian
Christian REB
Bonjour,
J'ai une solution qui permet de ne pas s'occuper des coupures autour des symboles ou des "PONTS" (coupure)...
C'est simplement la manière de créer les BLOCS qui va faire le JOB...
Pourrais-tu publier un extrait et je te fais un exemple. En indiquant pour quelques symboles le périmètre de "coupure" souhaité...
Merci.
Christian
Christian REB
Bonjour, je ne suis pas sur de comprendre.
Les lignes ne sont pas présente dans les bloc, elles représentes des tuyauteries.
La coupure me permettrai d'éviter de faire un décalage de 1.5mm de chaque coté de la ligne, puis un ajustement de la ligne coupé. Lorsque j'ai seulement une dizaine de coupure ce n'est pas gênant, mais avec quelques centaines cela deviens long et fastidieux. Je vous partage un exemple de schéma PID.
Bonjour, je ne suis pas sur de comprendre.
Les lignes ne sont pas présente dans les bloc, elles représentes des tuyauteries.
La coupure me permettrai d'éviter de faire un décalage de 1.5mm de chaque coté de la ligne, puis un ajustement de la ligne coupé. Lorsque j'ai seulement une dizaine de coupure ce n'est pas gênant, mais avec quelques centaines cela deviens long et fastidieux. Je vous partage un exemple de schéma PID.
Bonjour @be5RK2AV,
Il y aussai la commande native d'AutoCAD, COUPURE.
Elle permet en appelant l'option [Premier point], de spécifier un premier puis un second point pour faire une coupure avec une distance spécifique.
Bonjour @be5RK2AV,
Il y aussai la commande native d'AutoCAD, COUPURE.
Elle permet en appelant l'option [Premier point], de spécifier un premier puis un second point pour faire une coupure avec une distance spécifique.
Merci, mais cette méthode ne permet de sélectionner qu'une seule intersection à la fois.
avec un décalage de la ligne verticale et nu ajustement des lignes horizontales je peux faire toute les intersections de la lignes. mais c'est encore trop long...
Mais merci de votre participation, si vous avez d'autre astuce pour m'aider je suis preneur
Merci, mais cette méthode ne permet de sélectionner qu'une seule intersection à la fois.
avec un décalage de la ligne verticale et nu ajustement des lignes horizontales je peux faire toute les intersections de la lignes. mais c'est encore trop long...
Mais merci de votre participation, si vous avez d'autre astuce pour m'aider je suis preneur
@be5RK2AV a écrit :Merci de votre retour, je suis novice sur le sujet des lisp et ne sais pas comment les lancer, je l'ai bien intégré avec Appload, mais je ne sais pas comment exécuter cette fonction.
Est ce que vous pouvez m'indiquer la procédure svp ?
Donc si tu as su le charger, la commande CUT_LINE est disponible dans la session et le dessin en cours.
Comment interpréter les lisps?
Généralement les fonctions sont identifiables comme suit:
(defun toto (arg1 arg2 ... / var1 var2 ...) code lisp de la fonction)
Ici il s'agira d'une fonction qui sera appelé de cette façon en ligne de commande ou simplement depuis un code lisp
(toto argument1 argument2)
Il y a aussi cette définition : celle la plus utilisée
(defun C:tata ( .. / var var ..) code lisp)
le C: défini que la fonction sera une commande directement accessible en ligne de commande : TATA
Généralement ces fonctions n'ont pas d'arguments (bien qu'elles peuvent en avoir, mais alors l'appel se ferait comme ceci (C:TATA arg1 arg2 etc...)
et enfin une fonction anonyme sous la forme (lambda (arg1 arg2 ... / var1 var2 ...) code)
Ce genre de fonction sans nom est exécutable qu'une seule fois et n'est pas maintenue en mémoire, pour la relancer il faut la recharger en mémoire.
J'espère que cette brève explication te permettre de comprendre un code lisp pour pouvoir le lancé
@be5RK2AV a écrit :Merci de votre retour, je suis novice sur le sujet des lisp et ne sais pas comment les lancer, je l'ai bien intégré avec Appload, mais je ne sais pas comment exécuter cette fonction.
Est ce que vous pouvez m'indiquer la procédure svp ?
Donc si tu as su le charger, la commande CUT_LINE est disponible dans la session et le dessin en cours.
Comment interpréter les lisps?
Généralement les fonctions sont identifiables comme suit:
(defun toto (arg1 arg2 ... / var1 var2 ...) code lisp de la fonction)
Ici il s'agira d'une fonction qui sera appelé de cette façon en ligne de commande ou simplement depuis un code lisp
(toto argument1 argument2)
Il y a aussi cette définition : celle la plus utilisée
(defun C:tata ( .. / var var ..) code lisp)
le C: défini que la fonction sera une commande directement accessible en ligne de commande : TATA
Généralement ces fonctions n'ont pas d'arguments (bien qu'elles peuvent en avoir, mais alors l'appel se ferait comme ceci (C:TATA arg1 arg2 etc...)
et enfin une fonction anonyme sous la forme (lambda (arg1 arg2 ... / var1 var2 ...) code)
Ce genre de fonction sans nom est exécutable qu'une seule fois et n'est pas maintenue en mémoire, pour la relancer il faut la recharger en mémoire.
J'espère que cette brève explication te permettre de comprendre un code lisp pour pouvoir le lancé
Merci de vos explications, j'ai bien réussi à lancer la lisp et compris cette partie de chargement et nom de la fonction.
Maintenant que la lisp se lance elle ne fait pas ce que je pensais.
Est-ce normal ?
Merci de vos explications, j'ai bien réussi à lancer la lisp et compris cette partie de chargement et nom de la fonction.
Maintenant que la lisp se lance elle ne fait pas ce que je pensais.
Est-ce normal ?
D'après votre vidéo:
Votre sélection de départ est incomplète, il faut sélectionner TOUTES les ligne (horizontale ET verticale)
Si d'autre lignes autres que verticale ou horizontale sont sélectionnées, elles ne seront pas prise en compte pour la coupure.
C'est après cette sélection que vous allez décider avec quelles lignes il faut couper (H ou V)
.
D'après votre vidéo:
Votre sélection de départ est incomplète, il faut sélectionner TOUTES les ligne (horizontale ET verticale)
Si d'autre lignes autres que verticale ou horizontale sont sélectionnées, elles ne seront pas prise en compte pour la coupure.
C'est après cette sélection que vous allez décider avec quelles lignes il faut couper (H ou V)
.
Parfait, cela fonctionne, c'est exactement ce que je cherchais merci beaucoup de votre aide
Parfait, cela fonctionne, c'est exactement ce que je cherchais merci beaucoup de votre aide
Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.