乐筑天下

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

[编程交流] 选择中点和端点d

[复制链接]

56

主题

346

帖子

68

银币

中流砥柱

Rank: 25

铜币
512
发表于 2022-7-5 23:04:21 | 显示全部楼层 |阅读模式
选择中点和端点绘制线。
 
 
有这样的例行公事吗
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 23:10:41 | 显示全部楼层
我有这个版本:
 
  1. (defun c:mlp ( / p1 p2 l ll p1p p2p a loop g p pp ppp10 pp11 ppp11 )
  2. (setq p1 (trans (getpoint "\nPick start point") 1 0))
  3. (setq p2 (trans (getpoint "\nPick end point" (trans p1 0 1)) 1 0))
  4. (setq l (entmakex (list '(0 . "LINE") (cons 10 p1) (cons 11 p2))))
  5. (setq ll (entget l))
  6. (setq ll (subst (cons 10 (mapcar '- p1 (mapcar '- p2 p1))) (assoc 10 ll) ll))
  7. (entmod ll)
  8. (entupd l)
  9. (prompt "\nENTER - continue stretching; ESC - keep drawn line")
  10. (getstring)
  11. (setq p1p (list (car (trans p1 0 1)) (cadr (trans p1 0 1)) 0.0))
  12. (setq p2p (list (car (trans p2 0 1)) (cadr (trans p2 0 1)) 0.0))
  13. (setq a (angle p1p p2p))
  14. (setq loop t)
  15. (while loop
  16.    (setq g (grread t 15 0))
  17.    (if (eq (car g) 5)
  18.      (progn
  19.        (setq p (cadr g))
  20.        (setq pp11 (inters p1p p2p p (polar p (+ a (* 0.5 pi)) 1.0) nil))
  21.        (setq ppp11 (inters (trans p1 0 1) (trans p2 0 1) pp11 (mapcar '+ pp11 '(0.0 0.0 1.0)) nil))
  22.        (setq ppp10 (mapcar '- (trans p1 0 1) (mapcar '- (trans ppp11 0 1) (trans p1 0 1))))
  23.        (setq ll (subst (cons 10 (trans ppp10 1 0)) (assoc 10 ll) ll))
  24.        (setq ll (subst (cons 11 (trans ppp11 1 0)) (assoc 11 ll) ll))
  25.        (entmod ll)
  26.        (entupd l)
  27.        (redraw)
  28.      )
  29.      (setq loop nil)
  30.    )
  31. )
  32. (princ)
  33. )

 
HTH,M.R。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 23:13:08 | 显示全部楼层
要使用动态图形,您将松开捕捉对象,下面是它
 
  1. (defun c:Test (/ c g 1p a d)
  2. ;;    Tharwat .7.May.2014        ;;
  3. (if (setq c (getpoint "\n Specify Midpoint :"))
  4.    (while (eq (car (setq g (grread t 15 0))) 5)
  5.      (redraw)
  6.      (grvecs (list -3
  7.                    c
  8.                    (setq 1p (polar c
  9.                                    (setq a (angle c (cadr g)))
  10.                                    (setq d (distance c (cadr g)))
  11.                             )
  12.                    )
  13.                    1p
  14.                    (setq 2p (polar 1p (+ a pi) (* d 2.)))
  15.              )
  16.      )
  17.    )
  18. )
  19. (if (eq (car g) 3)
  20.    (entmake (list '(0 . "LINE") (cons 10 1p) (cons 11 2p)))
  21. )
  22. (redraw)
  23. (princ)
  24. )
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 23:16:07 | 显示全部楼层
如果要使用(grread)进行快照,可以尝试以下操作:
 
  1. (defun c:mlpp ( / *error* _acapp _getosmode _grX _OLE->ACI _OLE->RGB _RGB->ACI _snap _polarangs _polar _ortho as ape osm g p1 p2 p3 p0 o p s len nlen )
  2. (vl-load-com)
  3. (defun *error* ( msg )
  4.    (if ape (setvar 'aperture ape))
  5.    (if as (setvar 'autosnap as))
  6.    (if osm (setvar 'osmode osm))
  7.    (if msg (prompt msg))
  8.    (princ)
  9. )
  10. (defun _acapp nil
  11.      (eval (list 'defun '_acapp 'nil (vlax-get-acad-object)))
  12.      (_acapp)
  13. )
  14. (defun _getosmode ( os / lst )
  15.      (foreach mode
  16.         '(
  17.              (0001 . "_end")
  18.              (0002 . "_mid")
  19.              (0004 . "_cen")
  20.              (0008 . "_nod")
  21.              (0016 . "_qua")
  22.              (0032 . "_int")
  23.              (0064 . "_ins")
  24.              (0128 . "_per")
  25.              (0256 . "_tan")
  26.              (0512 . "_nea")
  27.              (1024 . "_qui")
  28.              (2048 . "_app")
  29.              (4096 . "_ext")
  30.              (8192 . "_par")
  31.          )
  32.          (if (not (zerop (logand (car mode) os)))
  33.              (setq lst (cons "," (cons (cdr mode) lst)))
  34.          )
  35.      )
  36.      (apply 'strcat (cdr lst))
  37. )
  38. (defun _grX ( p s c / -s r j )
  39.      (setq -s (- s)
  40.             r (/ (getvar 'viewsize) (cadr (getvar 'screensize)))
  41.             j p
  42.      )
  43.      (grdraw (mapcar '+ j (list (* r -s) (* r -s))) (mapcar '+ j (list (* r s) (* r s))) c)
  44.      (grdraw (mapcar '+ j (list (* r -s) (* r (1+ -s)))) (mapcar '+ j (list (* r (1- s)) (* r s))) c)
  45.      (grdraw (mapcar '+ j (list (* r (1+ -s)) (* r -s))) (mapcar '+ j (list (* r s) (* r (1- s)))) c)
  46.      
  47.      (grdraw (mapcar '+ j (list (* r -s) (* r s))) (mapcar '+ j (list (* r s) (* r -s))) c)
  48.      (grdraw (mapcar '+ j (list (* r -s) (* r (1- s)))) (mapcar '+ j (list (* r (1- s)) (* r -s))) c)
  49.      (grdraw (mapcar '+ j (list (* r (1+ -s)) (* r s))) (mapcar '+ j (list (* r s) (* r (1+ -s)))) c)
  50.      p
  51. )
  52. (defun _OLE->ACI ( c )
  53.      (apply '_RGB->ACI (_OLE->RGB c))
  54. )
  55. (defun _OLE->RGB ( c )
  56.      (mapcar '(lambda ( x ) (lsh (lsh (fix c) x) -24)) '(24 16 )
  57. )
  58. (defun _RGB->ACI ( r g b / c o )
  59.      (if (setq o (vla-getinterfaceobject (_acapp) (strcat "autocad.accmcolor." (substr (getvar 'acadver) 1 2))))
  60.          (progn
  61.              (setq c (vl-catch-all-apply '(lambda ( ) (vla-setrgb o r g b) (vla-get-colorindex o))))
  62.              (vlax-release-object o)
  63.              (if (vl-catch-all-error-p c)
  64.                  (prompt (strcat "\nError: " (vl-catch-all-error-message c)))
  65.                  c
  66.              )
  67.          )
  68.      )
  69. )
  70. (defun _snap ( p osm )
  71.    (if (osnap p (_getosmode osm))
  72.      (osnap p (_getosmode osm))
  73.      p
  74.    )
  75. )
  76. (defun _polarangs ( ang / n k a l )
  77.    (if (/= ang 0.0)
  78.      (progn
  79.        (setq n (/ 360.1 (cvunit ang "radians" "degrees")))
  80.        (setq k -1.0)
  81.        (repeat (1+ (fix n))
  82.          (setq a (* (setq k (1+ k)) ang))
  83.          (setq l (cons a l))
  84.        )
  85.        l
  86.      )
  87.      (list 0.0)
  88.    )
  89. )
  90. (defun _polar ( p0 p flag ang / a b an )
  91.    (if flag
  92.      (progn
  93.        (setq a (car (vl-sort (_polarangs ang) '(lambda ( a b ) (< a (angle p0 p) b)))))
  94.        (setq b (last (vl-sort (_polarangs ang) '(lambda ( a b ) (< a (angle p0 p) b)))))
  95.        (if (< (abs (- (angle p0 p) a)) (abs (- (angle p0 p) b))) (setq an a) (setq an b))
  96.        (inters p0 (polar p0 an 1.0) p (polar p (+ an (* 0.5 pi)) 1.0) nil)
  97.      )
  98.      p
  99.    )
  100. )
  101. (defun _ortho ( p0 p flag )
  102.    (if flag
  103.      (_polar p0 p t (* 0.5 pi))
  104.      p
  105.    )
  106. )
  107. (setq p1 (getpoint "\nPick or specify mid point : "))
  108. (setvar 'orthomode 1)
  109. (setq ape (getvar 'aperture))
  110. (setvar 'aperture 40)
  111. (setq as (getvar 'autosnap))
  112. (setvar 'autosnap 31)
  113. (setq osm (getvar 'osmode))
  114. (setvar 'osmode 15359)
  115. (if (eq (getvar 'orthomode) 1) (setq o t) (setq o nil))
  116. (if (eq (logand (getvar 'autosnap)  8) (setq p t) (setq p nil))
  117. (if (eq (logand (getvar 'autosnap) 16) 16) (setq s t) (setq s nil))
  118. (while (not (or (eq (car (setq g (grread t 15 0))) 3) (eq (car g) 25) (eq (car g) 11)))
  119.    (redraw)
  120.    (if (listp (cadr g)) (setq p2 (cadr g) p3 (cadr g)))
  121.    (cond
  122.      ( (eq (cadr g) 15)
  123.        (if (eq o t) (setq o nil) (setq o t))
  124.      )
  125.      ( (eq (cadr g) 21)
  126.        (if (eq p t) (setq p nil) (setq p t))
  127.      )
  128.      ( (eq (cadr g) 6)
  129.        (if (eq s t) (setq s nil) (setq s t))
  130.      )
  131.    )
  132.    (cond
  133.      ( (and o p s)
  134.        (setq p2 (_snap (_ortho p1 p2 t) (getvar 'osmode)))
  135.      )
  136.      ( (and o (not p) s)
  137.        (setq p2 (_snap (_ortho p1 p2 t) (getvar 'osmode)))
  138.      )
  139.      ( (and (not o) p s)
  140.        (setq p2 (_snap (_polar p1 p2 t (getvar 'polarang)) (getvar 'osmode)))
  141.      )
  142.      ( (and (not o) (not p) s)
  143.        (setq p2 (_snap p2 (getvar 'osmode)))
  144.      )
  145.      ( (and o p (not s))
  146.        (setq p2 (_ortho p1 p2 t))
  147.      )
  148.      ( (and o (not p) (not s))
  149.        (setq p2 (_ortho p1 p2 t))
  150.      )
  151.      ( (and (not o) p (not s))
  152.        (setq p2 (_polar p1 p2 t (getvar 'polarang)))
  153.      )
  154.      ( (and (not o) (not p) (not s))
  155.        (setq p2 p2)
  156.      )
  157.    )
  158.    (if (not (equal p2 p3 1e-6))
  159.      (_grX p2 (atoi (getenv "AutoSnapSize")) (_OLE->ACI (if (= 1 (getvar 'cvport)) (atoi (getenv "Layout AutoSnap Color")) (atoi (getenv "Model AutoSnap Color")))))
  160.    )
  161.    (setq p0 (mapcar '- p1 (mapcar '- p2 p1)))
  162.    (grdraw p0 p2 1 1)
  163. )
  164. (entmake (list '(0 . "LINE") (cons 10 (trans p0 1 0)) (cons 11 (trans p2 1 0))))
  165. (setq len (distance p0 p2))
  166. (prompt (strcat "\nCurrent length is : " (rtos len 2 15)))
  167. (initget 6)
  168. (setq nlen (getdist (strcat "\nPick or specify new length <" (rtos len 2 15) "> : ")))
  169. (if nlen (command "_.scale" (entlast) "" "_non" p1 "_R" len nlen))  
  170. (redraw)
  171. (*error* nil)
  172. )
HTH,M.R。
回复

使用道具 举报

56

主题

346

帖子

68

银币

中流砥柱

Rank: 25

铜币
512
发表于 2022-7-5 23:18:49 | 显示全部楼层
 
谢谢你的Tharwat,代码不错。但是
1、无法输入行长。
2、无法切换正交和极轴。
回复

使用道具 举报

56

主题

346

帖子

68

银币

中流砥柱

Rank: 25

铜币
512
发表于 2022-7-5 23:20:48 | 显示全部楼层
 
谢谢你,马尔科,有三个问题。
1、仅使用正交模式。
2.将自动取消“自动捕捉设置”。
000425y84wv4232mdbmelj.png
 
3、无法输入行长度。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 23:26:09 | 显示全部楼层
 
1.你可以用F8键打开或关闭正交模式,用F10键你可以打开或关闭极轴追踪,用F3键你可以打开或关闭osnaps。。。
 
2.我不理解这一点-只需检查(logand(getvar'autosnap)=8和(logand(getvar'autosnap)16)=16。。。如果是这种情况,则注释掉行(setvar'autosnap 31)
 
3.是的,您不能输入长度,因为此代码使用(grread)获取终点。。。
 
M、 R。
回复

使用道具 举报

56

主题

346

帖子

68

银币

中流砥柱

Rank: 25

铜币
512
发表于 2022-7-5 23:29:19 | 显示全部楼层
嗨,塔瓦特和马尔科,谢谢,我真的需要这个(输入行长度),我希望你能为我优化它。可以Osnap,可以进入。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 23:30:39 | 显示全部楼层
我修改了上一个代码以接受长度输入。。。我希望这将帮助你现在。。。
 
M、 R。
回复

使用道具 举报

56

主题

346

帖子

68

银币

中流砥柱

Rank: 25

铜币
512
发表于 2022-7-5 23:32:58 | 显示全部楼层
 
谢谢你的辛勤工作,马尔科,但当你进入极地时,必须按F10+F8,
 
我已经习惯了……
000426e59dz4d33s54d547.png
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 02:57 , Processed in 0.442092 second(s), 74 queries .

© 2020-2025 乐筑天下

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