请求完善CASS高程点内插程序
本帖最后由 874185423 于 2011-11-6 09:25 编辑我刚接触LISP编程,编辑了个CASS内插高程点的程序,还有些地方希望高手给完善一下。代码如下:
(defun c:gscg ()
(setq P1 (getpoint "\n 第一个点:"))
(setq z1 (caddr p1))
(while (if (= 0 z1) (setq P1 (getpoint "\n 所选高程点为0,请重新选择第一个点:")));;A
(setq z1 (caddr p1))
(= 0 z1)
)
(setq y1 (car p1))
(setq x1 (cadr p1))
(setq z1 (caddr p1))
(setq P2 (getpoint "\n 第二个点:"))
(setq z2 (caddr p2))
(while (if (= 0 z2) (setq P2 (getpoint "\n 所选高程点为0,请重新选择第二个点:")))
(setq z2 (caddr p2))
(= 0 z2)
)
(setq y2 (car p2))
(setq x2 (cadr p2))
(setq z2 (caddr p2))
(setq n (getint "\n 插入点个数<最大个数为3,默认个数为3>:"));;B
(if (> n 3) (setq n 3)
(if (null n) (setq n 3))
)
(setq m (1+ n))
(setq y0 (/ (- y1 y2) m))
(setq x0 (/ (- x1 x2) m))
(setq z0 (/ (- z1 z2) m));; C
(setq test 1)
(while ( <= test (1- m))
(setq y ( + y2 ( * test y0)))
(setq x ( + x2 ( * test x0)))
(setq z ( + z2 ( * test z0)))
(setq test (1+ test))
(setq p (list y x z))
(setq zz (rtos z 2 2))
(command "dd" "202101" "1" p zz);;D
(command)
)
)
问题:1,在A行前加while,当z1不等于0时怎样结束循环?
2,在B行加入默认值3,(if (null 3) (setq n 3))与下面一行怎样处理?
3,在C下面一行加入“(setq L (sqrt (+ (expt y0 2) (expt x0 2))))
(setq s (/ L m)
当S小于15时出现文字提示:“插入后的高程点间距为S米,是否继续?<N>
<N>时执行选点 P1 P2
<Y>时继续执行”
应怎样写?
4,D行调用CASS的dd命令,有时会出现CAD命令嵌套深度超过4层,用什么方法解决?
本帖最后由 874185423 于 2011-11-6 09:26 编辑
第1,2个问题已解决,已在一楼修改 这个贴的内插程序也不错
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=100043&reltid=93209&pre_thread_id=0&pre_pos=1&ext=
页:
[1]