来看看轴线绘制中的这个子程序:
 - (defun Do_Draw_img (/ ll l1 l2 l3 l4 kjsum jssum cor axisld)
- (save_list)
- (setq axisld (strcat Netbee_Lisp_Dir "RectAxis"))
- (if (or (/= Sum_KJ 0.0)
- (/= Sum_JS 0.0)
- ) ;_ 结束and
- (progn
- (setq ll (list
- (Do_resolve UpKJ_list)
- (Do_resolve LowKJ_list)
- (Do_resolve LeftJS_list)
- (Do_resolve RightJS_list)
- ) ;_ 结束list
- ll (Do_Get_Ptlist ll '(0 0) Sum_KJ Sum_JS 0)
- ) ;_ 结束setq
- (SETQ kjsum Sum_KJ
- jssum Sum_JS
- ) ;_ 结束setq
- (cond ((= Sum_KJ 0.0)(setq kjsum jssum))
- ((= Sum_JS 0.0)(setq jssum kjsum)))
- ;;这里开始动态绘制
- (start_image "ImagePreview")
- (fill_image 0 0 img_x img_y -2)
- [color=red]
- ;;WinXY->DclAB函数仅是将直线、圆、弧等等的图元分解为一些直线数据返回,当然这些直线数据已经是图象框中的坐标数据表。
- ;;然后反复循环地调用(apply 'vector_image a)即可![/color]
- (foreach a (WinXY->DclAB
- (append '(nil "0") '((-2000 -2000))(list(list (+ kjsum 2000)(+ jssum 2000 ))))
- "ImagePreview"
- ) ;_ 结束WinXY->DclAB
- (apply 'vector_image a)
- ) ;_ 结束foreach
- (setq cor 0)
- (foreach b ll
- (setq cor (1+ cor))
- (if b
- (foreach a
- (WinXY->DclAB
- (append
- (list T (itoa cor))
- b
- ) ;_ 结束append
- "ImagePreview"
- ) ;_ 结束WinXY->DclAB
- (apply 'vector_image a)
- ) ;_ 结束foreach
- ) ;_ 结束if
- ) ;_ 结束foreach
- (foreach a
- (WinXY->DclAB
- (append
- '(T "7")
- (list (list 0 0) 0)
- ) ;_ 结束append
- "ImagePreview"
- ) ;_ 结束WinXY->DclAB
- (apply 'vector_image a)
- ) ;_ 结束foreach
- (end_image)
- ) ;_ 结束progn
- (progn
- (start_image "ImagePreview")
- (fill_image 0 0 img_x img_y -2)
- (slide_image 0 -50 img_x img_y axisld)
- (end_image)
- )
- ) ;_ 结束if
- ) ;_ 结束defun
呵呵,其实说明白后很简单的。^_^
使用foreach来反复地画呀画,画呀画,画到手酸为止,可惜计算机它不知累啊。所以就可以用这种笨办法!这个办法真的很笨! |