明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5733|回复: 24

求修剪圆内直线和多段线!

  [复制链接]
发表于 2011-11-16 15:38:52 | 显示全部楼层 |阅读模式
模板上有大小不一样的圆

本帖子中包含更多资源

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

x
发表于 2011-11-16 16:41:28 | 显示全部楼层
  1. ;; ctrim.lsp  v1.1
  2. ;; Modified By Xiaxiang

  3. (defun c:ctrim ( / circ_pts lst ang inc tmp seg pt ent ss1 num
  4.                    ctrim_err x f_pts svd_os svd_cmd svd_err)

  5. (defun ctrim_err (s)
  6.   (if(/= s "Function cancelled")
  7.   (princ(strcat "\n\n" s))     )
  8.   (setvar "cmdecho" svd_cmd)
  9.   (setvar "osmode" svd_os)
  10.   (setq *error* svd_err)
  11. )

  12. (defun circ_pts (enm)
  13.   (setq lst    (entget enm)
  14.         ang    (* pi 2)
  15.         inc    (/ ang 64)
  16.         tmp    '()
  17.         seg    65
  18.   )
  19.   (repeat seg
  20.    (setq pt (polar(cdr(assoc 10 lst))ang
  21.             (-(cdr(assoc 40 lst))0.01))
  22.         ang (+ inc ang)
  23.    )
  24.    (setq tmp(cons pt tmp))
  25.   )
  26.   tmp
  27. )

  28. ;;add ssget function
  29. (setq num 0)
  30. (prompt "\nSelect circles: ")
  31. (setq ss1 (ssget '((0 . "CIRCLE"))))
  32. (setq ;ent     (car(entsel "\nSelect circle: ")) ;;entsel
  33.        svd_err *error*
  34.        *error* ctrim_err
  35.        svd_os  (getvar "osmode")
  36.        svd_cmd (getvar "cmdecho")
  37. )
  38. (setvar "cmdecho" 0)
  39. (setvar "osmode" 0)
  40. (repeat (sslength ss1)
  41. (setq ent(ssname ss1 num))
  42. (setq num(1+ num))
  43. (if(and ent
  44.      (=(cdr(assoc 0(entget ent)))"CIRCLE")
  45.     )
  46.   (progn
  47.    (setq f_pts(circ_pts ent))
  48.    (command "trim" ent "" "f")   ;run twice in case the same
  49.    (foreach x f_pts(command x))  ;object intersects circle twice
  50.    (command "" "")
  51.    (command "trim" ent "" "f")
  52.    (foreach x f_pts(command x))
  53.    (command "" "")
  54.    (if(setq x(ssget "wp" f_pts))
  55.     (command "erase" x "")
  56.    )
  57.   )
  58. )
  59. )
  60. (setvar "cmdecho" svd_cmd)
  61. (setvar "osmode" svd_os)
  62. (setq *error* svd_err)
  63. (princ)
  64. )

评分

参与人数 2明经币 +1 金钱 +20 收起 理由
独一无二 + 20 赞一个!
669423907 + 1 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2011-11-16 15:47:41 | 显示全部楼层
  1. (defun c:ctrim ( / circ_pts lst ang inc tmp seg pt ent
  2.                    ctrim_err x f_pts svd_os svd_cmd svd_err)


  3. (defun ctrim_err (s)
  4.   (if(/= s "Function cancelled")
  5.   (princ(strcat "\n\n" s))     )
  6.   (setvar "cmdecho" svd_cmd)
  7.   (setvar "osmode" svd_os)
  8.   (setq *error* svd_err)
  9. )


  10. (defun circ_pts (enm)
  11.   (setq lst    (entget enm)
  12.         ang    (* pi 2)
  13.         inc    (/ ang 64)
  14.         tmp    '()
  15.         seg    65
  16.   )
  17.   (repeat seg
  18.    (setq pt (polar(cdr(assoc 10 lst))ang
  19.             (-(cdr(assoc 40 lst))0.01))
  20.         ang (+ inc ang)
  21.    )
  22.    (setq tmp(cons pt tmp))
  23.   )
  24.   tmp
  25. )


  26. (setq ent     (car(entsel "\nSelect circle: "))
  27.        svd_err *error*
  28.        *error* ctrim_err
  29.        svd_os  (getvar "osmode")
  30.        svd_cmd (getvar "cmdecho")
  31. )
  32. (setvar "cmdecho" 0)
  33. (setvar "osmode" 0)
  34. (if(and ent
  35.      (=(cdr(assoc 0(entget ent)))"CIRCLE")
  36.     )
  37.   (progn
  38.    (setq f_pts(circ_pts ent))
  39.    (command "trim" ent "" "f")   ;run twice in case the same
  40.    (foreach x f_pts(command x))  ;object intersects circle twice
  41.    (command "" "")
  42.    (command "trim" ent "" "f")
  43.    (foreach x f_pts(command x))
  44.    (command "" "")
  45.    (if(setq x(ssget "wp" f_pts))
  46.     (command "erase" x "")
  47.    )
  48.   )
  49. )
  50. (setvar "cmdecho" svd_cmd)
  51. (setvar "osmode" svd_os)
  52. (setq *error* svd_err)
  53. (princ)
  54. )

回复 支持 0 反对 1

使用道具 举报

发表于 2018-3-26 10:03:56 | 显示全部楼层

你好前辈,用了你的方法很实用。非常感谢。但是现实中节点编号都在圆圈里面,能不能只修剪园内的线段,文字保留。非常期待您的指点
 楼主| 发表于 2011-11-16 15:53:00 | 显示全部楼层
xiaxiang 发表于 2011-11-16 15:47

您好,能不能改成框选呀,就是框选后,把框选中所有圆内的东东全剪了,谢谢!
 楼主| 发表于 2011-11-16 16:47:08 | 显示全部楼层
xiaxiang 发表于 2011-11-16 16:41

谢谢您,效果很好
 楼主| 发表于 2011-11-16 16:48:23 | 显示全部楼层
443971181 发表于 2011-11-16 16:47
谢谢您,效果很好

非常感谢!怎么给您加分呢?

点评

使用评分功能  发表于 2011-11-16 17:43
发表于 2011-11-16 17:40:29 | 显示全部楼层
有没有c#版的?
发表于 2011-11-21 10:56:06 | 显示全部楼层
不错,效果很好。
发表于 2011-11-21 17:23:22 来自手机 | 显示全部楼层
路过,学习了
发表于 2011-12-6 18:23:52 | 显示全部楼层
xiaxiang 发表于 2011-11-16 16:41

修剪多段线出了点故障,请完善一下

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-12-22 18:36 , Processed in 0.174454 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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