明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2907|回复: 10

非常感谢meflying为我解决了这个难题!*请求明总为meflying加分*

[复制链接]
发表于 2004-10-29 16:42 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2004-11-1 9:04:35 编辑

已知 两条平行直线,我想从中间部分画出两条与之垂直的线



点取第一条线上的中间部分的一点


点取另一条线上的另一点


其它见图


希望你来挑战,先谢了


本帖子中包含更多资源

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

x
发表于 2004-10-29 17:35 | 显示全部楼层
  1. (vl-load-com)
  2. (defun c:test( / ent1 ent2 pt1 pt2 pt3 pt4 pt5 ang1 ang2)
  3.    (setvar "cmdecho" 0)
  4.    (command "_.undo" "be")   
  5.    (setq os (getvar "osmode"))   
  6.    (setq pt1 (getpoint "选择第一点:"))
  7.    (setq pt2 (getpoint pt1 "选择第二点:"))
  8.    (setvar "osmode" 0)
  9.    (setq ent1 (ssname (ssget pt1 '((0 . "LINE"))) 0))
  10.    (setq ent2 (ssname (ssget pt2 '((0 . "LINE"))) 0))
  11.    (setq pt3 (vlax-curve-getClosestpointTo ent2 pt1))
  12.    (setq ang1 (angle pt1 pt3))
  13.    (setq ang2 (angle pt3 pt2))
  14.    (setq pt4 (polar pt3 ang2 2.5))
  15.    (setq pt5 (polar pt1 ang2 2.5))
  16.    (command "_.line" (polar pt1 (+ ang1 pi) 2.5) (polar pt3 ang1 2.5) "")
  17.    (setq ent3 (entlast))
  18.    (command "_.line" (polar pt5 (+ ang1 pi) 2.5) (polar pt4 ang1 2.5) "")
  19.    (setq ent4 (entlast))
  20.    (setq dist (distance pt1 pt3))
  21.    (setq pt4 (polar pt3 ang2 1.25))
  22.    (setq pt5 (polar pt1 ang2 1.25))
  23.    (command "_.trim" ent3 ent4 "" (list ent1 pt5) (list ent2 pt4)"")
  24.    (setvar "osmode" os)
  25.    (command "_.undo" "e")
  26. )

评分

参与人数 1威望 +1 金钱 +2 贡献 +2 激情 +2 收起 理由
zfbj + 1 + 2 + 2 + 2 【好评】应楼主要求,我代明总来执法吧。

查看全部评分

 楼主| 发表于 2004-11-1 09:02 | 显示全部楼层
非常感谢meflying!!!!
献花以表致谢!!!!
*****请求明总为meflying加分*****
发表于 2004-11-1 15:39 | 显示全部楼层

在明经加分并不容易,等你当版主时再加吧!

而且程式并没有写好,有时两线会长短不一,两线间宽度也会变动

发表于 2004-11-1 16:12 | 显示全部楼层
程序是粗糙了点...


不过你说的那两种情况还没出现过,而且这些点都是计算出来的,怎么可能会呢?
发表于 2004-11-1 17:11 | 显示全部楼层
我也要研究一下!就是会发生我所述!
发表于 2004-11-1 17:17 | 显示全部楼层
你说的情况我怎么都试不出来,不过有别的问题,就是选点的时候如果在垂足点就要出现问题了,或者点处选不到对象也会有问题,不过只要用的时候注意点,按要求进行选择,应该就不会出问题了啊...
发表于 2004-11-2 07:51 | 显示全部楼层
  1. ;;MEFLYING
  2. ;;由於PT2,PT3非常非常接近,使ANG2变大了,而不等於0
  3. ;;这样的错误====>真是晕倒!!!           8-(;|
  4. 指令: TEST
  5. 选择第一点:------>选1的中点
  6. 选择第二点:------>选2的中点
  7. (89.1139 289.075 0.0)
  8. (89.1139 339.075 0.0)
  9. (89.1139 339.075 0.0)
  10. 1.5708--->ang1
  11. 89.11385688182042,339.0754448543191,0
  12. 89.11385688182036,339.0754448543191,0
  13. 0.785398----ang2
  14. (90.8816 340.843 0.0)
  15. (90.8816 290.843 0.0)
  16. (89.9977 339.959 0.0)
  17. (89.9977 289.959 0.0) nil
  18. |;(vl-load-com)
  19. (defun C:TEST (/ ENT1 ENT2 PT1 PT2 PT3 PT4 PT5 ANG1 ANG2)
  20.    (setvar "cmdecho" 0)
  21.    (command "_.undo" "be")
  22.    (setvar "osmode" 39)      ;抓取模式 add LUCAS
  23.    (setq OS (getvar "osmode"))
  24.    (setq PT1 (getpoint "选择第一点:"))
  25.    (setq PT2 (getpoint PT1 "选择第二点:"))
  26.    (setvar "osmode" 0)
  27.    (setq ENT1 (ssname (ssget PT1 '((0 . "LINE"))) 0))
  28.    (setq ENT2 (ssname (ssget PT2 '((0 . "LINE"))) 0))
  29.    (setq PT3 (vlax-curve-getclosestpointto ENT2 PT1))
  30.    (print PT1)
  31.    (print PT2)
  32.    (print PT3)
  33.    (setq ANG1 (angle PT1 PT3))
  34.    (print ANG1)
  35.    (print)
  36.    (prompt (strcat (rtos (car PT2) 2 20)
  37.        ","
  38.        (rtos (cadr PT2) 2 20)
  39.        ","
  40.        (rtos (last PT2) 2 20)
  41.      )
  42.    )
  43.    (print)
  44.    (prompt (strcat (rtos (car PT3) 2 20)
  45.        ","
  46.        (rtos (cadr PT3) 2 20)
  47.        ","
  48.        (rtos (last PT3) 2 20)
  49.      )
  50.    )
  51.    (setq ANG2 (angle PT3 PT2))
  52.    ;;由於PT2,PT3非常非常接近,使ANG2变大了,而不等於0
  53.    ;;真是晕倒!!!
  54.    (print ANG2)
  55.    (setq PT4 (polar PT3 ANG2 2.5))
  56.    (print PT4)
  57.    (setq PT5 (polar PT1 ANG2 2.5))
  58.    (print PT5)
  59.    (command "_.line"
  60.        (polar PT1 (+ ANG1 pi) 2.5)
  61.        (polar PT3 ANG1 2.5)
  62.        ""
  63.    )
  64.    (setq ENT3 (entlast))
  65.    (command "_.line"
  66.        (polar PT5 (+ ANG1 pi) 2.5)
  67.        (polar PT4 ANG1 2.5)
  68.        ""
  69.    )
  70.    (setq ENT4 (entlast))   (setq DIST (distance PT1 PT3))
  71.    (setq PT4 (polar PT3 ANG2 1.25))
  72.    (print PT4)
  73.    (setq PT5 (polar PT1 ANG2 1.25))
  74.    (print PT5)
  75.    (command "_.trim"
  76.        ENT3
  77.        ENT4
  78.        ""
  79.        (list ENT1 PT5)
  80.        (list ENT2 PT4)
  81.        ""
  82.    )
  83.    (setvar "osmode" OS)
  84.    (command "_.undo" "e")
  85. )
测试图

本帖子中包含更多资源

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

x
发表于 2004-11-2 08:41 | 显示全部楼层
这个错误不是很丢人吧,只是不够完善而已...你好象没看我7楼的话,,,


ang2本来就不一定等于0的,我使用pt3到pt2的角度,就是要让PT2来确定打断的方向,其实就是漏了如果PT2等于PT3的时候,方向就是直线2的方向而已......你图中的情况就可以完全当PT2等于PT3来处理
发表于 2004-11-2 10:40 | 显示全部楼层
但我会画出这样的图


本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-5-2 17:13 , Processed in 1.925619 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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