把一定范围内的高程点移动到道路中线和横断面线交点
现场测量高程的时候,高程点一般不会正好在道路中线豫横断面线的交点处。这样计算时候,有的会无发查找到这个高程点横断面线位于dmx图层的直线或者PL线
如何实现:
1、选择道路中线和横断面线,设定一个距离范围,比如0.2,然后在交点0.2m范围内的高程点自动移动到交点上。
多谢
刚好前段时间写了个,自己改改吧
;;; 从一点返回选择框(指定选择的长宽)
(defun Get-UCS_Rec2Pt (PT0 DLL HLL /B_L H_L PT1 PT2 PT3 PT4 VP_ANG PTs PT4s pt)
(setq B_L (* DLL 0.5)) ;边长*0.5
(setq H_L (* HLL 0.5)) ;高度*0.5
(setq PT1 (polar PT0 pi B_L)) ;左侧边的中点
(setq PT1 (polar PT1 *270_DuHu* H_L)) ;左下角
(setq PT2 (polar PT1 0 DLL)) ;右下角
(setq PT3 (polar PT2 *90_DuHu* HLL)) ;右上角
(setq PTs (list PT1 PT3))
(setq PT4s (mapcar '(lambda (pt) (trans pt 1 0)) PTs)) ;返回坐标值为世界坐标系
PT4s
)
(defun C:TT (/ BBX EN PT0 PT1 SEL)
(setq Pt0 (getpoint "\n指定交点:")) ;曲线交点自己计算
(setq bbx (Get-UCS_Rec2Pt (trans Pt0 0 1) 0.2 0.2)) ;选择框范围
(if (setq sel (ssget "_C"
(trans (car bbx) 0 1)
(trans (cadr bbx) 0 1)
(list (cons 0 "INSERT")) ;过滤条件 -- 自己写
)
) ;选择包围框内的图元
(progn
(princ sel)
(setq en (ssname sel (1- (sslength sel)))) ;获得选集中第一个图元名
(setq pt1 (cdr (assoc 10 (entget en))))
(vl-cmdf "_MOVE" en "" pt1 Pt0)
)
)
) (setq *45_DuHu* (* 0.25 pi) ;_ 45度(弧度)
*90_DuHu* (* 0.5 pi) ;_ 90度(弧度)
*270_DuHu* (* 1.5 pi) ;_ 270度(弧度)
*360_DuHu* (* 2.0 pi) ;_ 360度(弧度)
)
函数Get-UCS_Rec2Pt取的是方形选择区,ssget "_C"也只能选择方形选择区,圆形选择区算起来就复杂了,没有直接的函数进行圆形选择区的计算,建议用近似距离的方形选择代替就行
圈选可以用这个
;;; Cen - 插入点
;;; Rad - 圆的半径
;;; N --- 圆的等分数量
(defun Get_CirclePtS (Cen Rad N / angdiv ANG ENLST)
(setq angdiv (/ (* 2 pi) N))
(setq ang 0)
(setq enlst (list (polar cen ang Rad)))
(repeat (1- N)
(setq enlst (cons (polar cen (setq ang (+ ang angdiv)) Rad) enlst)) ;画红色圆弧,100等分,模拟圆弧
)
enlst
)
(ssget "CP" (Get_CirclePtS (getpoint "\n指定点:") 0.2 36)) ;圈交--圆36等分 本帖最后由 f4800 于 2022-3-15 00:34 编辑
mj0000 发表于 2022-3-14 15:55
刚好前段时间写了个,自己改改吧
;;; 从一点返回选择框(指定选择的长宽)
(defun Get-UCS_Rec2Pt (PT0 D ...
多谢大师trans 涉及到坐标系变换 能否去掉这个功能?
默认就是CAD的模型空间坐标。
因为用了 trans 函数, 图形必须用 UCSW 操作以后才能运行 。否则会报错
删除红色部分就行。其余类似(trans (car bbx) 0 1)
mj0000 发表于 2022-3-15 08:41
删除红色部分就行。其余类似(trans (car bbx) 0 1)
再次感谢 大师 本帖最后由 f4800 于 2022-3-15 09:03 编辑
mj0000 发表于 2022-3-15 08:41
删除红色部分就行。其余类似(trans (car bbx) 0 1)
(setq aaa (/ PI 180))
(setq *270_DuHu* (* 270 aaa ) )
(setq *90_DuHu*(* 90 aaa ) )
这个变量不知道对不对。另外, 距离 0.2 好像不是交点为0.2的圆的范围
mj0000 发表于 2022-3-15 09:16
(setq *45_DuHu* (* 0.25 pi) ;_ 45度(弧度)
*90_DuHu* (* 0.5 pi) ;_ 90度(弧度)
...
已修改在空间留言了。。请核查 :handshake 应该没问题了,画一个点pt,以点为中心,画个0.2*0.2的方框,放一个图块A到这个方框内,运行程序,选择中心点pt,图块A的插入点会自动移动到中心点上 mj0000 发表于 2022-3-15 09:16
(setq *45_DuHu* (* 0.25 pi) ;_ 45度(弧度)
*90_DuHu* (* 0.5 pi) ;_ 90度(弧度)
...
圈交(ssget “CP” ptlst)可以选择近似的圆形区域,ptlst需要用单独的函数计算出来