准备入门 发表于 2011-6-18 09:25:12

基于组件的三维CAD系统开发的关键技术研究(二)

  2 .2地形切剖面
  水电工程设计中经常遇到在地形图上切剖面的问题,借助Visual Lisp可以实现快速切剖面。
  (1) 初始地形图处理
  把带z坐标的地形平面图进行变换,变换后z坐标值成为层名,为加快切剖面运行速度,把“LWPOLYLINE”和”SPLINE”均转化为”LINE“线,程序如下
  (defun c:pltol()
  ;LWPOLYLINE转化为LINE
  (setq n 0)
  (setq e (ssget"X" (list (cons 0 "LWPOLYLINE"))))
  (setq sh (sslength e))
  (if e
  (while (< n sh)
  (setq e1 (ssname e n))
  (command "pedit" e1 "d" "")
  (setq x (entget e1))
  (setq ngc (atof (setq la (fld 8 x))))
  (command "explode" e1)
  (setq n (+ n 1))
  ) ) )
  (defun fld (num lst)
  (cdr (assoc num lst))
  )
  (defun c:spltol ()
  ;SPLINE转化为LINE
  (setq n 0)
  (setq e (ssget "X" (list (cons 0 "SPLINE"))))
  (setq sh (sslength e))
  (if e
  (while ( nm 5)
  (if (= (car (nth nm x)) 10)
  (progn
  (setq b1 (nth nm x))
  (setq x1 (cadr b1))
  (setq y1 (caddr b1))
  (setq z1 (cadddr b1))
  (setq glb (list x1 y1))
  (command glb)
  ) )
  (setq nm (- nm 1))
  )))
  (command "")
  (setq n (+ n 1))
  )))
  (2)切剖面
  输入剖面编号,在平面地形图上指定两点确定剖面剖切线位置,指定剖面图起点,利用AutoCAD的inters函数搜索剖切线与地形图的全部交点,自动计算交点坐标,计算交点与剖面位置起点的距离,按各交点高程和与起点的距离形成剖面图各点坐标,即可用本文实例1坐标画线生成地形图的剖面。
  (defun dxtent1 ()
  (setq n 0 xdzb nil)
  (setq xds 0)
  (setq sh (sslength e1))
  (while ( dxtgcgc 10)
  (progn
  (setq pst (fld 10 x))
  (setq pet (fld 11 x))
  (setq zb (list gc
  (list (car pst) (cadr pst))
  (list (car pet) (cadr pet))
  ))
  (setq xdzb (cons zb xdzb))
  (setq xds (+ xds 1))
  ))))
  (setq n (+ n 1))
  ))
  (defun c:dxtsec ()
  (setq pmh (+ pmh 1))
  (setq pmh (getstring "/n剖面号" ))
  (setq pt1 (getpoint "/n剖切位置起点:"))
  (setq pt2 (getpoint pt1 "/n剖切位置终点:"))
  (setq pt3 (getpoint "/n剖面图布置:"))
  (setq p01 pt3)
  (setq e1 (ssget "F" (list pt1 pt2)));利用AutoCAD的目标选择“F”方式选取与剖切线相交的地形线。
  (dxtent);获取与剖切线相交地形线的坐标
  (setq mxgc -100)
  (setq mngc 10000)
  (setq m 0 pmp nil)
  (setq n xds i 0)
  (while (< i n)
  (setq crosp
  (inters pt1 pt2 (nth 1 (nth i xdzb)) (nth 2 (nth i xdzb)) 1)
  );求剖切线与地形线的交点
  (if (/= crosp nil)
  (progn
  (setq dxtgcgc (nth 0 (nth i xdzb)))
  (setq mxgc (max mxgc dxtgcgc))
  (setq mngc (min mngc dxtgcgc))
  (setq dst (distance pt1 crosp));剖切线起点与交点的距离
  (setq dst (* (/ blcz dxthtbl) dst))
  (setq pmp (cons (list m dst dxtgcgc) pmp))
  (setq m (+ m 1))
  ))
  (setq i (+ i 1))
  ))
文章关键词:
页: [1]
查看完整版本: 基于组件的三维CAD系统开发的关键技术研究(二)

中国磨床技术论坛
论 坛 声 明 郑重声明:本论坛属技术交流,非盈利性论坛。本论坛言论纯属发表者个人意见,与“中国磨削技术论坛”立场无关。 涉及政治言论一律删除,请所有会员注意.论坛资源由会员从网上收集整理所得,版权属于原作者. 论坛所有资源是进行学习和科研测试之用,请在下载后24小时删除, 本站出于学习和科研的目的进行交流和讨论,如有侵犯原作者的版权, 请来信告知,我们将立即做出整改,并给予相应的答复,谢谢合作!

中国磨削网