明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 530|回复: 1

[讨论] 请教关于trim命令的修改

[复制链接]
发表于 2018-6-6 15:23 | 显示全部楼层 |阅读模式
本帖最后由 柱哥 于 2018-6-6 15:48 编辑

请问如何修以下代码,让框选修剪后保留框选内的曲线!


下图是想要得到的效果:


  1. (defun c:tf (/)
  2.   (command "undo" "be")
  3.   (prompt "\n 选择修剪的图形:")
  4.   (setq  ss (ssget '((-4 . "<NOT")
  5.         (0 . "LINE")
  6.         (-4 . "NOT>")
  7.        )
  8.      )
  9.   )
  10.   (setq  svd_os  (getvar "osmode")
  11.   svd_cmd  (getvar "cmdecho")
  12.   )
  13.   (setvar "cmdecho" 0)
  14.   (setvar "osmode" 0)
  15.   (setq  xq (last (ssnamex ss 0))
  16.   p1 (last (cadr xq))
  17.   p3 (last (cadddr xq))
  18.   )
  19.   (setq s1 (ssget "w" p1 p3 '((0 . "CIRCLE"))))
  20.   (if s1
  21.     (progn
  22.       (setq s1i 0)
  23.       (repeat (sslength s1)
  24.   (setq sn (ssname s1 s1i))
  25.   (setq pl (circ_pts sn))
  26.   (command "trim" sn "" "f")
  27.   (foreach x pl (command x))
  28.   (command "" "")
  29.   (setq s1i (1+ s1i))
  30.       )
  31.     )
  32.   )
  33.   (setq s2 (ssget "w" p1 p3 '((0 . "LWPOLYLINE"))))
  34.   (if s2
  35.     (progn
  36.       (setq s2i 0)
  37.       (repeat (sslength s2)
  38.   (setq sn (ssname s2 s2i))
  39.   (setq pl (massoc 10 (entget sn)))
  40.   (setq pm (mapcar '(lambda (x y) (/ (+ x y) 2.0)) (car pl) (caddr pl)))    ;中点
  41.   (command "offset" "0.001" sn pm "")
  42.   (setq enl (entlast))
  43.   (setq pl (massoc 10 (entget enl))
  44.         pl (append pl (list (car pl)))
  45.   )
  46.   (entdel enl)
  47.   (command ".trim" sn "" "f")
  48.   (foreach x pl (command x))
  49.   (command "" "")
  50.   (setq s2i (1+ s2i))
  51.       )
  52.     )
  53.   )
  54.   (setvar "cmdecho" svd_cmd)
  55.   (setvar "osmode" svd_os)
  56.   (command "undo" "e")
  57.   (princ)
  58. )

  59. (defun circ_pts  (enm) ;选区为圆点表
  60.   (setq  lst (entget enm)
  61.   ang (* pi 2)
  62.   inc (/ ang 64)
  63.   tmp '()
  64.   seg 65
  65.   )
  66.   (repeat seg
  67.     (setq pt  (polar (cdr (assoc 10 lst)) ang (- (cdr (assoc 40 lst)) 0.01))
  68.     ang (+ inc ang)
  69.     )
  70.     (setq tmp (cons pt tmp))
  71.   )
  72.   tmp
  73. )

  74. ;(massoc 10 (entget (car (entsel))))
  75. (defun massoc (key alist / x nlist)    ;选区为多段线各顶点表
  76.   (foreach x alist
  77.     (if  (eq key (car x))
  78.       (setq nlist (cons (cdr x) nlist))
  79.     )
  80.   )
  81.   (reverse nlist)
  82. )


本帖子中包含更多资源

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

x
发表于 2018-6-7 09:01 | 显示全部楼层
将(command "offset" "0.001" sn pm "")换成:
(vla-offset (vlax-ename->vla-object sn) 0.001)

将(setq pt  (polar (cdr (assoc 10 lst)) ang (- (cdr (assoc 40 lst)) 0.01))换成:
(setq pt  (polar (cdr (assoc 10 lst)) ang (+ (cdr (assoc 40 lst)) 0.01))
试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 23:09 , Processed in 0.531340 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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