明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5284|回复: 15

[原创]动态绘制垂直平分线

  [复制链接]
发表于 2009-12-22 19:00:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2009-12-22 21:42:43 编辑

编写了一个动态绘制垂直平分线的程序,请各位朋友试用
  1. ;;;;动态绘制垂直平分线
  2. ;;;by:lihuili 2009-12-20
  3. ;;;Dynamic drawing a line to another line perpendicular bisector
  4. (defun Perp_bisector_line (/   ent  en      pt     enname
  5.       p1   p2  ang ptemp1 p0     pt1
  6.       sp   source ptemp ptemp1 ptemp2 ptemp3
  7.       pt1   pt2  pt3 loop
  8.      )
  9.   (setvar "cmdecho" 0)
  10.   (if (and (setq ent (car (entsel "\n选择一条直线.")))
  11.     (= (cdr (assoc 0 (setq en (entget ent)))) "LINE")
  12.       )
  13.     (progn
  14.       (redraw ent 3)
  15.       (setq p1 (trans (cdr (assoc 10 en)) 0 1)
  16.      p2 (trans (cdr (assoc 11 en)) 0 1)
  17.      ang (angle p1 p2)
  18.       )
  19.       (setq p0     (polar p1 ang (* 0.5 (distance p1 p2)))
  20.      lineobj (vla-addLine
  21.         (vla-get-ModelSpace
  22.    (vla-get-ActiveDocument (vlax-get-acad-object))
  23.         )
  24.         (vlax-3d-point p0)
  25.         (vlax-3d-point p0)
  26.       )
  27.       )
  28.       (setq ptemp1 (polar p0 (+ ang (* 0.5 pi)) 10))
  29.       (prompt "\n选择另一端点位置:")
  30.       (setq loop t
  31.      ptemp p0
  32.      pt1 p0
  33.       )
  34.       (while loop
  35. (setq sp (grread t))
  36. (setq source (car sp)
  37.        sp     (cadr sp)
  38. )
  39. (cond ((= source 5)
  40.         (setq ptemp sp)
  41.         (setq ptemp2 (polar sp 0 10)
  42.        ptemp3 (polar sp (* 0.5 pi) 10)
  43.         )
  44.         (setq pt2 (inters p0 ptemp1 sp ptemp2 nil))
  45.         (setq pt3 (inters p0 ptemp1 sp ptemp3 nil))
  46.         (cond ((null pt2) (setq pt1 pt3))
  47.        ((null pt3) (setq pt1 pt2))
  48.        (t
  49.         (if (< (distance sp pt2) (distance sp pt3))
  50.    (setq pt1 pt2)
  51.    (setq pt1 pt3)
  52.         )
  53.        )
  54.         )
  55.         (vla-put-EndPoint lineobj (vlax-3d-point pt1))
  56.        )
  57.        (t (setq loop nil))
  58. )
  59.       )
  60.       
  61.       (redraw ent 4)
  62.     )
  63.     (prompt "\n选择的不是直线!")
  64.   )
  65.   (princ)
  66. )
  67. (defun c:test ()
  68. (vl-load-com)
  69.   (Perp_bisector_line)
  70. )

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2010-8-7 11:52:00 | 显示全部楼层

呵呵,很好!

发表于 2010-8-7 20:59:00 | 显示全部楼层
垂直平分线:
  1. ;;; czpfx(垂直平分线)
  2. (defun c:czpfx (/ s1 pt rad)
  3.   (CMDLA0)
  4.   (setvar "osmode" 0)
  5.   (if (and (setq s1 (car (entsel "\n选择曲线: ")))
  6.     (xyp-curve-check s1)
  7.       )
  8.     (progn
  9.       (xyp-MkLaCo "垂直平分线" 1)
  10.       (setq pt (xyp-get-CurveMidPoint s1)
  11.      rad (xyp-get-AngleAtPoint s1 pt)
  12.       )
  13.       (setvar "snapang" rad)
  14.       (setvar "ORTHOMODE" 1)
  15.       (command "line" pt pause "")
  16.       (setvar "snapang" 0)
  17.     )
  18.   )
  19.   (CMDLA1)
  20. )

本帖子中包含更多资源

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

x
发表于 2010-10-9 15:35:00 | 显示全部楼层

谢谢楼上兄弟的分享,参考下,非常感激!

发表于 2010-10-18 18:51:00 | 显示全部楼层
太强了,正在研究动态线,正好参考
发表于 2012-3-14 14:14:42 | 显示全部楼层
不错,很好
发表于 2012-3-14 14:32:34 | 显示全部楼层
如果曲线是块中曲线呢?

点评

这个正是我以前发帖子讨论的问题,目前只有高飞鸟做的效果最好。其实动态垂直在我的前几个帖子中已经有源码实例了。  发表于 2012-3-14 22:08
发表于 2012-3-14 15:10:16 | 显示全部楼层
感谢xianaihua及xyp1964版主分享程序!
发表于 2012-3-15 08:41:56 | 显示全部楼层
调试不行啊
发表于 2012-3-15 08:41:56 | 显示全部楼层
不错,很好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-19 19:04 , Processed in 0.216855 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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