Aller au contenu

Ajuster lignes croisées


Fruity

Messages recommandés

Bonjour

Depuis la mise à jour Autocad 2019, j'ai pas mal de lisp qui ne fonctionnent plus.

Quelques variables ou raccourcis qui ont changé, j'arrive généralement a remettre en ordre, mais là je bloque.

Quelqu'un pourrait-il m'aider sur celui-ci, qui consiste a couper 2 lignes qui se croisent (utile pour les schémas).

Merci.

 

;cliquer a l'interesection, ca crée un cercle, ajuste ce qui passe dedans et supprime le cercle
(defun c:cut ( / p cir)
 (command "_circle" (setq p (getpoint)) pause)
 (setq cir (entlast))
 (command "_trim" cir "" p "")
 (entdel cir)
)

Lien vers le commentaire
Partager sur d’autres sites

  • 4 semaines après...

Un petit up, car j'ai quelques infos.

 

Concernant l'erreur qui apparait de tps en tps, on dirait que c'est lié au niveau de zoom (et que le cercle est trop petit?).

 

Sinon, j'ai remarqué que la coupure se fait dans un certain ordre, a savoir celui dans lequel les traits ont été dessinés. C'est toujours le 2eme qui sera coupé.

Sauf que ca veut dire y penser au moment de faire le dessin, chose difficile au vu des multiples modifications qui ont souvent lieu en cours de route.

Est-il alors possible de rajouter une option au début pour choisir quel ligne sera coupée? horizontale ou verticale. En utilisant "Différence x et y" par exemple ou autre.

 

Merci

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Petite question : la commande CUT doit-elle couper les deux lignes qui se croisent ou une seule uniquement ?

Ensuite concernant la commande _TRIM prend en compte l'ordre de tracé (et non l'ordre de création des lignes) donc tu peux jouer là dessus si besoin avant de lancer la commande _TRIM.

 

En revanche, si les deux lignes doivent être coupées par la commande CUT, il suffit de lancer une seconde fois la commande _TRIM (ne prend pas en compte le fait qu'il peut y avoir N lignes passant par cette intersection)

 

Si le but est de choisir la ligne que tu souhaites couper, le plus simple serait de faire une pause dans la commande _TRIM de mon point de vue.

 

En espérant t'avoir aidé :P

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

Alors le but est d'en couper une seule des 2. C'est surtout pour utiliser dans des schémas dans lesquels pas mal de traits se croisent.

Ce serait donc l'ordre de tracé qui compte, c'est bon à savoir, car ca offre un peu plus de possibilités.

Quant a ton idée de faire une pause, ca signifie qu'il attendra une action (choix de la ligne a couper), ce que je voudrais éviter. J'aimerai lui dire que je veux que ce soit les lignes horizontales qui seront toujours coupées par exemple. Mais ca, je ne sais pas faire...

Lien vers le commentaire
Partager sur d’autres sites

Malheureusement, il n'existe pas vraiment de solution simple pour définir qu'une partie de la polyligne est horizontale et passe par un point spécifié par l'utilisateur. Il n'est pas possible de récupérer l'angle d'un segment de polyligne par rapport au SCU/SCG sans passer par du lisp complexe.

 

Je viens de regarder d'ailleurs de passer par (dumpallpropertiesvalue) mais aucune ligne ne semble correspondre à l'angle d'un segment...

(question à part, pour ceux qui utilise la fonction (getpropertyvalue), comment on accède aux propriétés des ItemX qui correspondent aux points de la polyligne ? j'ai eu beau chercher, je n'ai reçu que des "demandes ADS erronée"...)

 

Pour en revenir à nos moutons, à chaque fois que l'on souhaite automatiser encore un peu plus un programme (même simple), il faut forcément ajouter des lignes de codes (parfois imbuvables) pour que ça fonctionne.

 

Je me demande si pour ton problème il n'y aurait pas moyen de "tricher" un peu...

Essaye avec ça pour voir :

(defun c:cut ( / p cir)
 (while (setq p (getpoint "\nCliquer sur une intersection : "))
  (command "_circle" p pause)
  (setq cir (entlast))
  (setq p (list (+ (car p) 0.001) (cadr p) (caddr p)))
  (command "_trim" cir "" p "")
  (entdel cir)
 )
 (princ)
)

 

Il ne s'agit là que d'un test car il est fort probable que ce programme rencontre des erreurs et il ne prend pas vraiment en compte les petits ajustements d'un dessin, mais disons que ça peut servir de base sans modifier complètement ton programme ou devoir créer un programme complexe. Il rencontrera une erreur si la ligne horizontale ne dépasse pas l'intersection de 1mm dans le sens positif de l'axe x ou si la ligne en question n'est pas parfaitement horizontale.

 

En espérant que cela puisse t'aider dans tes recherches. :P

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Je te propose ce qui suit :

Sélection de la ligne du côté qui devra disparaitre

Montrer l'intersection à laquelle il faudra couper l'entité

Si la première ligne sélectionnée est horizontale car son gisement (AutoCAD) est égal à 0.00 ou 3.1415..)elle sera effacée.

Testé en SCG sans souci

 

Tiens-moi au courant s'il te plaît

 

Amicalement

(defun c:cc ()
 (setq oldosmode (getvar "osmode"))
 (setvar "osmode" 32)  
 (setq ent(entsel"ENTITE ?"))
 (redraw (car ent) 3)  
 (setq pt (osnap (cadr ent)"_nea"))
 (setq pt2(getpoint"\nPoint de coupure ?"))  
 (command "_break" pt "_f" pt2 pt2 )
 (if (or
(equal (angle pt2 pt) 0.00 0.00001)
(equal (angle pt2 pt) pi 0.00001)
)
(command "_erase" pt "")
)  
 (setvar "osmode" oldosmode)
 )
Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

Merci d'avoir pris le tps de faire ce lisp, mais ca ne correspond pas a ma recherche.

Là ça ressemble beaucoup à Ajuster, et ca supprimer toute la ligne après le croisement.

 

Ce que je souhaiterais, c'est passer de la gauche a la droite (coupé horizontalement ou verticalement selon mon choix):

1572252873-untitled-1.jpg

Lien vers le commentaire
Partager sur d’autres sites

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é