Aller au contenu

Decaler multiple avec Largeur globale


lecrabe

Messages recommandés

 

Hello

 

SVP j'ai besoin d'un petit programme et je n'ai pas trouve !

 

Pourvoir selectionner N polylignes 2D (closes) par la selection AutoCAD classique

 

Question 1 : valeur de decalage (UN par defaut)

 

Question 2 : largeur globale de la polyligne (Zero par defaut)

 

Question 3 : Interieur ou Exterieur (Interieur par defaut)

 

Question 4 : generation sur le calque d'origine de chaque polyligne ou sur le calque courant

(Calque courant par defaut)

 

Resultat : Generation de N polylignes sur les bons calques ...

 

Merci d'avance de votre aide ! :)

 

Le Decapode

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

(defun c:ploff (/ ss ofd wid int lay o1 o2 a1 a2 ofl)
 (vl-load-com)
 (or *acad* (setq *acad* (vlax-get-acad-object)))
 (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*)))
 (if
   (and
     (setq ss (ssget '((0 . "LWPOLYLINE") (-4 . "&") (70 . 1))))
     (setq ofd	(cond
	  ((getdist "\nDistance de décalage : "))
	  (1.0)
	)
     )
     (setq wid	(cond
	  ((getdist "\nLargeur globale : "))
	  (0.0)
	)
     )
     (or (initget "Intérieur Extérieur")
  (setq	int (cond
	      ((getkword "\nDécalage [intérieur/Extérieur] : "))
	      ("Intérieur")
	    )
  )
     )
     (or (initget "Source Courant")
  (setq	lay (cond
	      ((getkword "\nCalque [source/Courant] : "))
	      ("Courant")
	    )
  )
     )
   )
    (progn
      (vla-StartUndoMark *acdoc*)
      (vlax-for pl (setq ss (vla-get-ActiveSelectionSet *acdoc*))
 (setq a0 (vla-get-Area pl))
 (vl-catch-all-apply '(lambda () (setq off (vlax-invoke pl 'Offset ofd))))
 (if off
   (if (or
	 (and (= int "Intérieur") (		 (and (= int "Extérieur") (	       )
     (progn
       (mapcar 'vla-Delete off)
       (vl-catch-all-apply '(lambda () (setq off (vlax-invoke pl 'Offset (- ofd)))))
     )
   )
   (progn
     (vl-catch-all-apply '(lambda () (setq off (vlax-invoke pl 'Offset (- ofd)))))
     (if (and off
	      (or
		(and (= int "Intérieur") (			(and (= int "Extérieur") (		      )
	 )
       (progn
	 (mapcar 'vla-Delete off)
	 (setq off nil)
       )
     )
   )
 )
 (if off
   (foreach p off
     (vla-put-ConstantWidth p wid)
     (if (= lay "Courant")
       (vla-put-Layer p (getvar 'clayer))
     )
   )
 )
      )
      (vla-delete ss)
      (vla-EndUndoMark *acdoc*)
    )
 )
 (princ)
)

  • Upvote 1

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

En testant un peu plus profondément, il semble que l'option "Source" ne fonctionne pas,...(Que le calque source soit actif ou non,..)

 

Commande:

PLOFF

Choix des objets: 1 trouvé(s)

 

Choix des objets:

 

Distance de décalage :

 

Largeur globale :

 

Décalage [intérieur/Extérieur] : E

 

Calque [source/Courant] : S

; erreur: Une exception s'est produite

Civil 3D 2025 - COVADIS_18.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Avec la nouvelle version, sur ce fichier, j'ai toujours :

 

Commande:

Commande: (LOAD "D:/AUTOCAD -PERSONNALISATION/PROG PERSOS/ploff.lsp") C:PLOFF

 

Commande: ploff

 

Choix des objets: 1 trouvé(s)

 

Choix des objets:

 

Distance de décalage :

 

Largeur globale :

 

Décalage [intérieur/Extérieur] : E

 

Calque [source/Courant] : S

; erreur: Une exception s'est produite

Civil 3D 2025 - COVADIS_18.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Au temps pour moi...

Je ne sais pas ce que j'ai foutu hier soir, mais le code n'avais pas été modifié.

 

Cette fois c'est fait.

 

Dans tout les cas, le problème était bien dû au fait que la décalage n'est pas possible (valeur trop grande pour un décalage intérieur ou polyligne croisée).

 

Je pense que ces cas sont maintenant traités correctement.

 

PS: pour les smileys, il suffit de cocher : "Désactiver les smileys".

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à toutes et tous,

 

Salut Gilles,

 

valeur trop grande pour un décalage intérieur

 

Oui, mais c'est vers l'extérieur que j'avais tenté le décalage,...

 

Décalage [intérieur/Extérieur] : E

 

Calque [source/Courant] : S

; erreur: Une exception s'est produite

 

 

Semble bien fonctionner maintenant.

 

Merci Gilles, excellente cette routine aussi,...

 

PS:

 

PS: pour les smileys, il suffit de cocher : "Désactiver les smileys".

 

Ils le sont pourtant par défaut chez moi,...

Civil 3D 2025 - COVADIS_18.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

valeur trop grande pour un décalage intérieur

 

Oui, mais c'est vers l'extérieur que j'avais tenté le décalage,...

 

Dans son ancienne version la routine faisait systématiquement le décalage des deux côtés et ne conservait que celui qui correspondait à l'option choisie.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

 

Hello

 

N'ayant pas d'AutoCAD (ou plutot de MAP) sous la main ce WE, je n'ai pas encore teste , sorry !

Mais au vu des reponses, il semblerait que ta routine soit comme d'habitude "Nickel-Chrome"

Je teste en debut de semaine sur de multiples versions de MAP 32 bits...

 

J'imagine que tu as teste avec ton AutoCAD 2010 ou 2011 64 bits ?

 

Par contre, SVP je me permet de te demander "encore" une autre routine, car dans tes commentaires, tu arrives a detecter si une polyligne se croise (effet papillon) ou pas !

et ca c'est un gros souci recurrent !

 

Donc une simple routine PL_PAPILLON qui selectionne (ou force dans une couleur particuliere) dans le jeu de selection de N polylignes 2D (closes ou pas), les polylignes qui se croisent serait TIP-TOP !

 

Ainsi apres correction de ces polylignes, on lancera ta routine PLOFF ...

 

Encore MERCI pour efficacite et rapidite, Bon Dimanche, Le Decapode

 

PS: chui bien content que d'autres apprecient cette routine !

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

La routine suivante conserve en surbrillance les polylignes croisées ou ayant des sommets superposés.

Sélectionner une polyligne en surbrillance (pour inspecter ses sommets par exemple) puis faire echap supprime la surbrillance pour celle-ci.

Faire REGEN pour supprimer la surbrillance de toutes les polylignes.

 

(defun c:PL_PAPILLON (/ ss cnt)
 (vl-load-com)
 (or *acad* (setq *acad* (vlax-get-acad-object)))
 (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*)))
 (if (ssget '((0 . "LWPOLYLINE")))
   (progn
     (vlax-for	pl (setq ss (vla-get-ActiveSelectionSet *acdoc*))
(if (/=	(/ (length (vlax-invoke pl 'IntersectWith pl acExtendNone)) 3)
	(if (= (vla-get-Closed pl) :vlax-true)
	  (/ (length (vlax-get pl 'Coordinates)) 2)
	  (- (/ (length (vlax-get pl 'Coordinates)) 2) 2)
	)
    )
  (vla-HighLight pl :vlax-true)
)
     )
     (vla-delete ss)
   )
 )
 (princ)
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

 

Hello

 

Un rapide test (sous MAP 2008) semble montrer que POL_PAPILLON fonctionne bien !

 

Cependant SVP serait il possible de recuperer les polylignes "defectueuses" dans le jeu de selection PRECEDENT (et non pas toutes les polylignes selectionnees au depart) !?

 

Ainsi on pourra envisager un CHPROP, WBLOC, EFFACER en passant l'option P ...

 

Encore Merci pour ta promptitude et ton efficacite, Le Decapode

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello Gilles

 

Mes tests montrent un autre petit probleme avec POL_PAPILLON :o

 

Bien sur tu ne traites que les Polylignes non lissees et non splinees (ca ne me gene pas du tout)

et des qu'il y a un quelconque croisement (meme microscopique) tu le trouves !

- Je suis impressionne car meme avec un croisement a 0.000001 ca marche ! :)

 

Mais j'ai fais une polyligne qui revient toucher un segment deja existant par proche et qui repart normalement et qui n'a bien sur AUCUN croisement et ta routine ne la trouve pas, ce qui est NORMAL !

 

Mais dans certains cas, il faudrait traiter ce genre de cas particulier comme un croisement, donc SVP je te demande de poser une petite question supplementaire en debut de routine

- Considerer ces points multiples comme des croisement (O/N) - valeur par defaut = N

 

et bien sur je desire toujours obtenir en sortie un jeu de selection classique

pour pouvoir utiliser l'option P (comme precedent) dans la commande suivante ...

 

Encore Mille Mercis pour ton efficacite et ta gentillesse, le Decapode

 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

 

Hello

 

Un petit UP pour Gilles si jamais il passe par la !?

 

*** 1 *** Micro-micro Modif ***

SVP pourrais je obtenir une selection par P (apres execution de ta routine POL_PAPILLON)

des polylignes se croisant (effet papillon)

pour faire apres un deplacer, effacer, chprop avec l'option P

 

*** 2 *** Modif plsu consequente ***

Poser la question "Detection des superpositions (O/N) - Valuer par defaut = Oui "

 

Sous entendu si lors du dessin de la polyligne, je reviens "dessus" par un accrochage EXTremite ou PROche, la routine POL_PAPILLON ne le voit pas !

 

Ce qui me semble normal car il n'y a pas eu de VERITABLE croisement !

 

Merci d'avance, le Decapode

 

 

Autodesk Expert Elite Team

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é