CADxp: Ajuster lignes croisées - CADxp

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Ajuster lignes croisées

#1 L'utilisateur est hors-ligne   Fruity 

  • ceinture noire
  • Groupe : Membres
  • Messages : 438
  • Inscrit(e) : 02-mai 06

Posté 12 septembre 2019 - 09:53

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

0

#2 L'utilisateur est hors-ligne   Fruity 

  • ceinture noire
  • Groupe : Membres
  • Messages : 438
  • Inscrit(e) : 02-mai 06

Posté 08 octobre 2019 - 10:36

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
0

#3 L'utilisateur est hors-ligne   Elun 

  • Advanced Member
  • PipPipPip
  • Groupe : Membres
  • Messages : 32
  • Inscrit(e) : 04-mars 19

Posté 08 octobre 2019 - 11:13

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
0

#4 L'utilisateur est hors-ligne   Fruity 

  • ceinture noire
  • Groupe : Membres
  • Messages : 438
  • Inscrit(e) : 02-mai 06

Posté 08 octobre 2019 - 13:05

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...
0

#5 L'utilisateur est hors-ligne   bonuscad 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 4680
  • Inscrit(e) : 20-juin 03

Posté 08 octobre 2019 - 14:16

Bonjour,
Au cas ou cela puisse t’intéresser je t'oriente sur cette réponse dont le sujet semble similaire

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

#6 L'utilisateur est hors-ligne   Fruity 

  • ceinture noire
  • Groupe : Membres
  • Messages : 438
  • Inscrit(e) : 02-mai 06

Posté 08 octobre 2019 - 16:01

Bonjour
Merci pour le lien, c'est intéressant, en le mixant avec le mien, on devrait pouvoir faire quelque chose, mais c'est trop complexe pour moi...
0

#7 L'utilisateur est hors-ligne   Elun 

  • Advanced Member
  • PipPipPip
  • Groupe : Membres
  • Messages : 32
  • Inscrit(e) : 04-mars 19

Posté 08 octobre 2019 - 16:58

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
0

#8 L'utilisateur est hors-ligne   didier 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 8352
  • Inscrit(e) : 18-décembre 02
  • LocationPlanète : Terre

Posté 09 octobre 2019 - 08:21

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

Éternel débutant ...
Programmer AutoCAD
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)