飞雪神光 发表于 2024-4-12 08:30:54

yimiyangguang55 发表于 2024-4-11 21:55
大神可以帮忙调整下这段代码吗?不胜感激

调整也需要dwg图纸

Bao_lai 发表于 2024-4-12 08:37:31

vl-filename-exists-p

yimiyangguang55 发表于 2024-4-12 21:03:41

飞雪神光 发表于 2024-4-12 08:30
调整也需要dwg图纸

任何一张dwg图纸都可以,上面随便写几个字或者复制粘贴论坛的文字就可以。通用性的。可以加你的联系方式吗?刚刚找到明经,还不够级别发私信

yimiyangguang55 发表于 2024-4-12 21:05:11

Bao_lai 发表于 2024-4-12 08:37
vl-filename-exists-p

意思是用这个函数替代我发的代码里的函数吗??

飞雪神光 发表于 2024-4-12 21:39:10

(defun c:ExportTextToCSV (/ ali1 ali2 ent f fname fpath height i ss style text width)
(setq ss (ssget '((0 . "TEXT,MTEXT"))))
(if ss
    (progn
      (setq fpath (getvar "DWGPREFIX"))
      (setq fname (strcat fpath (vl-filename-base (getvar "DWGNAME")) ".csv"))
      (setq f (open fname "w"))
      (write-line "Content,Style,Alignment,Height,WidthFactor" f)
      (setq i 0)
      (repeat (sslength ss)
      (setq ent (entget (ssname ss i)))
      (setq i (+ i 1))
      (setq text (cdr (assoc 1 ent)))
      (setq style (cdr (assoc 7 ent)))
                                (setq ali1 (cdr (assoc 72 ent)))
      (setq ali2 (cdr (assoc 73 ent)))
      (setq height (cdr (assoc 40 ent)))
      (setq width (cdr (assoc 41 ent)))
      (write-line (strcat text "," style "," (itoa ali1) "," (itoa ali2) "," (rtos height) "," (rtos width)) f)
      )
      (close f)
      (princ "\n导出完成。")
    )
    (princ "\n没有选择任何文字对象。")
)
(princ)
)

(defun c:ImportTextFromCSV (/ ali1 ali2 data f fname fpath gd kgb line pt wz zt)
(setq fpath (getvar "DWGPREFIX"))
(setq fname (strcat fpath (vl-filename-base (getvar "DWGNAME")) ".csv"))
(setq f (open fname "r"))
(if f
    (progn
      (read-line f)
      (while (setq line (read-line f))
      (setq data (read (strcat "(" (vl-string-translate "," " " line) ")")))
                                (setq text (vl-princ-to-string (nth 0 data)))
                                (setq style (vl-princ-to-string (nth 1 data)))
                                (setq ali1 (nth 2 data))
                                (setq ali2 (nth 3 data))
                                (setq height (nth 4 data))
                                (setq width (nth 5 data))
                                (setq pt (getpoint "\n指定插入点:"))
      (entmake(list '(0 . "text")'(50 . 0.0) (cons 10 pt)(cons 11 pt)(cons 1 text)(cons 7 style)(cons 40 height)'(6 . "Continuous")(cons 41 width)(cons 72 ali1)'(210 0.0 0.0 1.0)'(100 . "AcDbText")(cons 73 ali2)))
      )
      (close f)
      (princ "\n导入完成。")
    )
    (princ "\n未找到CSV文件。")
)
(princ)
)

yimiyangguang55 发表于 2024-4-12 22:55:00

飞雪神光 发表于 2024-4-12 21:39


谢谢大神助力,导入了lisp,两个程序都提示“错误: 输入的列表有缺陷”,
我检查了括号没有错误,函数将(itoa ali1) 改为(rtos ali1)也不行。
都不知道错误的这个雷怎么排除
请大神帮我再看下。估计只有你能找到这雷了
谢谢了

飞雪神光 发表于 2024-4-13 08:10:13

你是直接在TXT里保存的吧要另存为 ANSI格式的 或者在vlisp里保存

yimiyangguang55 发表于 2024-4-13 14:23:55

飞雪神光 发表于 2024-4-13 08:10
你是直接在TXT里保存的吧要另存为 ANSI格式的 或者在vlisp里保存

我用Vlisp编辑保存后,导出程序跑通了。谢谢,我原来用notepad++编辑也是这样出错。
感谢大神。
后来发现,导入程序有欠缺,需要每点击下才能导入一个文字。其实应该再这段程序中加一段代码,导出时定位到每段文字的xy坐标,这样导回去的时候能批量定位到原位置,并且删除原位置的初始文本(删除源文本好像非常有难度),可能导入程序的难点就再这里了。
另外我尝试再这个程序里加入下面程序,出现 ssget 列表错误提示。
      (setq font (cdr (assoc 3 ent))); 获取字体名称
      (setq rotation (cdr (assoc 50 ent))); 获取旋转角度
      (setq color (cdr (assoc 62 ent))); 获取文本颜色

飞雪神光 发表于 2024-4-13 17:41:14

你加的这段没问题 是ssget不对 你要导入原位那还得带着坐标啊你要是不依赖AI 自学入门 这点东西没有难度

yimiyangguang55 发表于 2024-4-16 08:29:48

飞雪神光 发表于 2024-4-13 17:41
你加的这段没问题 是ssget不对 你要导入原位那还得带着坐标啊你要是不依赖AI 自学入门 这点东西没有难度

准备从基础上好好学习下。
页: 1 [2]
查看完整版本: lisp函数提示输入的列表有缺陷