幻灯片SLD生成DWG(提取幻灯片数据用LINE画到图中)
本帖最后由 marting 于 2018-4-11 19:56 编辑读取幻灯数据,充满窗口绘制,有流文件读取的函数,和充满窗口的点的矩阵变换函数,纯LISP实现。
**** Hidden Message *****
(defun xd::slide:->dwg (sld)
(defun _init ()
(xd::file:seek 18)
(setq lever (car (xd::file:read 1)))
(if (= lever 1)
(progn)
(progn (setq limit_x(xd::file:bin2int (xd::file:read 2))
limit_y(xd::file:bin2int (xd::file:read 2))
aspratio (xd::file:bin2int (xd::file:read 4))
)
)
)
(setq aspratio (/ aspratio 1000000.0))
(setq box (XD::Doc:GetView4Pnt)
origin (car box)
h (distance (nth 1 box) (nth 2 box))
w (distance (nth 0 box) (nth 1 box))
)
(if (< h w)
(progn (setq sy (/ limit_x (* aspratio limit_y))
sx 1
limit_y (/ limit_x aspratio)
sx (/ h limit_y)
sy (* sy sx)
)
)
(progn (setq sy 1
sx (* limit_y aspratio)
sy (/ w limit_x)
sx (* sx sy)
)
)
)
(xd::file:seek "4")
)
(defun _draw_line ()
(setq from_x (xd::file:bin2int fcode))
(setq val (xd::file:read 2))
(setq from_y (xd::file:bin2int val))
(setq val (xd::file:read 2))
(setq to_x (xd::file:bin2int val))
(setq val (xd::file:read 2))
(setq to_y (xd::file:bin2int val))
(setq p1 (list (atof (itoa from_x)) (atof (itoa from_y)) 0.0)
p2 (list (atof (itoa to_x)) (atof (itoa to_y)) 0.0))
(setq points (cons (list p1
p2
)
points
)
)
(command "line" (_trans p1) (_trans p2) "")
(command "chprop" (entlast) "" "color" m_cadcolor "")
(setq lastx to_x
lasty to_y
)
)
(defun _chg_color ()
(setq m_cadcolor oper)
)
(defun _draw_offset ()
(setq offx1 oper)
(setq val (xd::file:read 1))
(setq offy1 (car val))
(setq val (xd::file:read 1))
(setq offx2 (car val))
(setq val (xd::file:read 1))
(setq offy2 (car val))
(setq fromx (+ lastx offx1)
fromy (+ lasty offy1)
tox (+ lastx offx2)
toy (+ lasty offy2)
lastx fromx
lasty fromy
y1 fromy
y2 toy
p1 (list (atof (itoa fromx)) y1 0.0)
p2 (list (atof (itoa tox)) y2 0.0)
)
(if (not (equal p1 p2 1e-3))
(progn (command "line" (_trans p1) (_trans p2) "")
(command "chprop" (entlast) "" "color" m_cadcolor "")
)
)
)
(defun _draw_common_pt ()
(setq fromx lastx
fromy lasty
offx2 oper
)
(setq val (xd::file:read 1))
(setq offy2 (car val))
(setq tox (+ lastx offx2)
toy (+ lasty offy2)
lastx tox
lasty toy
y1 fromy
y2 toy
p1 (list fromx y1 0)
p2 (list tox y2 0)
)
(if (not (equal p1 p2 1e-3))
(progn (command ".line" (_trans p1) (_trans p2) "")
(command "chprop" (entlast) "" "color" m_cadcolor "")
)
)
)
(defun _eof_code () (princ))
(defun _trans (pt)
(setq ljb pt
scl (min sx sy)
pt(mapcar '(lambda (x) (* scl x)) pt)
)
(setq m (xd::mat:identity 3))
(setq m (xd::mat:translation origin))
(setq pt (xd::point:transform pt m))
pt
)
(defun _trans1 (pt) pt)
(if (and (setq sld (findfile sld))
(xd::file:open sld 1)
(= (xd::file:bin2str (xd::file:read 17))
"AutoCAD Slide\r\n\032"
)
)
(progn (_init)
(setq tf t
points nil
)
(while (and tf (setq fcode (xd::file:read 2)))
(setq oper (car fcode)
func (cadr fcode)
)
(cond ((and (>= func 128) (<= func 250)) (setq tf nil))
((<= func 127) (_draw_line))
((= func 251) (_draw_offset))
((= func 252) (_eof_code))
((= func 253) (_draw_solid))
((= func 254) (_draw_common_pt))
((= func 255) (_chg_color))
)
)
(xd::file:close)
)
)
(princ)
)
执行命令TT
(defun c:tt ()
(if (setq sld (getfiled "\n选择生成DWG的SLD文件" "" "sld" 4))
(progn (xd::slide:->dwg sld))
)
(princ)
)
要想按原来大小绘制,把上面代码里面的函数 _trans1 改成_trans 就可以了。 大师怎么有这么多时间研究呀..真厉害
這畫面是何意?
不仅仅是满足研究幻灯库的格式了,这个要对SLD的格式有很深的理解,才能做到字节级的读取二进制的SLD,并把点连接起来 圆弧用线段拟合?
liuyj 发表于 2018-4-11 20:20
圆弧用线段拟合?
幻灯片数据就是这样,里面只有颜色号、点X,点Y,SOLID,和字体SHX一样,起笔落笔,偏移,再起笔落笔
本帖最后由 cable2004 于 2018-4-12 08:32 编辑
研究幻灯片数据,厉害呀!
大师提供一下 xd::apply函数 大师能不能搞一个类似天正建筑中的
幻灯管理的集成应用啊
膜拜一下{:1_1:}{:1_1:}{:1_1:} q3_2006 发表于 2018-4-11 19:59
大师怎么有这么多时间研究呀..真厉害
大师已经走火入魔,停不下来了.......
厉害了,我的哥{:1_20:} ynhh 发表于 2018-4-12 08:28
大师能不能搞一个类似天正建筑中的
幻灯管理的集成应用啊
天正幻灯管理都有什么功能,请截取几个图片贴上来看看。
回复学习。谢谢 管理内容包括:增加、删除、拷贝、移动、改名等。
新建】:新建一个用户幻灯库文件,选择文件位置并输入文件名称。
【打开】:用户选择需要编辑的幻灯库文件。如果该文件不存在,则取消操作。幻灯库文件后缀为SLB。每个幻灯库可包含一个或多个幻灯片SLD文件。本系统支持多库操作,即不关闭当前库的条件下打开目标幻灯片文件,并将此文件设为当前库。
提示:【打开】具有记录历史的功能,可显示最后4次打开的库文件。
【批量入库】:可将所选定的幻灯片SLD文件添加到当前幻灯库中。
【拷贝到】将幻灯库中的幻灯片文件提取出来,另存到指定的目录下中,形成单独的幻灯片文件。
提示:要将幻灯库中的幻灯片文件复制到指定的SLB文件中,可以将目标SLB幻灯库加入管理系统,然后才用鼠标拖拽此幻灯片文件至SLB即可。
(红)【删除】将选中的幻灯库从系统面板中删除。
(黑)【删除】将选中的幻灯片从幻灯库中删除,不可恢复。
其他功能可以参考图库管理界面。