flyfox1047 发表于 2022-7-5 23:34:58

倒角程序,需要hel


(defun c:dj ()
       (setq height 2.5)
        (if (setq judge (getreal "Input text height(Default 2.5)"))
             (setq height judge)               
        )
       (setq messege (entsel))
       (setq ent (entget (car messege)))
        (setq select_point (cadr messege))
        (if (equal (cdr (assoc 0 ent)) "LINE" )
          (setq daojiao (chfd ))
                (progn
                   (setq daojiao (reduce ent select_point))
         )                          
        )
        ;(princ daojiao)
        (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))
        (setq le_point (list (* 0.5 (+ x1 x2)) (* 0.5 (+ y1 y2)) ))
       (setq c1 (car daojiao) c2 (cadr daojiao))
        (if (= (rtos c1 2 1) (rtos c2 2 1))
          (setq c (strcat "C" (rtos c1 2 1)))
                (setq c (strcat (rtos c1 2 1) "*" (rtos c2 2 1) ))
        )
        (princ c)
        (princ le_point)
        (princ height)
       (bz c le_point height)
       ;(command "leader"le_point pause pause "" "" "n")
        ;(setq ent (entget (entlast)))
        ;(le ent c height)
)


(defun bz (txt1 p height / *error* name1 name2 name3)
(defun *error* (msg) ;
   (entdel name1) (entdel name2) (if name3 (entdel name3))
   (princ "err: ")(princ msg)
) ;


(setq ty (getvar "TEXTSTYLE") kd3 0)
(setq kd1 (caadr (textbox (list '(0 . "text")(cons 1 txt1)(cons 40 height)(cons 41 0.7)(cons 7 ty)))))


(setq kd2 (caadr (textbox (list '(0 . "text")(cons 1 "lyt love lhl")(cons 40 height)(cons 41 0.7)(cons 7 ty)))))



(setq kd (max kd1 kd2) kd (+ kd 50))
;(setq p (getpoint "\nSpecify the basis points:"))
(setq pd t)

(while pd
   (setq gr (grread t 4 1) mode (car gr) pt (cadr gr))
   (if (= kd3 0) (setq kd kd1))

   (if (and (listp pt) (>= (car pt) (car p))) (progn
   (setq p0 (polar pt 0 kd))
   (setq p1 (polar pt 0 (/ (- kd kd1) 2)) p1 (polar p1 (angtof "90") (* 0.2 height)))
   (setq p2 (polar pt 0 (/ (- kd kd2) 2)) p2 (polar p2 (angtof "270") 350)))
)

   (if (and (listp pt) (< (car pt) (car p))) (progn
   (setq p0 (polar pt pi kd))
   (setq p1 (polar p0 0 (/ (- kd kd1) 2)) p1 (polar p1 (angtof "90") (* 0.2 height)))
   (setq p2 (polar p0 0 (/ (- kd kd2) 2)) p2 (polar p2 (angtof "270") 350)))
)

   (if (= mode 5) (progn
   (if name1 (entdel name1))
   (entmake (list '(0 . "LWPOLYLINE")'(100 . "AcDbEntity")'(100 . "AcDbPolyline")'(90 . 3)
       (cons 10 p)(cons 10 pt)(cons 10 p0)))
   (setq name1 (entlast))
   (if name2 (entdel name2))
   (entmake (list '(0 . "text")(cons 1 txt1)(cons 40 height)(cons 41 0.7)(cons 10 p1)(cons 7 ty)))

   (setq name2 (entlast))
   (if name3 (entdel name3))
   (if (= kd3 1) (entmake (list '(0 . "text")(cons 1 txt2)(cons 40 height)(cons 41 0.7)(cons 10 p2)(cons 7 ty))))

   (if (= kd3 1) (setq name3 (entlast))))
)

   (if (= mode 3) (setq pd nil))

   (if (or (= mode 2) (= mode 25)) (progn (setq pd nil) (entdel name1) (entdel name2) (if name3 (entdel name3))))
)

)

(defun le (ent choice height)
       (setq points '())
    (mapcar '(lambda (x)
                     (cond
                              ((= 10 (car x)) (setq points (cons (cdr x) points)))                                          
                                     )
               )
                   ent
    )
    (setq point_end   (carpoints))
    (setq point_start (cadr points))
    (if (> (- (car point_end) (car point_start)) 0)
      (progn
                   (setq point (list (+ (car point_end)(* 0.7 height)) (- (cadr point_end) (* 0.5 height))))
               (command "text" point height 0 choice )
          )
           (progn
                   (setq point (list (- (car point_end) (* 0.7 height) ) (- (cadr point_end) (* 0.5 height))))
               (command "text" point height 0 choice )
                  (setq entname (entlast))
                   (setq ent (entget entname))
                   (entmod
                         (mapcar '(lambda ( x)
                                             (cond
                                                      ((= (car x) 72) (cons (car x)2))
                                                                              ((= (car x) 11) (cons (car x)point))
                                                                              (t x)
                                                            )
                                                    )
                                       ent
                              )
                    )          
          )
    )
       (setq text_point (mapcar '* (mapcar '+ point_end point_start) '(0.5 0.5 0.5)))
        (setq height_modify(list 0 (* 0.2 height) 0 ) )
        (setq text_point (mapcar '+text_point height_modify))
    (setq ent (entget (entlast)))
        (entmod
                         (mapcar '(lambda ( x)
                                             (cond
                                                      ((= (car x) 72) (cons (car x)1))
                                                                              ((= (car x) 11) (cons (car x)text_point))
                                                                              (t x)
                                                            )
                                                    )
                                       ent
                              )
        )

)




(defun reduce (ent select_point / daojiao1 point0 point1 point2 point3 x y x1 x2 y1 y2)
       (setq points '())
        (setq i 1)
        (setq x (car select_point) y (cadr select_point))
       (mapcar '(lambda (x)(cond
                                     ((= 10 (car x))(setq points (cons (cdr x) points)) )               
                               )
                     )
                       ent
        )
        (setq x (car select_point) y (cadr select_point))
    (setq add_point1 (car points))
        (setq add_point2 (cadr points))
        (setq points (reverse points))
        (setq add_point3 (car points))
        (setq points (cons add_point1 points))
        (setq points (cons add_point2 points))
        (setq points (reverse points))
        (setq points (cons add_point3 points))
        (while (< i (- (length points) 2) )
             (setq point1 (nth i points))
                   (setq point2 (nth (+ i 1) points))
                   (setq x1 (car point1) y1 (cadr point1) x2 (car point2) y2 (cadr point2))
                   (if (and (or (and (< x x1) (> x x2)) (and (< x x2) (> x x1))) (or (and (< y y1) (> y y2)) (and (< y y2) (> y y1))))
                     (setq j i i (length points))
                   )
                   (setq i (+ i 1))
        )
       
        (setq point0 (nth (- j 1) points) point3 (nth (+ j 2) points))
        (setq default_color (getvar "cecolor"))
        (command "color" 1 "")
        (command "line" point0 point1 "")
        (setq ent1 (entlast))
        (command "line" point1 point2 "")
        (setq ent2 (entlast))
        (command "line" point2 point3 "")
        (setq ent3 (entlast))
        (setq daojiao1 (chfd))
        (entdel ent1 )
        (entdel ent2 )
        (entdel ent3 )
        (command "color" default_color "")
        (setq daojiao1 daojiao1)
)

(defun chfd (/ _dxf _para _valid a typ obj p1 p2 intrpt)
(Defun _dxf (e dx) (cdr (assoc dx (entget e))))
(defun _para (o p)
   (vlax-curve-getparamatpoint
   o
   (vlax-curve-getClosestPointTo o p )
   )
)
(defun _valid   (e typ / e)
   (if (wcmatch (Setq v (_dxf e 0)) typ)
         v))
   (if (and (setq a (entsel "\nSelect Chamfered segment: "))
            (Setq typ (_valid (setq obj (car a))
                              "LWPOLYLINE,LINE")))
        (if (eq typ "LINE")
                   (progn
                                      (command "change" obj "" "p" "c" 3 "")
                         (while (not (And
                                           (setq obj2 (car(entsel"\nSelect another segment: ")))
                                                                                (not (command "change" obj2 "" "p" "c" 3 ""))
                                           (setq obj3 (car(entsel"\nAnd another: ")))
                                                                                (not (command "change" obj3 "" "p" "c" 3 ""))
                                           (_valid obj2 "LINE")
                                           (_valid obj3 "LINE"))
                                     )
                        )
                         (setq intrpt (inters (_dxf obj2 10)
                                              (_dxf obj2 11)
                                              (_dxf obj3 10)
                                              (_dxf obj3 11)
                                              nil))
                         (Setq p1 (_dxf obj 10) p2 (_dxf obj 11))
                         )
                (progn
                           (setq prm1 (_para obj (cadr a)))
                        (setq pts (mapcar 'cdr
                                          (vl-remove-if-not
                                                '(lambda (k)
                                                     (= (car k) 10)
                                                     )
                                                (entget obj)
                                                )
                                          )
                              )
                  (setq inbetween (vl-some '(lambda        (j k)
                                          (if (< (_para obj j) prm1 (_para obj k))
                                          (list j k)
                                          )
                                        )
                                     pts
                                     (cdr pts)
                              )
                  )
                     (and
                        (setq p1 (cadr (member (car inbetween) (reverse pts))))
                        (setq p2 (cadr (member (Cadr inbetween) pts)))
                        (setq intrpt (inters p1(Car inbetween)
                             p2(cadr inbetween) nil)
                                )
                               (setq p1 (Car inbetween) p2 (cadr inbetween))
                        )
                   )
                   )(princ "\nNull/Invalid selection")
         
         )
         (if intrpt
               (print (strcat "<<< "
                       (rtos (distance p1 intrpt) 2 2)
                       "x"
                       (rtos (distance p2 intrpt) 2 2)
                       " >>>"
               )
          )(princ "\nInvalid data")
             )
        (setq aa (distance p1 intrpt))
        (setq bb (distance p2 intrpt))
        (list aa bb (list p1 p2))
         )

总是感觉不完美更多选择。。。
 
这是pBe的代码,我感觉很好,在这里
(defun c:chfd (/ _dxf _para _valid a typ obj p1 p2 intrpt)
(Defun _dxf (e dx) (cdr (assoc dx (entget e))))
(defun _para (o p)
   (vlax-curve-getparamatpoint
   o
   (vlax-curve-getClosestPointTo o p)
   )
)
(defun _valid   (e typ / e)
   (if (wcmatch (Setq v (_dxf e 0)) typ)
         v))
   (if (and (setq a (entsel "\nSelect Chamfered segment: "))
            (Setq typ (_valid (setq obj (car a))
                              "LWPOLYLINE,LINE")))
        (if (eq typ "LINE")
                   (progn
                         (while (not (And
                                           (setq obj2 (car(entsel"\nSelect another segment: ")))
                                           (setq obj3 (car(entsel"\nAnd another: ")))
                                           (_valid obj2 "LINE")
                                           (_valid obj3 "LINE"))
                                     )
                        )
                         (setq intrpt (inters (_dxf obj2 10)
                                              (_dxf obj2 11)
                                              (_dxf obj3 10)
                                              (_dxf obj3 11)
                                              nil))
                         (Setq p1 (_dxf obj 10) p2 (_dxf obj 11))
                         )
                (progn
                           (setq prm1 (_para obj (cadr a)))
                        (setq pts (mapcar 'cdr
                                          (vl-remove-if-not
                                                '(lambda (k)
                                                     (= (car k) 10)
                                                     )
                                                (entget obj)
                                                )
                                          )
                              )
                  (setq inbetween (vl-some '(lambda        (j k)
                                          (if (< (_para obj j) prm1 (_para obj k))
                                          (list j k)
                                          )
                                        )
                                     pts
                                     (cdr pts)
                              )
                  )
                     (and
                        (setq p1 (cadr (member (car inbetween) (reverse pts))))
                        (setq p2 (cadr (member (Cadr inbetween) pts)))
                        (setq intrpt (inters p1(Car inbetween)
                             p2(cadr inbetween) nil)
                                )
                               (setq p1 (Car inbetween) p2 (cadr inbetween))
                        )
                   )
                   )(princ "\nNull/Invalid selection")
         
         )
         (if intrpt
               (print (strcat "<<< "
                       (rtos (distance p1 intrpt) 2 2)
                       "x"
                       (rtos (distance p2 intrpt) 2 2)
                       " >>>"
               )
          )(princ "\nInvalid data")
             )(princ)
         )
 
我想要动态,就像这样:

ymg3 发表于 2022-7-5 23:40:24

flyfox,
 
看看安德里亚在《TheSwamp》中的《DILEADER》。组织:动态智能领导者!
 

flyfox1047 发表于 2022-7-5 23:43:32

 
ymg3,谢谢!我知道“DILEADER”,非常复杂的代码,容量有限!我希望有人能帮我用pBe的代码完成它。

flyfox1047 发表于 2022-7-5 23:47:44

有人给我一个小惊喜??

lucas3 发表于 2022-7-5 23:50:12

飞,很好!预料

pBe 发表于 2022-7-5 23:52:08

我真的不明白flyflox的代码是什么?是否要在“倒角”段内“拖动”引线和文本标签?

lucas3 发表于 2022-7-5 23:55:42

 
我认为是这样!fly的代码很好!但不能“拖动”,只能从倒角边的中点绘制。

flyfox1047 发表于 2022-7-5 23:57:28

 
非常感谢。卢卡斯!
这就是我想要动态拖放的原因

flyfox1047 发表于 2022-7-6 00:01:49

很抱歉以前我上传的代码缺少功能,现在,已经更新了

flyfox1047 发表于 2022-7-6 00:04:43

 
pBe,对不起!以前我上传的代码缺少功能,现在,已经更新了
页: [1] 2
查看完整版本: 倒角程序,需要hel