乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 140|回复: 9

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

[复制链接]

9

主题

24

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2004-2-26 15:36:00 | 显示全部楼层 |阅读模式

imii3xnu5q2.gif

imii3xnu5q2.gif

回复

使用道具 举报

33

主题

253

帖子

9

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
385
发表于 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 "")
)
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 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 ":")))
  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. )
回复

使用道具 举报

26

主题

112

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
216
发表于 2004-2-26 19:51:00 | 显示全部楼层
不要这么复杂嘛,简单一点,我一点都看不懂,注释多点嘛,
回复

使用道具 举报

26

主题

112

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
216
发表于 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         
我写不下去了,我知道问题在哪,我不知道怎么使两个我已经画好的图形剪切,我是想先画一直线,后画一圆,然后把圆里面的直线剪掉,
回复

使用道具 举报

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 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))
回复

使用道具 举报

20

主题

872

帖子

10

银币

中流砥柱

Rank: 25

铜币
952
发表于 2004-2-26 21:02:00 | 显示全部楼层
插入块的方法效率不更高么?
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2004-2-26 21:14:00 | 显示全部楼层
如果程序写好了,插入块就显得麻烦了,因为好改变圆的大小,文字内容等,
to 晓雨:程序这么长是因为考虑了很多问题过程的动态显示、输入的人性化考虑、避免使用command命令(这个不是很必要)以及最后圆的大小和文字大小及位置,你可以试试楼上几位的程序和我的程序的效果就知道了。。。
回复

使用道具 举报

9

主题

24

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2004-2-27 08:39:00 | 显示全部楼层
F8的很好,没的说了。要是每次输入零件号时都比上次递增一位,就更好了。
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 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)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-9 01:40 , Processed in 1.542530 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表