明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 尘缘一生

[已解答] 求文字与数字字符炸开程序!

[复制链接]
发表于 2014-5-29 18:45:35 | 显示全部楼层
如果你真的需要这样,就先把多行文字都炸成单行文字,然后就试一下天正建筑的“文字表格”里面,找到“文字转化”,选上所有单行文字,就换成天正的文字,然后在用cad的炸开命令
效果看附件,包含
1、原用MTEXT写的文字
2、炸开成单行文字
3、转化成天正文字
4、炸开成的最后结果

本帖子中包含更多资源

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

x
发表于 2014-5-29 19:03:29 | 显示全部楼层
另外你说的:为啥?因为不炸开,就会变得一陀螺很长很长,超过范围和表格,炸开就恢复应该的总长度!
这个表示怀疑
 楼主| 发表于 2014-5-29 19:17:18 | 显示全部楼层
本帖最后由 尘缘一生 于 2014-5-29 19:53 编辑
lyqiezi 发表于 2014-5-29 19:03
另外你说的:为啥?因为不炸开,就会变得一陀螺很长很长,超过范围和表格,炸开就恢复应该的总长度!
这个 ...

这涉及以下两个问题:

    1:本帖的问题,是基于CAD解决,不要借助其他软件包。
    2:软件包,比如:天正吧?有什么?刚毕业的学生,或者根本不是学建筑的,开始工作,用天正,为啥,好学,但是,哪就是个CAD开发程序集合。
      记得93年潍坊参加PKPM研讨会,还有现场推销个开发包,演示,其实,他那个还不如我自己开发的多,好用。
    这20年来,我一直自己写,也在网上找好程序,我老啦,编写程序满脑子代码,调试好几天,总记挂那段代码咋回事,想借助年轻人的才华,省点事。

    我把我自己开发与收藏的CAD截面给大家看看,我自己使用的,这里面很大部分命令,是我自己写的,也很多事网上找的。

  

    无论任何外挂包,都是不可用的,因为,哪里面都有很多无用东西,要自己整合自己得包。
    无论任何命令,不加在tool  都不可取,只有这里,才一键点击,下拉菜单,屏幕菜单,都不可取,浪费点击次数!

本帖子中包含更多资源

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

x
发表于 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的边界范围,让其与单元格范围重叠?如果略微增加了单行的字符数导致超出单元格一点点,稍微减少字符宽度,让每个字都变瘦一点点,让这个变瘦累计起来把超出去挤回去?这样视觉上没什么区别也不用变行。

评分

参与人数 1明经币 +1 收起 理由
自贡黄明儒 + 1 赞一个!

查看全部评分

发表于 2014-5-30 10:24:43 | 显示全部楼层
厉害!看来大家都擅长做总结报告啊
发表于 2014-5-30 12:19:12 | 显示全部楼层
_$ (tt "这是一串7888乱七八糟的55〓↓― ̄_ 55<>??~!$%^&*())■△+\/." 5)
("这是一串" "7888" "乱七八糟的" "55" "〓↓― ̄_" " 55<>??~!$%^&*())" "■△" "+/.")
发表于 2014-5-30 13:07:52 | 显示全部楼层
本帖最后由 Gu_xl 于 2014-5-30 19:35 编辑

明经函数库里搜集的有 By Eachy!
yb:string_split 字串中西文拆分

不过原版有点小瑕疵,我修改了下:
  1. (defun yb:string_split (str / strlst strlst1 hz_str e_str)
  2.   (setq  strlst  (vl-string->list str)
  3.   strlst1  '()
  4.   )
  5.   (while strlst
  6.     (cond
  7.       ((> (car strlst) 159)
  8.        (setq e_str nil)
  9.        (if hz_str
  10.    (setq hz_str (append (list (car strlst)) hz_str))
  11.    (setq hz_str (list (car strlst)))
  12.    )
  13.        (setq strlst (cdr strlst))
  14.        (setq hz_str (append (list (car strlst)) hz_str)) ;_ Gu_xl添加修改
  15.        (setq strlst (cdr strlst)) ;_ Gu_xl添加修改
  16.       
  17.        (if (or (< (car strlst) 159)
  18.          (not strlst ) ;_ Gu_xl添加修改
  19.          )
  20.    (if strlst1
  21.      (setq strlst1 (append strlst1 (list hz_str)))
  22.      (setq strlst1 (list hz_str))
  23.      )
  24.    )
  25.        )
  26.       ((< (car strlst) 159)
  27.        (setq hz_str nil)
  28.        (if e_str
  29.    (setq e_str (append (list (car strlst)) e_str))
  30.    (setq e_str (list (car strlst)))
  31.    )
  32.        (setq strlst (cdr strlst))
  33.        (if (or (> (car strlst) 159)
  34.          (not strlst ) ;_ Gu_xl添加修改
  35.          )
  36.    (if strlst1
  37.      (setq strlst1 (append strlst1 (list e_str)))
  38.      (setq strlst1 (list e_str))
  39.      )
  40.    )
  41.        )
  42.       )
  43.     )
  44.   (mapcar 'vl-list->string (mapcar 'reverse strlst1))
  45.   )

点评

我怎么调试部成功啊?  发表于 2014-5-30 17:07
发表于 2014-5-30 16:25:09 | 显示全部楼层
xyp1964 发表于 2014-5-30 12:19
_$ (tt "这是一串7888乱七八糟的55〓↓― ̄_ 55??~!$%^&*())■△+\/." 5)
("这是一串" "7888" "乱七八糟的 ...

拆分字符串简单,一个个字符判断就是了。拆分炸到原位置有招么?求教!
 楼主| 发表于 2014-5-30 17:11:52 | 显示全部楼层
本帖最后由 尘缘一生 于 2014-6-15 23:30 编辑

请大家看看错在哪里啦?
中西文能彻底分开,就能解决问题的。
  1. ;;;*****************************************************************
  2. (defun yb:string_split (str / strlst strlst1 hz_str e_str)
  3.   (setq  strlst  (vl-string->list str)
  4.   strlst1  '()
  5.   )
  6.   (while strlst
  7.     (cond
  8.       ((> (car strlst) 159)
  9.        (setq e_str nil)
  10.        (if hz_str
  11.    (setq hz_str (append (list (car strlst)) hz_str))
  12.    (setq hz_str (list (car strlst)))
  13.    )
  14.        (setq strlst (cdr strlst))
  15.        (setq hz_str (append (list (car strlst)) hz_str))
  16.        (setq strlst (cdr strlst))
  17.       
  18.        (if (or (< (car strlst) 159)
  19.          (= strlst "")
  20.          )
  21.    (if strlst1
  22.      (setq strlst1 (append strlst1 (list hz_str)))
  23.      (setq strlst1 (list hz_str))
  24.      )
  25.    )
  26.        )
  27.       ((< (car strlst) 159)
  28.        (setq hz_str nil)
  29.        (if e_str
  30.    (setq e_str (append (list (car strlst)) e_str))
  31.    (setq e_str (list (car strlst)))
  32.    )
  33.        (setq strlst (cdr strlst))
  34.        (if (or (> (car strlst) 159)
  35.          (= strlst "")
  36.          )
  37.    (if strlst1
  38.      (setq strlst1 (append strlst1 (list e_str)))
  39.      (setq strlst1 (list e_str))
  40.      )
  41.    )
  42.        )
  43.       )
  44.     )
  45.   (mapcar 'vl-list->string (mapcar 'reverse strlst1))
  46.   )
  47. ;;;---------------------------------------------------
  48. (defun C:FZX (/ s n l ww pt1)
  49.     (setq s(ssget ))
  50.     (setq l(- (sslength s) 1))
  51.     (setq n 0)
  52.   (while (<= n l)     
  53.       (setq pt1(entget(ssname s n)))
  54.       (setq ww(cdr(assoc 1 pt1)))
  55.       (yb:string_split ww)
  56.       (setq n (+ n 1))
  57.   )     
  58. )
  59. ;;;*****************************************************************
发表于 2014-5-30 19:33:39 | 显示全部楼层
mikewolf2k 发表于 2014-5-30 16:25
拆分字符串简单,一个个字符判断就是了。拆分炸到原位置有招么?求教!

粉碎行不?

本帖子中包含更多资源

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

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-24 14:08 , Processed in 0.154899 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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