明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 刘炎华

[源码] 型孔角部避位

[复制链接]
 楼主| 发表于 2021-12-5 14:28:24 | 显示全部楼层
xtjd 发表于 2021-12-5 14:24
已经更新 ,请重新下载测试

大师:
        还有提示,错误: no function definition: PLORLR
回复

使用道具 举报

发表于 2021-12-5 14:29:13 来自手机 | 显示全部楼层
回复

使用道具 举报

发表于 2021-12-5 14:30:11 | 显示全部楼层
;请试用以下程序
(defun c:xgbj()
    (defun pts_to_list(Xpts / fhz pt)
        (setq fhz nil)
        (foreach pt Xpts
            (setq fhz (cons (car pt) fhz))
            (setq fhz (cons (cadr pt) fhz))
        )
        (setq fhz (reverse fhz))
    )
  
    (setvar "cmdecho" 0)
    (command "_undo" "be")
  
    (if (progn
            (princ "\n请选取多段线:")
            (setq ssa (ssget ":S" '((0 . "lwpolyline"))))
        )
        (progn
            (setq ent (ssname ssa 0))
            (setq pts (mapcar 'cdr (vl-remove-if-not '(lambda(x)(= (car x) 10)) (entget ent))))
            (setq obj (vlax-ename->vla-object ent))
            (setq obj1 (car (vlax-invoke obj "offset" 1)))
            (if (> (vlax-curve-getarea obj1) (vlax-curve-getarea obj))
                (setq pdbz 1)   ;逆时针
                (setq pdbz -1)  ;顺时针
            )
            (vla-Delete obj1)
            (setq n (fix (vlax-curve-getendparam obj)))
            (setq i 0)
            (repeat n
                 (setq i-1 (1- i))
                 (if (= i-1 -1) (setq i-1 (1- n)))
                 (setq i+1 (1+ i))
                 (if (= i+1 n) (setq i+1 0))
                 (setq i+2 (1+ i+1))
                 (If (= i+2 n) (setq i+2 0))
                 (If (< i (1- n))
                     (setq jlz (- (vlax-curve-getdistatparam obj i+1)
                                  (vlax-curve-getdistatparam obj i)
                               )
                     )
         
                     (setq jlz (- (vlax-curve-getdistatparam obj (1+ i))
                                  (vlax-curve-getdistatparam obj i)
                               )
                    )
                 )
                 (mapcar 'set '(pti-1 pti pti+1 pti+2)
                               (mapcar '(lambda(param)
                                            (setq pt (vlax-curve-getPointAtParam obj param))
                                            (list (car pt) (cadr pt))
                                        )
                                        (list i-1 i i+1 i+2)
                               )
                 )
                 (setq ptjd (inters pti-1 pti pti+1 pti+2 nil))
                 (setq ang1 (angle pti-1 pti))
                 (setq ang2 (angle pti pti+1))
                 (setq ang3 (angle pti+1 pti+2))
                 (setq bul (vla-GetBulge obj i))
                 (cond ((= bul 0.0)
                          (setq djR (/ jlz (sqrt 2.0)))
                          (if (and (= (vla-GetBulge obj i+1) 0.0)
                                   (equal djR 4.0 1e-3)
                              )
                              (progn
                                  (setq ptia (polar ptjd ang1 (* -1.0 (- djR 0.2))))
                                  (setq pti+1a (polar ptjd ang3 (- djR 0.2)))
                                  (setq pts (subst ptia pti pts))
                                  (setq pts (subst pti+1a pti+1 pts))
                                  (setq zbsjb (pts_to_list pts))
                                  (vlax-put obj "Coordinates" zbsjb)
                              )
                          )
             
                       )
                       (t
                          (setq dang (atan (abs bul)))
                          (setq alf (* 2.0 dang))
                          (setq R (/ jlz (atan (abs bul)) 4.0))
                          (setq alf1 (* 0.5 alf))
                          (setq pdbz1 (/ bul (abs bul)))
                          (setq R1 (- R (* pdbz pdbz1 0.2)))
                          (setq qxc1 (* R1 (/ (sin alf) (cos alf))))
                          (setq qxc1 (abs qxc1))
                          (setq bul1 (* pdbz1 (/ (sin alf1) (cos alf1))))
                          (setq ptia (polar ptjd ang1 (* -1.0  qxc1)))
                          (setq pti+1a (polar ptjd ang3  qxc1))
                          (setq pts (subst ptia pti pts))
                          (setq pts (subst pti+1a pti+1 pts))
                          (setq zbsjb (pts_to_list pts))
                          (vlax-put obj "Coordinates" zbsjb)
                          (vla-SetBulge obj i bul1)
                       )
                 )
                 (setq i (1+ i))
           )
        )
    )
    (command "_undo" "e")
    (setvar "cmdecho" 1)
    (princ)
)
回复

使用道具 举报

发表于 2021-12-5 14:35:11 | 显示全部楼层
刘炎华 发表于 2021-12-5 14:28
大师:
        还有提示,错误: no function definition: PLORLR

已经修改,烦再测试

点评

大师!可以了,非常感谢您!!!  发表于 2021-12-5 14:56
回复

使用道具 举报

 楼主| 发表于 2021-12-5 14:44:31 | 显示全部楼层
yshf 发表于 2021-12-5 14:30
;请试用以下程序
(defun c:xgbj()
    (defun pts_to_list(Xpts / fhz pt)

大师:
      测试可以了!
      如果能多选对象处理逃角就更高效了
回复

使用道具 举报

发表于 2021-12-5 15:00:07 | 显示全部楼层
;请试用以下程序
(defun c:xgbj1()
    (defun pts_to_list(Xpts / fhz pt)
        (setq fhz nil)
        (foreach pt Xpts
            (setq fhz (cons (car pt) fhz))
            (setq fhz (cons (cadr pt) fhz))
        )
        (setq fhz (reverse fhz))
    )
  
    (setvar "cmdecho" 0)
    (command "_undo" "be")
  
    (if (progn
            (princ "\n请选取多段线:")
            (setq ssa (ssget '((0 . "lwpolyline"))))
        )
        (progn
            (setq m (sslength ssa))
            (setq j 0)
            (repeat m
                (setq ent (ssname ssa j))
                (setq pts (mapcar 'cdr (vl-remove-if-not '(lambda(x)(= (car x) 10)) (entget ent))))
                (setq obj (vlax-ename->vla-object ent))
                (setq obj1 (car (vlax-invoke obj "offset" 1)))
                (if (> (vlax-curve-getarea obj1) (vlax-curve-getarea obj))
                    (setq pdbz 1)   ;逆时针
                    (setq pdbz -1)  ;顺时针
                )
                (vla-Delete obj1)
                (setq n (fix (vlax-curve-getendparam obj)))
                (setq i 0)
                (repeat n
                    (setq i-1 (1- i))
                    (if (= i-1 -1) (setq i-1 (1- n)))
                    (setq i+1 (1+ i))
                    (if (= i+1 n) (setq i+1 0))
                    (setq i+2 (1+ i+1))
                    (If (= i+2 n) (setq i+2 0))
                    (If (< i (1- n))
                        (setq jlz (- (vlax-curve-getdistatparam obj i+1)
                                     (vlax-curve-getdistatparam obj i)
                                  )
                        )
         
                        (setq jlz (- (vlax-curve-getdistatparam obj (1+ i))
                                     (vlax-curve-getdistatparam obj i)
                                  )
                        )
                    )
                    (mapcar 'set '(pti-1 pti pti+1 pti+2)
                                  (mapcar '(lambda(param)
                                            (setq pt (vlax-curve-getPointAtParam obj param))
                                            (list (car pt) (cadr pt))
                                        )
                                        (list i-1 i i+1 i+2)
                               )
                    )
                    (setq ptjd (inters pti-1 pti pti+1 pti+2 nil))
                    (setq ang1 (angle pti-1 pti))
                    (setq ang2 (angle pti pti+1))
                    (setq ang3 (angle pti+1 pti+2))
                    (setq bul (vla-GetBulge obj i))
                    (cond ((= bul 0.0)
                               (setq djR (/ jlz (sqrt 2.0)))
                               (if (and (= (vla-GetBulge obj i+1) 0.0)
                                        (equal djR 4.0 1e-3)
                                   )
                                   (progn
                                      (setq ptia (polar ptjd ang1 (* -1.0 (- djR 0.2))))
                                      (setq pti+1a (polar ptjd ang3 (- djR 0.2)))
                                      (setq pts (subst ptia pti pts))
                                      (setq pts (subst pti+1a pti+1 pts))
                                      (setq zbsjb (pts_to_list pts))
                                      (vlax-put obj "Coordinates" zbsjb)
                                   )
                               )
             
                          )
                          (t
                              (setq dang (atan (abs bul)))
                              (setq alf (* 2.0 dang))
                              (setq R (/ jlz (atan (abs bul)) 4.0))
                              (setq alf1 (* 0.5 alf))
                              (setq pdbz1 (/ bul (abs bul)))
                              (setq R1 (- R (* pdbz pdbz1 0.2)))
                              (setq qxc1 (* R1 (/ (sin alf) (cos alf))))
                              (setq qxc1 (abs qxc1))
                              (setq bul1 (* pdbz1 (/ (sin alf1) (cos alf1))))
                              (setq ptia (polar ptjd ang1 (* -1.0  qxc1)))
                              (setq pti+1a (polar ptjd ang3  qxc1))
                              (setq pts (subst ptia pti pts))
                              (setq pts (subst pti+1a pti+1 pts))
                              (setq zbsjb (pts_to_list pts))
                              (vlax-put obj "Coordinates" zbsjb)
                             (vla-SetBulge obj i bul1)
                          )
                    )
                    (setq i (1+ i))
                )             
                (setq j (1+ j))
            )
        )
    )
    (command "_undo" "e")
    (setvar "cmdecho" 1)
    (princ)
)

点评

大师!您的这个也能实现了! 我把xtjd的设置成最佳答案了,您别介意啊  发表于 2021-12-5 15:10
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 06:42 , Processed in 0.169132 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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