明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3211|回复: 11

点击生成垂直相交线

  [复制链接]
发表于 2011-12-15 11:53 | 显示全部楼层 |阅读模式
1明经币
生成十字相交线
条件:
1--四边方向均有线的 不管封闭的还是未封闭的..
2--只要在四边方向都有线的,内侧任意点击就生成,两条垂直相交的线
3--垂直相交的线,取任意一边线中点与对应的另一边线垂直就好
4--十字相交的线和绝对是90度的
5--只要处理形似矩形的就好
6--一个一个就击生成
7--生成的相交线是新建一个层的
附图如下


测试文件

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

最佳答案

查看完整内容

给你来个动态的

点评

又充币了?明总喜欢你不得了哈  发表于 2011-12-15 12:12
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-12-15 11:53 | 显示全部楼层
本帖最后由 Gu_xl 于 2011-12-15 16:44 编辑

给你来个动态的
  1. ;;;右键结束命令
  2. (defun c:tt(/ GR PT VS P1 P2 P3 P4 LINE1 LINE2 flag)
  3.   (while (not flag)
  4.     ;(/= (car (setq gr (grread t 5 2))) 3)
  5.     (setq gr (grread t 7 2))
  6.     (cond ((= 5 (car gr))
  7.     (setq pt (cadr gr))
  8.     (setq vs (gxl-Sys-GetViewSize))
  9.             (if line1 (entdel line1))
  10.         (if line2 (entdel line2))
  11.         (setq line1 nil line2 nil)
  12.     (if (and
  13.           (setq p1 (getNearPoint pt (list (caadr vs) (cadr pt) (caddr pt)))) ;_ 向右
  14.           (setq p2 (getNearPoint pt (list (caar vs) (cadr pt) (caddr pt)))) ;_ 向左
  15.           (setq p3 (getNearPoint pt (list (car pt) (cadadr vs) (caddr pt)))) ;_ 向上
  16.           (setq p4 (getNearPoint pt (list (car pt) (cadar vs) (caddr pt)))) ;_ 向下
  17.          
  18.           )
  19.       (progn
  20.         (setq line1 (makeline p1 p2))
  21.         (setq line2 (makeline p3 p4))
  22.         )
  23.       )
  24.               )
  25.           ((= 25 (car gr))
  26.            (setq flag t)
  27.            (if line1 (entdel line1))
  28.         (if line2 (entdel line2))
  29.         (setq line1 nil line2 nil)
  30.            )
  31.           ((= 3 (car gr))
  32.            (setq line1 nil line2 nil)
  33.            )
  34.           )
  35.     )
  36.   )
  37. ;;;用到的函数
  38. ;(gxl-Sys-GetViewSize)
  39. (defun gxl-Sys-GetViewSize (/ pc vh sc vw vh pmin pmax)
  40.   (setq pc (getvar "viewctr")
  41.                  vh (getvar "viewsize")
  42.                  sc (getvar "screensize")
  43.                 vw (* vh (/ (car sc) (cadr sc)))
  44.                 pmin (list (- (car pc) (* 0.5 vw)) (- (cadr pc) (* 0.5 vh)))
  45.                 pmax (list (+ (car pc) (* 0.5 vw)) (+ (cadr pc) (* 0.5 vh)))
  46.            )
  47.   (list pmin pmax)
  48.   )
  49. (defun makeline (p1 p2)
  50.   (entmake (list (cons 0 "line")
  51.    (cons 8 "十字交叉") ;_ 图层
  52.    (cons 62 1) ;_ 颜色
  53.    (cons 10 (trans p1 1 0))
  54.    (cons 11 (trans p2 1 0))
  55.    )
  56.     )
  57.   (entlast)
  58.   )
  59. ;;;(gxl-SortPointOnCurve  points curve) 参数 点集 points 曲线图元 curve 点集沿曲线排序
  60. (defun gxl-SortPointOnCurve (points curve / pl1 xx nn)
  61.   (setq pl1 (mapcar '(lambda (xx /)
  62.          (vlax-curve-getparamatpoint
  63.     curve
  64.     (vlax-curve-getclosestpointto curve xx)
  65.          )
  66.        )
  67.       points
  68.      )
  69.   )
  70.   (mapcar '(lambda (nn) (nth nn points))
  71.             (vl-sort-i pl1 '<)   
  72.   )
  73. )
  74. (defun gxl-lst-split (lst len / tmp)
  75.   (if lst
  76.     (cons
  77.       (reverse
  78. (repeat len
  79.    (if (car lst)
  80.      (setq tmp (cons (car lst) tmp)
  81.     lst (cdr lst)
  82.      )
  83.    )
  84.    tmp ;_ 制造返回值
  85. )
  86.       )
  87.       (gxl-lst-split lst len)
  88.     )
  89.   )
  90. )
  91. (defun gxl-GetInterPointlist (obj1 obj2 )
  92.   (if (= 'ENAME (type obj1))
  93.     (setq obj1 (vlax-ename->vla-object obj1))
  94.     (if (= 'STR (type obj1))
  95.       (setq obj1 (vlax-ename->vla-object (handent obj1)))
  96.     )
  97.   )
  98.   (if (= 'ENAME (type obj2))
  99.     (setq obj2 (vlax-ename->vla-object obj2))
  100.     (if (= 'STR (type obj2))
  101.       (setq obj2 (vlax-ename->vla-object (handent obj2)))
  102.     )
  103.   )
  104.   (gxl-SortPointOnCurve (gxl-lst-split (vlax-invoke obj2 'IntersectWith obj1 acExtendNone) 3) obj2)
  105.   )
  106. ;;;计算与p1最近交点,没有返回nil
  107. (defun getNearPoint (P1 P2 / SS LINE N EN PTS PT dxf)
  108.   (setq ss (ssget "f" (list p1 p2)))
  109.   (if ss
  110.     (progn
  111.       (setq line (makeline p1 p2))
  112.       (repeat (setq n (sslength ss))
  113. (setq en (ssname ss (setq n (1- n))))
  114. (if (or
  115.        (wcmatch (setq dxf (cdr (assoc 0 (entget en)))) "*LINE")
  116.        (= dxf "ARC")
  117.        (= dxf "CIRCLE")
  118.        (= dxf "ELLIPSE")
  119.        )
  120.    
  121. (setq pts (append pts (gxl-GetInterPointlist line en)))
  122.    )
  123. )
  124.       (if pts
  125.       (setq pt (trans (car (gxl-SortPointOnCurve pts line)) 0 1))
  126. )
  127.       (entdel line)
  128.       )
  129.     )
  130.   pt
  131.   )



本帖子中包含更多资源

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

x

评分

参与人数 2明经币 +2 金钱 +10 收起 理由
flytoday + 1 太强了。。明经 卧虎藏龙
yjr111 + 1 + 10 神马都是浮云,估计他只要实用的!呵呵

查看全部评分

回复

使用道具 举报

发表于 2011-12-15 12:14 | 显示全部楼层
去下载我的角平分线吧
回复

使用道具 举报

发表于 2011-12-15 12:47 | 显示全部楼层
示例中的十字线有对中与不对中的差异
取决于什么条件?
回复

使用道具 举报

 楼主| 发表于 2011-12-15 14:31 | 显示全部楼层
Andyhon 发表于 2011-12-15 12:47
示例中的十字线有对中与不对中的差异
取决于什么条件?

这个没有。。只要是十字线一边是从中点开始的。对应下来是垂直就好
回复

使用道具 举报

发表于 2011-12-15 15:06 | 显示全部楼层
呵呵,羡慕有钱人哦。
Qjchen的有个程序可能适合你这样的情况。

点评

大师不顺手拿点币回去?  发表于 2011-12-15 15:32
回复

使用道具 举报

 楼主| 发表于 2011-12-15 15:24 | 显示全部楼层
我要适用的适合的我弄不了啊
回复

使用道具 举报

发表于 2011-12-15 15:51 | 显示全部楼层
;;; 未经严谨测试

(Defun C:Test ()
   (setq oldLs (getvar 'LtScale))
   (setvar 'OsMode 0)
   
   (setq xx (list 1 0 0)
         yy (list 0 1 0)
   )      
   
   (command "LtScale" 1)
   (While (Setq Pt (getpoint "\n内侧任意点击就生成,两条垂直相交的线: "))
     (setq p2 (mapcar '+ pt xx))
     (entmake (list '(0 . "LINE") (cons 10 pt) (cons 11 p2)))
     (setq ee (entlast))
     (command "Extend" "All" "" pt p2 "")
     (setq pts (acet-geom-object-end-points ee)
            p5 (apply 'acet-geom-midpoint pts)
            pa (car pts)
     )      

     (entdel ee)
     (setq Pt5 (apply 'acet-geom-midpoint (acet-geom-object-end-points (ssname (ssget pa '((0 . "LINE"))) 0)))
            p2 (mapcar '+ p5 yy)
     )
     
     (entmake (list '(0 . "LINE") (cons 10 p5) (cons 11 p2)))
     (command "Extend" "All" "" p5 p2 "")
     (entdel ee)
     (command "move" ee "" pa pt5)
   )
   (setvar 'LtScale oldLs)
)  

点评

好像不行哦  发表于 2011-12-15 15:54
回复

使用道具 举报

 楼主| 发表于 2011-12-15 16:36 | 显示全部楼层
Gu_xl 谢谢您很强大。佩服太开心了
回复

使用道具 举报

 楼主| 发表于 2011-12-15 16:36 | 显示全部楼层
向Gu_xl 哥至敬
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-12 17:45 , Processed in 0.205466 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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