Examples/インスタンスの並べ替え

Last-modified: 2022-08-10 (水) 20:51:26

レイアウト・インスタンスを所定の順番で一直線に並べ替える。

(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))
)