[已解决]关于修改文字对正组码出现文字定位错误的问题。
本帖最后由 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
请问为什么会出现文字飘到空中的情况咧。
你有种再说一遍 发表于 2024-6-12 17:13
你说这个啊,先平移到0,0再改变对齐,再平移回来
你说的我没试过,不过晚上我在试用justifytext命令修改文字对正的时候,发现改为中下一样会出现这种情况,并且所有新建的文本,用特性栏修改为中下一样会飞天,可能是有什么BUG吧。 jun353835273 发表于 2024-6-13 21:51
大佬把c#的内库定义点lisp可调用的函数来用用,拿来主义,拿来就用。
这样会让lisp的代码写成一种非通用代码,会非常奇怪的...正例如我想把dwg搞成dwgx也是困难重重 Leolaputa 发表于 2024-6-12 19:17
你说的我没试过,不过晚上我在试用justifytext命令修改文字对正的时候,发现改为中下一样会出现这种情况 ...
这种问题ifox其实都写了,可是你们写lisp的还没通用类库 哪里飘了?谁飘了? 你有种再说一遍 发表于 2024-6-11 18:20
哪里飘了?谁飘了?
右下角是测试字段的原始状态,用程序修改对正之后,可以看到字飞到了上方且居中了,但正常的时候应该是原位置向左移动到居中状态。 Leolaputa 发表于 2024-6-12 17:09
右下角是测试字段的原始状态,用程序修改对正之后,可以看到字飞到了上方且居中了,但正常的时候应该是原 ...
你说这个啊,先平移到0,0再改变对齐,再平移回来 很好的,特别不错 啊 飘了就移回原地 你有种再说一遍 发表于 2024-6-12 20:24
这种问题ifox其实都写了,可是你们写lisp的还没通用类库
大佬把c#的内库定义点lisp可调用的函数来用用,拿来主义,拿来就用。
页:
[1]
2