Aller au contenu

décaler indéfiniment


Joffoon

Messages recommandés

Bonjour,

 

Quelque fois je dois décaler des cercles et polylignes... avec la commande Décaler, mais c'est fatiguant de toujours reclicker sur l'objet précédent pour la décaler encore et encore...

 

Ce serai génial de juste pouvoir clicker, vers la direction ou l'on veut que l'objet ce décale, au tant de fois que l'on souhaite sans etre obligé de revenir ckicker sur l'objet précedent... Peut-être que cela existe?? Si c'est le cas, j'aimerai savoir comment faire..

 

A+,

 

Joff

 

[Edité le 15/5/2007 par Joffoon]

Le ridicule ne tue pas, il te rend plus fort!

Lien vers le commentaire
Partager sur d’autres sites

Je viens de tester ce Lisp, et il répond bien à mon attente, c'est vraiment super :thumbup:

 

s'il faut on améliora (tout peu évoluer dans les sujet ancien)

 

Justement peut-etre qu'il pourrait il y avoir amélioration, car lorsque l'on décale l'objet on peut les compter si on veut décaler l'objet 10 fois, mais si c'est une centaine.. ça devient la croix et la bannière pour les yeux ;) ,

donc si il pouvait y avoir une ligne de commmande en plus qui demanderait de combien de fois on veut décaler l'objet, ce serait génial, peut-etre que je demande trop?? De toute façon meme si cela n'est pas faisable, c'est pas grave car ton Lisp me dépanne superbement bien....

 

Merci de votre interessement,

 

Joff

 

 

 

 

 

[Edité le 15/5/2007 par Joffoon]

Le ridicule ne tue pas, il te rend plus fort!

Lien vers le commentaire
Partager sur d’autres sites

ça existe depuis la version 2006 :(

 

La commande décaler s'est enrichie de plusieurs options :

 

EFFACER, CALQUE, et MULTIPLE

 

Une fois la valeur entrée, puis l'objet sélectionné, il suffit de faire bouton droit et choisir l'option MULTIPLE !

 

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

Merci Christian,

 

Je ne le savais pas du tout du fait que ça aller faire presque 8 ans que je n'avais pas toucher à Autocad et j'ai remis la main dessus cela va faire un an pile poil en version map 2007.. (reference à ton smyley) ;)

 

J'ai essyé de chercher aussi si on pouvait donner un nombre de decalage de l'objet, peut-etre es-tu au courant??

 

Merci encore pour tes précisions,

 

A+,

 

Joff

Le ridicule ne tue pas, il te rend plus fort!

Lien vers le commentaire
Partager sur d’autres sites

NON ! ça manque...

 

c'est une sorte de "réseau" ! mais la commande réseau ne peut s'appliquer à des formes complexes ou simplement à un cercle

 

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

Ok et merci Christian,

 

Je relance tout de meme le sujet (Réponse n°3) au niveau de ligne de commande qui pourrait etre utile pour pouvoir donner le nombre de decalage pour l'objet... Si quelqu'un a une idée??

 

 

Merci encore,

A+,

 

Joff

 

[Edité le 15/5/2007 par Joffoon]

Le ridicule ne tue pas, il te rend plus fort!

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

vraiment vite fait un vba qui permet de décaler avec une distance et le nombre de fois, sur les objets indiqués dans le code.

J' ai pas tout testé...

 

Public Sub dc_nbfois()
Dim obj As AcadEntity
Dim reseau As Variant
Dim distance As Double
Dim combien As Double
Dim n As Integer

ThisDrawing.Utility.GetEntity obj, pt, "Sélectionnez l' objet"
If obj.ObjectName = "AcDbArc" Or _
obj.ObjectName = "AcDbCircle" Or _
obj.ObjectName = "AcDbEllipse" Or _
obj.ObjectName = "AcDbLine" Or _
obj.ObjectName = "AcDbLightweightPolyline" Or _
obj.ObjectName = "AcDbPolyline" Or _
obj.ObjectName = "AcDbSpline" Or _
obj.ObjectName = "AcDbXLine" Then
distance = InputBox("Quelle est la valeur du décalage," & vbLf & "négative ou positive," & vbLf & vbLf & "décimales avec la virgule clavier")
combien = InputBox("Combien d' objets désirés")
End If
For n = 1 To combien
reseau = obj.Offset(distance * n)
Next
End Sub 

Lien vers le commentaire
Partager sur d’autres sites

Bon ben moi j'ai par encore gouter a celles nouvelles options de "décaler" en 2006 :(

 

Je reviens à ton sujet Joffoon, vu que tu veux un nombre précis de décalage, j' ai revu entièrement le lisp: (grread) n'est plus d'aucune utilité pour avoir un effet visuel.

 

Voici à quoi j'arrive, en espérant qu'il n'a pas trop de défaut. :P

 

(defun C:Mul_Offset ( / obj ent vla-ent pt_sel param deriv alpha dis_offset where_pt v1 v2 det_or e_last)
(while (not (setq obj (entsel "\nSélectionner l'objet à décaler: "))))
(setq ent (car obj) vla-ent (vlax-ename->vla-object ent))
(cond
	((member
		(vlax-get-property vla-ent 'ObjectName)
		'("AcDbLine" "AcDbXline" "AcDbPolyline" "AcDb2dPolyline" "AcDbSpline" "AcDbEllipse" "AcDbArc" "AcDbCircle")
	 )
		(setq
			pt_sel (vlax-curve-getClosestPointTo vla-ent (trans (cadr obj) 1 0))
			param (vlax-curve-getparamatpoint vla-ent pt_sel)
			deriv (vlax-curve-getfirstderiv vla-ent param)
			alpha (atan (cadr deriv) (car deriv))
		)
		(redraw ent 3)
		(initget "Par _Through")
		(setvar "OFFSETDIST"
			(if (not (setq dis_offset (getdist (strcat "\nSpécifiez la distance de décalage ou [Par] <" (if (< (getvar "OFFSETDIST") 0) "Par" (rtos (getvar "OFFSETDIST"))) ">: "))))
				(progn (if (< (getvar "OFFSETDIST") 0) (setq dis_offset "Through")) (getvar "OFFSETDIST"))
				(if (eq dis_offset "Through") -1 dis_offset)
			)
		)
		(if (< (getvar "OFFSETDIST") 0)
			(princ "\nAttribuez une valeur à \"Par le point\": ")
			(princ "\nSpécifiez un point sur le côté à décaler: ")
		)
		(initget 9)
		(setq where_pt (getpoint))
		(if (< (getvar "OFFSETDIST") 0)
			(setvar "OFFSETDIST"
				(distance
					(vlax-curve-getClosestPointToProjection vla-ent
						(trans where_pt 1 0)
						(mapcar '- (trans (getvar "VIEWDIR") 1 0) (trans '(0 0 0) 1 0))
						T
					)
					(list (car (trans where_pt 1 0)) (cadr (trans where_pt 1 0)))
				)
			)
		)
		(redraw ent 4)
		(setq alpha (atan (cadr deriv) (car deriv)))
		(setq
			v1 (mapcar '- (polar pt_sel alpha 1.0) pt_sel)
			v2 (mapcar '- (trans where_pt 1 0) pt_sel)
		)
		(setq det_or (apply '(lambda (x1 y1 z1 x2 y2 z2) (- (* x1 y2) (* y1 x2))) (append v1 v2)))
		(cond
			((> det_or 0.0) (setvar "OFFSETDIST" (- (abs (getvar "OFFSETDIST")))))
			((< det_or 0.0) (setvar "OFFSETDIST" (abs (getvar "OFFSETDIST"))))
		)
		(if (member (vlax-get-property vla-ent 'ObjectName) '("AcDbLine" "AcDbXline")) (setvar "OFFSETDIST" (abs (getvar "OFFSETDIST"))))
		(setq e_last ent)
		(initget 7)
		(repeat (getint "\nNombre de répétition : ")
			(if
				(and e_last (vl-catch-all-error-p
					(vl-catch-all-apply
						'vla-Offset
						(list (vlax-ename->vla-object e_last)
							(getvar "OFFSETDIST")
						)
					)
				))
				(progn (setq e_last nil) (princ "\nL'objet ne peut pas être décalé."))
				(setq e_last (entlast))
			)
		)
	)
	(T (princ "\nL'objet ne peut pas être décalé."))
)
(princ)
)

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

Lien vers le commentaire
Partager sur d’autres sites

Salut Bonuscad,

 

Merci d'avoir revu ton Lisp, il est magnifique :thumbup: , il fonctionne super bien.. c'est fort..

 

C'est vraiment génial d'etre sur un site tel que cadxp... ;) c'est clair qu'il y a des grosses pointures :cool: ..

 

Merci encore..

 

Salut Nazemrap,

 

Merci pour ton code mais je ne sais pas sous quelle extension l'enregistrer (je n'ai jamais touché au VBA) ?? J'aimerai l'essayer aussi..

 

A+,

 

Joff

Le ridicule ne tue pas, il te rend plus fort!

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Quel dommage (!!!!!):exclam:

 

Copier le code présent ci-dessus.

Dans autocad ouvert appuyer sur "ALT" et "F11"(ouverture de vba)

menu "insértion" > "module"

Coller le code dans le module ouvert.

Pour le conserver,"enregistrer" (l' extension sera dvb)

 

Pour l' exécuter

retour dans le dessin autocad.

"ALT" et "F8"

Choisir le nom de la macro

bouton "exécuter"

 

J 'espère ne rien avoir oublié ...

 

[Edité le 16/5/2007 par nazemrap]

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é