Aller au contenu

Inserer un Bloc+Attr (Incrementation) suivant une PLine


lecrabe

Messages recommandés

Hello

 

Encore moi ... et voila encore un petit probleme "sympa" :

 

Soit une Jolie Polyligne 2D (Close ou Non) et un Bloc avec UN Attribut classique du genre NUMERO

 

On clique UN point sur la Polyligne (donc on ne commence pas forcement au Debut de la Polyligne

et a partir de ce point je desire IDEM (commande DIVISER/MESURER)

venir deposer en automatique un Bloc + Attribut le long du reste de la Polyligne

 

Bien entendu, l'attribut doit s'incrementer automatiquement !

avec 2 question prealables :

Valeur de Depart = 1 par defaut

Incrementation = 1 par defaut

 

En fait j'y arrive plus ou moins

mais je suis oblige de faire comme suit, c parfois relativement impossible !

 

1) Copy de la Polyligne et Coupure de la Polyligne au point de Depart

- Ainsi je garde les eventuels XDATAs d'AutoCAD et ODs de MAP

 

2) Commande MESURER/DIVISER (sur la Copie de la Polyligne) tous les xx.xx Unites graphiques

pour dessiner un Point Graphique classqiue (ou Inserer un Bloc avec l'option B)

 

3) Utilisation d'une Routine Lisp/VLisp qui depose un Bloc avec Attribut (avec Incrementation automatique) ou un Texte ou Incremente un Attribut ou etc ...

par N Clics (accrochage: NODal) sur TOUS les points graphiques successivement UN par UN !

Donc c SIMPLE et LONG ...

 

Plusieurs routines d'Incrementations sont possibles et operationnelles : Gilles, Patrick_35, Lee Mac, etc

mais c toujours par des CLICS successifs en manuel sur chaque Point ou Attribut ou Texte,

donc cela peut s'averer relativement "injouable" !

 

SVP si quelqu'un pouvait me faire la routine ADEQUATE, cela serait fort SYMPA !

 

Merci d'avance, lecrabe

 

PS: sinon j'ai trouve 2 routines CHAINAGE (Forums Autodesk + GC) assez proches !?

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

 

Quelques lignes de codes à voir si ça peut te convenir, en partant du principe qu'avant de lancer le lisp, tu as inséré une référence de bloc au point où tu souhaites démarrer la division de ta polyligne ..

 

;; Insérer plusieurs Références d'un Bloc le long d'une pline et Incrémenter son attribut
(defun c:IRB (/ blk pline dist ecart long)
 (vl-load-com)
 (or *increment* (setq *increment* 1))
 (or *mode* (setq *mode* "Diviser"))
 (while
   (not
     (and (setq
     pline (car (entsel "\nSélectionnez la polyligne à mesurer/diviser: "))
   )
   (= "AcDbPolyline"
      (vla-get-ObjectName (setq pline (vlax-ename->vla-object pline)))
   )
   (setq
     long (vlax-curve-getDistAtParam pline (vlax-curve-getEndParam pline))
   )
     )
   )
 )
 (while
   (not
     (and
(setq blk (car (entsel "\nPointez la référence de bloc à incrémenter: ")))
(= "AcDbBlockReference"
   (vla-get-ObjectName (setq blk (vlax-ename->vla-object blk)))
)
     )
   )
 )
 (cond
   ((setq dist (vlax-curve-getDistAtPoint pline (vlax-get blk 'InsertionPoint)))
    (setq *increment*
    (cond
      ((getint
	 (strcat "\nValeur de l'incrément <" (itoa *increment*) ">: ")
       )
      )
      (*increment*)
    )
    )
    (setq loop T)
    (while loop
      (setq ecart
      (cond
	((= "Diviser" *mode*)
	 (initget (+ 1 2) "Mesurer")
	 (getint "\nDIVISER -> Entrez le nombre de segments ou [Mesurer]: ")
	)
	((= "Mesurer" *mode*)
	 (initget (+ 1 2) "Diviser")
	 (getdist
	   "\nMESURER -> Spécifiez la longueur du segment ou [Diviser]: "
	 )
	)
      )
      )
      (setq loop
      (cond ((= (type ecart) 'STR) (setq *mode* ecart))
	    ((= (type ecart) 'INT) (setq ecart (/ (- long dist) ecart)) nil)
      )
      )
    )
    (while (< dist (- long ecart))
      (vla-Move
 (setq blk (vla-Copy blk))
 (vla-get-InsertionPoint blk)
 (vlax-3D-point
   (vlax-curve-getPointAtDist pline (setq dist (+ dist ecart)))
 )
      )
      (cond ((setq att (car (vlax-invoke blk 'GetAttributes)))
      (vla-put-TextString
	att
	(itoa (+ (atoi (vla-get-TextString att)) *increment*))
      )
     )
      )
    )
   )
   ((alert
      "Le point d'insertion de la référence de bloc ne ce trouve pas sur la polyligne!"
    )
   )
 )
 (princ)
)

 

A+

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Hello Mr VDH-Bruno

 

Je viens de faire un test rapide sur MAP 2012 32 bits sous Win XP Pro SP3

et ca marche nikel-chrome !

 

Excellente l'idee de partir d'un Bloc deja insere au 1er point sur la PLine

puis de le copier le long de la PLine ...

 

Merci beaucoup pour tes efforts, lecrabe

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é