Bonjour,
Je ne suis pas un pro du lisp mais voilà ce que j'ai pu faire.
Il faudra bien entendu remplacer "NOM_DU_BLOC" par le nom de ton bloc a insérer
Le nom actuelle de la commande est IB_YMIN
;; IB_YMIN.lsp [command name: IB_YMIN]
;; Insert des blocs (les blocs doivent être présent dans le fichier
;; ou dans un des dossiers présents dans les chemins de recherche de fichiers de support
;; au niveau du Y mini d'une selection
;; au niveau du X mini et du X Maxi (dans le calque courant)
;; Yoan AUBRY - 26/09/2022
;; Modification du code SmallestRectangle.lst de Kent Cooper
(defun C:IB_YMIN (/ obb oBG oHD ss BG HD); = IB_YMIN
(defun obb (ent); = Coins de la boîte englobante de l'objet
(vla-getboundingbox (vlax-ename->vla-object ent) 'minpt 'maxpt)
(setq
oBG (vlax-safearray->list minpt); Position en bas à gauche des objets
oHD (vlax-safearray->list maxpt); Position en haut à droit des objets
); setq
); defun -- obb
(vl-load-com)
(prompt "\nAjouter de blocs au niveau du Ymin d'une sélection (au xmin et Xmax),")
(setq ss (ssget))
(obb (ssname ss 0))
(setq BG oBG HD oHD); initialisation globale de BG & HD [du premier objet]
(ssdel (ssname ss 0) ss)
(repeat (sslength ss)
(obb (ssname ss 0))
(setq
BG (mapcar 'min oBG BG); Point le plus bas de chacun des objets de la sélection
HD (mapcar 'max oHD HD); Point le plus haut de chacun des objets de la sélection
); setq
(ssdel (ssname ss 0) ss)
); repeat
(setq
MinX (car BG) ; premier élément de la liste (la liste étant les coordonnées d'un point, retourne X au format real)
MaxX (car HD) ; premier élément de la liste (la liste étant les coordonnées d'un point, retourne X au format real)
MinY (cadr BG) ; second élément de la liste (la liste étant les coordonnées d'un point, retourne Y au format real)
sMinX (rtos Minx 2 6) ; convertion de real en string de MinX (le 2 correspond au format décimal, le 6 au nombre de chiffre après la virgule)
sMaxX (rtos MaxX 2 6) ; convertion de real en string de MaxX
sMinY (rtos MinY 2 6) ; convertion de real en string de MinY
MinXMinY (strcat sMinX "," sMinY) ;concaténation de sMinX et sMinY (pour obtenir un point)
MaxXMinY (strcat sMaxX "," sMinY) ;concaténation de sMaxX et sMinY (pour obtenir un point)
);sq
(command "_.insert" "NOM_DU_BLOC" MinXMinY "1" "" "0") ; Insertion du bloc NOM_DU_BLOC au point MinXMinY avec echelle X = 1, Echelle Y = Echelle X, rotation 0
(command "_.insert" "NOM_DU_BLOC" MaxXMinY "1" "" "0") ; Insertion du bloc NOM_DU_BLOC au point MaxXMinY avec echelle X = 1, Echelle Y = Echelle X, rotation 0
(princ)
); defun -- C:IB_YMIN
.
J'espère que ca te conviendra
A+ Yoan
Yoan AUBRY
