明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3339|回复: 12

[提问] 如何批量改变直线角度?

[复制链接]
发表于 2015-6-6 22:50:18 | 显示全部楼层 |阅读模式
20明经币
本帖最后由 fire9527 于 2015-6-7 19:51 编辑

制作带文字的线型一个不好的地方就是如果线段是反向的,比如180度,270度,则线型上的文字也会反向,能否批量选中这些文字反向的直线,然后将直线以中心点旋转180度(或者采用reverse命令)来解决这个问题?
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

发表于 2015-6-6 22:50:19 | 显示全部楼层
fire9527 发表于 2015-6-10 21:09
关键就是不会改那判断条件啊

  1. ;直线90-270度反向
  2. (defun c:tt (/ ss i en ent p1 p2 ang )
  3. (if (and (princ "\n选择直线: ")
  4.           (setq ss (ssget '((0 . "LINE")))))
  5.   (repeat (setq i (sslength ss))
  6.    (setq en (ssname ss (setq i (1- i))))
  7.    (setq ent (entget en))
  8.    (setq p1 (cdr(assoc 10 ent)))
  9.    (setq p2 (cdr(assoc 11 ent)))
  10.    (setq ang (angle p1 p2))
  11.    (if (and (> ang (* pi 0.5))(<= ang (* pi 1.5))  ) (progn
  12.     (setq ent (subst (cons 10 p2) (assoc 10 ent) ent))
  13.     (entmod (subst (cons 11 p1) (assoc 11 ent) ent))
  14.    ))
  15.   )
  16. )
  17. (princ)
  18. )
  19. ;直线90-270度全部反向
  20. (defun c:tt2 (/ ss i en ent p1 p2 ang )
  21. (if (and (princ "\n选择直线: ")
  22.           (setq ss (ssget "x" '((0 . "LINE")))))
  23.   (repeat (setq i (sslength ss))
  24.    (setq en (ssname ss (setq i (1- i))))
  25.    (setq ent (entget en))
  26.    (setq p1 (cdr(assoc 10 ent)))
  27.    (setq p2 (cdr(assoc 11 ent)))
  28.    (setq ang (angle p1 p2))
  29.    (if (and (> ang (* pi 0.5))(<= ang (* pi 1.5))  ) (progn
  30.     (setq ent (subst (cons 10 p2) (assoc 10 ent) ent))
  31.     (entmod (subst (cons 11 p1) (assoc 11 ent) ent))
  32.    ))
  33.   )
  34. )
  35. (princ)
  36. )

点评

第二个程序考虑很周到,角度区间非常准确,非常感谢!同时感谢ZZXXQQ(大概在第二象限靠北的一小段角度区间没有正确判断);感谢llsheng_73 (仅对90°直线判断有重叠,导致每运行一次角度就变一次)!  发表于 2015-6-12 17:14
(and (> ang (* pi 0.5))(<= ang (* pi 1.5))) ->(<=(+(*pi 0.5)1e-20)ang(* pi 1.5))  发表于 2015-6-12 10:59

评分

参与人数 1明经币 +1 金钱 +5 收起 理由
longer1000 + 1 + 5 很给力!解决了一直困惑的问题

查看全部评分

回复

使用道具 举报

发表于 2015-6-7 09:17:43 | 显示全部楼层
请给个调试用的样本Dwg供验证...
回复

使用道具 举报

发表于 2015-6-7 10:31:46 | 显示全部楼层
本帖最后由 ZZXXQQ 于 2015-6-11 08:17 编辑
  1. ;直线转180度
  2. (defun c:tt ()
  3. (if (and (princ "\n选择直线: ")
  4.           (setq ss (ssget '((0 . "LINE")))))
  5.   (repeat (setq i (sslength ss))
  6.    (setq en (ssname ss (setq i (1- i))))
  7.    (setq ent (entget en))
  8.    (setq p1 (cdr(assoc 10 ent)))
  9.    (setq p2 (cdr(assoc 11 ent)))
  10.    (setq ang (angle p1 p2))
  11.    (if (< (* pi 0.5) ang (* pi 1.6)) (progn
  12.     (setq ent (subst (cons 10 p2) (assoc 10 ent) ent))
  13.     (entmod (subst (cons 11 p1) (assoc 11 ent) ent))
  14.    ))
  15.   )
  16. )
  17. (princ)
  18. )

评分

参与人数 1明经币 +1 收起 理由
fire9527 + 1 非常感谢!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2015-6-7 10:59:53 | 显示全部楼层
ZZXXQQ 发表于 2015-6-7 10:31

刚上传了附件,我想要的效果并不是所有直线旋转180度,而是满足一定角度的直线,请看一下

点评

板凳又改了。  发表于 2015-6-11 08:17
板凳改了。  发表于 2015-6-7 11:49
回复

使用道具 举报

 楼主| 发表于 2015-6-7 11:05:23 | 显示全部楼层
Andyhon 发表于 2015-6-7 09:17
请给个调试用的样本Dwg供验证...

附件已上传
回复

使用道具 举报

 楼主| 发表于 2015-6-7 11:59:40 | 显示全部楼层
ZZXXQQ 发表于 2015-6-7 10:31

刚是了下,没反应哦,还有就是并不是所有直线都要旋转180度,而是在一定角度范围内的直线才需要旋转,解决带字线型字体反转的问题
回复

使用道具 举报

发表于 2015-6-7 12:15:23 | 显示全部楼层
reverse 曲线反向

点评

正解,我CAD2010,能用,但是本帖想要的是选择一些特定角度的直线,然后对它们运行reverse  发表于 2015-6-7 19:48
回复

使用道具 举报

发表于 2015-6-7 12:35:09 | 显示全部楼层
ivde 发表于 2015-6-7 12:15
reverse 曲线反向

高版本才有这个命令,不知从哪一版开始
回复

使用道具 举报

 楼主| 发表于 2015-6-7 19:50:17 | 显示全部楼层
ZZXXQQ 发表于 2015-6-7 10:31

老大,试试reverse这个命令呢,还有就是麻烦看看附件,需要程序构建特定角度的选择集,而不是手动去选择

点评

要想构建特定角度的选择集也要选择后筛选判断,不如在判断后直接换向。如想省略选择,可在ssget后加"X"选择项,由程序自行处理。  发表于 2015-6-8 15:48
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-21 21:39 , Processed in 0.242135 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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