AutoCAD... AutoLISP... VisualLISP...

  [38] Blok i jego skala

index  

  Z cyklu: "stare ale jare"... Polecenie WSTAW (_INSERT) wstawia bloki z określonym współczynnikiem skali. Zmiana cech wstawionego bloku pozwala na określenie jego skali. Polecenie SKALA (_SCALE) umożliwia zeskalowanie wstawionego bloku. Do tego miejsca wszystko jest w porządku, jeśli chcemy aby bloki były skalowane, również z atrybutami (jeśli je posiadają). Często jednak zachodzi potrzeba zaskalowania wszystkich graficznych elementów bloku oprócz jego atrybutów (schematy, mapy, itp.).
Dla takich szczególnych przypadków powstał właśnie krótki program. Wykorzystuje pewną cechę bloków z atrybutami, inaczej jak wszystkie inne elementy graficzne wchodzące w skład definicji bloku, atrybuty są osobymi obiektami. Mogą mieć inne (niż zadeklarowane w definicji bloku) położenie, kolor, styl tekstu, itp. Wykorzystując tę cechę zmieniamy skalę bloku (nie zmieniając skali atrybutów). Oczywiście modyfikacji nie możemy wykonać za pomocą command, tylko bozpośrednio zmieniając dane bloku w rysunkowej bazie danych. Poniżej kod programu:

;;; ============================================================ ;
;;; 1999 by kojacek (modyfikacje: 2003, 2009)                    ;
;;; ============================================================ ;
(vl-load-com)
;;;
(defun C:BSC ( / Data oF nF)
  (if
    (setq Sel (entsel "\nWskaz blok: "))
    (progn
      (setq Data (entget (car Sel)))
      (if
	(= (cdr (assoc 0 Data)) "INSERT")
	(if
          (vlax-write-enabled-p (car Sel))
	  ; (not (jk:ENT_isLocked (car Sel) T))
	  (progn
	    (setq oF (cdr (assoc 41 Data)))
	    (initget (+ 2 4))
	    (if
	      (setq nF
		(getreal 
                  (strcat
	            "\nPodaj nowy współczynnik skali [aktualny = "
                    (rtos oF)
                    "]: "
		  )
                )
	      )
	      (progn
		 ; (jk:SYS_UndoBegin)
                (foreach % '(41 42 43)
		  (setq Data
		    (subst (cons % nF)(assoc % Data) Data)
		  )
		)
		(entmod Data)
                ; (jk:SYS_UndoEnd)
	      )
	      (princ "\nNie podano współczynnika skali. ")
            )
          )
	)
	(princ "\nTo nie jest blok. ")
      )
    )
    (princ "\nNic nie wskazano. ")
  )
  (princ)
)