跪求大神帮忙修改下这个 CAD lsp,原先这个lsp从CAD中提取的坐标数据的点号是从最右上角开始的
原来的顺序图1现在想让顺序变成图2这个lsp为:(defunc:plzbsc()(princ"\n选择所需输出的点(point):")(setqss(ssget));;选...
原来的顺序图1
现在想让顺序变成图2
这个lsp为:
(defun c:plzbsc()
(princ "\n选择所需输出的点(point):")
(setq ss (ssget ));;选取坐标点
(setq n (sslength ss ));计算坐标点数量
(setq ff (open (getfiled "文件保存为" "f:/" "dat" 1) "w"));保存路径
(setq i 0)
(repeat n
(setq spt (ssname ss i ))
(setq ept (entget spt))
(if (= (cdr (assoc 0 ept)) "POINT")
(progn
(setq lxyz (cdr (assoc 10 ept)))
(setq sx (rtos (nth 1 lxyz)));将坐标值实数转换成字符
(setq sy (rtos (nth 0 lxyz)))
(setq sz (rtos (nth 2 lxyz)))
(setq i1 (+ i 1));计算点序号
(setq sn (rtos i1 2 0));将序号实数转换成字符
(setq sxyz (strcat sn"," sx "," sy "," sz))
(write-line sxyz ff)
)
)
(setq i (+ i 1))
);repeat
)
(prompt "*只适合point点 << 命令:plzbsc >> *输出格式(点号, X,Y,Z)**")
(prin1) 展开
现在想让顺序变成图2
这个lsp为:
(defun c:plzbsc()
(princ "\n选择所需输出的点(point):")
(setq ss (ssget ));;选取坐标点
(setq n (sslength ss ));计算坐标点数量
(setq ff (open (getfiled "文件保存为" "f:/" "dat" 1) "w"));保存路径
(setq i 0)
(repeat n
(setq spt (ssname ss i ))
(setq ept (entget spt))
(if (= (cdr (assoc 0 ept)) "POINT")
(progn
(setq lxyz (cdr (assoc 10 ept)))
(setq sx (rtos (nth 1 lxyz)));将坐标值实数转换成字符
(setq sy (rtos (nth 0 lxyz)))
(setq sz (rtos (nth 2 lxyz)))
(setq i1 (+ i 1));计算点序号
(setq sn (rtos i1 2 0));将序号实数转换成字符
(setq sxyz (strcat sn"," sx "," sy "," sz))
(write-line sxyz ff)
)
)
(setq i (+ i 1))
);repeat
)
(prompt "*只适合point点 << 命令:plzbsc >> *输出格式(点号, X,Y,Z)**")
(prin1) 展开
1个回答
展开全部
这个序号是实体进入选择集的先后决定的,就是说图1中的顺序也是在原图做成的时候展点的顺序,如果展点时顺序改变,这里输出的时候也会变的,并不是CAD图形位置决定的。
你想要根据位置控制其先后,你可以通过每个点的坐标,来排序,然后再输出,不过,那样的话LSP就有点吃力了,也许用别的编程语言更方便些
你想要根据位置控制其先后,你可以通过每个点的坐标,来排序,然后再输出,不过,那样的话LSP就有点吃力了,也许用别的编程语言更方便些
更多追问追答
追问
但是我在CAD中只绘制了一个点(就是图1中最左下角的点)其他的都是阵列的,为什么起始编号就从右上角开始了呢 如(图1),这个顺序可不可以通过修改这个lsp改成如图2?
追答
你把左上角的点删除,然后重新在那个位置画个点,你再运行一下程序,看右上角的点序号是多少,其实我要说的意思就是,序号是与该点的入库顺序有关,即最后一个点为序号1(好象是这样的,或者是序号最大的那个)
这里说的入库,指的是把DWG文件当成一个数据库来看
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询