Leolaputa 发表于 2024-6-11 15:21:41

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

本帖最后由 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


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

Leolaputa 发表于 2024-6-12 19:17:12

你有种再说一遍 发表于 2024-6-12 17:13
你说这个啊,先平移到0,0再改变对齐,再平移回来

你说的我没试过,不过晚上我在试用justifytext命令修改文字对正的时候,发现改为中下一样会出现这种情况,并且所有新建的文本,用特性栏修改为中下一样会飞天,可能是有什么BUG吧。

你有种再说一遍 发表于 2024-6-13 22:37:36

jun353835273 发表于 2024-6-13 21:51
大佬把c#的内库定义点lisp可调用的函数来用用,拿来主义,拿来就用。

这样会让lisp的代码写成一种非通用代码,会非常奇怪的...正例如我想把dwg搞成dwgx也是困难重重

你有种再说一遍 发表于 2024-6-12 20:24:41

Leolaputa 发表于 2024-6-12 19:17
你说的我没试过,不过晚上我在试用justifytext命令修改文字对正的时候,发现改为中下一样会出现这种情况 ...

这种问题ifox其实都写了,可是你们写lisp的还没通用类库

你有种再说一遍 发表于 2024-6-11 18:20:35

哪里飘了?谁飘了?

Leolaputa 发表于 2024-6-12 17:09:03

你有种再说一遍 发表于 2024-6-11 18:20
哪里飘了?谁飘了?

右下角是测试字段的原始状态,用程序修改对正之后,可以看到字飞到了上方且居中了,但正常的时候应该是原位置向左移动到居中状态。

你有种再说一遍 发表于 2024-6-12 17:13:00

Leolaputa 发表于 2024-6-12 17:09
右下角是测试字段的原始状态,用程序修改对正之后,可以看到字飞到了上方且居中了,但正常的时候应该是原 ...

你说这个啊,先平移到0,0再改变对齐,再平移回来

249524717 发表于 2024-6-13 00:10:40

很好的,特别不错 啊

xyp1964 发表于 2024-6-13 00:15:31

飘了就移回原地

jun353835273 发表于 2024-6-13 21:51:07

你有种再说一遍 发表于 2024-6-12 20:24
这种问题ifox其实都写了,可是你们写lisp的还没通用类库

大佬把c#的内库定义点lisp可调用的函数来用用,拿来主义,拿来就用。
页: [1] 2
查看完整版本: [已解决]关于修改文字对正组码出现文字定位错误的问题。