Aller au contenu

[Résolu] Décaler dernière selection


stugeol

Messages recommandés

Pour représenter des bordures je dois décaler une polyligne représentantle fil d’eau de la bordure.

 

Pour une bordure T2 par exemple :

 

  • décaler le fil d’eau de 0.075
  • Affecter le type de ligne Bor025à la dernière polyligne créée
  • mettre la largeur de la dernière polyligne à 0.13
  • décaler la dernière polyligne de 0.075

 

J’ai voulu utiliser une action. Je me trouve face au problème suivant : la commande décaler n’accepte pas D (ou _last) pour sélectionnerle dernier objet créé. Le message explicit s’affiche : Attend un point ou Quitter.

 

Auriez-vous une solution pour décaler le dernier objet crée ou sélectionné ?

Auriez-vous une solution pour récupérer le point de la dernière polyligne sélectionnée ou créée ?

 

Cordialement.

Petit à petit on devient moins petit

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

en lisp pour le dernier objet créé

(command "decaler" "0.075" (entlast) pause "q")

Aide au téléchargement du cadastre dgfip-download-helper
Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0
Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js

Lien vers le commentaire
Partager sur d’autres sites

Pourquoi ne pas créer une macro de menu ?

Ici, j'ai choisi le type de ligne "cache".

^C^CDecaler;0.075;\\;chprop;d;;t;"cache";;pedit;d;e;0.13;;Decaler;0.075;\\;

 

Ok, le dernier décalé doit être sélectionné. Un lisp serait plus adapté.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Je vous remercie, en effet je suis en train de faire un lisp pour résoudre le problème.

En cherchant sur le net j'ai trouvé un code que je suis en train d'adapter.

Je poste le début d'une solution dans quelques temps.

 

Cordialement.

Petit à petit on devient moins petit

Lien vers le commentaire
Partager sur d’autres sites

Voici une solution :

 

;; Merci à gille pour sa routine de base
;; Cette routines permet de dessinner une polyligne
;; cette polyligne est décalée d'une demi largeur de bnordure et d'une largeur de bordure
;; La polyligne centrale prend pour largeur lka largeur de la bordure moins 2 dixiéme de l'épaisseur de la bordure
;; Une largeur positif décale les ligne vers la droite, dans le sens de constgruction de la polyligne
;; Une largeur négative décale les ligne vers la gauche, dans le sens de constgruction de la polyligne
;; Stugeol

(defun c:DrawBord (/ *error* special_offset largeur_bordure Layer_symb)
 (defun *error* (msg)
   (if (/= msg "Fonction annulée")
     (princ (strcat "\nErreur: " msg))
   )
   (if file
     (close file)
   )
   (princ)
 )
 (defun special_offset (pl largeur_bordure / o1 o2)
   (vl-load-com)
   (setq pl (vlax-ename->vla-object pl))
   (setq o1 (car (vlax-invoke pl 'Offset (/ largeur_bordure 2.0))))
   (command "_CHPROP" "_Last" "" "_Layer" Layer_Symb "")
   (command "_CHPROP" "_Last" "" "_Ltype" "Bylayer" "")
   (command "_PEDIT" "_Last" "LA" (- largeur_bordure (* 2 (/ largeur_bordure 10.0))) "")
   (setq o2 (car (vlax-invoke pl 'Offset largeur_bordure)))
   (command "_CHPROP" "_Last" "" "_Layer" Layer_Symb "")
   (command "_CHPROP" "_Last" "" "_Ltype" "continuous" "")
 )

 (and
   (vl-cmdf "_.pline")
   (while (/= 0 (getvar "CMDACTIVE"))
     (vl-cmdf pause)
   )
   (setq Layer_symb (getstring "Nom du calque de la symbologie :"))
   (setq largeur_bordure (getdist "\nLargeur de la bordure: "))
   (special_offset (entlast) largeur_bordure)
 )
 (princ)
)

 

Je ne suis pas sur que le traitement des erreur que j'ai ajouté fonctionne.

 

Je suis ouvert à toutes proposition d'améliorations.

 

Bonne fin de journée à tous...

 

 

 

 

Petit à petit on devient moins petit

Lien vers le commentaire
Partager sur d’autres sites

marrant de voir le lisp de vincent et stugeol...

c'est à se demander si ça fait la même chose!! ;)

+1 pour vincent

Phil

 

PS : stugeol si j'étais toi je me pencherais sur le multiligne qui est à mon avis plus simple à utiliser (mais on ne peut pas y faire de jolis arrondis, certes!)

Projeteur Revit Indépendant - traitement des eaux/CVC

Lien vers le commentaire
Partager sur d’autres sites

bonjour philsogood,

 

je ne connais pas le lisp de vincent as tu un lien?

 

voici le liens de mes sources : http://forums.augi.com/showthread.php?70440-Automatic-offset-of-drawn-line

 

 

Je viens de modifier un second code:

(defun c:DecBord (/ ent o o1 o2 largeur_bordure Layer_symb)
(or (vl-load-com))
(if (setq ent (entsel))
 (progn
   (setq Layer_symb (getstring "Nom du calque de la symbologie :"))
   (setq largeur_bordure (getdist "\nLargeur de la bordure: "))
   (setq o (vlax-ename->vla-object (car ent)))
   (setq o1 (vlax-invoke o 'Offset (/ largeur_bordure 2.0)))
   (command "_CHPROP" "_Last" "" "_Layer" Layer_Symb "")
   (command "_CHPROP" "_Last" "" "_Ltype" "Bylayer" "")
   (command "_PEDIT" "_Last" "LA" (abs (- largeur_bordure (* 2 (/ largeur_bordure 10.0)))) "")
   (setq o2 (vlax-invoke o 'Offset largeur_bordure))
   (command "_CHPROP" "_Last" "" "_Layer" Layer_Symb "")
   (command "_CHPROP" "_Last" "" "_Ltype" "continuous" "")
   )
 )
 (princ)
 )

 

Dans ce code ci quel sont les modification à apporter pour sélectionner le coté du décalage des polylignes?

Petit à petit on devient moins petit

Lien vers le commentaire
Partager sur d’autres sites

Bon voilà pour finaliser j'ai trouvé un lisp de Gille qui permet d'afficher temporairement la direction d'une polyligne. En modifiant sommairement ce lisp et en l'intégrant j'obtient une fonction qui m'affiche le sens de la polyligne avant de saisir la largeur de la bordure. Une largeur positive décale vers la droite dans le sens de construction de la polyligne. Une largeur négative décale vers la gauche.

 

Merci de votre aide.

Cordialement.

(defun c:DecBord (/ ent ent1 o o1 o2 largeur_bordure Layer_symb pt_decal)
(or (vl-load-com))

(defun senspoly (selection / selection ent n pt pt0 pt1 ang dis)
 (vl-load-com)
 (setq dis (/ (getvar "viewsize") 50))
    (repeat (setq n (fix (vlax-curve-getEndParam selection)))
      (setq pt  (trans (vlax-curve-getPointAtParam selection (- n 0.5)) 0 1)
     pt0 (trans (vlax-curve-getPointAtParam selection n) 0 1)
     pt1 (trans (vlax-curve-getPointAtParam selection (1- n)) 0 1)
     ang (angle pt0 pt1)
     n  (1- n)
      )
      (grvecs (list 1
      pt
      (polar pt (- ang (/ pi 6)) dis)
      1
      pt
      (polar pt (+ ang (/ pi 6)) dis)
       )
      )
 )
 (princ)
)

(if (setq ent (entsel))
 (progn
   (setq ent1 (car ent))
   (senspoly (car ent))
   (setq Layer_symb (getstring "Nom du calque de la symbologie :"))
   (setq largeur_bordure (getdist "\nLargeur de la bordure: "))
   (setq o (vlax-ename->vla-object (car ent)))
   (setq o1 (vlax-invoke o 'Offset (/ largeur_bordure 2.0)))
   (command "_CHPROP" "_Last" "" "_Layer" Layer_Symb "")
   (command "_CHPROP" "_Last" "" "_Ltype" "Bylayer" "")
   (command "_PEDIT" "_Last" "LA" (abs (- largeur_bordure (* 2 (/ largeur_bordure 10.0)))) "")
   (setq o2 (vlax-invoke o 'Offset largeur_bordure))
   (command "_CHPROP" "_Last" "" "_Layer" Layer_Symb "")
   (command "_CHPROP" "_Last" "" "_Ltype" "continuous" "")
 )
)
(princ)
)

 

 

Petit à petit on devient moins petit

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é