lyqiezi
发表于 2014-5-29 18:45:35
如果你真的需要这样,就先把多行文字都炸成单行文字,然后就试一下天正建筑的“文字表格”里面,找到“文字转化”,选上所有单行文字,就换成天正的文字,然后在用cad的炸开命令
效果看附件,包含
1、原用MTEXT写的文字
2、炸开成单行文字
3、转化成天正文字
4、炸开成的最后结果
lyqiezi
发表于 2014-5-29 19:03:29
另外你说的:为啥?因为不炸开,就会变得一陀螺很长很长,超过范围和表格,炸开就恢复应该的总长度!
这个表示怀疑
尘缘一生
发表于 2014-5-29 19:17:18
本帖最后由 尘缘一生 于 2014-5-29 19:53 编辑
lyqiezi 发表于 2014-5-29 19:03 static/image/common/back.gif
另外你说的:为啥?因为不炸开,就会变得一陀螺很长很长,超过范围和表格,炸开就恢复应该的总长度!
这个 ...
这涉及以下两个问题:
1:本帖的问题,是基于CAD解决,不要借助其他软件包。
2:软件包,比如:天正吧?有什么?刚毕业的学生,或者根本不是学建筑的,开始工作,用天正,为啥,好学,但是,哪就是个CAD开发程序集合。
记得93年潍坊参加PKPM研讨会,还有现场推销个开发包,演示,其实,他那个还不如我自己开发的多,好用。
这20年来,我一直自己写,也在网上找好程序,我老啦,编写程序满脑子代码,调试好几天,总记挂那段代码咋回事,想借助年轻人的才华,省点事。
我把我自己开发与收藏的CAD截面给大家看看,我自己使用的,这里面很大部分命令,是我自己写的,也很多事网上找的。
无论任何外挂包,都是不可用的,因为,哪里面都有很多无用东西,要自己整合自己得包。
无论任何命令,不加在tool都不可取,只有这里,才一键点击,下拉菜单,屏幕菜单,都不可取,浪费点击次数!
mikewolf2k
发表于 2014-5-30 09:58:05
楼主是这行的老前辈,想必在自己所在的圈子里也是技术权威,说一不二的,难怪语气那么重。相比之下,在下实在是个无名小卒。以下只是些无名小卒的胡思乱想:
1. 现在是市场经济,大家都需要保持自己的技术优势,获得自己应得到的利益。并不是说谁有了好技术就要推广到全人类,乍看是全行业都能获得技术提升,但最终的结果就是谁都不愿意去花精力研发,都等着别人的果实成熟了摘现成的吃,然后大家谁都不去种树一块饿死。现在谷歌和三星不就在大打官司,说我的好技术你不能用么?所以一个产品,如果在自己的范围内能够正常工作,换别的范围就不能正常工作了,这个结果是可以理解的。有可能是无意造成的,兼容性不佳;也有可能是故意为止,你只能在我的范围内用。前者可以去给开发者提意见改进,后者是人家霸气四射,你要觉得不可接受就别用。想当年Acad一直不支持dgn文件,自己占领了市场垄断地位;但是现在MS的市场份额也上来了,Acad也不得不支持dgn格式了。
2.设计人员的价值所在是在于图纸上的内容,不在于图纸本身,人家图纸都已经给你了,可以说实质技术都已经交付了,哪怕只是张蓝图,花一点时间和金钱找一个制图员照描出来也是没问题的,无论是有意还是无意造成外单位的人无法实用电子版文件,都不能抹杀其设计能力。别人给不给你可以方便使用的CAD源文件都是合理的,不能由此责备对方。当然在本系统合理的范围内还是要保持兼容性,不能说放打印部打开也乱七八糟。
3.设计人员自傲不自傲的,别人对你的设计有建议,如果是职责上规定的校对等职位,没有什么打击不打击自尊的,提出来让设计改就是了,人家就是干这活的;如果不是职责上的建议,可以提出来,对方采纳不采纳是对方的事,毕竟是人家的作品,人家签字人家负责。如果不让原设计知道,偷偷的修改原设计的图纸,然后还要原设计签字,这才是不对的,要某人在不知情的情况下为别人的行为负责,这多冤啊!而且从理论上来分析,你认为别人的不对,同样别人也可以认为你才不对,对或不对不是某个人可以独立决定的,需要大家共同研究,不能外人偷偷修改,别以为是你在偷偷做好事,同样的几率可能是在陷害!
4.CAD的全称是Computer Aid Design,意为计算机辅助设计,指的是一种方式,而不是一个软件。只要是用了这种方式进行的设计,都可以叫做CAD,与用什么软件毫无关系,你用AutoCAD是CAD,他用Microstation也是CAD,我用EXCEL同样也是CAD。
5.楼主发的那个施工说明截图,在下只看到说有些文字是重叠的,别的都看不出来。就文字重叠这点来说,根据以前的相关经历,个人认为这个仅取决于字体文件。不同的字体文件(shx)对字的表达方式都是不同的,文件只是告诉软件,去到某字体文件中,按照字体文件中对第A号字符的模样显示出来,至于说这个第A号字符长得什么样,长得多大,各个字体文件都不一样,可以长得很大很小很胖很瘦,都没问题,甚至极端的,某字体文件第A号字符长的就不是A样,长成B样了,都有可能。这就是字体的意义所在,有各种不同的长相,你想用哪个就用哪个。同理你想要所有人都看到都是同样的显示,就必须用同一个字体文件。你要不用同一个字体文件,显示出来变胖了,那就不能怪别人。顺便举一个前不久经历的比较极端的例子,某pdf文件,看出来是正常的文字,但复制文本出来就永远是乱码,经研究发现,就是其内嵌的字体A字符长成了B样,从实质内容上来说,这个pdf里面就是一大堆乱码,只不过乱了又乱,乱乱得对,你看起来就正常了。其潜台词也就是说,我是有版权的,我只给你看,不给你拷!虽然我做不到不让你照抄,至少我不让你简单复制,在技术上做到我能做的。
6.5的一个补充单独拎出来,不光是不同的字体对不同的字符有大小形状定义的不同,还对字符宽度也不同。比如说1是个瘦子,8是个胖子,两个占地面积肯定是不同的。是一人一个坑的站,还是人挨人的站,这个也取决于字体内部定义。换而言之,至少我,还做不到精确获知字符串中每个单字符的精确位置,只能靠总共的字符串宽度和个数来估算,在极端的情况下可能会差距甚远。
7.楼主的施工说明截图,没看到源文件,猜想是不是表格每个框的一行文字都是MTEXT并且MTEXT的右边界超过了单元格范围?如果是这样的话,用ACAD的多行文字转换为单行文字功能可以么?或者编程批量调整MTEXT的边界范围,让其与单元格范围重叠?如果略微增加了单行的字符数导致超出单元格一点点,稍微减少字符宽度,让每个字都变瘦一点点,让这个变瘦累计起来把超出去挤回去?这样视觉上没什么区别也不用变行。
lucas_3333
发表于 2014-5-30 10:24:43
厉害!看来大家都擅长做总结报告啊
xyp1964
发表于 2014-5-30 12:19:12
_$ (tt "这是一串7888乱七八糟的55〓↓― ̄_ 55<>??~!$%^&*())■△+\/." 5)
("这是一串" "7888" "乱七八糟的" "55" "〓↓― ̄_" " 55<>??~!$%^&*())" "■△" "+/.")
Gu_xl
发表于 2014-5-30 13:07:52
本帖最后由 Gu_xl 于 2014-5-30 19:35 编辑
明经函数库里搜集的有 By Eachy!
yb:string_split 字串中西文拆分
不过原版有点小瑕疵,我修改了下:
(defun yb:string_split (str / strlst strlst1 hz_str e_str)
(setqstrlst(vl-string->list str)
strlst1'()
)
(while strlst
(cond
((> (car strlst) 159)
(setq e_str nil)
(if hz_str
(setq hz_str (append (list (car strlst)) hz_str))
(setq hz_str (list (car strlst)))
)
(setq strlst (cdr strlst))
(setq hz_str (append (list (car strlst)) hz_str)) ;_ Gu_xl添加修改
(setq strlst (cdr strlst)) ;_ Gu_xl添加修改
(if (or (< (car strlst) 159)
(not strlst ) ;_ Gu_xl添加修改
)
(if strlst1
(setq strlst1 (append strlst1 (list hz_str)))
(setq strlst1 (list hz_str))
)
)
)
((< (car strlst) 159)
(setq hz_str nil)
(if e_str
(setq e_str (append (list (car strlst)) e_str))
(setq e_str (list (car strlst)))
)
(setq strlst (cdr strlst))
(if (or (> (car strlst) 159)
(not strlst ) ;_ Gu_xl添加修改
)
(if strlst1
(setq strlst1 (append strlst1 (list e_str)))
(setq strlst1 (list e_str))
)
)
)
)
)
(mapcar 'vl-list->string (mapcar 'reverse strlst1))
)
mikewolf2k
发表于 2014-5-30 16:25:09
xyp1964 发表于 2014-5-30 12:19 static/image/common/back.gif
_$ (tt "这是一串7888乱七八糟的55〓↓― ̄_ 55??~!$%^&*())■△+\/." 5)
("这是一串" "7888" "乱七八糟的 ...
拆分字符串简单,一个个字符判断就是了。拆分炸到原位置有招么?求教!
尘缘一生
发表于 2014-5-30 17:11:52
本帖最后由 尘缘一生 于 2014-6-15 23:30 编辑
请大家看看错在哪里啦?
中西文能彻底分开,就能解决问题的。;;;*****************************************************************
(defun yb:string_split (str / strlst strlst1 hz_str e_str)
(setqstrlst(vl-string->list str)
strlst1'()
)
(while strlst
(cond
((> (car strlst) 159)
(setq e_str nil)
(if hz_str
(setq hz_str (append (list (car strlst)) hz_str))
(setq hz_str (list (car strlst)))
)
(setq strlst (cdr strlst))
(setq hz_str (append (list (car strlst)) hz_str))
(setq strlst (cdr strlst))
(if (or (< (car strlst) 159)
(= strlst "")
)
(if strlst1
(setq strlst1 (append strlst1 (list hz_str)))
(setq strlst1 (list hz_str))
)
)
)
((< (car strlst) 159)
(setq hz_str nil)
(if e_str
(setq e_str (append (list (car strlst)) e_str))
(setq e_str (list (car strlst)))
)
(setq strlst (cdr strlst))
(if (or (> (car strlst) 159)
(= strlst "")
)
(if strlst1
(setq strlst1 (append strlst1 (list e_str)))
(setq strlst1 (list e_str))
)
)
)
)
)
(mapcar 'vl-list->string (mapcar 'reverse strlst1))
)
;;;---------------------------------------------------
(defun C:FZX (/ s n l ww pt1)
(setq s(ssget ))
(setq l(- (sslength s) 1))
(setq n 0)
(while (<= n l)
(setq pt1(entget(ssname s n)))
(setq ww(cdr(assoc 1 pt1)))
(yb:string_split ww)
(setq n (+ n 1))
)
)
;;;*****************************************************************
xyp1964
发表于 2014-5-30 19:33:39
mikewolf2k 发表于 2014-5-30 16:25 static/image/common/back.gif
拆分字符串简单,一个个字符判断就是了。拆分炸到原位置有招么?求教!
粉碎行不?