乐筑天下

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

[编程交流] 如何选择一侧(即左侧

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 06:52:26 | 显示全部楼层 |阅读模式
大家好,
 
以前有相当数量的赖斯普鲁丁,但当我换了工作(十年前…)时,它就全丢了和LT。
现在我正试图写(重新创建)一个lisp,但我的记忆已经不是以前的样子了。。。这可能很简单,我试着在论坛上查找,但找不到。。。
 
我想要的是:有一条线,你选择起点和终点,你点击线的一边或另一边,在这条线的选中一边它画出一些东西。。。
见附件:一条线(pt1和pt2)和一个点,可以在这条线的任一侧(即,如果它是一条垂直线,则为左侧或右侧),我画了一个圆圈来表示两个可能的象限,在这种情况下为左侧和右侧。大多数线条是垂直的,但在某些情况下,线条可以处于不同的角度。
选择这三个点后,lisp将以设定的距离(以红色绘制)绘制一组与主线垂直和平行的线。
 
我的问题是,我无法思考如何选择线的哪一边。我很确定这很简单,但我不记得是怎么做的。
 
这就是我目前所拥有的。我可以选择三个点,我可以画线,但在计算角度时出现了一些错误,它画的线基本上不是我想要的位置。。。
 
  1. (defun C:HH()
  2. (defun RTD (nbrOfRadians)    ;convert to degrees
  3.   (* 180.0 (/ nbrOfRadians pi))
  4. );defun RTD
  5. (defun DTR (a)     ;convert to radians
  6.   (* pi (/ a 180.0))
  7. );defun DTR
  8.   (setq  OLDECHO (getvar "CMDECHO")  ;store system variables
  9.         OLDBLIP (getvar "BLIPMODE")
  10. OLDSNAP (getvar "OSMODE")
  11.   );setq
  12.   (setvar "CMDECHO" 0)
  13.   (setvar "BLIPMODE" 0)
  14.   (setq P1 nil     P2 nil     P3 nil     P4 nil );setq Zorgt dat P1 etc nil zijn
  15. (setq pt1(getpoint "\n Startpoint: "))  ;store base point
  16.     (setq pt2(getpoint "\n Endpoint: "))
  17. (setq a-rad1 (angle pt1 pt2))    ;angle in radians
  18. (setq a-deg1 (RTD a-rad1))       ;angle in degrees
  19. (setq pt3(getpoint "\n On which side of the line would like to draw?: "))
  20. ;
  21. (setq a-rad2 (angle pt1 pt3))    ;angle in radians
  22. (setq a-deg2 (RTD a-rad2))
  23.   (setq Diff-deg1-2 (- a-deg1 a-deg2))
  24.   (COND  ((< 90 Diff-deg1-2)   ;Als het links van de pt1-pt2 lijn is
  25.   (setq hoek1 (DTR 180.0))
  26.   (setq hoek2 (DTR 0.0))
  27.   (setq hoeka (RTD Hoek1))
  28.   (setq hoekb (RTD hoek2)))
  29.    ((> 90 Diff-deg1-2)  ;Als het rechts van de pt1-pt2 lijn is  
  30.   (setq hoek1 (DTR 0.0))
  31.   (setq hoek2 (DTR 180.0))
  32.   (setq hoeka (RTD hoek1))
  33.   (setq hoekb (RTD hoek2)))
  34. );end cond 1=links 2=rechts
  35. ;(setq hoek1 (+ a-rad1 hoek1))
  36. ;(setq  hoek2 (+ a-rad1 hoek2))
  37. ;(setq hoeka (RTD Hoek1))
  38. ;(setq hoekb (RTD hoek2))
  39.   (setq Lengte (distance pt1 pt2))
  40. (setq Lagen (/ (/ lengte 2) 60)); waarbij
  41.     (command "_UCS" "_n" "z" a-deg1)
  42.   (setvar "OSMODE" 0)
  43.       (setq  P1 (polar pt1 hoek1 165)
  44.      P2 (polar P1 (DTR 90.0) 60)
  45.      P3 (polar P2 hoek2 165)
  46.      P4 (polar P3 (DTR 90.0) 60)
  47. );setq
  48. (command "PLINE" pt1 "W" "0.0" "0.0" P1 P2 P3 P4""
  49. );command
  50. (setq cntr 1)   ;setup counter   
  51. (while (< cntr lagen)  ;loop until cntr is not less than lagen
  52. (command "copy" "last" "" pt1  P4
  53. );command
  54. (setq cntr(+ cntr 1)) ;increment the counter
  55.        );while
  56. (setq cntr 1)   ;Reset counter   
  57. (command "_UCS" "_p" "" );reset ucs to previous
  58. (setvar "OSMODE" OLDSNAP)
  59. (setvar "BLIPMODE" OLDBLIP)
  60. (setvar "CMDECHO" OLDECHO)
  61. (princ)
  62. );end defun
  63. (princ)

 
所以我的问题是,有人能解决我的问题吗?它在驱使我。。。我知道我很接近,但到目前为止。。。
 
谢谢你看!
 
 
 
如果有人想知道的话,我正在制作建筑物的比例模型,这些模型在细节上非常精细。这意味着每一块砖都必须到位。我有正确的图案填充来绘制砖的图案,但有一些规则是如何做角的,这不能在图案填充中捕捉到。通过更改图案填充边界,这个lisp将极大地帮助我实现这一点。
嘴唇应该做什么的例子。dxf
回复

使用道具 举报

1

主题

475

帖子

481

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 07:09:03 | 显示全部楼层
不同的方法
 
  1. (defun c:test (/       ent     obj     pt_pick pt1     osm_old pt_start
  2.        pt_end  pt2     num     pt3     pt4     pt5     pt6
  3.       )
  4. (vl-load-com)
  5. (setq ent  (entsel "\nSelect the line near the brick base : ")
  6. obj  (vlax-ename->vla-object (car ent))
  7. pt_pick  (cadr ent)
  8. pt1  (getpoint "\nPick the desired side: ")
  9. osm_old  (getvar "OSMODE")
  10. pt_start (vlax-curve-getStartPoint obj)
  11. pt_end  (vlax-curve-getEndPoint obj)
  12. pt2  (vlax-curve-getClosestPointTo obj pt1 T)
  13. num  (fix (- (/ (/ (vla-get-Length obj) 60) 2) 0.5))
  14. )
  15. (setvar "OSMODE" 0)
  16. (if (< (distance pt_end pt_pick) (distance pt_start pt_pick))
  17.    (progn
  18.      (setq pt_start pt_end
  19.     pt_end   (vlax-curve-getStartPoint obj)
  20.      )
  21.    )
  22. )
  23. (setq pt3 (polar pt_start (angle pt2 pt1) 165)
  24. pt4 (polar pt3 (angle pt_start pt_end) 60)
  25. pt5 (polar pt4 (angle pt1 pt2) 165)
  26. pt6 (polar pt5 (angle pt_start pt_end) 60)
  27. )
  28. (command "PLINE" pt_start "W" "0.0" "0.0" pt3 pt4 pt5 pt6 "")
  29. (repeat num (command "copy" "last" "" pt_start Pt6))
  30. (setvar "OSMODE" osm_old)
  31. (princ)
  32. )

 
希望有帮助
亨里克
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:33:50 | 显示全部楼层
这看起来是一个有趣的程序,所以我尝试了一个“动态”版本:
 
 
  1. [color=GREEN];; Dynamic Zig-Zag  -  Lee Mac[/color]
  2. ([color=BLUE]defun[/color] c:hh ( [color=BLUE]/[/color] ang dis ent gr1 gr2 inc len lst ocs pt1 pt2 spc tmp )
  3.    ([color=BLUE]setq[/color] spc  60.0 [color=GREEN];; Spacing[/color]
  4.          len 165.0 [color=GREEN];; Length[/color]
  5.    )   
  6.    ([color=BLUE]while[/color]
  7.        ([color=BLUE]progn[/color] ([color=BLUE]setvar[/color] 'errno 0) ([color=BLUE]setq[/color] ent ([color=BLUE]car[/color] ([color=BLUE]entsel[/color] [color=MAROON]"\nSelect Line: "[/color])))
  8.            ([color=BLUE]cond[/color]
  9.                (   ([color=BLUE]=[/color] 7 ([color=BLUE]getvar[/color] 'errno))
  10.                    ([color=BLUE]princ[/color] [color=MAROON]"\nMissed, try again."[/color])
  11.                )
  12.                (   ([color=BLUE]null[/color] ent)
  13.                    [color=BLUE]nil[/color]
  14.                )
  15.                (   ([color=BLUE]/=[/color] [color=MAROON]"LINE"[/color] ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 0 ([color=BLUE]setq[/color] ent ([color=BLUE]entget[/color] ent)))))
  16.                    ([color=BLUE]princ[/color] [color=MAROON]"\nSelected object is not a Line."[/color])
  17.                )
  18.                (   [color=BLUE]t[/color]
  19.                    ([color=BLUE]setq[/color] pt1 ([color=BLUE]trans[/color] ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 10 ent)) 0 1)
  20.                          pt2 ([color=BLUE]trans[/color] ([color=BLUE]cdr[/color] ([color=BLUE]assoc[/color] 11 ent)) 0 1)
  21.                          dis ([color=BLUE]distance[/color] pt1 pt2)
  22.                          inc ([color=BLUE]/[/color] [color=BLUE]pi[/color] 2.0)
  23.                          ang ([color=BLUE]angle[/color] pt1 pt2)
  24.                    )
  25.                    ([color=BLUE]princ[/color] [color=MAROON]"\nChoose Side [</>/-/+] <Exit>: "[/color])
  26.                    ([color=BLUE]while[/color]
  27.                        ([color=BLUE]progn[/color]
  28.                            ([color=BLUE]setq[/color] gr1 ([color=BLUE]grread[/color] [color=BLUE]t[/color] 15 0)
  29.                                  gr2 ([color=BLUE]cadr[/color] gr1)
  30.                                  gr1 ([color=BLUE]car[/color]  gr1)
  31.                            )
  32.                            ([color=BLUE]cond[/color]
  33.                                (   ([color=BLUE]or[/color] ([color=BLUE]=[/color] 3 gr1) ([color=BLUE]=[/color] 5 gr1))
  34.                                    ([color=BLUE]setq[/color] tmp pt1
  35.                                          inc ([color=BLUE]abs[/color] inc)
  36.                                    )
  37.                                    ([color=BLUE]if[/color] ([color=BLUE]minusp[/color] ([color=BLUE]sin[/color] ([color=BLUE]-[/color] ([color=BLUE]angle[/color] pt1 gr2) ang)))
  38.                                        ([color=BLUE]setq[/color] inc ([color=BLUE]-[/color] inc))
  39.                                    )
  40.                                    ([color=BLUE]redraw[/color])
  41.                                    ([color=BLUE]repeat[/color] ([color=BLUE]*[/color] 2 ([color=BLUE]fix[/color] ([color=BLUE]/[/color] ([color=BLUE]1+[/color] ([color=BLUE]/[/color] dis spc)) 2)))
  42.                                        ([color=BLUE]grdraw[/color] tmp ([color=BLUE]setq[/color] tmp ([color=BLUE]polar[/color] tmp ([color=BLUE]+[/color] ang inc) len)) 1 1)
  43.                                        ([color=BLUE]grdraw[/color] tmp ([color=BLUE]setq[/color] tmp ([color=BLUE]polar[/color] tmp ang spc)) 1 1)
  44.                                        ([color=BLUE]setq[/color] inc ([color=BLUE]-[/color] inc))
  45.                                    )
  46.                                    ([color=BLUE]=[/color] 5 gr1)
  47.                                )
  48.                                (   ([color=BLUE]=[/color] 2 gr1)
  49.                                    ([color=BLUE]cond[/color]
  50.                                        (   ([color=BLUE]or[/color] ([color=BLUE]=[/color] 45 gr2) ([color=BLUE]=[/color] 95 gr2))
  51.                                            ([color=BLUE]setq[/color] spc ([color=BLUE]*[/color] 0.9 spc))
  52.                                        )
  53.                                        (   ([color=BLUE]or[/color] ([color=BLUE]=[/color] 43 gr2) ([color=BLUE]=[/color] 61 gr2))
  54.                                            ([color=BLUE]setq[/color] spc ([color=BLUE]*[/color] 1.1 spc))
  55.                                        )
  56.                                        (   ([color=BLUE]or[/color] ([color=BLUE]=[/color] 46 gr2) ([color=BLUE]=[/color] 62 gr2))
  57.                                            ([color=BLUE]setq[/color] len ([color=BLUE]*[/color] 0.9 len))
  58.                                        )
  59.                                        (   ([color=BLUE]or[/color] ([color=BLUE]=[/color] 44 gr2) ([color=BLUE]=[/color] 60 gr2))
  60.                                            ([color=BLUE]setq[/color] len ([color=BLUE]*[/color] 1.1 len))
  61.                                        )
  62.                                        (   ([color=BLUE]or[/color] ([color=BLUE]=[/color] 32 gr2) ([color=BLUE]=[/color] 13 gr2))
  63.                                            [color=BLUE]nil[/color]
  64.                                        )
  65.                                        (   [color=BLUE]t[/color]   )
  66.                                    )
  67.                                )
  68.                            )
  69.                        )
  70.                    )
  71.                    ([color=BLUE]redraw[/color])
  72.                    ([color=BLUE]if[/color] ([color=BLUE]=[/color] 3 gr1)
  73.                        ([color=BLUE]progn[/color]
  74.                            ([color=BLUE]setq[/color] inc ([color=BLUE]abs[/color] inc)
  75.                                  ocs ([color=BLUE]trans[/color] '(0.0 0.0 1.0) 1 0 [color=BLUE]t[/color])
  76.                            )
  77.                            ([color=BLUE]if[/color] ([color=BLUE]minusp[/color] ([color=BLUE]sin[/color] ([color=BLUE]-[/color] ([color=BLUE]angle[/color] pt1 gr2) ang)))
  78.                                ([color=BLUE]setq[/color] inc ([color=BLUE]-[/color] inc))
  79.                            )
  80.                            ([color=BLUE]repeat[/color] ([color=BLUE]*[/color] 2 ([color=BLUE]fix[/color] ([color=BLUE]/[/color] ([color=BLUE]1+[/color] ([color=BLUE]/[/color] dis spc)) 2)))
  81.                                ([color=BLUE]setq[/color] lst ([color=BLUE]cons[/color] ([color=BLUE]cons[/color] 10 ([color=BLUE]trans[/color] pt1 1 ocs)) lst)
  82.                                      lst ([color=BLUE]cons[/color] ([color=BLUE]cons[/color] 10 ([color=BLUE]trans[/color] ([color=BLUE]setq[/color] pt1 ([color=BLUE]polar[/color] pt1 ([color=BLUE]+[/color] ang inc) len)) 1 ocs)) lst)
  83.                                      lst ([color=BLUE]cons[/color] ([color=BLUE]cons[/color] 10 ([color=BLUE]trans[/color] ([color=BLUE]setq[/color] pt1 ([color=BLUE]polar[/color] pt1 ang spc)) 1 ocs)) lst)
  84.                                      inc ([color=BLUE]-[/color] inc)
  85.                                )
  86.                            )
  87.                            ([color=BLUE]entmake[/color]
  88.                                ([color=BLUE]append[/color]
  89.                                    ([color=BLUE]list[/color]
  90.                                       '(000 . [color=MAROON]"LWPOLYLINE"[/color])
  91.                                       '(100 . [color=MAROON]"AcDbEntity"[/color])
  92.                                       '(100 . [color=MAROON]"AcDbPolyline"[/color])
  93.                                        ([color=BLUE]cons[/color] 90 ([color=BLUE]length[/color] lst))
  94.                                       '(070 . 0)
  95.                                    )
  96.                                    lst
  97.                                    ([color=BLUE]list[/color] ([color=BLUE]cons[/color] 210 ocs))
  98.                                )
  99.                            )
  100.                            [color=BLUE]nil[/color]
  101.                        )
  102.                    )
  103.                )
  104.            )
  105.        )
  106.    )
  107.    ([color=BLUE]princ[/color])
  108. )

 
上述操作也应在所有UCS和视图中成功执行。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 07:45:45 | 显示全部楼层
一种不同的方法,你不需要第二次选择想要的一面
 
在提示消息中,你说“拾取左手端”,这意味着哪个是上下,在v中,然后像上面的代码一样,比较到端的距离,并开始计算正确的“左手”端,通过一些练习,你习惯于拾取方向颠倒的线。
回复

使用道具 举报

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:04:34 | 显示全部楼层
大家好,谢谢你们的回复!这对我帮助很大。已经离开几天了,昨天看到了代码,但是我的acad机器够不着。。。等不及我回来测试代码了!
@嗯,席尔瓦,谢谢你,又好又短,正是我想要它做的!虽然这也意味着我需要阅读我的Vlisp。。。这肯定会帮助我。
 
@李还感谢你的努力,这看起来非常流畅,虽然我仍然需要深入研究,以找出这段代码中的内容!但是,能够在所见即所得模式下选择一个边,这是非常好的!
 
现在我需要尝试将其合并到我的Lisp程序中。谢谢大家
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 15:23 , Processed in 0.720664 second(s), 73 queries .

© 2020-2025 乐筑天下

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