レイアウト・インスタンスを所定の順番で一直線に並べ替える。
(define (jp_wikiwiki_aiou__sortLayout objects isForeThan getKey) (let ((insts (setof o objects (equal "inst" (dbGetq o objType))))) ; インスタンスが2個以上の場合のみ (when (and insts (cdr insts)) ; リスト中のインスタンスを与えられた基準で並べ替え (setq insts (mapcar 'cadr (sortcar (mapcar (lambda (i) (list (funcall getKey i) i)) insts) isForeThan))) (letseq ( (i (car insts)) (x (xCoord (dbGetq i xy))) ; 最初のインスタンスのX座標値をX位置の起点とする (y (yCoord (dbGetq i xy))) ; 最初のインスタンスのY座標値をY位置の起点とする (Rectangle_getWidth (lambda (r) (abs (apply 'difference (mapcar xCoord r))))) ; (Rectangle_getHeight (lambda (r) (abs (apply 'difference (mapcar yCoord r))))) ) (dbSetq i "R0" orient) ; 次のX位置は現在のX位置に現在のインスタンスの幅を足したもの (setq x (plus x (funcall Rectangle_getWidth (dbGetq i bBox)))) (foreach i (cdr insts) (dbSetq i (list x y) xy) (dbSetq i "R0" orient) ; 次のX位置は現在のX位置に現在のインスタンスの幅を足したもの (setq x (plus x (funcall Rectangle_getWidth (dbGetq i bBox)))) ) ) ) insts ) )
現在選択しているインスタンスを、現状のX座標値が小さい順番に並べ替える場合
(jp_wikiwiki_aiou__sortLayout (geGetSelectedSet) 'lessp (lambda (inst) (xCoord (dbGetq inst xy))))
現在選択しているインスタンスを、現状のY座標値が小さい順番に並べ替える場合
(jp_wikiwiki_aiou__sortLayout (geGetSelectedSet) 'lessp (lambda (inst) (yCoord (dbGetq inst xy))))
現在選択しているインスタンスを、現状のX座標値が大きい順番に並べ替える場合
(jp_wikiwiki_aiou__sortLayout (geGetSelectedSet) 'greaterp (lambda (inst) (xCoord (dbGetq inst xy))))
現在選択しているインスタンスを、現状のY座標値が大きい順番に並べ替える場合
(jp_wikiwiki_aiou__sortLayout (geGetSelectedSet) 'greaterp (lambda (inst) (yCoord (dbGetq inst xy))))
現在選択しているインスタンスを、インスタンス名が小さい順番に並べ替える場合
(jp_wikiwiki_aiou__sortLayout (geGetSelectedSet) 'alphalessp (lambda (inst) (dbGetq inst name)))
現在選択しているインスタンスを、インスタンス名が大きい順番に並べ替える場合
(jp_wikiwiki_aiou__sortLayout (geGetSelectedSet) (lambda (a b) (plusp (alphaNumCmp a b))) (lambda (inst) (dbGetq inst name)) )