明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1649|回复: 20

[提问] 把一定范围内的高程点移动到道路中线和横断面线交点

[复制链接]
发表于 2022-3-14 14:50:04 | 显示全部楼层 |阅读模式
现场测量高程的时候,高程点一般不会正好在道路中线豫横断面线的交点处。这样计算时候,有的会无发查找到这个高程点
横断面线位于dmx图层的直线或者PL线


如何实现:
1、选择道路中线和横断面线,设定一个距离范围,比如0.2,然后在交点0.2m范围内的高程点自动移动到交点上。


多谢




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2022-3-14 15:55:07 | 显示全部楼层
刚好前段时间写了个,自己改改吧
;;; 从一点返回选择框(指定选择的长宽)
(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)
    )
  )
)

评分

参与人数 1明经币 +1 金钱 +5 收起 理由
f4800 + 1 + 5 很给力!

查看全部评分

发表于 2022-3-15 09:16:02 | 显示全部楼层
(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"也只能选择方形选择区,圆形选择区算起来就复杂了,没有直接的函数进行圆形选择区的计算,建议用近似距离的方形选择代替就行
发表于 2022-3-15 11:45:20 | 显示全部楼层
圈选可以用这个
;;; 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等分
 楼主| 发表于 2022-3-14 16:10:14 | 显示全部楼层
本帖最后由 f4800 于 2022-3-15 00:34 编辑
mj0000 发表于 2022-3-14 15:55
刚好前段时间写了个,自己改改吧
;;; 从一点返回选择框(指定选择的长宽)
(defun Get-UCS_Rec2Pt (PT0 D ...

多谢大师trans 涉及到坐标系变换   能否去掉这个功能?
默认就是CAD的模型空间坐标。


因为用了 trans 函数, 图形必须用 UCS  W 操作以后才能运行 。否则会报错


发表于 2022-3-15 08:41:15 | 显示全部楼层
删除红色部分就行。其余类似(trans (car bbx) 0 1)
 楼主| 发表于 2022-3-15 08:51:51 | 显示全部楼层
mj0000 发表于 2022-3-15 08:41
删除红色部分就行。其余类似(trans (car bbx) 0 1)

再次感谢   大师
 楼主| 发表于 2022-3-15 08:54:48 | 显示全部楼层
本帖最后由 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的圆的范围


 楼主| 发表于 2022-3-15 10:05:54 | 显示全部楼层
mj0000 发表于 2022-3-15 09:16
(setq *45_DuHu*      (* 0.25 pi) ;_ 45度(弧度)
      *90_DuHu*      (* 0.5 pi) ;_ 90度(弧度)
      ...

已修改  在空间留言了。。请核查
发表于 2022-3-15 10:12:42 | 显示全部楼层
应该没问题了,画一个点pt,以点为中心,画个0.2*0.2的方框,放一个图块A到这个方框内,运行程序,选择中心点pt,图块A的插入点会自动移动到中心点上
发表于 2022-3-15 10:37:49 | 显示全部楼层
mj0000 发表于 2022-3-15 09:16
(setq *45_DuHu*      (* 0.25 pi) ;_ 45度(弧度)
      *90_DuHu*      (* 0.5 pi) ;_ 90度(弧度)
      ...

圈交(ssget “CP” ptlst)可以选择近似的圆形区域,ptlst需要用单独的函数计算出来
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-16 06:41 , Processed in 0.169778 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表