下面的程序能选取到二维平面内的直线端点,为什么不能选取到三维实体...
下面的程序能选取到二维平面内的直线,为什么不能选取到三维立方体中的边界直线呢?
请问:
1.是不是因为整个实体己为基本单元,其中并无直线信息呢?
2.不知如何才得到三维实体的各顶点坐标呢?
3.如何开一个动态数组来存储三维实体中未知个数的顶点坐标呢?还请不惜赐教啊!
(defun c:glp(/ ent el p1 p2)
(setq ent (car (entsel "\n请选取直线:")));;ent 为实体名
(if ent (progn
(setq el (entget ent))
(if (equal (cdr (assoc 0 el)) "LINE")
(progn
(setq p1 (cdr (assoc 10 el))) ;;p1,p2分别为直线的起、终点
(setq p2 (cdr (assoc 11 el)))
(princ "\n")
(princ "端点1的坐标")
(princp1)
(princ "\n")
(princ "端点2的坐标")
(princp2)
)(progn
(princ "\n选择的不是直线")
))
)(progn
(princ "\n没有选择到直线。")
))
(princ)
)
选取到三维实体,可以使用边复制命令先生成选定的边,再取边的两个端点
顶点可以存到列表中,要存多少都可以例子
;;列示半径;;这个办法在对大型3DSOLID非常慢
(defun C:DXF6 (/ SS DXF40)
(setq SS (cadr (ENTSEL "\n请选3DSOLID边线为圆的物件: ")))
(setq ENT (entlast))
(command "_.solidedit" "e" "c" SS "" "0,0" "0,0" "" "")
(if (= "CIRCLE" (cdr (assoc 0 (entget (entlast)))))
(progn
(setq DXF40 (cdr (assoc 40 (entget (entlast)))))
(prompt (strcat "\n半径: "
(rtos DXF40)
" 直径: "
(rtos (* DXF40 2))
)
)
)
)
(if (not (equal ENT (entlast)))
(entdel (entlast))
)
(princ)
)
我试试,先谢谢各位了! ^_^
页:
[1]