乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 28|回复: 19

[编程交流] 倒角程序,需要hel

[复制链接]

34

主题

174

帖子

60

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
257
发表于 2022-7-5 23:34:58 | 显示全部楼层 |阅读模式
  1. (defun c:dj ()
  2.        (setq height 2.5)
  3.         (if (setq judge (getreal "Input text height(Default 2.5)"))
  4.              (setq height judge)               
  5.         )
  6.        (setq messege (entsel))
  7.        (setq ent (entget (car messege)))
  8.         (setq select_point (cadr messege))
  9.         (if (equal (cdr (assoc 0 ent)) "LINE" )
  10.             (setq daojiao (chfd ))
  11.                 (progn
  12.                    (setq daojiao (reduce ent select_point))
  13.            )                          
  14.         )
  15.         ;(princ daojiao)
  16.         (setq point_x (car (caddr daojiao)) point_y (cadr (caddr daojiao))  x1 (car point_x) y1 (cadr point_x) x2 (car point_y) y2 (cadr point_y))
  17.         (setq le_point (list (* 0.5 (+ x1 x2)) (* 0.5 (+ y1 y2)) ))
  18.        (setq c1 (car daojiao) c2 (cadr daojiao))
  19.         (if (= (rtos c1 2 1) (rtos c2 2 1))
  20.             (setq c (strcat "C" (rtos c1 2 1)))
  21.                 (setq c (strcat (rtos c1 2 1) "*" (rtos c2 2 1) ))
  22.         )
  23.         (princ c)
  24.         (princ le_point)
  25.         (princ height)
  26.        (bz c le_point height)
  27.        ;(command "leader"  le_point pause pause "" "" "n")
  28.         ;(setq ent (entget (entlast)))
  29.         ;(le ent c height)
  30. )
  31. (defun bz (txt1 p height / *error* name1 name2 name3)
  32. (defun *error* (msg) ;
  33.    (entdel name1) (entdel name2) (if name3 (entdel name3))
  34.    (princ "err: ")(princ msg)
  35.   ) ;
  36.   
  37. (setq ty (getvar "TEXTSTYLE") kd3 0)
  38. (setq kd1 (caadr (textbox (list '(0 . "text")(cons 1 txt1)(cons 40 height)(cons 41 0.7)(cons 7 ty)))))
  39. (setq kd2 (caadr (textbox (list '(0 . "text")(cons 1 "lyt love lhl")(cons 40 height)(cons 41 0.7)(cons 7 ty)))))
  40.   
  41. (setq kd (max kd1 kd2) kd (+ kd 50))
  42. ;(setq p (getpoint "\nSpecify the basis points:"))
  43. (setq pd t)
  44. (while pd
  45.    (setq gr (grread t 4 1) mode (car gr) pt (cadr gr))
  46.    (if (= kd3 0) (setq kd kd1))
  47.    (if (and (listp pt) (>= (car pt) (car p))) (progn
  48.      (setq p0 (polar pt 0 kd))
  49.      (setq p1 (polar pt 0 (/ (- kd kd1) 2)) p1 (polar p1 (angtof "90") (* 0.2 height)))
  50.      (setq p2 (polar pt 0 (/ (- kd kd2) 2)) p2 (polar p2 (angtof "270") 350)))
  51. )
  52.    (if (and (listp pt) (< (car pt) (car p))) (progn
  53.      (setq p0 (polar pt pi kd))
  54.      (setq p1 (polar p0 0 (/ (- kd kd1) 2)) p1 (polar p1 (angtof "90") (* 0.2 height)))
  55.      (setq p2 (polar p0 0 (/ (- kd kd2) 2)) p2 (polar p2 (angtof "270") 350)))
  56. )
  57.    (if (= mode 5) (progn
  58.      (if name1 (entdel name1))
  59.      (entmake (list '(0 . "LWPOLYLINE")'(100 . "AcDbEntity")'(100 . "AcDbPolyline")'(90 . 3)
  60.        (cons 10 p)(cons 10 pt)(cons 10 p0)))
  61.      (setq name1 (entlast))
  62.      (if name2 (entdel name2))
  63.      (entmake (list '(0 . "text")(cons 1 txt1)(cons 40 height)(cons 41 0.7)(cons 10 p1)(cons 7 ty)))
  64.      (setq name2 (entlast))
  65.      (if name3 (entdel name3))
  66.      (if (= kd3 1) (entmake (list '(0 . "text")(cons 1 txt2)(cons 40 height)(cons 41 0.7)(cons 10 p2)(cons 7 ty))))
  67.      (if (= kd3 1) (setq name3 (entlast))))
  68. )
  69.    (if (= mode 3) (setq pd nil))
  70.    (if (or (= mode 2) (= mode 25)) (progn (setq pd nil) (entdel name1) (entdel name2) (if name3 (entdel name3))))
  71. )
  72. )
  73. (defun le (ent choice height)
  74.        (setq points '())
  75.     (mapcar '(lambda (x)
  76.                        (cond
  77.                                 ((= 10 (car x)) (setq points (cons (cdr x) points)))                                          
  78.                                        )
  79.                )
  80.                    ent
  81.     )
  82.     (setq point_end   (car  points))
  83.     (setq point_start (cadr points))
  84.     (if (> (- (car point_end) (car point_start)) 0)
  85.         (progn
  86.                    (setq point (list (+ (car point_end)  (* 0.7 height)) (- (cadr point_end) (* 0.5 height))))
  87.                (command "text" point height 0 choice )
  88.             )
  89.            (progn
  90.                    (setq point (list (- (car point_end) (* 0.7 height) ) (- (cadr point_end) (* 0.5 height))))
  91.                (command "text" point height 0 choice )
  92.                   (setq entname (entlast))
  93.                    (setq ent (entget entname))
  94.                    (entmod
  95.                          (mapcar '(lambda ( x)
  96.                                                (cond
  97.                                                       ((= (car x) 72) (cons (car x)  2))
  98.                                                                               ((= (car x) 11) (cons (car x)  point))
  99.                                                                               (t x)
  100.                                                             )
  101.                                                     )
  102.                                        ent
  103.                               )
  104.                     )          
  105.             )
  106.     )
  107.        (setq text_point (mapcar '* (mapcar '+ point_end point_start) '(0.5 0.5 0.5)))
  108.         (setq height_modify  (list 0 (* 0.2 height) 0 ) )
  109.         (setq text_point (mapcar '+  text_point height_modify))
  110.     (setq ent (entget (entlast)))
  111.         (entmod
  112.                          (mapcar '(lambda ( x)
  113.                                                (cond
  114.                                                       ((= (car x) 72) (cons (car x)  1))
  115.                                                                               ((= (car x) 11) (cons (car x)  text_point))
  116.                                                                               (t x)
  117.                                                             )
  118.                                                     )
  119.                                        ent
  120.                               )
  121.         )
  122. )
  123. (defun reduce (ent select_point / daojiao1 point0 point1 point2 point3 x y x1 x2 y1 y2)
  124.        (setq points '())
  125.         (setq i 1)
  126.         (setq x (car select_point) y (cadr select_point))
  127.        (mapcar '(lambda (x)  (cond
  128.                                      ((= 10 (car x))  (setq points (cons (cdr x) points)) )               
  129.                                  )
  130.                        )
  131.                          ent
  132.         )
  133.         (setq x (car select_point) y (cadr select_point))
  134.     (setq add_point1 (car points))
  135.         (setq add_point2 (cadr points))
  136.         (setq points (reverse points))
  137.         (setq add_point3 (car points))
  138.         (setq points (cons add_point1 points))
  139.         (setq points (cons add_point2 points))
  140.         (setq points (reverse points))
  141.         (setq points (cons add_point3 points))
  142.         (while (< i (- (length points) 2) )
  143.                (setq point1 (nth i points))
  144.                    (setq point2 (nth (+ i 1) points))
  145.                    (setq x1 (car point1) y1 (cadr point1) x2 (car point2) y2 (cadr point2))
  146.                    (if (and (or (and (< x x1) (> x x2)) (and (< x x2) (> x x1))) (or (and (< y y1) (> y y2)) (and (< y y2) (> y y1))))
  147.                        (setq j i i (length points))
  148.                    )
  149.                    (setq i (+ i 1))
  150.         )
  151.        
  152.         (setq point0 (nth (- j 1) points) point3 (nth (+ j 2) points))
  153.         (setq default_color (getvar "cecolor"))
  154.         (command "color" 1 "")
  155.         (command "line" point0 point1 "")
  156.         (setq ent1 (entlast))
  157.         (command "line" point1 point2 "")
  158.         (setq ent2 (entlast))
  159.         (command "line" point2 point3 "")
  160.         (setq ent3 (entlast))
  161.         (setq daojiao1 (chfd))
  162.         (entdel ent1 )
  163.         (entdel ent2 )
  164.         (entdel ent3 )
  165.         (command "color" default_color "")
  166.         (setq daojiao1 daojiao1)
  167. )
  168. (defun chfd (/ _dxf _para _valid a typ obj p1 p2 intrpt)
  169. (Defun _dxf (e dx) (cdr (assoc dx (entget e))))
  170. (defun _para (o p)
  171.    (vlax-curve-getparamatpoint
  172.      o
  173.      (vlax-curve-getClosestPointTo o p )
  174.    )
  175. )
  176. (defun _valid   (e typ / e)
  177.      (if (wcmatch (Setq v (_dxf e 0)) typ)
  178.            v))
  179.      (if (and (setq a (entsel "\nSelect Chamfered segment: "))
  180.               (Setq typ (_valid (setq obj (car a))
  181.                                 "LWPOLYLINE,LINE")))
  182.         (if (eq typ "LINE")
  183.                    (progn
  184.                                       (command "change" obj "" "p" "c" 3 "")
  185.                          (while (not (And
  186.                                            (setq obj2 (car  (entsel  "\nSelect another segment: ")))
  187.                                                                                 (not (command "change" obj2 "" "p" "c" 3 ""))
  188.                                            (setq obj3 (car  (entsel  "\nAnd another: ")))
  189.                                                                                 (not (command "change" obj3 "" "p" "c" 3 ""))
  190.                                            (_valid obj2 "LINE")
  191.                                            (_valid obj3 "LINE"))
  192.                                      )
  193.                           )
  194.                          (setq intrpt (inters (_dxf obj2 10)
  195.                                               (_dxf obj2 11)
  196.                                               (_dxf obj3 10)
  197.                                               (_dxf obj3 11)
  198.                                               nil))
  199.                          (Setq p1 (_dxf obj 10) p2 (_dxf obj 11))
  200.                          )
  201.                 (progn
  202.                              (setq prm1 (_para obj (cadr a)))
  203.                         (setq pts (mapcar 'cdr
  204.                                           (vl-remove-if-not
  205.                                                 '(lambda (k)
  206.                                                        (= (car k) 10)
  207.                                                        )
  208.                                                 (entget obj)
  209.                                                 )
  210.                                           )
  211.                               )
  212.                   (setq inbetween (vl-some '(lambda        (j k)
  213.                                           (if (< (_para obj j) prm1 (_para obj k))
  214.                                             (list j k)
  215.                                           )
  216.                                         )
  217.                                        pts
  218.                                        (cdr pts)
  219.                               )
  220.                   )
  221.                        (and
  222.                         (setq p1 (cadr (member (car inbetween) (reverse pts))))
  223.                         (setq p2 (cadr (member (Cadr inbetween) pts)))
  224.                         (setq intrpt (inters p1  (Car inbetween)
  225.                                p2  (cadr inbetween) nil)
  226.                                 )
  227.                                (setq p1 (Car inbetween) p2 (cadr inbetween))
  228.                         )
  229.                    )
  230.                    )(princ "\nNull/Invalid selection")
  231.          
  232.          )
  233.          (if intrpt
  234.                  (print (strcat "<<< "
  235.                          (rtos (distance p1 intrpt) 2 2)
  236.                          "x"
  237.                          (rtos (distance p2 intrpt) 2 2)
  238.                          " >>>"
  239.                  )
  240.           )(princ "\nInvalid data")
  241.              )
  242.         (setq aa (distance p1 intrpt))
  243.         (setq bb (distance p2 intrpt))
  244.         (list aa bb (list p1 p2))
  245.          )

总是感觉不完美更多选择。。。
 
这是pBe的代码,我感觉很好,在这里
  1. (defun c:chfd (/ _dxf _para _valid a typ obj p1 p2 intrpt)
  2. (Defun _dxf (e dx) (cdr (assoc dx (entget e))))
  3. (defun _para (o p)
  4.    (vlax-curve-getparamatpoint
  5.      o
  6.      (vlax-curve-getClosestPointTo o p)
  7.    )
  8. )
  9. (defun _valid   (e typ / e)
  10.      (if (wcmatch (Setq v (_dxf e 0)) typ)
  11.            v))
  12.      (if (and (setq a (entsel "\nSelect Chamfered segment: "))
  13.               (Setq typ (_valid (setq obj (car a))
  14.                                 "LWPOLYLINE,LINE")))
  15.         (if (eq typ "LINE")
  16.                    (progn
  17.                          (while (not (And
  18.                                            (setq obj2 (car  (entsel  "\nSelect another segment: ")))
  19.                                            (setq obj3 (car  (entsel  "\nAnd another: ")))
  20.                                            (_valid obj2 "LINE")
  21.                                            (_valid obj3 "LINE"))
  22.                                      )
  23.                           )
  24.                          (setq intrpt (inters (_dxf obj2 10)
  25.                                               (_dxf obj2 11)
  26.                                               (_dxf obj3 10)
  27.                                               (_dxf obj3 11)
  28.                                               nil))
  29.                          (Setq p1 (_dxf obj 10) p2 (_dxf obj 11))
  30.                          )
  31.                 (progn
  32.                              (setq prm1 (_para obj (cadr a)))
  33.                         (setq pts (mapcar 'cdr
  34.                                           (vl-remove-if-not
  35.                                                 '(lambda (k)
  36.                                                        (= (car k) 10)
  37.                                                        )
  38.                                                 (entget obj)
  39.                                                 )
  40.                                           )
  41.                               )
  42.                   (setq inbetween (vl-some '(lambda        (j k)
  43.                                           (if (< (_para obj j) prm1 (_para obj k))
  44.                                             (list j k)
  45.                                           )
  46.                                         )
  47.                                        pts
  48.                                        (cdr pts)
  49.                               )
  50.                   )
  51.                        (and
  52.                         (setq p1 (cadr (member (car inbetween) (reverse pts))))
  53.                         (setq p2 (cadr (member (Cadr inbetween) pts)))
  54.                         (setq intrpt (inters p1  (Car inbetween)
  55.                                p2  (cadr inbetween) nil)
  56.                                 )
  57.                                (setq p1 (Car inbetween) p2 (cadr inbetween))
  58.                         )
  59.                    )
  60.                    )(princ "\nNull/Invalid selection")
  61.          
  62.          )
  63.          (if intrpt
  64.                  (print (strcat "<<< "
  65.                          (rtos (distance p1 intrpt) 2 2)
  66.                          "x"
  67.                          (rtos (distance p2 intrpt) 2 2)
  68.                          " >>>"
  69.                  )
  70.           )(princ "\nInvalid data")
  71.              )(princ)
  72.          )

 
我想要动态,就像这样:
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 23:40:24 | 显示全部楼层
flyfox,
 
看看安德里亚在《TheSwamp》中的《DILEADER》。组织:动态智能领导者!
 
回复

使用道具 举报

34

主题

174

帖子

60

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
257
发表于 2022-7-5 23:43:32 | 显示全部楼层
 
ymg3,谢谢!我知道“DILEADER”,非常复杂的代码,容量有限!我希望有人能帮我用pBe的代码完成它。
回复

使用道具 举报

34

主题

174

帖子

60

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
257
发表于 2022-7-5 23:47:44 | 显示全部楼层
有人给我一个小惊喜??
回复

使用道具 举报

19

主题

124

帖子

105

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 2022-7-5 23:50:12 | 显示全部楼层
飞,很好!预料
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 23:52:08 | 显示全部楼层
我真的不明白flyflox的代码是什么?是否要在“倒角”段内“拖动”引线和文本标签?
回复

使用道具 举报

19

主题

124

帖子

105

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 2022-7-5 23:55:42 | 显示全部楼层
 
我认为是这样!fly的代码很好!但不能“拖动”,只能从倒角边的中点绘制。
回复

使用道具 举报

34

主题

174

帖子

60

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
257
发表于 2022-7-5 23:57:28 | 显示全部楼层
 
非常感谢。卢卡斯!
这就是我想要动态拖放的原因
回复

使用道具 举报

34

主题

174

帖子

60

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
257
发表于 2022-7-6 00:01:49 | 显示全部楼层
很抱歉以前我上传的代码缺少功能,现在,已经更新了
回复

使用道具 举报

34

主题

174

帖子

60

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
257
发表于 2022-7-6 00:04:43 | 显示全部楼层
 
pBe,对不起!以前我上传的代码缺少功能,现在,已经更新了
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 00:14 , Processed in 1.147498 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表