tooo
发表于 2019-1-25 09:03:44
本帖最后由 tooo 于 2019-1-25 09:04 编辑
e2002 发表于 2019-1-24 19:34
关键是 排序规则和排序算法。因为最近刚写了BatchLayouts程序,就这个问题和 qf 讨论过。
按左右,上下 ...
感谢版主回复。
找了一下秋版源码,图框排序应该是这一段:
;;对图框排序
(defun OrderFrames (bdlist / vscoor)
(defun vscoor (n) ; 屏幕视觉坐标,允许误差啦~大致相同就相同了。
(fix (/ n (/ (getvar "viewsize") 100.0)))
)
;; main orderframes
(if(= (getvalue 'PlotOrder) "LeftToRightRadio")
(setq bdlist (vl-sort bdlist
'(lambda (f1 f2 / rt x1 y1 x2 y2 vs)
; x1, y1对应于第一组的图框中心点的坐标
(setq y1 (vscoor (cadar f1)))
(setq y2 (vscoor (cadar f2)))
(setq x1 (vscoor (caar f1)))
(setq x2 (vscoor (caar f2)))
(setq rt (> y1 y2))
;优先Y坐标比较,大的话在前
(if (and (null rt) (= y1 y2))
;Y坐标相同时,比较X坐标,小的话在前
(setq rt (< x1 x2))
)
rt
)
)
)
)
(if(= (getvalue 'PlotOrder) "TopToBottomRadio")
(setq bdlist (vl-sort bdlist
'(lambda (f1 f2 / rt)
(setq y1 (vscoor (cadar f1)))
(setq y2 (vscoor (cadar f2)))
(setq x1 (vscoor (caar f1)))
(setq x2 (vscoor (caar f2)))
(setq rt (< x1 x2))
;优先X坐标比较,小的话在前
(if (and (null rt) (= x1 x2))
;当X坐标相同时,比较Y坐标,大的话在前
(setq rt (> y1 y2))
)
rt
)
)
)
)
(if(= (getvalue 'ReverseOrder) "1")
(setq bdlist (reverse bdlist))
)
bdlist
)
如何对bdlist执行两次vl-sort呢?是在前两个 if 语句后完整重复同样代码一次,还是在各个 if 语句后各自重复,又或是其它,求指教。
右手边
发表于 2019-1-26 14:13:44
佩服,终于等到更新,很实用,非常感谢
hanyun917
发表于 2019-1-26 15:13:47
能自动对应纸张大小就完美了!
e2002
发表于 2019-1-26 19:31:21
本帖最后由 e2002 于 2019-1-26 19:33 编辑
tooo 发表于 2019-1-25 09:03
感谢版主回复。
找了一下秋版源码,图框排序应该是这一段:
;; 边界列表的2次排序函数
(defun _lkpt_Layout_CreateByTitleBlocks_Sort ( / i1 sym1 i2 sym2 l_sort u v lReturn)
(cond
( (= sSort "1") (setq i1 1 sym1 '> i2 0 sym2 '<) );;左到右,上到下
( (= sSort "2") (setq i1 1 sym1 '< i2 0 sym2 '<) );;左到右,下到上
( (= sSort "3") (setq i1 1 sym1 '> i2 0 sym2 '>) );;右到左,上到下
( (= sSort "4") (setq i1 1 sym1 '< i2 0 sym2 '>) );;右到左,下到上
( (= sSort "5") (setq i1 0 sym1 '< i2 1 sym2 '>) );;上到下,左到右
( (= sSort "6") (setq i1 0 sym1 '> i2 1 sym2 '>) );;上到下,右到左
( (= sSort "7") (setq i1 0 sym1 '< i2 1 sym2 '<) );;下到上,左到右
( (= sSort "8") (setq i1 0 sym1 '> i2 1 sym2 '<) );;下到上,右到左
)
;; 第一次排序
(setq l_sort (vl-sort lBoundarys '(lambda (u v) ((vl-symbol-value sym1) (nth i1 (car u)) (nth i1 (car v))))))
;; 第二次排序,考虑 rFuzzy
(setq l_sort (vl-sort l_sort '(lambda (u v) (if (< (abs (- (nth i1 (car u)) (nth i1 (car v)))) rFuzzy)
((vl-symbol-value sym2) (nth i2 (car u)) (nth i2 (car v)))
nil
)
)
)
)
(setq lReturn l_sort)
);end defun _lkpt_Layout_CreateByTitleBlocks_Sort
zh0n9wen
发表于 2019-1-27 13:58:44
下载最新版(修改日期2019.01.27),图块自匹配勾选后,无法预览,也无法打印,是什么原因呐?
右手边
发表于 2019-1-27 14:28:33
大神 一直在使用您的程序 收益良多 非常感谢又更新了 这次更新的图块自匹配功能碰到一个问题,图块设置好后,无法打出PDF,点击确定了就直接退出了,CAD平面显示第一张图满布状态。
右手边
发表于 2019-1-27 14:31:32
zh0n9wen 发表于 2019-1-27 13:58
下载最新版(修改日期2019.01.27),图块自匹配勾选后,无法预览,也无法打印,是什么原因呐?
遇到相同问题了
gududefan
发表于 2019-1-28 08:59:17
右手边 发表于 2019-1-27 14:28
大神 一直在使用您的程序 收益良多 非常感谢又更新了 这次更新的图块自匹配功能碰到一个问题 ...
跟我情况一样,静待楼主解决问题
fs7jpw
发表于 2019-1-28 10:58:30
楼主,麻烦看一下,一开始设置的时候是好的额,不知道怎么回事,用了两次后就出现这个对话框了。
右手边
发表于 2019-1-28 17:18:43
fs7jpw 发表于 2019-1-28 10:58
楼主,麻烦看一下,一开始设置的时候是好的额,不知道怎么回事,用了两次后就出现这个对话框了。
估计是你预设的种类太多了对话框放不下了你减少种类试试