高程与坐标
指定起点按照顺序一次性提取多段线各端点高程及坐标 从网上搜了个获取三维多段线顶点坐标高程的函数,希望对你有用。(Defun ayGetPolyLineVTX (LwPolyEntName / entData1 entName1pel ptp wpl wpll plp par
ct pen rl pn clk pt
al gx bj np xc gg
rr cp retList
)
(setq entName1 LwPolyEntName)
(setq retList nil)
(setq entData1 (entget entName1))
(if (= "POLYLINE" (Cdr (Assoc 0 entData1)))
(progn
(setq pel entData1 ;取出对象表.
ptp (Cdr (Assoc 70 pel)) ;取出结束片段型.
wpl '() ;自建的点位数表.
wpll '()
entName1 (EntNext entName1)
pen entName1
) ;end_setq
(While (/= "SEQEND" (Cdr (Assoc 0 (entget pen)))) ;如果没束.
(setq pel(entget pen) ;取得顶点对象数据表.
plp(Cdr (Assoc 10 pel)) ;取出控制点点位.
par(Cdr (Assoc 42 pel)) ;取出弓弦比.
wpl(Cons (List plp par) wpl) ;将数据加到WPL表中.
wpll (cons plp wpll)
) ;end_setq
(setq pen (EntNext pen)) ;搜索下一个对象.
) ;end_while
(setq wpll (Reverse wpll))
;以下代码暂时没有用!
(setq ct (If (= 0 (Cadr (Car wpl)))
"直线片段封闭"
"弧片段封闭"
)
)
(setq wpl (Cons (Last wpl) wpl) ;加入封闭点.
wpl (Reverse wpl) ;整理WPL表.
rl (Length wpl)
pn 0
) ;end_setq
(setq clk (If (Or (= 0 ptp) (= 128 ptp))
"开口"
"封闭"
)
)
(Repeat (1- rl) ;逐点分析.
(setq al (Nth pn wpl) ;取出点数据表.
pt (Car al) ;取出点位.
) ;end_setq
(If (And (/= 0.0 (Cadr al)) (Nth pn wpl)) ;如果是断.
(Progn (setq gx (Cadr al) ;取出弓比.
bj (* (ATAN (ABS gx)) 4) ;计算包角.
np (Car (Nth (1+ pn) wpl)) ;取出下一点位.
xc (* 0.5 (Distance pt np)) ;半弦长计算.
gg (* gx xc) ;弓高计算.
rr (/ (+ (* xc xc) (* gg gg)) (* 2 gg))
) ;end_setq
(setq cp (Polar pt (setq pa (Angle pt np)) xc)
cp (Polar cp (+ pa (* 0.5 PI)) (- rr gg))
) ;end_setq
) ;end_progn
) ;end_if
(setq pn (1+ pn))
) ;end_repeat
(setq retList wpll)
) ;end_progn
) ;end_if
) 不错的东西,谢谢
页:
[1]