明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2684|回复: 4

[基础] 一個鏡射程式,來請教大家

[复制链接]
发表于 2010-9-30 20:51:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2010-10-9 19:50:19 编辑

如下圖,如果我要把物件,從a點鏡射到b點,那不是還要在他倆中間做出一條鏡射線等繁鎖的手續
因為我在工作上常會遇到這種情況,讓我覺得很麻煩,所以今天就寫了一段程式來簡化鏡的過程。



我自己寫的這段程式中,人工干涉的成份太多了。除了一開始點選兩個要鏡射的端點之外,還要在過程中點選一次鏡射線。最近當整個程式結束後,畫面中還會留下一條多餘的直線。還請各位請教一下,我該如何把這段程式寫得更好。

另一個問題
我在這段程式中,有用到副程式。一般來說,副程式不是要加入(自變量/內部變量)嗎,來讓程式更嚴僅。
原本程式可以跑得好好的,但是當我一把自變量和內部變量都寫進去的時候,程式就躺了,不知道是哪邊錯了,請指教一下 。原本我自變量跟內部變量的地方是這樣寫的(p1 p2 / p1x p1y p2x p2y px py mpt linelen)   

以下是程式
  1. (defun C:m1()
  2. (setq pic1 (cadr (entsel"\n選取圖塊")));;y物件才可供命令使用
  3. (setq p1(getpoint"\n基點<退出>"))
  4. (setq p2(getpoint"\n基點<退出>"  p1))
  5. (mid)
  6. (command "line" p1 p2 "")
  7. (setq picline (car(entsel"\n取選鏡射線")));;建立x物件
  8. (command "ROTATE" picline "" mpt 90);;旋轉x物件(直線)
  9. (setq endp (cdr(assoc 10 (entget picline))));;取得起點座標
  10. (command "mirror" pic1 "" mpt endp "N");;執行鏡命令
  11. (prin1)
  12. )
  13. (defun mid()
  14. (setq p1x(car p1))
  15. (setq p1y(cadr p1))
  16. (setq p2x(car p2))
  17. (setq p2y(cadr p2))
  18. (setq px(/ (+ p1x p2x) 2))
  19. (setq py(/ (+ p1y p2y) 2))
  20. (setq mpt(list px py))
  21. (setq linelen (sqrt(+(expt (- p1x p2x) 2) (expt (- p1y p2y) 2))))
  22. (princ"\n兩點間的長度= ")
  23. (princ linelen)
  24. )

本帖子中包含更多资源

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

x
发表于 2010-9-30 22:48:00 | 显示全部楼层
不明白你什么意思.没有表达清楚.试试
  1. (defun c:mm( / ent mpt1 mpt2 oldosmode pt1 pt2)  (setq oldosmode (getvar "osmode"))  (if (and (setq ent (car (entsel"\n選取圖塊")))     (setq pt1 (getpoint"\n第一基點<退出>"))     (setq pt2 (getpoint"\n第一基點<退出>"))  )    (progn     (setvar "osmode" 0)     (setq mpt1 (polar pt1 (angle pt1 pt2)(* 0.5(distance pt1 pt2)))     mpt2 (polar mpt1 (+ (* 0.5 pi)  (angle pt1 pt2)) 10)     )      (command "mirror" ent "" mpt1 mpt2 "N")      (setvar "osmode" oldosmode)    )  )  )
 楼主| 发表于 2010-10-1 21:56:00 | 显示全部楼层
本帖最后由 作者 于 2010-10-9 11:11:20 编辑

謝謝你,跟我要的一模一樣。

你可以跟我講解一下,程式的運作方式嗎。

 

(setq oldosmode (getvar "osmode"))<---這是什麼意思。

幫我解釋一下~~><

 

发表于 2010-10-9 22:35:00 | 显示全部楼层
(setq oldosmode (getvar "osmode"))是保存当前捕捉设定的参数。
发表于 2012-4-28 23:24:47 | 显示全部楼层
能改善为只点一个点就好了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 14:30 , Processed in 0.180966 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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