hlzhong 发表于 2003-1-8 09:48:00

下面的程序能选取到二维平面内的直线端点,为什么不能选取到三维实体...

下面的程序能选取到二维平面内的直线,为什么不能选取到三维立方体
中的边界直线呢?
请问:
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)
)

mccad 发表于 2003-1-8 12:42:00

选取到三维实体,可以使用边复制命令先生成选定的边,再取边的两个端点

顶点可以存到列表中,要存多少都可以

龙龙仔 发表于 2003-1-8 13:42:00

例子

;;列示半径
;;这个办法在对大型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)
)

hlzhong 发表于 2003-1-12 11:14:00

我试试,先谢谢各位了! ^_^

start4444 发表于 2017-12-18 16:11:51

页: [1]
查看完整版本: 下面的程序能选取到二维平面内的直线端点,为什么不能选取到三维实体...