乐筑天下

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

MAK(功能:園座標輸出)

[复制链接]

57

主题

466

帖子

8

银币

中流砥柱

Rank: 25

铜币
694
发表于 2003-8-12 19:38:00 | 显示全部楼层 |阅读模式
;;;功能:園座標輸出
;;;BY Spring (根據龍龍仔的程序修改的)
;;;08/12-03
(defun ai_error        (errmsg)
  (if errmsg
    '("console break"
      "Function Cancelled"
     )
    (princ (strcat "\nError: " errmsg))
  )
  (princ)
) ;_defun
;;;_______________________________________________________
(defun WRITE_LIST (r_list /)
  (command "_.text" "j" "C" p1 t_high 0 "序號")
  (command "_.text"
           "j"
           "C"
           (polar p1 0 (* t_high 7))
           t_high
           0
           "孔  徑"
  )
  (command "_.text"
           "j"
           "C"
           (polar p1 0 (* t_high 16))
           t_high
           0
           "X 座標"
  )
  (command "_.text"
           "j"
           "C"
           (polar p1 0 (* t_high 26))
           t_high
           0
           "Y 座標"
  )
  (setq p1 (polar p1 (/ pi -2.0) (* t_high 2)))
  (setq N 1)
  (while (/= (setq DATA (car r_list)) nil)
    (setq DATA1 (car x_list))
    (setq DATA2 (car y_list))
    (command "_.text"
             "j"
             "c"
             (polar p1 0 (* t_high 7))
             t_high
             ""
             (strcat "%%C" (rtos (* (car DATA) 2.0) 2 2))
    )
    (command "_.text"
             "j"
             "c"
             (polar p1 0 (* t_high 16))
             t_high
             ""
             (rtos (- (car DATA1) x_p2))
    )
    (command "_.text"
             "j"
             "c"
             (polar p1 0 (* t_high 25))
             t_high
             ""
             (rtos (- (car DATA2) y_p2))
    )
    (command "_.text"
             "j"
             "C"
             (polar p1 0 (* t_high 0.25))
             t_high
             ""
             (rtos N)
    )
    (setq p1 (polar p1 (/ pi -2.0) (* t_high 2)))
    (setq r_list (cdr r_list))
    (setq x_list (cdr x_list))
    (setq y_list (cdr y_list))
    (setq N (1+ N))
  )
)
;;;_______________________________________________________
(defun WRITE_LINE (/ LL)
  (setq p1 (polar p1 (/ pi 2.0) (* t_high 1.5)))
  (command "_.LINE"
           (polar p1 pi (* t_high 2.5))
           (polar p1 0 (* t_high 30))
           ""
  )
  (command "_.CHANGE" (entlast) "" &quot" "Color" "2" "")
  (command "_.ARRAY"
           (entlast)
           ""
           "R"
           (+ (length r_list) 2)
           ""
           (* 2 t_high)
  )
  (command "_.LINE"
           (polar p1 pi (* t_high 2.5))
           (cdr (assoc 10 (entget (entlast))))
           ""
  )
  (command "_.CHANGE" (entlast) "" &quot" "Color" "2" "")
  (setq LL (entlast))
  (command "_.COPY" LL "" p1 (polar p1 0 (* t_high 5.0)))
  (command "_.COPY" LL "" p1 (polar p1 0 (* t_high 13.5)))
  (command "_.COPY" LL "" p1 (polar p1 0 (* t_high 23)))
  (command "_.COPY" LL "" p1 (polar p1 0 (* t_high 32.5)))
)
;;;_______________________________________________________
(defun c:MAK (/             t_hig  t_high ss          count         r_list        x_list y_list
              en     ed            cen           cen_x  cen_y         tmp        nou    p1
             )
  (setvar "MODEMACRO" "***SPRING***")
  (setq cm (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (setq        old_error *error*
        *error*        ai_error
  )
  (command "_.UNDO" "group")
  (command "_.UCS" "World")
  (princ "\nText high "))
  (if (= t_high "")
    (setq t_high t_hig)
    (setq t_high (atoi t_high))
  )
  (setq p2 (getpoint "\n指定基準點:"))
  (setq p3 '(0 0))
  (if (= p2 nil)
    (setq p2 p3)
  )
  (setq x_p2 (car p2))
  (setq y_p2 (nth 1 p2))
  (setq ss (ssget '((0 . "CIRCLE"))))
  (setq count 0)
  (setq r_list nil)
  (setq x_list nil)
  (setq y_list nil)
  (while (> (sslength ss) count)
    (setq en (ssname ss count))
    (setq ed (entget en))
    (setq cen (cdr (assoc 10 ed)))
    (setq cen_x (list (car cen)))
    (setq cen_y (list (cadr cen)))
    (setq tmp (cdr (assoc 40 ed)))
    (setq r_list (cons (list tmp count) r_list))
    (setq x_list (cons cen_x x_list))
    (setq y_list (cons cen_y y_list))
    (setq count (1+ count))
    (setq nou (itoa count))
    (command "_.text" "j" "C" cen t_high "" nou)
  )
  (setq x_list (reverse x_list))
  (setq y_list (reverse y_list))
  (setq p1 (getpoint "\ninsert point"))
  (setq        r_list (vl-sort        r_list
                        (function (lambda (E1 E2)
                                    (

hheq3qcxk1x.jpg

hheq3qcxk1x.jpg

回复

使用道具 举报

57

主题

466

帖子

8

银币

中流砥柱

Rank: 25

铜币
694
发表于 2003-8-12 19:45:00 | 显示全部楼层
我画图时都是直接在上面标注

xjwimzhlwma.jpg

xjwimzhlwma.jpg

回复

使用道具 举报

57

主题

466

帖子

8

银币

中流砥柱

Rank: 25

铜币
694
发表于 2003-8-12 19:47:00 | 显示全部楼层
漏說了一點,上面的程序有用到 vl-sort  函數,幫助文件的說明如下:
將串列中的元素依給定的比較函數排序
(vl-sort  list comparison-function)
引數
list
任意串列。
comparison-function
比較函數。如果排序順序第一個引數在第二個之前,這可以為任意接受兩個引數並傳回 T (或任意非 nil 值) 的函數。
comparison-function 的值可以為下列格式之一:
符號 (函數名稱)
        '(LAMBDA (A1 A2) ...)
        (FUNCTION (LAMBDA (A1 A2) ...))
傳回值
含有 list 的元素,由 comparison-function 指定順序的串列。重覆元素可能會自串列中刪除。
範例
排序數字串列:
_$ (vl-sort '(3 2 1 3) '"))
  (if (= T_HIGH "")
    (setq T_HIGH T_HIG)
    (setq T_HIGH (atof T_HIGH))
  )
  (setq P2 (getpoint "\n指定基准点:"))
  (setq P3 '(0 0))
  (if (= P2 NIL)
    (setq P2 P3)
  )
  (setq X_P2 (car P2))
  (setq Y_P2 (nth 1 P2))
  (setq SS (ssget '((0 . "CIRCLE"))))
  (setq        COUNT 0
        N 0
  )
  (setq R_LIST NIL)
  (setq X_LIST NIL)
  (setq Y_LIST NIL)
  (repeat (sslength SS)
    (setq EN (ssname SS N))
    (setq ED (entget EN))
    (if        (not (member
               (setq CEN (cdr (assoc 10 ED)))
               CEN_LIST
             )
        )
      (progn
        (setq CEN_LIST (append CEN_LIST (list CEN)))
        (setq CEN_X (list (car CEN)))
        (setq CEN_Y (list (cadr CEN)))
        (setq TMP (cdr (assoc 40 ED)))
        (setq R_LIST (cons (list TMP COUNT) R_LIST))
        (setq X_LIST (cons CEN_X X_LIST))
        (setq Y_LIST (cons CEN_Y Y_LIST))
        (setq COUNT (1+ COUNT))
        (setq NOU (itoa COUNT))
        (command "_.text" "j" "C" CEN T_HIGH "" NOU)
      )
    )
    (setq N (1+ N))
  )
  (setq X_LIST (reverse X_LIST))
  (setq Y_LIST (reverse Y_LIST))
  (setq P1 (getpoint "\ninsert point"))
  (setq        R_LIST (vl-sort        R_LIST
                        (function (lambda (E1 E2)
                                    (< (cadr E1) (cadr E2))
                                  )
                        )
               )
  )
  (WRITE_LIST R_LIST)
  (WRITE_LINE)
  (command "_.UCS" &quotrev")
  (command "_.UNDO" "end")
  (setvar "cmdecho" CM)
  (setq *ERROR* OLD_ERROR)
  (princ)
)
回复

使用道具 举报

29

主题

1152

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1268
发表于 2003-8-13 13:04:00 | 显示全部楼层

有谁能够帮我做到这一点呢?
我现在很需要这个功能!如:圆的位置移动了,表内的X,Y坐标也跟着变动!
如:圆的大小变了,表内的直径也自动一起改变!
请问哪个高手能够实现其功能?也就是这个例子的关联性。需建立反应器。
万分感谢!!!!
本人是从事冷冲模具设计的。
如果可以实现且送俺一份源代码细细分享一下的话割点银子也是应该的......
回复

使用道具 举报

6

主题

52

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
76
发表于 2003-10-19 12:29:00 | 显示全部楼层
呵呵,碰到同行了
這個問題得請教高手,鷹該不容易
回复

使用道具 举报

6

主题

52

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
76
发表于 2003-10-23 21:30:00 | 显示全部楼层
如果可以实现且送俺一份源代码细细分享一下的话割点银子也是应该的......
回复

使用道具 举报

57

主题

466

帖子

8

银币

中流砥柱

Rank: 25

铜币
694
发表于 2003-10-23 21:56:00 | 显示全部楼层
是用LISP编的吗,怎么执行,我特需要,谢谢
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-5 23:36 , Processed in 0.773018 second(s), 69 queries .

© 2020-2025 乐筑天下

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