明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2477|回复: 19

请帮忙编一个绘制号码球的小程序。

  [复制链接]
发表于 2004-2-26 15:36:00 | 显示全部楼层 |阅读模式

本帖子中包含更多资源

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

x
发表于 2004-2-26 18:56:00 | 显示全部楼层
(defun c:hm (/ p1 p2 p3 hm)
(command "line" )
(setq p1 (getpoint "起点"))
(command p1)
(setq p2(getpoint "终点") )
(command p2 "")
(setq bj (getreal "圆半径"))
(setq p3 (polar p2 (angle p1 p2) bj) )
(command "circle" p3 bj)
(setq hm(getstring "\n请输入零件号:"))
(command "text" "j" "mc" p3 (* bj 0.8) 0 hm "")
)
发表于 2004-2-26 19:25:00 | 显示全部楼层
  1. (defun GetVal(fun msg key flag vla_tmp / val)
  2.    (defun GetType(var / rVal)
  3.        (cond
  4.            ((= (type var) 'STR) (setq rVal var))
  5.            ((= (type var) 'INT) (setq rVal (rtos var)))
  6.            ((= (type var) 'REAL) (setq rVal (rtos var)))
  7.            ((= (type var) 'LIST) (setq rVal (vl-princ-to-string var)))
  8.        )
  9.        rVal
  10.    )
  11.    (if (or (not (eval vla_tmp)) (= (eval vla_tmp) ""))
  12.        (progn
  13.            (initget key (if flag flag ""))
  14.            (setq val (fun (strcat "\n" msg ":")))
  15.        )
  16.        (progn
  17.            (initget key (if flag (1- flag) ""))
  18.            (setq val (fun (strcat "\n" msg "<" (gettype (eval vla_tmp)) ">:")))
  19.            (if (or (not val) (= val "")) (setq val (eval vla_tmp)))
  20.        )
  21.    )
  22.    (set vla_tmp val)
  23. )(defun MakeLine(pt1 pt2 / TextDxf)
  24.    (setq TextDxf '((0 . "LINE")
  25.        (100 . "AcDbEntity")
  26.        (67 . 0) (410 . "Model")
  27.        (100 . "AcDbLine")
  28.        )
  29.    )
  30.    (setq TextDxf (append TextDxf (list
  31.            (cons 10 pt1)
  32.            (cons 11 pt2)
  33.            ;(cons 62 color)
  34.            '(210 0.0 0.0 1.0)
  35.         )
  36.     )
  37.    )
  38.    (entmake TextDxf)
  39.    (princ)
  40. )(defun MakeCircle(pt R / ptInsert TextDxf)
  41.    (setq TextDxf '((0 . "CIRCLE") (100 . "AcDbEntity")
  42.        (67 . 0) (410 . "Model") (8 . "标注")
  43.        (100 . "AcDbCircle")
  44.        )
  45.    )
  46.    (setq TextDxf (append TextDxf (list
  47.            (cons 10 pt)
  48.            (cons 40 R)
  49.            '(210 0.0 0.0 1.0)
  50.         )
  51.     )
  52.    )
  53.    (entmake TextDxf)
  54.    (princ)
  55. )(defun MakeText(pt1 str textheight / TextDxf)
  56.    (setq TextDxf '(
  57.            (0 . "TEXT")
  58.            (100 . "AcDbEntity")           ; 需要所有 R12 之后版本的图元
  59.            (100 . "AcDbText")    ; 将图元标记为 MTEXT
  60.            )
  61.    )
  62.    (setq TextDxf (append TextDxf (list
  63.            (cons 10 pt1)
  64.            (cons 1 str)
  65.            (cons 40 textheight)
  66.            ;(cons 7   "HZ")
  67.         )
  68.     )
  69.    )
  70.    (entmake TextDxf)
  71.    (princ)
  72. )(defun c:draw( / pt pt2 ent_lines ent_circles ptl2 pt_lst)
  73.    (setq pt (getpoint "\n输入起点:"))
  74.    (if (not TextSize)
  75.        (setq TextSize (getvar "textsize"))
  76.    )
  77.    (makeline pt (polar pt 0 1))
  78.    (setq ent_lines (entget (entlast)))
  79.    (makecircle pt textsize)
  80.    (setq ent_Circles (entget (entlast)))
  81.    (prompt "\n选择球位置")
  82.    (while (= (car (setq pt2 (grread 2 4))) 5)
  83.        (setq pt2 (cadr pt2))
  84.        (setq ptl2 (polar pt2 (angle pt2 pt) textsize))
  85.        (setq ent_lines (subst (cons 11 ptl2) (assoc 11 ent_lines) ent_lines))
  86.        (entmod ent_lines)
  87.        (setq ent_circles (subst (cons 10 pt2) (assoc 10 ent_circles) ent_circles))
  88.        (entmod ent_circles)
  89.    )
  90.    (GetVal getreal "输入球大小" "" 7 'TextSize)
  91.    (GetVal getstring "输入文字" "" 0 'Textstring)
  92.    (cond
  93.        ((= (car pt2) 3)
  94.          (setq pt2 (cadr pt2))
  95.          (setq ptl2 (polar pt2 (angle pt2 pt) textsize))
  96.          (setq ent_lines (subst (cons 11 ptl2) (assoc 11 ent_lines) ent_lines))
  97.          (entmod ent_lines)
  98.          (setq ent_circles (subst (cons 10 pt2) (assoc 10 ent_circles) ent_circles))
  99.          (setq ent_circles (subst (cons 40 textsize) (assoc 40 ent_circles) ent_circles))
  100.          (entmod ent_circles)
  101.          (setq pt_lst (textbox (list '(0 . "TEXT") (cons 1 textstring) (cons 40 textsize))))
  102.          (if (/= textstring "")
  103.              (maketext
  104.    (list (- (car pt2) (/ (- (caadr pt_lst) (caar pt_lst)) 2.0)) (- (cadr pt2) (/ (- (cadadr pt_lst) (cadar pt_lst)) 2.0)))
  105.    ;(polar pt2 (angle (cadr pt_lst) (car pt_lst)) (distance (car pt_lst) (cadr pt_lst)))
  106.    textstring
  107.    textsize)
  108.          )
  109.        )
  110.    )
  111.    (princ)
  112. )
发表于 2004-2-26 19:51:00 | 显示全部楼层
不要这么复杂嘛,简单一点,我一点都看不懂,注释多点嘛,
发表于 2004-2-26 20:06:00 | 显示全部楼层
我来试一下,版主,你看一下,行吗? (defun c:yuanqiu(/ pt1 pt2 d text) (setq pt1(getpoint"\n输入引线起点:") (setq pt2(getpoint"\n输入号码球放置点:") (setq d(getdist"\n输入号码球的直径:")
(setq text(getstring "\n请输入零件号: ") (command"line" pt1
我写不下去了,我知道问题在哪,我不知道怎么使两个我已经画好的图形剪切,我是想先画一直线,后画一圆,然后把圆里面的直线剪掉,
发表于 2004-2-26 20:27:00 | 显示全部楼层
(Defun c:test()
(if (= (getvar "cmdecho") 1)(setvar "cmdecho"0))
(if (/= (setq os (getvar "osmode")) 0) (setvar "osmode" 0))
(setq ap(getpoint "\n起點:")
bp(getpoint "\n球的中心點:")
cr(getdist "\n球的半徑:")
text (getstring "\n數值:")
ang (angle ap bp)
abd (distance ap bp))
(command ".line" ap (polar ap ang (- abd cr)) "")
(command ".circle" bp cr)
(command ".text" "j" "mc" bp "" "" text "")
(if (= (getvar "cmdecho") 0)(setvar "cmdecho"1))
(setvar "osmode" os)
(princ))
发表于 2004-2-26 21:02:00 | 显示全部楼层
插入块的方法效率不更高么?
发表于 2004-2-26 21:14:00 | 显示全部楼层
如果程序写好了,插入块就显得麻烦了,因为好改变圆的大小,文字内容等,


to 晓雨:程序这么长是因为考虑了很多问题过程的动态显示、输入的人性化考虑、避免使用command命令(这个不是很必要)以及最后圆的大小和文字大小及位置,你可以试试楼上几位的程序和我的程序的效果就知道了。。。
 楼主| 发表于 2004-2-27 08:39:00 | 显示全部楼层
F8的很好,没的说了。要是每次输入零件号时都比上次递增一位,就更好了。
发表于 2004-2-27 11:30:00 | 显示全部楼层
找到相应位置,加上中间那句(if (and ....)) (GetVal getreal "输入球大小" "" 7 'TextSize)
(if (and textstring (= (type (read textstring)) 'INT)) (setq textstring (rtos (1+ (read textstring)))))
(GetVal getstring "输入文字" "" 0 'Textstring)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-1 17:40 , Processed in 0.270355 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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