明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 16848|回复: 43

CAD里3D实体转三视图方法:一步到位(原创)《最新:修改实体颜色为0层和hidden层》

    [复制链接]
发表于 2008-12-1 22:35:00 | 显示全部楼层 |阅读模式
本帖最后由 zctao1966 于 2011-8-23 13:24 编辑

所有的设计都要画图,这是因为工程师无法完全记住自己所作设计中的全部细节 (那怕是较简单的),用文字记载也不完整,因此图形表达就是唯一的方法。这些图首先是给设计者自己看,为了记住和研究设计构思:其次是给别的工程师看,为了互相讨论交流,最后是为了给制造者看,为了将设计意图变成实物。在设计的全过程中.原始构思是三维 (3D)实体,这也是毫无疑问的。
     在CAD中画好三维实体以后,可以观赏,也可以截成图片,固然漂亮、直观,但很多信息传递不到。因此,只有把三维实体转成三视图,才是最实用的,可以反映三维实体的各个部位的详细信息。而怎样才能将所画好的三维实体用三视图的形式表达出来,是很多绘图者比较头疼的事情。在平面里参照三维实体一步步地画,固然可以画出,但既费时又费力,且往往容易遗漏很多信息。
    那么,能否在AutoCAD中将三维实体直接转换成三视图呢?答案是肯定的。下面我就详细介绍这样的操作——三维实体转三视图。这里利用了我编制的一个小小的LISP程序,我给出的是源码,你可以自行修改,适合自己才能够更快的提高自己的绘图水平 。
附件有二个:
sanshi.lsp
(DEFUN c:sa()
 (setq dcl_id (load_dialog "sanshi"))
 (new_dialog "sanshi" dcl_id)
(action_tile "sansh_cf1" "(done_dialog 1)")
(action_tile "sansh_cf2" "(done_dialog 2)")
(action_tile "sansh_cf3" "(done_dialog 3)")
(action_tile "sansh_cf4" "(done_dialog 4)")
(action_tile "sansh_zds" "(done_dialog 5)")

 (setq sansh_done_id (start_dialog))
 (if (> sansh_done_id 0)
  (progn
   (cond ((= 1 sansh_done_id)
   (sanshm_cf1)
         )
         ((= 2 sansh_done_id)
   (sanshm_cf2)
         )
         ((= 3 sansh_done_id)
   (sanshm_cf3)
         )
         ((= 4 sansh_done_id)
   (sanshm_cf4)
         )
  ((= 5 sansh_done_id)
   (sanshm_zds)
         )                                                                                                    
   )
  
  )
 )

 (princ)
)

;;

 


;;;--------------------------------------------------------
;;;函数: CF1
;;;--------------------------------------------------------
;;;编制日期:2009.03.27
;;;修改日期:2011.07.28
;;;编制者  :曾敏辉
;;;说明:本函数将复制并旋转对象为右视
;;;--------------------------------------------------------
(DEFUN sanshm_CF1( / en entgrp oldort pt1 pt2 ss)
(PRINC "\n 复制并旋转对象为右视")
 (setvar "cmdecho" 0)
(setq oldort (getvar "orthomode"))
      (princ "\n 请选择主视图对象:")
(SETQ ENTGRP (SSGET))
      (princ "\n 请选择主视图的基准点:")
(setvar "orthomode" 1)
(SETQ pt1 (GETPOINT))
  (princ "\n请选择右视图的基准点(按左键接受并绘制右视图):")
 (SETQ pt2 (GETPOINT)) 
(setq en (entlast))
 (COMMAND "copy" ENTGRP "" pt1 pause)
(setq ss (lt:ss-entnext en))
       (princ "\n正在绘制右视图......")
    (command "rotate3d" ss "" "Y" pt2 "-90");;;绘制右视图
    (princ "\n绘制右视图完毕!")
        (princ)
  )


;;;--------------------------------------------------------
;;;函数: CF2
;;;--------------------------------------------------------
;;;编制日期:2009.03.27
;;;修改日期:2011.07.28
;;;编制者  :曾敏辉
;;;说明:本函数将复制并旋转对象为仰视
;;;--------------------------------------------------------
(DEFUN sanshm_CF2( / en entgrp oldort pt1 pt2 ss)
 (setvar "cmdecho" 0)
(PRINC "\n 复制并旋转对象为仰视")
(setq oldort (getvar "orthomode"))
      (princ "\n 请选择主视图对象:")
(SETQ ENTGRP (SSGET))
      (princ "\n 请选择主视图的基准点:")
(setvar "orthomode" 1)
(SETQ pt1 (GETPOINT))
  (princ "\n请选择仰视图的基准点(按左键接受并绘制仰视图):")
 (SETQ pt2 (GETPOINT)) 
(setq en (entlast))
 (COMMAND "copy" ENTGRP "" pt1 pause)
(setq ss (lt:ss-entnext en))
       (princ "\n正在绘制仰视图......")
    (command "rotate3d" ss "" "X" pt2 "-90");;;绘制仰视图
    (princ "\n绘制仰视图完毕!")
        (princ)
  )

;;;函数: CF3
;;;--------------------------------------------------------
;;;编制日期:2009.03.27
;;;修改日期:2011.07.28
;;;编制者  :曾敏辉
;;;说明:本函数将复制并旋转对象为左视
;;;--------------------------------------------------------
(DEFUN sanshm_CF3( / en entgrp oldort pt1 pt2 ss)
 (setvar "cmdecho" 0)
(PRINC "\n 复制并旋转对象为左视")
(setq oldort (getvar "orthomode"))
      (princ "\n 请选择主视图对象:")
(SETQ ENTGRP (SSGET))
      (princ "\n 请选择主视图的基准点:")
(setvar "orthomode" 1)
(SETQ pt1 (GETPOINT))
  (princ "\n请选择左视图的基准点(按左键接受并绘制左视图):")
 (SETQ pt2 (GETPOINT)) 
(setq en (entlast))
 (COMMAND "copy" ENTGRP "" pt1 pause)
(setq ss (lt:ss-entnext en))
       (princ "\n正在绘制左视图......")
    (command "rotate3d" ss "" "Y" pt2 "90");;;绘制左视图
    (princ "\n绘制左视图完毕!")
        (princ)
  )

;;;--------------------------------------------------------
;;;函数: CF4
;;;--------------------------------------------------------
;;;编制日期:2009.03.27
;;;修改日期:2011.07.28
;;;编制者  :曾敏辉
;;;说明:本函数将复制并旋转对象为俯视
;;;--------------------------------------------------------
(DEFUN sanshm_CF4( / en entgrp oldort pt1 pt2 ss)
 (setvar "cmdecho" 0)
(PRINC "\n 复制并旋转对象为俯视")
(setq oldort (getvar "orthomode"))
      (princ "\n 请选择主视图对象:")
(SETQ ENTGRP (SSGET))
      (princ "\n 请选择主视图的基准点:")
(setvar "orthomode" 1)
(SETQ pt1 (GETPOINT))
  (princ "\n请选择俯视图的基准点(按左键接受并绘制俯视图):")
 (SETQ pt2 (GETPOINT)) 
(setq en (entlast))
 (COMMAND "copy" ENTGRP "" pt1 pause)
(setq ss (lt:ss-entnext en))
       (princ "\n正在绘制俯视图......")
    (command "rotate3d" ss "" "X" pt2 "90");;;绘制俯视图
    (princ "\n绘制俯视图完毕!")
        (princ)
  )
;;; --------------------------------------------------------
;;; 函数: ZDS
;;; --------------------------------------------------------
;;; 编制日期:2008.11.20
;;; 修改日期:2010.04.29修改实体颜色为0层和hidden层
;;; 修改日期:2011.07.28 增加程序运行前的备注和功能
;;; 编制者  :曾敏辉
;;; 说明: 将已绘制好的三维图自动投影生成三视图
;;; --------------------------------------------------------
(defun sanshm_zds  ( /  l old_lay ss1 ss2 ss3 ss4 ssg1)
(SETVAR "CMDECHO"  0)
(princ "\n 请选择生成投影图的组合(它将删除所选择的3D实体,请注意保存3D实体):")
(setq ssg1 (ssget));;生成布局选项
(command "layout" "s" "")
(princ "\n 投影图正在生成中,请稍候......")
(command "mspace")
(command "_solprof" ssg1 "" "Y" "Y" "N")
(princ "\n 投影图已生成")
(command "model")
(command "erase" ssg1 "")
(COMMAND "EXPLODE" l)
(setq ss1 (ssget "X" '((8 . "PH-*"))))
(COMMAND "EXPLODE" SS1)
(setq ss2 (ssget "X" '((8 . "PH-*"))))
(setq ss3 (ssget "X" '((8 . "PV-*"))))
(COMMAND "EXPLODE" SS3)
(setq ss4 (ssget "X" '((8 . "PV-*"))))
(setq old_lay (getvar "clayer"))
(if (=(tblobjname "LAYER" "hidden") nil)
    (progn
         (command "layer" "m" "hidden" "c" "blue" "" "l" "dashed" "" "")
    )
)
(setvar "clayer" old_lay)

 

(command "CHANGE" ss2 "" "P" "LA" "hidden" "")
(command "CHANGE" ss4 "" "P" "LA" "0" "") 


;;;(command "CHANGE" ss2 "" "P" "LA" "hidden" "")
;;;(command "CHANGE" ss4 "" "P" "LA" "0" "")
;;;(command "_.purge" "_all" "*" "n")
;;;(command "_.qsave" )
(princ)
);;; _ 结束defun

 

;;____________________________________________
;; ▓ (lt:ss-entnext en)
;; [功能] 获取在图元 en 之后产生的图元的选择集
;; [参数] en----图元名
;; [返回] 选择集
;; [测试]1.(setq en (entlast))
;;         执行创建图元的命令,如 LINE,BOUNDARY
;;         (setq ss (lt:ss-entnext en))
;;       2.(setq ss (lt:ss-entnext (car(entsel))))
(defun lt:ss-entnext (en / ss)
   (if en
     (progn
       (setq ss (ssadd))
       (while (setq en (entnext en))
         (if (not (member (cdr (assoc 0 (entget en)))
                          '("ATTRIB" "VERTEX" "SEQEND")
                  )
             )
           (ssadd en ss)
         )
       )
       (if (zerop (sslength ss)) (setq ss nil))
       ss
     )
     (ssget "_x")
   )
)

 

 


sanshi.dcl
dcl_settings:default_dcl_settings {
    audit_level = 0 ;
}

sanshi:dialog {
    label = "三视图20110820" ;
    spacer_1;
    :column {
        children_fixed_width = true ;
        fixed_width = true ;
        width = 5 ;
        :button {
            fixed_width = true ;
            key = "sansh_cf4" ;
            label = "1.复制实体为俯视" ;
            width = 10 ;
        }
        :button {
            key = "sansh_cf1" ;
            label = "2.复制对象为右视" ;
        }
        :button {
            key = "sansh_cf2" ;
            label = "3.复制对象为仰视" ;
        }
        :button {
            key = "sansh_cf3" ;
            label = "4.复制对象为左视" ;
        }
        :button {
            key = "sansh_zds" ;
            label = "5.绘制对象三视图" ;
        }
    }
    spacer_1;
    :text {
        alignment = centered ;
        label = "学以致用,其乐无穷!" ;
    }
    :text {
        alignment = centered ;
        label = "  设计者:曾敏辉" ;
    }
    cancel_button;
}

使用方法:
1.将上述两个文件复制之后再另存为相应的文件名:
sanshi.lsp
sanshi.dcl
保存到AutoCAD的支持路径下
2.用appload加载sanshi.lsp
3.运行命令为sa(你可以自行修改)。
操作步骤:

2011.08.23    13:25更新

附件在三楼,请下载试用!


 

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +2 金钱 +20 贡献 +5 激情 +5 收起 理由
mccad + 2 + 20 + 5 + 5 【精华】好程序

查看全部评分

 楼主| 发表于 2008-12-1 22:36:00 | 显示全部楼层

这是附件!

需要的可以在此下载!

回复 支持 1 反对 0

使用道具 举报

发表于 2018-4-27 13:15:12 | 显示全部楼层
谢谢楼主分享  
发表于 2022-8-22 20:30:16 | 显示全部楼层
很不错的内容,点赞!
 楼主| 发表于 2008-12-1 22:37:00 | 显示全部楼层
本帖最后由 zctao1966 于 2011-8-23 13:28 编辑



2011.08.23
程序更新:
1.修改实体颜色为0层和hidden层,看得见的线在0层,看不见的线在hidden层
2.复制实体为视图时,删除其复杂的辅助程序,只需程序执行后,再操作!
3.程序中部分程序为明经通道所有,取之于明,用之于明!特此声明!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2008-12-2 10:19:00 | 显示全部楼层
下载了,就是不会用,怎么才能把线形改为“虚线”?是要三维图炸开吗?

点评

已重新更新程序,欢迎回来下载!  发表于 2011-8-24 12:34
发表于 2008-12-2 12:32:00 | 显示全部楼层

谢谢你 外挂非常适用

发表于 2008-12-2 21:58:00 | 显示全部楼层
不错啊,下载试了试,顶你一个!!
 楼主| 发表于 2008-12-6 20:32:00 | 显示全部楼层
wanasd发表于2008-12-2 10:19:00下载了,就是不会用,怎么才能把线形改为“虚线”?是要三维图炸开吗?

改为虚线是先选中你的这个线,再看下它是哪个层。。

再进层管理器,加载线型为HIDDEN虚线,

三维图不能炸开,否则,不能生成三视图。。。

你可以自已琢磨,不懂的话

我下次再传GIF上来。。。

发表于 2008-12-24 12:29:00 | 显示全部楼层
不错,谢谢!
发表于 2008-12-24 13:20:00 | 显示全部楼层
我想请问下,这种三维物体楼主是怎么把它放到二维绘图环境的呢?一般三维物体画完后不是要三维视窗查看吗?而且尺寸怎么标注呢?
 楼主| 发表于 2008-12-25 21:03:00 | 显示全部楼层
userzhl发表于2008-12-24 13:20:00我想请问下,这种三维物体楼主是怎么把它放到二维绘图环境的呢?一般三维物体画完后不是要三维视窗查看吗?而且尺寸怎么标注呢?

是不是这个步骤:

 

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-15 16:49 , Processed in 0.210392 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表