接受挑战
我正在通过“最简单”的方式来实现这一点,即CSV。将XLS文件另存为CSV(逗号分隔文件)。现在在Lisp中,将CSV文件转换为值列表相当简单:
- ;;; Replace all instances of a string part in a source string with a new string part
- (defun str-subst-all (new old source / pos)
- (setq pos 0)
- (while (setq pos (vl-string-search old source pos))
- (setq source (vl-string-subst new old source pos)
- pos (+ pos (strlen new))))
- source)
- ;;; Convert a delimeted string into a list of strings / numbers
- (defun Delim->Lst (source delim)
- (mapcar '(lambda (str)
- (if (wcmatch str "*[~0-9.`-]*")
- str
- (read str)))
- (read (strcat "("" (str-subst-all "" "" "," source) "")"))))
- ;;; Read a delimeted text file into a list of sublists of strings
- (defun Read-Delim->Lst (filename delim / file line result)
- (if (setq file (open filename "r")) ;Open file for reading
- (progn (while (setq line (read-line file)) ;Read each line from file
- (setq result (cons (Delim->Lst line delim) result))) ;Add converted list into result
- (close file))) ;Close the file
- (reverse result))
此外,您还需要某种方法来确保层存在,并且不会冻结或锁定:
现在,对于实际绘制截面图的主要部分,我假设一些尺寸为常数。如果不正确,则需要在XLS内指定,否则只需根据需要在此定义中进行调整。
注意*Draw:Offset*全局变量?我用它在上一张纸的右边画100个单位的连续纸,这样它们就不会直接画在一起。
第一部分[(setq…]就是我设置假设值的地方,初始化*Draw:Offset*以X=0.0开始,并确保剪切层和蚀刻层可用于编辑。
板材部分的制作轮廓从数据中绘制矩形多段线,板材中的制作孔也类似,但对于放置在WX/WY位置的孔,使用假定的孔宽和孔高尺寸。然后,我在工作表的左下角创建了一个dtext,您不需要指定需要它的位置,因此我使用假设的文本高度和当前的文本样式假设了最简单的位置。最后一行将*Draw:Offset*全局变量设置为下一张图纸的开始位置-准备好下一次调用此函数。
现在,将所有这些合并到一个命令中:
在这里,我检查文件是否由用户选择。该对话框默认为与DWG相同的文件夹。如果选择了文件,我会检查是否可以从文件中读取数据。
我清除全局变量,使其从0,0,0开始。然后我依次遍历每一行,省略第一行(即标题)。对于每一行,我都将数据发送到DrawCutSheet函数。
附件是LSP,包括所有这些defuns以及我创建的测试CSV。如果您的XLS格式不同,您需要对此进行说明。
设计零件。LSP
设计零件。csv |