可以对属于现有块的属性进行排序。请参阅下面的代码。所以我之前的建议似乎是可行的。
遗憾的是,现有块也有一个随机插入点。但是(删除现有属性后)可以建立左下角。该点可用于计算新块的插入点。
- (defun KGA_List_Divide_3 (lst / ret)
- (repeat (/ (length lst) 3)
- (setq ret (cons (list (car lst) (cadr lst) (caddr lst)) ret))
- (setq lst (cdddr lst))
- )
- (reverse ret)
- )
- ; (SortedAttValueList (car (entsel))) =>
- ; (
- ; (("DESC1" "AA") ("TETHERSOR" "10-10-00-00") ("TETHERQTY" "15"))
- ; (("DESC2" "BA") ("DFNENCLSOR" "07-07-01-09") ("DFNENCLNO" "1"))
- ; (("DESC3" "CA") ("SPLICESOR" "02-02-04-06") ("NOOFSPLICE" "10"))
- ; (("DESC4" "AB") ("SPLITSOR" "07-02-05-04") ("SPLITRQTY" "1"))
- ; (("DESC5" "AC") ("LFNOTDRSOR" "55-06-06-06") ("LFNQTY" "1"))
- ; (("DESC6" "DB") ("FIBERSOR" "22-04-03-05") ("FIBERQTY" "2"))
- ; )
- (defun SortedAttValueList (enm / obj)
- (setq obj (vlax-ename->vla-object enm))
- (vl-sort
- (mapcar
- '(lambda (sub)
- (mapcar 'cdr (vl-sort sub '(lambda (a b) (< (car a) (car b)))))
- )
- (KGA_List_Divide_3
- (mapcar
- '(lambda (att / tag)
- (setq tag (strcase (vla-get-tagstring att)))
- (list
- (cond
- ((wcmatch tag "DESC*") 0)
- ((wcmatch tag "*SOR") 1)
- (T 2)
- )
- tag
- (vla-get-textstring att)
- )
- )
- (vlax-invoke obj 'getattributes)
- )
- )
- )
- '(lambda (a b) (< (caar a) (caar b)))
- )
- )
|