明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 404|回复: 21

[源码] 将各种线型反向——多选版

[复制链接]
发表于 前天 17:26 | 显示全部楼层 |阅读模式
(defun C:FS (/ ss i ent ENT1 Q Q2 cp r os)
  (prompt "\n将各种线型反向——多选版")
  (setq os (getvar "osmode"))
  (setvar "osmode" 0)

  ;; 多选对象
  (if (setq ss (ssget '((0 . "LINE,ARC,CIRCLE,LWPOLYLINE,SPLINE"))))
    (progn
      (repeat (setq i (sslength ss))
        (setq ent (ssname ss (setq i (1- i)))
              ENT1 ent
              ENT (entget ENT1))

        (cond
          ;;━━━━━━ 多段线处理 ━━━━━━
          ((= (cdr (assoc 0 ENT)) "LWPOLYLINE")
           (reverseLwp ENT1))

          ;;━━━━━━ 直线处理 ━━━━━━
          ((= (cdr (assoc 0 ENT)) "LINE")
           (setq Q (cons 10 (cdr (assoc 11 ENT)))
                 Q2 (cons 11 (cdr (assoc 10 ENT))))
           (entmod (subst Q2 (assoc 11 ENT) (subst Q (assoc 10 ENT) ENT)))
          )

          ;;━━━━━━ 样条曲线处理 ━━━━━━
          ((= (cdr (assoc 0 ENT)) "SPLINE")
           (command "SPLINEDIT" ENT1 "E" "")
           (command "")
          )

          ;;━━━━━━ 圆弧处理 ━━━━━━
          ((= (cdr (assoc 0 ENT)) "ARC")
           (command "pedit" ENT1 "y" "")
           (reverseLwp (entlast))
           (entdel ENT1)
          )

          ;;━━━━━━ 圆处理 ━━━━━━
          ((= (cdr (assoc 0 ENT)) "CIRCLE")
           (setq cp (cdr (assoc 10 ENT))
                 r (cdr (assoc 40 ENT)))
           (entmake
             (list
               '(0 . "LWPOLYLINE")
               '(100 . "AcDbEntity")
               '(67 . 0)
               '(410 . "Model")
               '(100 . "AcDbPolyline")
               '(90 . 2)
               '(70 . 129)
               (cons 10 (polar cp 0 r))
               '(40 . 0)
               '(41 . 0)
               '(42 . -1)
               (cons 10 (polar cp pi r))
               '(40 . 0)
               '(41 . 0)
               '(42 . -1)
             )
           )
           (command "_matchprop" ENT1 (entlast) "")
           (entdel ENT1)
          )
        )
      )
    )
    (prompt "\n未选择有效对象")
  )

  (setvar "osmode" os)
  (princ)
)

;;;=======================================
;;; 多段线反转子程序(保持不变)
;;;=======================================
(defun reverseLwp (ent1 / a pl how li1 li2 li3)
  (setq pl (entget ent1 '("*")) how nil)
  (foreach an pl
    (if (setq a (member (car an) '(10 40 41 42)))
      (setq how t))
    (cond
      ((not how)
       (setq li1 (cons an li1)))
      ((and how a)
       (cond
         ((= (car an) 40) (setq an (cons 41 (cdr an))))
         ((= (car an) 41) (setq an (cons 40 (cdr an))))
         ((= (car an) 42) (setq an (cons 42 (- 0 (cdr an)))))
         (t an)
       )
       (setq li2 (cons an li2))
      )
      ((and how (not a))
       (setq li3 (cons an li3)))
    )
  )
  (entmod (append (reverse li1)
                  (append (cdddr li2) (list (car li2) (cadr li2) (caddr li2)))
                  (reverse li3)))
)

点评

(command "SPLINEDIT" ENT1 "E" "") 后面似乎多了一个 (command "")  发表于 前天 20:23

评分

参与人数 2明经币 +2 金钱 +5 收起 理由
tigcat + 1 + 5
xyp1964 + 1

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 昨天 12:15 | 显示全部楼层
qazxswk 发表于 2025-3-9 05:11
这个依然不起作用。




  1. (defun c:tt ()
  2.   (while (setq e (car (entsel "\n选择圆弧<退出>: ")))
  3.     (cond ((= (cdr (assoc 0 (entget e))) "ARC")
  4.            ;(xyp-Put-Mark (vlax-curve-getStartPoint e) 1 0)
  5.            (setvar "PEDITACCEPT" 1)
  6.            (command "pedit" e "")
  7.            (setq e (entlast))
  8.            (command "pedit" e "r" "")
  9.            ;(xyp-Put-Mark (vlax-curve-getStartPoint e) 2 0)
  10.           )
  11.     )
  12.   )
  13.   (princ)
  14. )





本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 前天 23:08 | 显示全部楼层
小毛草 发表于 2025-3-8 21:56
;;━━━━━━ 圆弧处理 ━━━━━━
          ((= (cdr (assoc 0 ENT)) "ARC")
           (comm ...

  1. ((= (cdr (assoc 0 (entget e))) "ARC")
  2.   (setvar "PEDITACCEPT" 1)
  3.   (command "pedit" e "")
  4.   (setq e (entlast))
  5.   (command "pedit" e "r" "")
  6. )
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 21:56 | 显示全部楼层

  ;;━━━━━━ 圆弧处理 ━━━━━━
          ((= (cdr (assoc 0 ENT)) "ARC")
           (command "pedit" ENT1 "y" "")
           (reverseLwp (entlast))
           (entdel ENT1)
          )
这个不起作用,请教版主!谢谢
回复 支持 反对

使用道具 举报

发表于 前天 17:58 | 显示全部楼层
我也写过这个功能,目前对圆弧不起作用。试了你这个,也是一样。
回复 支持 反对

使用道具 举报

发表于 前天 20:16 | 显示全部楼层
  1. ;多段线反向
  2. (command "pedit" e "r" "")
回复 支持 反对

使用道具 举报

发表于 昨天 05:11 | 显示全部楼层

这个依然不起作用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 09:49 | 显示全部楼层
试了,的确不行!
((= (cdr (assoc 0 (entget e))) "ARC")
  (setvar "PEDITACCEPT" 1)
  (command "pedit" e "")
  (setq e (entlast))
  (command "pedit" e "r" "")
)
回复 支持 反对

使用道具 举报

发表于 昨天 11:52 | 显示全部楼层
我试用了DS,也没有帮我解决这个问题。
回复 支持 反对

使用道具 举报

发表于 昨天 12:51 | 显示全部楼层

你试试把这文件中的线型反向,如果反向成功,文字会调方向的。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-3-10 15:32 , Processed in 0.184655 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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