明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1507|回复: 5

[提问] 帮忙看看程序错在哪里?

[复制链接]
发表于 2014-1-25 14:49:37 | 显示全部楼层 |阅读模式
这个是原程序:
;;;*************************************
;;; No.2  绘制垂线(任意曲线之垂线) 函数
;;;          ---- By Ayunger Studio     
;;;*************************************
(defun C:tt1(/ xEntPick entName pickPt entData startPt endPt p1 p2 tempPT angofLine lenPerLine tanAngle)
(while (not (and (setq xEntPick (entsel "\n选择曲线: ")))))
(setq entName (car xEntPick))
(setq pickPt (cadr xEntPick))
(setq entData (entget entName))
(redraw entName 3)
(grdraw pickPt pickPt -1 1)
(setq startPt (getpoint (strcat "\n指定垂足点<默认拾取点>: " )))
(if (null startPt) (setq startPt pickPt))
(setq startPt (vlax-curve-getClosestPointTo entName startPt nil))
(setq lenPerLine (getdist startPt "\n指定垂线长: "))
(setq tanAngle (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv entName
                     (vlax-curve-getparamatpoint entName
                      (vlax-curve-getclosestpointto entName startPt)))))
(setq p1 (polar startPt (+ tanAngle (/ PI 2.0)) lenPerLine))
(setq p2 (polar startPt (- tanAngle (/ PI 2.0)) lenPerLine))

(ayOSMode nil);关闭捕捉.
(vl-cmdf "_.Line" P1 P2 "")
(redraw entName 4)
);end_defun
;;;**************************
;;; No.0 对象捕捉开关 函数   
;;;**************************
(defun ayOSMode (isOpenSnap)
(if isOpenSnap
  (setvar "osmode" (rem (getvar "osmode") 703));打开捕捉.
  (setvar "osmode" (+ (rem (getvar "osmode") 703) 703));关闭捕捉.
);end_if
);end_defun

这个是我自己想改成ucs下可以使用的,麻烦帮忙看看错在哪里?现在不能用默认拾取点。
;;;*************************************
;;; No.2  绘制垂线(任意曲线之垂线) 函数
;;;          ---- By Ayunger Studio     
;;;*************************************
(defun C:tt(/ xEntPick entName pickPt pickPt1 entData startPt startPt1 endPt p1 p2 tempPT angofLine lenPerLine tanAngle)

(while (not (and (setq xEntPick (entsel "\n选择曲线: ")))))
(setq entName (car xEntPick))
(setq pickPt1 (cadr xEntPick))
        (setq pickPt (trans pickPt1 1 0))
(setq entData (entget entName))
(redraw entName 3)
(grdraw pickPt pickPt -1 1)
(setq startPt1 (getpoint (strcat "\n指定垂足点<默认拾取点>: " )))
        (setq startPt (trans startPt1 1 0))
(if (null startPt) (setq startPt pickPt))
(setq startPt (vlax-curve-getClosestPointTo entName startPt nil))
(setq lenPerLine (getdist startPt "\n指定垂线长: "))
(setq tanAngle (angle '(0.0 0.0 0.0) (trans (vlax-curve-getFirstDeriv entName
                     (vlax-curve-getparamatpoint entName
                      (vlax-curve-getclosestpointto entName startPt))) 1 0)))
(setq p1 (polar startPt (+ tanAngle (/ PI 2.0)) lenPerLine))
(setq p2 (polar startPt (- tanAngle (/ PI 2.0)) lenPerLine))

(ayOSMode nil);关闭捕捉.
(vl-cmdf "_.Line" P1 P2 "")
(redraw entName 4)
);end_defun
;;;**************************
;;; No.0 对象捕捉开关 函数   
;;;**************************
(defun ayOSMode (isOpenSnap)
(if isOpenSnap
  (setvar "osmode" (rem (getvar "osmode") 703));打开捕捉.
  (setvar "osmode" (+ (rem (getvar "osmode") 703) 703));关闭捕捉.
);end_if
);end_defun

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2014-1-26 00:09:26 | 显示全部楼层
自己顶一下
 楼主| 发表于 2014-1-26 23:25:52 | 显示全部楼层
[em0][em0]
发表于 2014-1-26 23:31:36 | 显示全部楼层
试试吧。用trans首要理解当前需要trans的是wcs还是 ucs的点,或者ocs dcs
(getpoint)是UCS,vlax-curve-getclosestpointto 得到的是 wcs
command执行 ucs getdist 需要usc点,
多调试就知道了,
  1. ;;;*************************************
  2. ;;; No.2  绘制垂线(任意曲线之垂线) 函数
  3. ;;;          ---- By Ayunger Studio     
  4. ;;;*************************************
  5. (defun C:tt(/ xEntPick entName pickPt entData startPt endPt p1 p2 tempPT angofLine lenPerLine tanAngle)
  6. (while (not (and (setq xEntPick (entsel "\n选择曲线: ")))))
  7. (setq entName (car xEntPick))
  8. (setq pickPt (cadr xEntPick))
  9. (setq entData (entget entName))
  10. (redraw entName 3)
  11. (grdraw pickPt pickPt -1 1)
  12. (setq startPt (getpoint (strcat "\n指定垂足点<默认拾取点>: " )))
  13. (if (null startPt) (setq startPt pickPt))
  14. (setq startPt (vlax-curve-getClosestPointTo entName (trans startPt 1 0)  nil))  
  15. (setq lenPerLine (getdist (trans startPt 0 1) "\n指定垂线长: "))
  16. (setq tanAngle (angle (trans '(0.0 0.0 0.0) 0 1)(trans (vlax-curve-getFirstDeriv entName
  17.                      (vlax-curve-getparamatpoint entName
  18.                       (vlax-curve-getclosestpointto entName  startPt))) 0 1)))
  19. (setq p1 (polar (trans startPt 0 1) (+ tanAngle (* PI 0.5)) lenPerLine))
  20. (setq p2 (polar (trans startPt 0 1) (- tanAngle (* PI 0.5)) lenPerLine))

  21. (ayOSMode nil);关闭捕捉.
  22. (vl-cmdf "_.Line" P1 P2 "")
  23. (redraw entName 4)
  24.   (princ)
  25. );end_defun
  26. ;;;**************************
  27. ;;; No.0 对象捕捉开关 函数   
  28. ;;;**************************
  29. (defun ayOSMode (isOpenSnap)
  30. (if isOpenSnap
  31.   (setvar "osmode" (rem (getvar "osmode") 703));打开捕捉.
  32.   (setvar "osmode" (+ (rem (getvar "osmode") 703) 703));关闭捕捉.
  33. );end_if
  34. );end_defun
 楼主| 发表于 2014-1-27 19:08:41 | 显示全部楼层
edata 发表于 2014-1-26 23:31
试试吧。用trans首要理解当前需要trans的是wcs还是 ucs的点,或者ocs dcs
(getpoint)是UCS,vlax-curve-ge ...

多谢,学习了
发表于 2014-1-29 08:31:20 | 显示全部楼层

  1. ;; 曲线垂直线,需要e派工具箱(XCAD)的支持:[url]http://yunpan.cn/QXQKsW9gAPmpF[/url]
  2. (defun c:test1496 ()
  3.   (xyp-CMDLA0)
  4.   (setq        dist (Udist 1 "" "垂线长度<输入或鼠标直接量取>" dist nil)
  5.         l0   (* dist 0.5)
  6.         s0   (car (entsel "\n选择曲线: "))
  7.         mode t
  8.   )
  9.   (princ "\n左键确认,其它退出... ")
  10.   (if (xyp-curve-check s0)
  11.     (while mode
  12.       (setq mo (grread t 15 0)
  13.             co (car mo)
  14.       )
  15.       (redraw)
  16.       (cond ((member co '(3)) (xyp-line p2 p3))
  17.             ((member co '(2 25 32)) (setq mode nil))
  18.             (t
  19.              (setq p1 (xyp-Grvecs-Osnap (cadr mo))
  20.                    pt (vlax-curve-getclosestpointto s0 p1)
  21.                    p2 (xyp-Get-FaxianAtPoint s0 pt l0)
  22.                    p3 (xyp-Get-FaxianAtPoint s0 pt (- l0))
  23.              )
  24.              (xyp-Grvecs-Ptlst (list p2 p3) 1)
  25.             )
  26.       )
  27.     )
  28.   )
  29.   (xyp-CMDLA1)
  30. )

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-5-25 14:43 , Processed in 0.214253 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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