明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 孙玉坤

[提问] 改一个很小的功能

[复制链接]
发表于 2022-3-28 13:52:00 | 显示全部楼层
本帖最后由 htlaser 于 2022-3-28 14:02 编辑
孙玉坤 发表于 2022-3-27 16:55
上传了一个CAD  有兴趣可以看一下

算了  还是动手找点码组一个吧.
  1. (defun c:test4 (/ ang cmd e ent ep i pts sp ss ssa ssin ssle sss width)
  2.       (setq cmd (getvar "cmdecho"))
  3.       (setvar "cmdecho" 0)
  4.       (command "_undo" "be")
  5.       (setq ssa (ssadd))
  6.   (if (null *width)
  7.     (setq *width 1.00)
  8.   )
  9.   (if (setq width(getdist (strcat "\n输入宽度 <" (rtos *width) ">:")))
  10.     (setq *width width)
  11.     (setq width *width)
  12.   )  
  13. (setq sss (ssget))
  14.   (progn
  15.     (setq ssin (ssget "p" (list (cons  0  "INSERT")( cons 6  "CENTER2"))))
  16.     (command "select" sss "")
  17.     (setq ssle (ssget "p" '((-4 . "<OR") (-4 . "<AND")(0 . "LWPOLYLINE")(90 . 2)(42 . 0)(-4 . "AND>") (0 . "LINE")(-4 . "OR>"))))  
  18.     (setq ss (ss_sum  (trtr  ssin) ssle)))
  19.           (repeat (setq i (sslength ss))
  20.               (setq e (ssname ss (Setq i (1- i))))
  21.               (setq ent (entget e)
  22.                     ang (angle        (setq sp (vlax-curve-getStartPoint e))
  23.                                 (setq ep (vlax-curve-getendPoint e))
  24.                         )
  25.               )
  26.               (setq pts (mapcar '(lambda (pt)
  27.                                      (list (setq p_ (polar pt (+ ang (/ pi 2.0)) (* 0.5 width)))
  28.                                            (polar p_ (+ ang (* pi 1.5)) width)
  29.                                      )
  30.                                  )
  31.                                  (list sp ep)
  32.                         )
  33.                     pts (apply 'append (list (car pts) (reverse (cadr pts))))
  34.               )
  35.               (entmakex (append (list (cons 0 "LWPOLYLINE")
  36.                                       (cons 100 "AcDbEntity")
  37.                                       (assoc 8 ent)
  38.                                       (cons 100 "AcDbPolyline")
  39.                                       (cons 90 (length pts))
  40.                                       (cons 70 1)
  41.                                 )
  42.                                 (mapcar (function (lambda (p) (cons 10 p))) pts)
  43.                          )
  44.               )
  45.               (setq ssa (ssadd (entlast) ssa))
  46.               (entdel e)
  47.           )
  48.      
  49.       (if (> (sslength ssa) 0)
  50.           (command "_group" "C" "*" "*" ssa "")
  51.       )
  52.       (command "_undo" "e")
  53.       (setvar "cmdecho" cmd)
  54.       (princ)
  55. )







  56. (defun ss_sum (ss1 ss2)  
  57. (setq i 0)
  58. (repeat (sslength ss1)
  59.   (ssadd (ssname ss1 i) ss2)
  60.   (setq i (1+ i))
  61. )
  62. ss2
  63. )

  64. (defun trtr (ss / ent n ss1)
  65.   (progn
  66.     (setq n -1 ss1 (ssadd))
  67.     (repeat (sslength ss)
  68.       (setq ent (ssname ss (setq n (1+ n))))
  69.       (command "QAFLAGS" 1 "_.EXPLODE" ent "" "QAFLAGS" 0)
  70.       (ssadd (entlast) ss1)
  71.     )
  72.   )
  73. (if (zerop (sslength ss1))  nil  ss1)
  74. )

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2022-3-28 14:52:19 | 显示全部楼层
本帖最后由 孙玉坤 于 2022-3-28 14:55 编辑
htlaser 发表于 2022-3-28 13:52
算了  还是动手找点码组一个吧.

非常感谢  还有两个小问题  第一就是用CAD2018 提示无法识别的版本 无法读取   第二就会  如果没有中心线    全部是多段线是就不执行。或者都是中线线时也不能执行
回复

使用道具 举报

 楼主| 发表于 2022-3-28 14:56:40 | 显示全部楼层
htlaser 发表于 2022-3-28 14:55
你自已给的什么图就是什么功能   一改再改  再改   自已动手吧

好的就是不会  刚接触  
回复

使用道具 举报

发表于 2022-3-28 14:58:14 | 显示全部楼层
孙玉坤 发表于 2022-3-28 14:56
好的就是不会  刚接触

金牌会员   加个判断应该不难吧!  判断是不是有中心线
回复

使用道具 举报

发表于 2022-3-28 14:59:28 | 显示全部楼层
孙玉坤 发表于 2022-3-28 14:56
好的就是不会  刚接触

等我有空再修改吧
回复

使用道具 举报

 楼主| 发表于 2022-3-28 15:01:31 | 显示全部楼层
htlaser 发表于 2022-3-28 14:59
等我有空再修改吧

我是在线多  今天刚学lisp
假的会员
回复

使用道具 举报

发表于 2022-3-28 15:30:30 | 显示全部楼层

刚看错了 重新修改!!

本帖最后由 htlaser 于 2022-3-28 15:45 编辑
孙玉坤 发表于 2022-3-28 15:01
我是在线多  今天刚学lisp
假的会员

  1. (defun c:test4 (/ ang cmd e ent ep i pts sp ss ssa ssin ssle sss width)
  2.   (setq cmd (getvar "cmdecho"))
  3.   (setvar "cmdecho" 0)
  4.   (command "_undo" "be")
  5.   (setq ssa (ssadd))
  6.   (if (null *width)
  7.     (setq *width 1.00)
  8.   )
  9.   (if (setq width(getdist (strcat "\n输入宽度 <" (rtos *width) ">:")))
  10.     (setq *width width)
  11.     (setq width *width)
  12.   )  
  13.   (setq sss (ssget))
  14.   (progn
  15.     (setq ssin (ssget "p" (list (cons  0  "INSERT")( cons 6  "CENTER2"))))
  16.     (command "select" sss "")
  17.     (setq ssle (ssget "p" '((-4 . "<OR") (-4 . "<AND")(0 . "LWPOLYLINE")(90 . 2)(42 . 0)(-4 . "AND>") (0 . "LINE")(-4 . "OR>"))))
  18.     (if (= nil ssin) (setq ss ssle)  ;判断INSERT
  19.       (if (= nil ssle) (setq ss (trtr  ssin)) ;判断LINE
  20.         (setq ss (ss_sum   ssle  (trtr  ssin))))))
  21.   (repeat (setq i (sslength ss))
  22.     (setq e (ssname ss (Setq i (1- i))))
  23.     (setq ent (entget e)
  24.       ang (angle        (setq sp (vlax-curve-getStartPoint e))
  25.             (setq ep (vlax-curve-getendPoint e))
  26.           )
  27.     )
  28.     (setq pts (mapcar '(lambda (pt)
  29.                          (list (setq p_ (polar pt (+ ang (/ pi 2.0)) (* 0.5 width)))
  30.                            (polar p_ (+ ang (* pi 1.5)) width)
  31.                          )
  32.                        )
  33.                 (list sp ep)
  34.               )
  35.       pts (apply 'append (list (car pts) (reverse (cadr pts))))
  36.     )
  37.     (entmakex (append (list (cons 0 "LWPOLYLINE")
  38.                         (cons 100 "AcDbEntity")
  39.                         (assoc 8 ent)
  40.                         (cons 100 "AcDbPolyline")
  41.                         (cons 90 (length pts))
  42.                         (cons 70 1)
  43.                       )
  44.                 (mapcar (function (lambda (p) (cons 10 p))) pts)
  45.               )
  46.     )
  47.     (setq ssa (ssadd (entlast) ssa))
  48.     (entdel e)
  49.   )
  50.   
  51.   (if (> (sslength ssa) 0)
  52.     (command "_group" "C" "*" "*" ssa "")
  53.   )
  54.   (command "_undo" "e")
  55.   (setvar "cmdecho" cmd)
  56.   (princ)
  57. )

  58. (defun ss_sum (ss1 ss2)  
  59.   (setq i 0)
  60.   (repeat (sslength ss1)
  61.     (ssadd (ssname ss1 i) ss2)
  62.     (setq i (1+ i))
  63.   )
  64.   ss2
  65. )

  66. (defun trtr (ss / ent n ss1)
  67.   (progn
  68.     (setq n -1 ss1 (ssadd))
  69.     (repeat (sslength ss)
  70.       (setq ent (ssname ss (setq n (1+ n))))
  71.       (command "QAFLAGS" 1 "_.EXPLODE" ent "" "QAFLAGS" 0)
  72.       (ssadd (entlast) ss1)
  73.     )
  74.   )
  75.   (if (zerop (sslength ss1))  nil  ss1)
  76. )
回复

使用道具 举报

 楼主| 发表于 2022-3-28 16:18:46 | 显示全部楼层

非常完美 万分感谢
回复

使用道具 举报

发表于 2022-3-28 17:41:12 | 显示全部楼层

(setq ssin (ssget "p" (list (cons  0  "INSERT")( cons 6  "CENTER2"))))

不一定是centerline命令生成的中心线实体
回复

使用道具 举报

发表于 2022-3-28 18:29:51 | 显示全部楼层
xyp1964 发表于 2022-3-28 17:41
(setq ssin (ssget "p" (list (cons  0  "INSERT")( cons 6  "CENTER2"))))

不一定是centerline命令生 ...

感谢院长关注,
我也不敢确定,只是按图来判断 .
如果不是用(setq ssin (ssget "p" (list (cons  0  "INSERT"))))  这样更不安全.
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 01:13 , Processed in 0.222604 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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