明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2038|回复: 5

[提问] 求助大神帮忙完善lisp

  [复制链接]
发表于 2014-2-10 20:14:38 | 显示全部楼层 |阅读模式
本人lisp初学者,在论坛里找代码拼凑了下边的程序,目的是通过选择中梃线使中梃线自动分成双线,然后修剪掉端头处的线段,并且在分成的各个区域自动生成闭合线,现在自动分成双线和修剪端头线段实现了,后边如何自动生成闭合线求大神帮忙完善感激不尽

我的思路是可以记录中梃线两端头处附近区域的点,然后用boundary生成闭合线,供参考

(defun c:zt();中梃
(progn
(vl-load-com)
(setq kxmian 30 mkxmian 35 ztxmian 30 csxmian 41.5 msxmian 67 ktxingshi 2 dajie 11 dajief2 5.5 blfx 7);初始化变量
(setvar "cmdecho" 0) (setvar "osmode" 0)
(setq k 0 a (/ ztxmian 2)) (setq aa (ssget ) f (sslength aa));偏移值
    (while (< k f)
        (setq ent1 (ssname aa k) VL1 (vlax-ename->vla-object ent1))
        (setq ptst (vlax-get VL1 'startpoint) pten (vlax-get VL1 'endpoint))       ;求端点
        (setq ptst (list (car ptst) (nth 1 ptst))) (command "OFFSET" a ent1 ptst "" )
        (setq bb (entlast)) (command "MIRROR" bb "" ptst pten "n" )
        (command"erase" ent1 "" )  ;删除源直线,要保留取直线请消此行函数
        (setq k (1+ k))
    ))
(SETQ S1 (ENTSEL "\nSelect a rectang 选择封闭矩形 :"));选矩形切图程序
(SETQ EN (CAR S1)  ENT (ENTGET EN) ENAME (CDR (ASSOC 0 ENT)) CL (CDR (ASSOC 70 ENT)))
  (IF (AND (WCMATCH ENAME "*POLYLINE") (= CL 1)) (PROGN
     (IF (= ENAME "LWPOLYLINE")
       (PROGN  (SETQ SL (LENGTH ENT) I 0)
         (WHILE (< I SL)  (IF (/= (CAR (NTH I ENT)) 10) (SETQ I (1+ I)) (SETQ SL I)))
         (SETQ PT1 (CDR (NTH I ENT)) PT2 (CDR (NTH (+ I 4) ENT)) PT3 (CDR (NTH (+ I 8) ENT))  PT4 (CDR (NTH (+ I 12) ENT))))
       (PROGN  (SETQ S2 (ENTNEXT EN) ENT2 (ENTGET S2) ENAME2 (CDR (ASSOC 0 ENT2)) PT1 (CDR (ASSOC 10 ENT2)) PT 2)
         (WHILE (/= ENAME2 "SEQEND") (SETQ S2 (ENTNEXT S2) ENT2 (ENTGET S2) ENAME2 (CDR (ASSOC 0 ENT2)))
         (SET (READ (STRCAT "PT" (ITOA PT))) (CDR (ASSOC 10 ENT2))) (SETQ PT (1+ PT)))
     ))
   (SETQ A1 (ANGLE PT1 PT2) A2 (ANGLE PT1 PT4) P1 (POLAR (POLAR PT1 (+ A1 PI) 0.01) (+ A2 PI) 0.01)
         P2 (POLAR (POLAR PT2 A1 0.01) (+ A2 PI) 0.01) P3 (POLAR (POLAR PT3 A2 0.01) A1 0.01)
         P4 (POLAR (POLAR PT4 A2 0.01) (+ A1 PI) 0.01))
   (COMMAND "TRIM" EN "" "F" P1 P2 "" "F" P2 P3 "" "F" P3 P4 "" "F" P4 P1 "" "")
  )   (PRINC "\n所选择的不是复线或线框不封闭!")  ) ;矩形切图

;此处如何自动生成闭合线求大神帮忙完善

  (SETVAR "CMDECHO" 1)
  (setvar "osmode" 16383)  (princ)
)

本帖子中包含更多资源

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

x
发表于 2014-5-7 23:47:07 来自手机 | 显示全部楼层
帮顶,楼主,我如果,只要分成双线,你的程序应该在哪儿止就好了?
发表于 2014-5-8 00:30:42 | 显示全部楼层
最简单省事的办法是在每个要绘闭合线的区域计算一个点出来用command调用boundary命令,让CAD来帮你完成
如果不用这个,事情会变得比较复杂,如果考虑用pedit来拼接的话需要排除一些线
如果这个也不用那就只能自己进行拓朴构区,应该说这是最难的,有兴趣的话可以看G版的
【Gu_xl】[讨论]根据选择的直线·、圆弧等实体,自动生成有实体围成的所有边界
http://bbs.mjtd.com/forum.php?mo ... &fromuid=202795
发表于 2014-5-8 08:16:13 | 显示全部楼层
看不懂內部為閉合線的意思
你的框線沒斷開,要怎麼閉合
发表于 2014-5-8 08:30:38 | 显示全部楼层

本帖子中包含更多资源

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

x
发表于 2015-9-19 19:44:16 | 显示全部楼层
先看看再说
.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-25 08:58 , Processed in 0.188035 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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