明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 706|回复: 14

[提问] 求教怎么控制文字方向

[复制链接]
发表于 2021-1-19 17:36 | 显示全部楼层 |阅读模式
下面的代码只能控制一部分文字的方向朝上
           (if (and (> (angle P1 P2) (* 0.517 pi))
                            (<= (angle P1 P2) (* 1.517 pi)))
                     (setq ANG1 (+ (angle P1 P2) pi))
                     (setq ANG1 (angle P1 P2))                 
)       
        (setq ang2(+(* ang1 (/ 180 pi))90))
        (command "text" P1 "30" ang2 "文字内容")


求教判断条件怎么完善可以实现始终可以保证文字的方式始终是朝上的,符合一般的阅读习惯,也就是始终可以
保证从左向右阅读
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-1-20 08:57 | 显示全部楼层
xj6019 发表于 2021-1-19 19:29
贴上完整代码
               
(defun c:NM(/)

查查看你的其它代码有没有问题咯
回复 支持 1 反对 0

使用道具 举报

发表于 2021-1-19 19:20 | 显示全部楼层
以象限为界限,大于0.5PI小于1.5PI的角度+PI,否则不加。
 楼主| 发表于 2021-1-19 19:27 | 显示全部楼层
烟盒迷唇 发表于 2021-1-19 19:20
以象限为界限,大于0.5PI小于1.5PI的角度+PI,否则不加。

   (if (and (> (angle PS1 PS2) (* 0.5 pi))
                            (< (angle PS1 PS2) (* 1.5 pi)))
                     (setq ANG1 (+ (angle PS1 PS2) pi))
                     (setq ANG1 (angle PS1 PS2))       

这个意思吗,试了不行呢
 楼主| 发表于 2021-1-19 19:29 | 显示全部楼层
贴上完整代码
               
(defun c:NM(/)
        (setq ent1 (entsel "\n選擇線:"))
        (setq ename (car ent1)  entdat(entget ename)  pk (cadr ent1) p0 (osnap pk "_nea")  p1 (getpoint"\n請輸入插入點:") ang (angle pk p0))                               
        (setq PS1 (polar (inters p1 (polar p1 ang -10) pk (polar pk (+ ang (* 0.5 pi)) -10) nil) ang 10))
        (setq PS2 (polar (inters p1 (polar p1 ang -10) pk (polar pk (+ ang (* 0.5 pi)) -10) nil) ang -10))       
           (if (and (> (angle PS1 PS2) (* 0.5 pi))
                            (< (angle PS1 PS2) (* 1.5 pi)))
                     (setq ANG1 (+ (angle PS1 PS2) pi))
                     (setq ANG1 (angle PS1 PS2))                 
)       
        (setq ang2(+(* ang1 (/ 180 pi))90))
        (command "text" P1 "30" ang2 "文字")
)
发表于 2021-1-20 12:12 | 显示全部楼层
象限好像搞错了
(and (>= (angle PS1 PS2) (* 0 pi))
                            (<= (angle PS1 PS2) (* 1 pi)))

评分

参与人数 1明经币 +1 收起 理由
xj6019 + 1 很给力!

查看全部评分

 楼主| 发表于 2021-1-20 12:50 | 显示全部楼层
start4444 发表于 2021-1-20 12:12
象限好像搞错了
(and (>= (angle PS1 PS2) (* 0 pi))
                            (

很完美  我想深度了解一这个判断条件是怎么定的,可否解释一下呀,(* 0 pi)是理解成0度吧, (* 1 pi)是理解成180度,换言之,大于等于0度  +pi,小于等于180度 不变。是这样理解吗
发表于 2021-1-20 13:31 | 显示全部楼层
xj6019 发表于 2021-1-20 12:50
很完美  我想深度了解一这个判断条件是怎么定的,可否解释一下呀,(* 0 pi)是理解成0度吧, (* 1 pi)是理 ...

就是在线的上部的时候(0-180度)和在线的下部(180-360度)两个情况啊,在把0和180的情况根据情况加上就得到判断象限了

点评

不好意思 ,组码7的字体 MSP 你改成你电脑的一个字体,或者直接把组码7删掉  发表于 2021-1-20 21:41

评分

参与人数 1明经币 +1 收起 理由
xj6019 + 1 很给力!

查看全部评分

 楼主| 发表于 2021-1-20 16:20 | 显示全部楼层
start4444 发表于 2021-1-20 13:31
就是在线的上部的时候(0-180度)和在线的下部(180-360度)两个情况啊,在把0和180的情况根据情况加上就 ...

我又折腾了一下,发现一个问题再请教一下,现在有角度的文字的方向都没有问题了,水平方向也没问题,唯独垂直方向文字现在是从上往下读的,劳烦指导一下,判断条件怎么完善一下,可以使垂直方向文字可以从下往上读。改了的完整代码如下:


(defun C:NM()
        (setq Dbiaozhu (getvar "DIMSCALE"))
        (while (= (setq ent1 (entsel "\n選擇線")) nil)
                (setq ent1 (entsel "\n選擇線")))
        (setq ename (car ent1) entdat(entget ename) pk (cadr ent1) p0 (osnap pk "nea") pmid (osnap pk "mid") ang (angle pk p0))       
        (setq PS1  (polar pmid ang 10))
        (setq PS2  (polar pmid ang -10))       
        (if                           
                (and (>= (angle PS1 PS2) (* 0 pi))
                        (<= (angle PS1 PS2) (* 1 pi)))               
                (setq ANG1 (+ (angle PS1 PS2) pi))
                (setq ANG1 (angle PS1 PS2))                 
        )               
        (setq PD  (polar pmid ang (* -1.5 Dbiaozhu)))
        ;(setq ang2(+(* ang1 (/ 180 pi))90))
        ;(command "text" PD (* 2 Dbiaozhu)  ang2 "文字文字")
        (setq ang2(+ ang1 (* 0.5 pi)))
        (EntMake-Text-ZS-Ang PD "文字文字" (* 2 Dbiaozhu) ang2 )
  (princ)
)



(defun EntMake-Text-ZS-Ang (pt str textheigh ang)
  (entmakex
    (list
                        '(0 . "text")
                        (cons 1 str)
                        (cons 7  "MSP")
                        (cons 10 pd)
                        (cons 11 pd)
                        (cons 40 textheigh)
                        (cons 41 0.8)
                        (cons 50 ang)                               
                        (cons 72 1)
                        (cons 73 2)
    )
  )
)

点评

再加个if就行了嘛,(if (or (= ang 0) (= ang pi)) (setq ang2 90) (setq ang2(+(* ang1 (/ 180 pi))90)))  发表于 2021-1-20 17:13
 楼主| 发表于 2021-1-20 18:53 | 显示全部楼层
本帖最后由 xj6019 于 2021-1-20 21:46 编辑
start4444 发表于 2021-1-20 13:31
就是在线的上部的时候(0-180度)和在线的下部(180-360度)两个情况啊,在把0和180的情况根据情况加上就 ...

哎 不行   玩不转呀,你的那个判断条件我直接用上不行,你那个是判断的角度的,我尝试换算后也不行,而且不知道这个代码什么原因,还是我理解的不到位,变量ang好像一直不对呀,我现在是转了好几个圈来计算的,下面受你的提示再增加个判断,但是没反应呢,麻烦看看哪个地方不对
(defun c:NM(/)
        (setq Dbiaozhu (getvar "DIMSCALE"))
         (while (= (setq ent1 (entsel "\n選擇線")) nil)
        (setq ent1 (entsel "\n選擇線")))
        (setq ename (car ent1) entdat(entget ename) pk (cadr ent1) p0 (osnap pk "nea") pmid (osnap pk "mid") ang (angle pk p0))        
        (setq PS1  (polar pmid ang 10))
        (setq PS2  (polar pmid ang -10))        
        (if                           
                (and (>= (angle PS1 PS2) (* 0 pi))
                        (<= (angle PS1 PS2) (* 1 pi)))               
                (setq ANG1 (+ (angle PS1 PS2) pi))
                (setq ANG1 (angle PS1 PS2))                 
        )               
        (setq PD  (polar pmid ang (* -1.5 Dbiaozhu)))
        (setq ang2(+ ang1 (* 0.5 pi)))  ;暂且先把ang2定义出来,就是文字的方向,后面再判断
        ;(if (or (= ang 0) (= ang pi)) (setq ang2 90) (setq ang2(+(* ang1 (/ 180 pi))90)))  你给的方案直接复制来的
(if
(or (/= ang2 (* 0.5 pi))  ;如果ang2 不是垂直方向
(= ang2 (* 0.5 pi)))  ;如果ang2是垂直方向
(setq ang3 ang2) ;不是垂直方向的话 方向不变=ang2
(setq ang3(+ 1 ang2 ))  ;如果是垂直方向  ang2+1  也就是转180度,实在不知道哪里理解的不到位啦 ,还尝试了其他几种都没成功
)  
  (EntMake-Text-ZS-Ang PD "文字文字" (* 2 Dbiaozhu) ang3 )
  (princ)
)
下面的代码我稍有改动,改了文字样式名(7) 和字宽(41)
;[功能]entmake单行文字(正中)
;[用法](EntMake-Text-JZ pt str textheigh)
(defun EntMake-Text-ZS-Ang (pt str textheigh ang)
  (entmakex
    (list
                        '(0 . "text")
                        (cons 1 str)
                        (cons 7  "MSP")
                        (cons 10 pd)
                        (cons 11 pd)
                        (cons 40 textheigh)
                        (cons 41 0.8)
                        (cons 50 ang)                              
                        (cons 72 1)
                        (cons 73 2)
    )
  )
)





点评

你这个新的我运行不了,我是在最初那个代码加了这句。可能新码是改动了  发表于 2021-1-20 20:54
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 08:07 , Processed in 0.258566 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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