本帖最后由 作者 于 2010-6-16 12:48:54 编辑
前几天在老虎空间帮人改了段代码(不好意思,不知道源代码是哪位的,采用了时间作为块名的方法),主要加了一段,让块的插入点在左下角的,就顺便贴一下 :),有空再来改成不用command的 - ;;std-lib
- (defun std-sslist (ss / n lst)
- (if (eq 'pickset (type ss))
- (repeat (setq n (fix (sslength ss))) ; fixed
- (setq lst (cons (ssname ss (setq n (1- n))) lst))
- )
- )
- )
- ;;get the boundingbox of object by qjchen
- (defun leftcornerofss(ss / maxpt maxptlst minpt minptlst obj x)
- (setq ss (std-sslist ss))
- (foreach x ss
- (setq obj (vlax-ename->vla-object x))
- (setq minPt (vlax-make-safearray vlax-vbdouble '(0 . 2)))
- (setq maxPt (vlax-make-safearray vlax-vbdouble '(0 . 2)))
- (vla-GetBoundingBox Obj 'minpt 'maxpt) ; 得到包围框
- (setq minPt (vlax-safearray->list minPt))
- (setq maxPt (vlax-safearray->list maxPt))
- (setq minPtlst (append minPtlst (list minPt)))
- (setq maxPtlst (append maxPtlst (list maxPt)))
- )
- (list (apply 'min (mapcar 'car minPtlst))
- (apply 'min (mapcar 'cadr minPtlst))
- 0
- )
- )
- (defun C:bkK (/ HOLDECHO HOLDBLIP A AA BLKREF pt left)
- (VL-LOAD-COM)
- (setq AA (ssget))
- (setq leftc (leftcornerofss AA))
- ;(grdraw (list 0 0 0) leftc 1)
- (command "_.undo" "_group")
- (setq HOLDECHO (getvar "cmdecho"))
- (setq HOLDBLIP (getvar "blipmode"))
- (setvar "cmdecho" 0)
- (setvar "blipmode" 0)
- (setq A (rtos (* (getvar "CDATE") 1E8)))
-
- (if (/= AA NIL)
- (progn
- (command "_.BLOCK" A "non" leftc AA "")
- (command "_.INSERT" A "non" leftc "" "" "")
- )
- )
- (setvar "blipmode" HOLDBLIP)
- (setvar "cmdecho" HOLDECHO)
- (command "_.undo" "_end")
- (princ)
- )
|