960322 发表于 2024-12-21 01:05:45

小菜大师选择易出错卡死的问题

用小菜大师的选择易,选择这种图块会出错。出错的语句是:(vl-prin1-to-string       '(("校对人_签名" "校对人_签名") ((SS-SEL_LAY "属性标志多选" (QUOTE ("校对人_签名" "会签人_建筑" "审核人_签名" "审定人_签名" "会签人_结构" "会签人_给排水" "会签人_电气" "会签人_暖通" "会签人_其他" "出图负责人章" "注册师章" "出图章" "专业负责人_签名" "设计人_签名" "版本号" "日期" "阶段" "专业" "子项编号" "工程编号" "子项名称" "工程名称" "比例" "图幅" "图名" "图号")) "txtFJ6") "属性标志多选...") ("会签人_建筑" "会签人_建筑") ("审核人_签名" "审核人_签名") ("审定人_签名" "审定人_签名") ("会签人_结构" "会签人_结构") ("会签人_给排水" "会签人_给排水") ("会签人_电气" "会签人_电气") ("会签人_暖通" "会签人_暖通") ("会签人_其他" "会签人_其他") ("出图负责人章" "出图负责人章") ("注册师章" "注册师章") ("出图章" "出图章") ("专业负责人_签名" "专业负责人_签名") ("设计人_签名" "设计人_签名") ("版本号" "版本号") ("日期" "日期") ("阶段" "阶段") ("专业" "专业") ("子项编号" "子项编号") ("工程编号" "工程编号") ("子项名称" "子项名称") ("工程名称" "工程名称") ("比例" "比例") ("图幅" "图幅") ("图名" "图名") ("图号" "图号")))



但是类似的语句就不出会出错:(vl-prin1-to-string   '(("会签人_其他" "会签人_其他") ((SS-SEL_LAY "属性标志多选" (QUOTE ("会签人_其他" "会签人_暖通" "会签人_电气" "会签人_给排水" "会签人_结构" "版本号" "日期" "阶段" "专业" "子项编号" "工程编号" "子项名称" "工程名称" "比例" "审定人_签名" "审核人_签名" "会签人_建筑" "校对人_签名" "图幅" "图名" "图号")) "txtFJ6") "属性标志多选...") ("会签人_暖通" "会签人_暖通") ("会签人_电气" "会签人_电气") ("会签人_给排水" "会签人_给排水") ("会签人_结构" "会签人_结构") ("版本号" "版本号") ("日期" "日期") ("阶段" "阶段") ("专业" "专业") ("子项编号" "子项编号") ("工程编号" "工程编号") ("子项名称" "子项名称") ("工程名称" "工程名称") ("比例" "比例") ("审定人_签名" "审定人_签名") ("审核人_签名" "审核人_签名") ("会签人_建筑" "会签人_建筑") ("校对人_签名" "校对人_签名") ("图幅" "图幅") ("图名" "图名") ("图号" "图号")))


附上出图的文件,请问怎么改才能用呢。

小菜123 发表于 2024-12-21 09:27:26

没有发现出错,2006~2008版本的CAD vl-prin1-to-string函数有bug,不能打印太长的中文

BUBUBA918 发表于 2024-12-21 09:03:37

有好几个版本

960322 发表于 2024-12-21 10:27:49

小菜123 发表于 2024-12-21 09:27
没有发现出错,2006~2008版本的CAD vl-prin1-to-string函数有bug,不能打印太长的中文

小菜大师,感谢你的回复! 我用的是2012版本的cad,应该确实是vl-prin1-to-string函数的bug。上图的问题应该就是属性太多了导致的问题。按你的提示我把你的这个函数改了一下,把表拆分打印成子串后再连接起来就不会出错了:

(defun ss-mkstr ( tmp / STR )
      (cond
        ((= (type tmp) 'STR)   (setq strtmp))
        ((= (type tmp) 'LIST)   (setq str(strcat "("   ( vl-string-right-trim" "   (apply 'strcat (mapcar '(lambda(x) (strcat (vl-prin1-to-string x)" ")) tmp) ) )    ")")))
        ( T   (setq str(vl-prin1-to-string tmp)))
        )
   STR
      
)

960322 发表于 2024-12-21 10:29:47

但是对于特殊的文字,比如内容如下的单行文字,还是会出错:    (vl-prin1-to-string       '(("校对人_签名" "校对人_签名") ((SS-SEL_LAY "属性标志多选" (QUOTE ("校对人_签名" "会签人_建筑" "审核人_签名" "审定人_签名" "会签人_结构" "会签人_给排水" "会签人_电气" "会签人_暖通" "会签人_其他" "出图负责人章" "注册师章" "出图章" "专业负责人_签名" "设计人_签名" "版本号" "日期" "阶段" "专业" "子项编号" "工程编号" "子项名称" "工程名称" "比例" "图幅" "图名" "图号")) "txtFJ6") "属性标志多选...") ("会签人_建筑" "会签人_建筑") ("审核人_签名" "审核人_签名") ("审定人_签名" "审定人_签名") ("会签人_结构" "会签人_结构") ("会签人_给排水" "会签人_给排水") ("会签人_电气" "会签人_电气") ("会签人_暖通" "会签人_暖通") ("会签人_其他" "会签人_其他") ("出图负责人章" "出图负责人章") ("注册师章" "注册师章") ("出图章" "出图章") ("专业负责人_签名" "专业负责人_签名") ("设计人_签名" "设计人_签名") ("版本号" "版本号") ("日期" "日期") ("阶段" "阶段") ("专业" "专业") ("子项编号" "子项编号") ("工程编号" "工程编号") ("子项名称" "子项名称") ("工程名称" "工程名称") ("比例" "比例") ("图幅" "图幅") ("图名" "图名") ("图号" "图号")))



不过一般没有这种内容的文字,所以也问题不大

小菜123 发表于 2024-12-21 10:36:38

2012的大概也有问题吧,试试更高版本的CAD。打印函数后来我也改了一下,没放进来

960322 发表于 2024-12-21 10:43:59

小菜123 发表于 2024-12-21 10:36
2012的大概也有问题吧,试试更高版本的CAD。打印函数后来我也改了一下,没放进来

确实如您说说, 用CAD2019就没有问题了。   
修改后的打印函数能发吗?我这个是瞎凑合的,有大师的原版最好了!

xyp1964 发表于 2024-12-21 11:31:07

本帖最后由 xyp1964 于 2024-12-21 11:32 编辑

能直接这么用?
((SS-SEL_LAY
   "属性标志多选"
   '(("校对人_签名"    "会签人_建筑"    "审核人_签名"    "审定人_签名"    "会签人_结构"    "会签人_给排水""会签人_电气"    "会签人_暖通"    "会签人_其他"    "出图负责人章""注册师章" "出图章""专业负责人_签名""设计人_签名"    "版本号""日期""阶段""专业" "子项编号" "工程编号" "子项名称"       "工程名称" "比例""图幅" "图名""图号" ) )
   "txtFJ6"
)
"属性标志多选..."
)

黄翔 发表于 2024-12-21 11:46:31

模仿小菜和飞诗写的,你的这个dwg效果是这样的.

960322 发表于 2024-12-21 20:50:19

黄翔 发表于 2024-12-21 11:46
模仿小菜和飞诗写的,你的这个dwg效果是这样的.

你这个看起来也很不错,对多属性支持很好!厉害!
页: [1] 2
查看完整版本: 小菜大师选择易出错卡死的问题