明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1530|回复: 5

无奈哭求:高手给偶贴一个轴的参数化小程序啊

[复制链接]
发表于 2005-4-24 19:22:00 | 显示全部楼层 |阅读模式
我怎么就编不出来呢?


还有后续的啊。不过都比较简单。


高手加我qq啊51552441


马上要交了,老师已经骂过我了。谁可怜可怜我啊。
发表于 2005-4-25 08:46:00 | 显示全部楼层
要复杂的吗?看你敢不敢交...
  1. (vl-load-com)
  2. (defun loadline(lname / adoc msp ltps lname)
  3.    ;(setq lname (getstring "输入需要添加的线型:"))
  4.    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  5.    (setq ltps (vla-get-linetypes adoc))
  6.    (setq ltp (vl-catch-all-apply 'vla-load (list ltps lname "acadiso.lin")))
  7.    (if (vl-catch-all-error-p ltp)
  8.        ;(princ "此线型已存在!")
  9.        (princ)
  10.    )
  11.    (princ)
  12. )
  13. (defun Newlayer(lname lcolor lin / layer layers adoc)
  14.    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  15.    (setq layers (vla-get-layers adoc))
  16.    (setq layer (vl-catch-all-apply 'vla-item (list layers lname)))
  17.    (if (vl-catch-all-error-p layer)
  18.        (progn
  19.            (setq layer (vla-add layers lname))
  20.            (vla-put-color layer lcolor)
  21.        )
  22.    )
  23.    (vla-put-ActiveLayer adoc layer)
  24.    (if lin
  25.        (vla-put-linetype layer lin)
  26.    )
  27.    (princ)
  28. )
  29. ;;;;;;;以上两个函数是加载线型和图层的,可以用(command "_.layer" ...)代替(defun DrawCircle(para_list ptLeftCenter / n i d ds m pt1 pt2 pt3 pt4)
  30.    (setq n (length para_list))
  31.    (setq i (1- n))
  32.    (while (>= i 0)
  33.        (setq d (cadr (nth i para_list)))
  34.        (setq ds (append ds (list d)))
  35.        (if (>= d (apply 'max ds))
  36.            (progn
  37.   (newlayer "1" 1 nil)
  38.   (command "_.circle" ptLeftCenter "d" d)
  39.            )
  40.            (progn
  41.   (newlayer "dash" 4 "dashed")
  42.   (command "_.circle" ptLeftCenter "d" d)
  43.            )
  44.        )
  45.        (setq i (1- i))
  46.    )
  47.    (setq m (* (apply 'max ds) 1.1))
  48.    (setq pt1 (polar ptLeftCenter (/ pi 2) (+ (/ m 2) 0)))
  49.    (setq pt2 (polar ptLeftCenter (* (/ pi 2) 3) (+ (/ m 2) 0)))
  50.    (setq pt3 (polar ptLeftCenter pi (+ (/ m 2) 0)))
  51.    (setq pt4 (polar ptLeftCenter 0 (+ (/ m 2) 0)))
  52.    
  53.    (newlayer "center" 3 "center")
  54.    (command "_.line" pt1 pt2 "")
  55.    (command "_.line" pt3 pt4 "")
  56.    ds
  57. )
  58. (defun DrawLine(ds para_list ptLeftCenter / n i md ptsc ptse l ls d pt1 pt2 pt3 pt4 pta1 pta2 ptdim1 ptdim2 ptdimc ptd)
  59.    (setq n (length ds))
  60.    (setq i 1)
  61.    (setq ds (reverse ds))
  62.    (setq md (apply 'max ds))
  63.    (setq ptsc (polar ptLeftCenter 0 (* md 1.2)))
  64.    (setq ls (append ls (list (car (nth i para_list)))))
  65.    (newlayer "1" 1 nil)
  66.    ;;;画轴及标注所需各点——第一阶轴                                   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  67.    (setq pt1 (list (+ (car ptsc) (car (nth 0 para_list))) (+ (cadr ptsc) (/ (nth 0 ds) 2.0))));                           ptdim1             ;
  68.    (setq pt2 (list (car ptsc) (+ (cadr ptsc) (/ (nth 0 ds) 2.0))));                                                                     pt2┌─────┐pt1;
  69.    (setq pt3 (list (car ptsc) (- (cadr ptsc) (/ (nth 0 ds) 2.0))));                                                                           │                   │     ;
  70.    (setq pt4 (list (+ (car ptsc) (car (nth 0 para_list))) (- (cadr ptsc) (/ (nth 0 ds) 2.0))));                   │   ptdimc   │     ;
  71.    (setq pta1 pt1 pta2 pt4);                                                                                                                                                         │                   │     ;
  72.    (setq ptdimc (list (- (car pt2) 3.0) (cadr ptsc)));                                                                                               pt3└─────┘pt4;
  73.    (setq ptsc (polar pt1 (/ (* pi 3.0) 2.0) (/ (nth 0 ds) 2.0)));                                                                                       ptdim2             ;
  74.    (setq ptd (polar ptsc (/ (* pi 3.0) 2.0) (+ (/ md 2.0) 5)));                                                                                                                     ;
  75.    
  76.    (command "_.pline" pt1 pt2 pt3 pt4 "c")
  77.    (newlayer "dim" 3 nil)
  78.    (command "_.dimlinear" pt2 pt3 ptdimc)
  79.    (command "_.dimlinear" pt3 pt4 ptd)
  80.    (while (< i n)
  81.        (setq l (car (nth i para_list)))
  82.        (setq ls (append ls (list l)))
  83.        (setq d (nth i ds))
  84.        ;;;画轴及标注所需各点;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                                     ;
  85.        (setq pt1 (list (+ (car ptsc) l) (+ (cadr ptsc) (/ d 2.0))));                       ptdim1     pt1     ;
  86.        (setq pt2 (list (car ptsc) (+ (cadr ptsc) (/ d 2.0))));                         pt2┌─────┐     ;
  87.        (setq pt3 (list (car ptsc) (- (cadr ptsc) (/ d 2.0))));                       pta1│                   │     ;
  88.        (setq pt4 (list (+ (car ptsc) l) (- (cadr ptsc) (/ d 2.0))));                           ptdimc   │     ;
  89.        (setq ptdim1 (list (/ (+ (car pt1) (car pt2)) 2.0) (cadr pt1)));     pta2│                   │     ;
  90.        (setq ptdim2 (polar ptdim1 (/ (* pi 3.0) 2.0) d));                                   pt3└─────┘pt4;
  91.        (setq ptdimc (polar ptdim1 (/ (* pi 3.0) 2.0) (/ d 2.0)));                             ptdim2                 ;
  92.        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                               ;
  93.       
  94.        (newlayer "1" 1 nil);
  95.        (if (> (cadr pt2) (cadr pta1))
  96.            (command "_.pline" pta1 pt2 pt1 pt4 pt3 pta2 "")
  97.            (command "_.pline"pt2 pt1 pt4 pt3 "")
  98.        )
  99.       
  100.        (if (= i (1- n))
  101.            (progn
  102.   (setq ptdimc (list (+ 5 (car pt1)) (cadr ptdimc)))
  103.   (setq ptdim1 pt1)
  104.   (setq ptdim2 pt4)
  105.            )
  106.        )
  107.        (newlayer "dim" 3 nil)
  108.        (command "_.dimlinear" ptdim1 ptdim2 ptdimc)
  109.        (command "_.dimlinear" pt3 pt4 ptd)
  110.        (setq pta1 pt1 pta2 pt4)
  111.        (setq ptsc (polar pt1 (/ (* pi 3) 2) (/ d 2)))
  112.        (setq i (1+ i))
  113.    )
  114.    (setq ptsc (polar ptLeftCenter 0 (- (* md 1.2) 3)))
  115.    (setq ptse (polar ptsc 0 (+ (apply '+ ls) 9)))
  116.    (newlayer "center" 3 "center")
  117.    (command "_.line" ptsc ptse "")
  118. )
  119. (defun c:shaft2( / n width height para_list olduprec oldse1 oldse2 oldcen os cmd ds ptLeftCenter)
  120.    (setq cmd (getvar "cmdecho"))
  121.    (setq os (getvar "osmode"))
  122.    ;(setvar "cmdecho" 0)
  123.    (setvar "osmode" 0)
  124.    (setvar "LUPREC" 2)
  125.    
  126.    (setq n (getint "输入轴阶数:"))
  127.    (initget 7)
  128.    (setq i 0)
  129.    (repeat n
  130.        (setq i (1+ i))
  131.        (setq width (getreal (strcat "第" (itoa i) "阶轴长度:")))
  132.        (initget 7)
  133.        (setq height (getreal (strcat "第" (itoa i) "阶轴直径:")))
  134.        (initget 7)
  135.        (setq para_list (append para_list (list (list width height))))
  136.    )
  137.    (setq ptLeftCenter (getpoint "主视图中心点:"))
  138.    (loadline "center")
  139.    (loadline "dashed")
  140.    
  141.    (setq ds (drawcircle para_list ptLeftCenter));画圆
  142.    (setvar "LTSCALE" (/ (apply 'max ds) 100))
  143.    (setvar "dimtxt" 2.5)
  144.    (drawline ds para_list ptLeftCenter);画各轴
  145.    (command "regen")
  146.    (setvar "cmdecho" cmd)
  147.    (setvar "osmode" os)
  148.    ;para_list
  149.    (princ)
  150. )
  151. (defun c:test( / i n)
  152.    (setq i 0)
  153.    (setq n 100)
  154.    (while (< i n)
  155.        (cond
  156.            ((< i 10) (princ "aaa"))
  157.            ((< i 20) (princ "bbb"))
  158.            ((< i 100) (princ i))
  159.        )
  160.        (princ "\n")
  161.        (setq i (1+ i))
  162.    )
  163. )
 楼主| 发表于 2005-4-25 09:39:00 | 显示全部楼层
晕咯,偶只想要一个普通的轴的小程序啊。会的人估计1分钟可以搞定。


你这个太牛。我只能学学。对以后画大图有帮助啊。


在问个问题就是我画个圆然后用thickness也不知道干什么的。


然后用command什么命令可以让他成3维的呢?


谢谢咯,可以加你qq请教吗?


迷茫中啊
发表于 2005-4-25 10:22:00 | 显示全部楼层
thickness设置厚度以变成三维圆桶,用EXTRUDE命令可以把圆变成三维实体
发表于 2005-4-30 23:12:00 | 显示全部楼层
用我的程序吧。很简单。而且可以生成无限段轴。希望对你有用..不过我是在清华天河里编写的。所以如果你没装清华天河,请把所有的图层改成与程序中相对应的层。否则程序会报错。。。不便 之处还望谅解。我现在工作忙。很少写程序了。。以后有机会写啊。呵呵。。。清华天河是个好软件。一定要装上试试啊。:)


愿意的话。可以加我QQ。一起探讨。我也好多地方不懂。感谢明经。感谢大家。。没有明经,就没有我们今天的一切。。QQ:27362275,加我时请发信息。明经有我更精采。。

本帖子中包含更多资源

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

x
发表于 2005-4-30 23:21:00 | 显示全部楼层
我不知道这样的程序对你是否有用。诸如还有倒角。键槽之类的结构绘制。。我就没做了。。如果你有兴趣。自已架上啊。呵呵。。。不过这个程序让你完成差事。应该还可以吧。如果不行。。发过来问题,反正五一在家没事。。邦你把它做完。。常在明经里。可以学到很多东西的。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 06:31 , Processed in 0.162809 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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