明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 15062311027

曲线局部长度插件反向改编

[复制链接]
 楼主| 发表于 2023-6-14 19:41:32 | 显示全部楼层
yaojing38 发表于 2023-6-14 17:46
右键你工具自定义右键单击,,改一下  右键为确定就行,,,闭合的要不你发个图上来我看下是怎么回事?

麻烦看下哈

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2023-6-15 10:24:08 | 显示全部楼层

应该可以闭合了

本帖最后由 yaojing38 于 2023-6-15 10:32 编辑
  1. ;测量曲线上两点间的路程长度.
  2. (defun C:qjcd (/ entName1 Pt1 Pt2 xLen st_pt end_pt pt_tmp l_ss PD pd1 obj)
  3.     (vl-load-com)
  4.     (setq entName1 (car (entselEx  "\r请选择直线、圆弧、圆、多段线等曲线:" '((0 . "line,arc,circle,lwpolyline")))))
  5.         (if (= (cdr (assoc 0 (entget entName1))) "LWPOLYLINE") (curve:putclosed entName1))
  6.     (setq obj (vlax-ename->vla-object entName1))  
  7.     (setq PD (< (distance (vlax-curve-getStartPoint obj) (vlax-curve-getEndPoint obj)) 0.0001))  
  8.    
  9.    
  10.     (setq pt1 (getpoint "\n指定测量起点: ")
  11.            pt2 (getpoint "\n指定测量终点: ")
  12.          
  13.     )
  14.   
  15.     (setq
  16.             st_pt (vlax-curve-getStartPoint entName1)
  17.             end_pt (vlax-curve-getEndPoint entName1)
  18.     )
  19.       (setq   entName2 entName1)
  20.   
  21.       
  22.     (if (>  (vlax-curve-getParamAtPoint entName1 pt1) (vlax-curve-getParamAtPoint entName1 pt2))
  23.           (setq pt_tmp pt2
  24.                   pt2 pt1
  25.                   pt1 pt_tmp)
  26.            )
  27.           (vl-cmdf "undo" "be")
  28.           (vl-cmdf "_break" entName1 st_pt pt1)
  29.           (vl-cmdf "_break" entName1 end_pt pt2)
  30.           (vl-cmdf ".copy" entName1 "" '(0 0) '(0 0))
  31.           (setq l_ss (entget (entlast)))
  32.           (vl-cmdf "undo" "end")
  33.           (vl-cmdf "undo" "")
  34.           (entmake l_ss)
  35.           (setq entName1 (entlast))
  36.           (vla-put-Color (vlax-ename->vla-object entName1) 1)
  37.           (redraw entName1 3)
  38.           (initget 1 "T")  
  39.           (setq pd1 (getstring "\n[取反向距离(T)]: ") )
  40.           (if (AND (or (= pd1 "t") (= pd1 "T")) PD)
  41.           (setq xLen (- (vlax-curve-getdistatparam obj (vlax-curve-getendparam obj)) (abs (- (vlax-curve-getDistAtPoint entName1 pt1)(vlax-curve-getDistAtPoint entName1 pt2)))))
  42.           (setq xLen (abs (- (vlax-curve-getDistAtPoint entName1 pt1)(vlax-curve-getDistAtPoint entName1 pt2))))
  43.           )  
  44.           (if (AND (or (= pd1 "t") (= pd1 "T")) PD)
  45.           (progn
  46.           (vl-cmdf "_erase"  entName1 "")
  47.                 (if (>  (vlax-curve-getParamAtPoint entName2 pt1) (vlax-curve-getParamAtPoint entName2 pt2))
  48.           (setq pt_tmp pt2
  49.                   pt2 pt1
  50.                   pt1 pt_tmp)
  51.            )
  52.           (vl-cmdf "undo" "be")
  53.           (vl-cmdf "_break" entName2  PT1 pt2 )
  54.           ;(vl-cmdf "_break" entName1  end_pt  pt1)
  55.           (vl-cmdf ".copy" entName2 "" '(0 0) '(0 0))
  56.           (setq l_ss (entget (entlast)))
  57.           (vl-cmdf "undo" "end")
  58.           (vl-cmdf "undo" "")
  59.           (entmake l_ss)
  60.           (setq entName2 (entlast))
  61.           (vla-put-Color (vlax-ename->vla-object entName2) 1)
  62.           (redraw entName2 3)
  63.           (vl-cmdf "_erase"  entName2)
  64.           )
  65.           )
  66.           (vl-cmdf "_erase"  entName1  "")
  67.           (princ (strcat "\n测量结果:两点间曲线长度=" (rtos xLen 2 2)))
  68.           ;(princ "\n路径检查:查看亮显区域,右键退出")
  69. (princ)
  70. )

  71. ;;功能:带提示、关键字、过滤表、选择错误时的提示并且会亮显所选对像的entsel
  72. ;;用法:(entselEx  提示信息 过滤表)
  73. ;;举例:(entselEx  "\r请选择一个圆:" '((0 . "circle")) )
  74. (defun entselEx (msg fil / el ss)
  75.         (while (and (setvar "errno" 0)
  76.                                          (not (and (setq el  (entsel msg))
  77.                                                                         (if (= (type el) 'str)
  78.                                                                                 el
  79.                                                                                 (if (setq ss (ssget (cadr el) fil))
  80.                                                                                         ss
  81.                                                                                         (progn (princ ermsg) (setq ss nil))
  82.                                                                                 );if
  83.                                                                         );if
  84.                                                                 );and
  85.                                          );not
  86.                                          (/= (getvar "errno") 52)
  87.                                  );and
  88.   );while
  89.   (if (= (type el) 'list) (redraw (car el) 3));亮显选中的对像
  90.   el
  91. )
  92. (defun curve:putclosed (obj)
  93. ; "使多段线封闭"
  94. ; "无"
  95. ; "(curve:putClosed (car (entsel)))"
  96.   (or (p:vlap obj)
  97.     (setq obj (vlax-ename->vla-object obj)))
  98.   (if (not (vlax-curve-isclosed obj))
  99.     (vla-put-closed obj :vlax-true)))

  100. (defun p:vlap (obj)
  101. ; "判断是否vla对象."
  102.   (equal (type obj)
  103.     (quote vla-object)))
回复

使用道具 举报

 楼主| 发表于 2023-6-15 20:03:07 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 08:32 , Processed in 0.151986 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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