autocad型源代码_autocad 二次开发的一些源码实例

autocad型源代码_autocad 二次开发的一些源码实例autocad 二次开发的一些源码实例发布时间 2009 04 10 浏览 一 齿轮轮齿渐开渐开线 defunc gear setqp0 getpoint 输入齿轮中心 p0 m getreal 输入齿轮模数 M z getint 输入齿轮齿数 Z ha1c0 25a pi9 ra z haha m 2 rf z

autocad 二次开发的一些源码实例

发布时间:2009-04-10

浏览:

一、齿轮轮齿渐开渐开线

(defun c:gear(/)

(

setq

p0 (getpoint”输入齿轮中心p0: “)

m (getreal”输入齿轮模数M: “)

z (getint”输入齿轮齿数Z: “)

ha 1

c 0.25

a (/ pi 9)

ra(/ (* (+ z (+ ha ha)) m) 2)

rf(/ (* (- z (+ (+ ha ha) c)) m) 2)

r(/ ( * m z) 2)

rb ( * r (cos a))

ri rb

ang 0

g (polar p0 ang rb)

)

(command “circle” p0 ra)

(command “circle” p0 rf)

(command “circle” p0 r)

(command “line” g)

(while (< ri ra)

(setq

ang ( + ang(/ pi 360))

ri ( / rb (cos ang))

cta ( – (/ (sin ang) (cos ang)) ang)

g(polar p0 cta ri)

)

(command g)

)

(command )

)

二、螺旋源程序

(defun errMsg (s)

(if (/= s “function cancelled”) (princ (strcat “

Error: ” s)))

; 当命令执行时出现错误

(setvar “cmdecho” ocmdold)                         ; 例如用户按下了CTRL + C

(setvar “osmode” osmold)

(setq *error* olderr)                                 ; 恢复旧的错误处理

(princ)

)

(defun c:3Dthread (/ radouter threadpitch threadlength threadangle

ptStart innerdiafactor radmid radinner ocmdold osmold 4H 5H 6H h6 g6)

;——————————————————————-

; 获取公制外径大小、螺距总长

; 然后计算一系列几何点

; 并且关闭对象捕捉、命令回显

;——————————————————————-

(setq 4H (list 0.0015 0.002 0.002 0.0025 0.003 0.0035 0.004 0.005 0.006 0.007 0.008 0.009 0.010))

(setq 5H (list 0.002 0.0025 0.003 0.004 0.0045 0.0055 0.0065 0.0075 0.009 0.010 0.0115 0.0125 0.0135))

(setq 6H (list 0.003 0.004 0.0045 0.0055 0.0065 0.008 0.0095 0.011 0.0125 0.0145 0.016 0.018 0.020))

(setq h6 (list -0.003 -0.004 -0.0045 -0.0055 -0.0065 -0.008 -0.0095 -0.011 -0.0125 -0.0145 -0.016 -0.018 -0.020))

(setq g6 (list -0.005 -0.008 -0.0095 -0.0115 -0.0135 -0.017 -0.0195 -0.023 -0.0265 -0.0295 -0.033 -0.036 -0.0515))

(setq osmold (getvar “osmode”))                             ; 保存调用前的osmode系统变量值

(setq ocmdold (getvar “cmdecho”))                             ; 保存调用前的cmdecho系统变量值

(setvar “osmode” 0)                                       ; 关闭对象捕捉

(setvar “cmdecho” 0)                                   ; 关闭命令的回显

(setq innerdiafactor 1.5)                               ; 设置内径系数

(initget 7)                                         ; radmid 必须非零、非空、非负

(setq radmid (getdist “

公制外径: “))

(initget 7)                                         ; threadpitch 必须非零、非空、非负

(setq threadpitch (getreal “

螺距: “))

(initget 1)                                         ; ptStart 必须非空

(setq ptStart (getpoint “

起始点: “))

(initget 3)                                         ; threadlength 必须非零、非空、非负

(setq threadlength (getdist “

螺纹总长(Y方向): “))

; 对公制外径添加公差

(if (<= radmid 3) (setq order 0)                         ; 根据公制外径确定公差带中位置

(if (<= radmid 6) (setq order 1)

(if (<= radmid 10) (setq order 2)

(if (<= radmid 18) (setq order 3)

(if (<= radmid 30) (setq order 4)

(if (<= radmid 50) (setq order 5)

(if (<= radmid 80) (setq order 6)

(if (<= radmid 120) (setq order 7)

(if (<= radmid 180) (setq order 8)

(if (<= radmid 250) (setq order 9)

(if (<= radmid 315) (setq order 10)

(if (<= radmid 400) (setq order 11)

(if (<= radmid 500) (setq order 12)

)))))))))))))

(if (< threadpitch 0.25) (setq radmid (+ radmid (nth order 4H)))           ; 根据螺距确定公差带

(if (< threadpitch 0.35) (setq radmid (+ radmid (nth order 5H)))

(if (>= threadpitch 0.35) (setq radmid (+ radmid (nth order 6H)))

)))

(setq h (* 0. threadpitch))                               ; 计算齿高

(setq radouter (+ radmid (/ h 4)))                             ; 计算外径

(setq radinner (- radouter (* h innerdiafactor)))                   ; 计算内径

(setq threadangle (+ 30 0))                                   ; 计算齿顶角

(auxithread radouter radmid radinner threadpitch threadlength threadangle ptStart)     ; 调用绘制三维螺纹的子函数

(princ “

三维螺纹创建完成”)

(setvar “osmode” osmold)                                       ; 恢复调用前的osmode系统变量值

(setvar “cmdecho” ocmdold)                                       ; 恢复调用前的cmdecho系统变量值

(princ)

)

(defun auxithread (radouter radmid radinner threadpitch threadlength threadangle ptStart / ttal pt1z ang pt1a

pt1az pt3a pt1b pt1bz pt3b pttmp1 pttmp2 pttmp3 pttmp4 pttmp5 pttmp6 pttmp7 pttmp8 pttmp9 pttmp10 pttmp11 pttmp12 tstmp startcone endcone)

;(command “undo” “begin”)                                   ; 开始undo步骤

(setq ttal (+ (fix (/ (abs threadlength) threadpitch)) 3)

pttmp1 (list (- (car ptStart) (/ radouter 2.0)) (cadr ptStart) (caddr ptStart))

pt1z (list (- (car ptStart) (/ radouter 2.0)) (cadr ptStart) (+ (caddr pttmp1) 1.0))

pttmp2 (polar pttmp1 (/ (* threadangle pi) 180.0) 1)

pttmp3 (list (+ (car pttmp1) radouter) (+ (cadr pttmp1) (/ threadpitch 2.0)) (caddr ptStart))

ang (angle pttmp1 pttmp3)

pt1a (polar pttmp1 (+ ang (/ pi 2.0)) threadpitch)

pt1az (list (car pt1a) (cadr pt1a) (+ (caddr pt1a) 1.0))

pt3a (polar pt1a ang radouter)

pt1b (polar pttmp1 (- ang (/ pi 2.0)) threadpitch)

pt1bz (list (car pt1b) (cadr pt1b) (+ (caddr pt1b) 1.0))

pt3b (polar pt1b ang radouter)

pttmp4 (polar pttmp3 (/ (* (- 180 threadangle) pi) 180.0) 1)

pttmp5 (inters pttmp1 pttmp2 pttmp3 pttmp4 nil)

pttmp6 (list (car pttmp5) (cadr ptStart) (caddr ptStart))

pttmp7 (polar pttmp1 (/ (* (- 360 threadangle) pi) 180.0) 1)

pttmp8 (polar pttmp3 (/ (* (+ 180 threadangle) pi) 180.0) 1)

pttmp9 (inters pttmp1 pttmp7 pttmp3 pttmp8 nil)

pttmp10 (list (car pttmp9) (cadr pttmp3) (caddr pttmp3))

pttmp11 (polar ptStart (/ pi 2.0) threadpitch)

pttmp12 (polar pttmp11 (/ pi 2.0) (abs threadlength))

)

;——————————————————————-

; 绘制两个倒置的并偏移1/2螺距的圆锥

; 这两个圆锥都以中剖面剖分

; 进行并集运算

;——————————————————————-

(SETQ startcone “order”)

(SETQ endcone “Y”)

(command “zoom” “w” (list (car pt1a) (+ (cadr pt1a) (abs threadlength)) (caddr pt1a)) pt3b)

(princ “

正在绘制三维螺纹,请等待”)

(command “pline” pttmp1 pttmp5 pttmp6 “c”)

(command “revolve” “l” “” pttmp5 pttmp6 “”)

(command “slice” “l” “” pttmp1 pttmp3 pt1z pttmp5)

(command “slice” “l” “” pt1a pt3a pt1az pttmp3)

(setq tstmp (ssadd (entlast)))

(command “pline” pttmp3 pttmp9 pttmp10 “c”)

(command “revolve” “l” “” pttmp9 pttmp10 “”)

(command “slice” “l” “” pttmp1 pttmp3 pt1z pttmp9)

(command “slice” “l” “” pt1b pt3b pt1bz pttmp3)

(setq tstmp (ssadd (entlast) tstmp))

(command “union” tstmp “”)

;——————————————————————-

; 上面的实体被剖切成两份,然后进行镜像以获得螺旋线的螺旋

; 单线的高度实际上等于两倍螺距,但是超出或者是在内部或者是

; 在最后一步被切除

;——————————————————————-

(command “slice” tstmp “” “xy” ptStart “b”)

(setq tstmp (ssadd (entlast) tstmp))

(command “mirror” “l” “” pttmp1 “@10<0" "y")

(command “union” tstmp “”)

;——————————————————————-

; 螺旋进行阵列操作,然后再作并集(可能会耗费一定时间)

; 得到的实体再切除到指定的螺旋高度

;——————————————————————-

(setq e (entlast))

(command “array” tstmp “” “r” ttal 1 threadpitch)

(repeat (1- ttal)

(setq e (entnext e)

tstmp (ssadd e tstmp)

)

)

(command “union” tstmp “”)

; 若开始创建45度的圆锥

(if (/= startcone “order”)

(progn (setq e (entlast))

(command “cone” (list (car ptStart) (+ (cadr ptStart) threadpitch) (caddr ptStart)) “d” radmid “a” (list (car ptStart) (+ (+ (cadr ptStart) (/ radmid 2)) threadpitch) (caddr ptStart)))

(command “union” “l” e “”)

)

)

(command “slice” “l” “” “zx” pttmp11 pttmp12)

(command “slice” “l” “” “zx” pttmp12 pttmp11)

(command “move” “l” “” ptStart (list (car ptStart) (- (cadr ptStart) threadpitch) (caddr ptStart)))

; 创建最小直径的圆柱体,然后与螺旋作交集

(setq e (entlast))

(command “cylinder” ptStart “d” radinner “c” (list (car ptStart) (+ (cadr ptStart) (abs threadlength)) (caddr ptStart)))

(command “union” “l” e “”)

(setq tstmp (entlast))

; 创建中空的圆柱体

(command “cylinder” ptStart “d” radmid “c” (list (car ptStart) (+ (cadr ptStart) (abs threadlength)) (caddr ptStart)))   ; minor dia

(setq e (entlast))

; 若最后创建45度的圆锥

(if (/= endcone “order”)

(progn (command “move” “l” “” ptStart (list (car ptStart) (- (cadr ptStart) (/ (- radmid radinner) 2)) (caddr ptStart)))

(command “cone” ptStart “d” radmid “a” (list (car ptStart) (+ (cadr ptStart) (/ radmid 2)) (caddr ptStart)))

(command “move” “l” “” ptStart (list (car ptStart) (- (+ (cadr ptStart) (abs threadlength)) (/ (- radmid radinner) 2)) (caddr ptStart)))

(command “union” “l” e “”)

(setq e (entlast))

)

)

; 从大圆柱中减去小直径圆柱

(command “cylinder” ptStart “d” (* radmid 1.5) “c” (list (car ptStart) (+ (cadr ptStart) (abs threadlength)) (caddr ptStart)))

(command “subtract” “l” “” e “”)

(setq e (entlast))

; 从螺旋中减去圆柱

(command “subtract” tstmp “” e “”)

; 如果螺旋长度为负然后镜像

(setq e (entlast))

(if (< threadlength 0) (mirror3d e "zx" ptStart "y"))

(command “zoom” “p”)

;   (command “undo” “end”)                       ; 结束undo步骤

)

;;;———————————————————————————————————————;

(arxload “geom3d” nil)

(princ “

3DThread 已加载。 “)

(princ)

三、弹簧源程序

(defun errMsg (s)             ; 当命令执行时出现错误

; 例如用户按下了CTRL + C

(if (/= s “Function cancelled”)

(princ (strcat “

Error: ” s))

)

(setvar “cmdecho” cmdch)         ; 恢复调用前的cmdecho系统变量值

(setvar “blipmode” blpmd)         ; 恢复调用前的blipmode系统变量值

(setq *error* olderror)         ; 恢复旧的错误处理

(princ)

)

(defun spring (nRepeat cntPoint bhfac lr strad bvfac

/ angle distnc tp aGrw dhGrw dvGrw Pi2 dv)

(setvar “blipmode” 0)           ; 关闭 blipmode

(setvar “cmdecho” 0)           ; 关闭 cmdecho

(setq Pi2 (* 3. 2))

(setq aGrw (/ Pi2 lr))

(setq dhGrw (/ bhfac lr))

(if bvfac (setq dvGrw (/ bvfac lr)))

(setq angle 0.0)

(if bvfac

(setq distnc strad dv 0.0)

(setq distnc 0.0)

)

(if bvfac

(command “3dpoly”)                 ; 开始绘制弹簧

(command “pline” cntPoint)       ; 从基点开始绘制弹簧

)

(repeat nRepeat

(repeat lr

(setq tp (polar cntPoint (setq angle (+ angle aGrw))

(setq distnc (+ distnc dhGrw))

)

)

(if bvfac

(setq tp (list (car tp) (cadr tp) (+ dv (caddr tp)))

dv (+ dv dvGrw)

)

)

(command tp)             ; 继续输入下一点

)

)

(command “”)                 ; 输入结束

(princ)

)

;;;

;;;     生成三维弹簧函数调用接口

;;;

(defun C:3DSPRING (/ olderror cmdch blpmd cntPt RottCnt horiGrw vertGrw bgnRdtn ptCntPerCircle)

(setq cmdch (getvar “cmdecho”))     ; 获取cmdecho值,以便调用结束后恢复

(setq blpmd (getvar “blipmode”))   ; 获取blipmode值,以便调用结束后恢复

(setvar “cmdecho” 0)               ; 关闭 cmdecho

(initget 1)                 ; cntPt 必须非空

(setq cntPt (getpoint “

请输入底部中心点: “))

(initget 7)                 ; RottCnt 必须非零、非空,不可忽略

(setq RottCnt (getint “

旋转的圈数: “))

(initget 7)                 ; bgnRdtn 必须非零、非空,不可忽略

(setq bgnRdtn (getdist cntPt “

起始半径: “))

(initget 1)                 ; cf 必须非零、非空

(setq horiGrw (getdist “

每一圈的水平增长距离: “))

(initget 3)                 ; cf 必须非零、非空

(setq vertGrw (getdist “

每一圈的垂直增长距离: “))

(initget 6)                 ; ptCntPerCircle 必须非零、不可忽略

(setq ptCntPerCircle (getint “

每一圈的插值点数<35>: “))

(cond ((null ptCntPerCircle) (setq ptCntPerCircle 35)))

(spring RottCnt cntPt horiGrw ptCntPerCircle bgnRdtn vertGrw)

(setvar “cmdecho” cmdch)           ; 恢复调用前的cmdecho系统变量值

(setvar “blipmode” blpmd)           ; 恢复调用前的blipmode系统变量值

(setq *error* olderror)           ; Restore old *error* handler

(princ)

)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224378.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午12:04
下一篇 2026年3月17日 下午12:04


相关推荐

  • Markdown中LaTeX公式编号

    Markdown中LaTeX公式编号在 Markdown 中使用 LaTeX LaTeXLATE X 公式时 加上 tag 标签可以生成对应的编号 比如这个代码可以生成 x y z tag 1 1 这样的带编号的公式 比如这个代码可以生成 1 1 x y zx y z tag 1 1 x y z 1 1 这样的带编号的公式 也可以使用 LaTeX LaTeXLATE X 标准的 begin equa

    2026年3月17日
    2
  • 配置pycharm+anaconda环境「建议收藏」

    配置pycharm+anaconda环境「建议收藏」虽然这方面已经很熟悉了,但每次重装系统重新配置环境时都要重新找帖子看,浪费很多时间,所以还是想记录下来。第一步,安装pycharm。打开pycharm的官网https://www.jetbrains.com/这里是第一个注意的点,点击下载community版本,因为专业版要激活成功教程的非常麻烦,其实社区community版本就够用了。点击下载,350m左右。下载完双击安装一路默认到安装完成就行,安装路径可以根据自己需要调整。第二步、安装anaconda打开anaconda的官网h

    2022年8月29日
    7
  • android 设备usb调试模式,如何打开Android设备的USB调试模式「建议收藏」

    android 设备usb调试模式,如何打开Android设备的USB调试模式「建议收藏」目前大部分刷机等工具都是采用Adb方式连接,所以需要您在设备上打开USB调试模式Android设备打开USB调试模式总共有三种不同方法,根据系统版本而不同,以下为Android所有系统版本对应的打开方法壹2.1~2.3.7系统打开方法:点击手机Menu键(菜单键),在弹出的菜单中选择设置(Setting),或在应用程序中找到设置程序点击进入进入设置界面的应用程序即可打开…

    2025年11月5日
    3
  • RabbitMQ流控-FLow Control

    RabbitMQ流控-FLow Control当Connection发布消息的速度太快,队列无法跟上(消费速度低于生产速度),RabbitMQ会降低Connection的速度,无需配置。流控的Connection可以在rabbitmqctl、管理UI和HTTPAPI响应中显示flow状态。这意味着连接每秒要经历多次阻塞和解除阻塞,以便将消息传入的速度保持在服务器其他部分(例如,将这些消息路由到的队列)能够处理的速度。一般来说,处于流…

    2022年5月27日
    89
  • 域名收集实战

    域名收集实战信息收集是网络安全 PenetrationT 中的起始阶段 但也是最为重要的阶段 所以收集信息的目标是收集到全面且丰富的信息 本篇文章的博客主要讲解的是信息收集中的域名收集实战 文章目录 1 子域名收集 1 1 通用搜索引擎 1 2 备案历史查询 1 3 网络空间搜索引擎 1 3 1fofa1 3 2 其他 1 4SSL 证书查询 1 5 爆破工具 1 6 在线查询子域名网站 2 子公司域名收集 3 Whois 信息收集

    2026年3月16日
    2
  • python-unittest

    python-unittest

    2021年6月11日
    116

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号