明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 331|回复: 10

[提问] [已解决]关于修改文字对正组码出现文字定位错误的问题。

[复制链接]
发表于 2024-6-11 15:21 | 显示全部楼层 |阅读模式
本帖最后由 Leolaputa 于 2024-6-17 09:50 编辑

----------2024-06-17----------
说明:
图中右下角的“测试字段”为原始文字位置,上方的“测试字段”是用修改了组码后的位置,可以看到虽然文字是中下定位,文字也确实居中了,但是却不在正确的位置上。

根据论坛相关帖子说明,当组码72或73存在时,组码10将不起作用。于是我直接修改了组码72并修改了组码11。

并且还有一个重要的问题,只要用过我以下写的代码,将文字的对正修改为中下,那么即使新建一个文本,使用justifytest进行修改成中下的操作,一样会出现和上述一模一样的定位不正确的情况。

Attention:
经过测试,想要程序正常运行,需要在修改完组码71、72、73后,接一个(entmode),再修改组码11,之后就会正常运行了。

----------以下为原帖子----------
如图所示,图中是一个字段经过改变组码变成中下定位后出现错误的情况。


以下是修改的代码

(defun c:WW1();修改文本对正
        ;创建对正模式选择,设定组码
        (initget "1 2")
        (setq #keyword (getkword "选择对正:[中下(1)/正中(2)]"))
        (cond
                ((= #keyword "1") (setq #71 0 #72 1 #73 1))
                ((= #keyword "2") (setq #71 0 #72 1 #73 2))
                (T nil)
        );end cond
        ;创建文本选择集,判断选择集数量
        (setq #ss (ssget '((0 . "TEXT"))))
        (setq #ssnum (sslength #ss))
        (setq #num 0)
        ;循环判定选择集中的内容
        (repeat #ssnum
                (setq #ssname (ssname #ss #num))
                (setq #ssdata (entget #ssname))
                ;判定组码72&73的值,确定文本基点
                (setq #ss72 (cdr (assoc 72 #ssdata)))
                (setq #ss73 (cdr (assoc 73 #ssdata)))
                (if
                        (and (= #ss72 0) (= #ss73 0))
                        (setq #pin (cdr (assoc 10 #ssdata)))
                        (setq #pin (cdr (assoc 11 #ssdata)))
                );end if
                ;修改文本属性
                (setq #newdata (subst (cons 71 #71) (assoc 71 #ssdata) #ssdata))
                (setq #newdata (subst (cons 72 #72) (assoc 72 #newdata) #newdata))
                (setq #newdata (subst (cons 73 #73) (assoc 73 #newdata) #newdata))
                (entmod #newdata);需要在修改完定位组码后先更新,再修改定位组码11
                (setq #newdata (subst (cons 11 #pin) (assoc 11 #newdata) #newdata))
                (entmod #newdata)
                (entupd #ssname)
                (setq #num (1+ #num))
        );end repeat
);end defun


请问为什么会出现文字飘到空中的情况咧。

本帖子中包含更多资源

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

x
发表于 2024-6-11 18:20 | 显示全部楼层
哪里飘了?谁飘了?
 楼主| 发表于 2024-6-12 17:09 | 显示全部楼层

右下角是测试字段的原始状态,用程序修改对正之后,可以看到字飞到了上方且居中了,但正常的时候应该是原位置向左移动到居中状态。
发表于 2024-6-12 17:13 | 显示全部楼层
Leolaputa 发表于 2024-6-12 17:09
右下角是测试字段的原始状态,用程序修改对正之后,可以看到字飞到了上方且居中了,但正常的时候应该是原 ...

你说这个啊,先平移到0,0再改变对齐,再平移回来
 楼主| 发表于 2024-6-12 19:17 | 显示全部楼层
你有种再说一遍 发表于 2024-6-12 17:13
你说这个啊,先平移到0,0再改变对齐,再平移回来

你说的我没试过,不过晚上我在试用justifytext命令修改文字对正的时候,发现改为中下一样会出现这种情况,并且所有新建的文本,用特性栏修改为中下一样会飞天,可能是有什么BUG吧。
发表于 2024-6-12 20:24 | 显示全部楼层
Leolaputa 发表于 2024-6-12 19:17
你说的我没试过,不过晚上我在试用justifytext命令修改文字对正的时候,发现改为中下一样会出现这种情况 ...

这种问题ifox其实都写了,可是你们写lisp的还没通用类库
发表于 2024-6-13 00:10 | 显示全部楼层
很好的,特别不错 啊
发表于 2024-6-13 00:15 | 显示全部楼层
飘了就移回原地
发表于 2024-6-13 21:51 | 显示全部楼层
你有种再说一遍 发表于 2024-6-12 20:24
这种问题ifox其实都写了,可是你们写lisp的还没通用类库

大佬把c#的内库定义点lisp可调用的函数来用用,拿来主义,拿来就用。
发表于 2024-6-13 22:37 | 显示全部楼层
jun353835273 发表于 2024-6-13 21:51
大佬把c#的内库定义点lisp可调用的函数来用用,拿来主义,拿来就用。

这样会让lisp的代码写成一种非通用代码,会非常奇怪的...正例如我想把dwg搞成dwgx也是困难重重
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-21 13:15 , Processed in 0.154389 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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