乐筑天下

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

[编程交流] 理论和实际X点

[复制链接]

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 16:46:34 | 显示全部楼层
我的尝试对命令调用有一些乐趣,但可能需要
考虑osmode angdir mirrtext等。。
 
  1. [color="green"];; Make Angle Readable by: ymg  [/color]
  2. (defun MakeReadable (a)
  3. (setq a (rem (+ a pi pi) (+ pi pi)))
  4. (rem (if (< (* pi 0.5) a (* pi 1.5))
  5. (+ a pi)
  6. a
  7. )
  8.       (+ pi pi)
  9.       )
  10. )
  11. (defun _mirror (x / en ie)[color="green"] ;*global variable= s & ip[/color]
  12. [color="green"] ;simply calling standard command "mirror" to manipulate or flip the reference annotation[/color]
  13.    (cons 'progn
  14.   (list        (cons 'setq '(ie 0))
  15.         (cons 'repeat
  16.               (list (sslength s)
  17.                     (cons 'vl-cmdf
  18.                           (list        "_.mirror"
  19.                                 '(setq en (ssname s ie))
  20.                                 ""
  21.                                 (cons 'list ip)
  22.                                 (cons 'polar (list (cons 'list ip) x 1.0))
  23.                                 "Y"
  24.                                 )
  25.                           )
  26.                     (cons 'setq '(ie (1+ ie)))
  27.                     )
  28.               )
  29.         )
  30.   )
  31.    ) ;_ end of defun
  32. (defun delta (p1 p2 ip / xy id dxy s i a l e)
  33. ;hanhphuc
  34.      (setq xy     '((p) (list (car p) (cadr p)))
  35.     id        (mapcar        ''((x) (equal x (apply 'mapcar (cons '>= (mapcar 'xy (list p2 p1))))))
  36.                 '((T T) (nil T) (nil nil) (T nil))
  37.                 )
  38.    
  39.     dxy        (mapcar '- p1 p2)
  40.    
  41.     s        (apply ''((txh pt dX dY / ss next ro yd p)
  42.                   (setvar 'osmode 0)
  43.                   (setq
  44.                    yd
  45.                    (getvar 'ucsydir)
  46.                    ro
  47.                    (MakeReadable
  48.                     (if
  49.                      (equal (car yd) 0.0 1e-10)
  50.                      0.0
  51.                      (atan (/ (car yd) (cadr yd)))
  52.                      )
  53.                     )
  54.                    )
  55.                   
  56. [color="green"] ; Draw arrow by standard command: PLINE [/color]
  57.                   (vl-cmdf
  58.                    "_PLINE"
  59.                    (list (car pt) (+ (cadr pt) (* 2. txh)))
  60.                    "w"
  61.                    0.0
  62.                    (* 0.3 txh)
  63.                    (list (car pt) (+ (cadr pt) txh))
  64.                    "w"
  65.                    0.0
  66.                    0.0
  67.                    pt
  68.                    "w"
  69.                    0.0
  70.                    0.0
  71.                    (list (+ (car pt) txh) (cadr pt))
  72.                    "w"
  73.                    (* 0.3 txh)
  74.                    0.0
  75.                    (list (+ (car pt) (* 2. txh)) (cadr pt))
  76.                    ""
  77.                    ) ; command
  78.                   
  79.                   (setq next (ssadd))
  80.                   (foreach
  81.                    ss
  82.                    (vl-list*
  83.                     (entlast)
  84.                     (mapcar
  85.                      ''((a b c d)
  86.                         (entmakex
  87.                          (mapcar
  88.                           'cons
  89.                           '(0 1 8 10 11 40 50 62 72 73)
  90.                           (list "TEXT" a "DIFF" (setq p (polar (trans pt 1 0) (- b ro) c)) p txh (- d ro) 256 1 2)
  91.                           )
  92.                          )
  93.                         )
  94.                      (list dY dX)
  95.                      (list  (* pi 0.5) 0.)
  96.                      (list (* 4.0 txh) (* 4.0 txh))
  97.                      (list (* pi 0.5) 0.0)
  98.                      
  99.                      ) ; mapcar  
  100.                     ) ; vl-list*
  101.                    (ssadd ss next)
  102.                    )
  103.                   next
  104.                   )
  105.                (vl-list* (getvar 'textsize)
  106.                          ip
  107.                          (mapcar ''((f) (rtos (abs (* (f dxy) 1000.)) 2 0)) (list car cadr))
  108.                          )
  109.                )
  110.     )
  111.      (eval (cons 'cond
  112.           (vl-list* (list (nth 0 id) T)
  113.                     (mapcar ''((a b)
  114.                                (list
  115.                                 (setq i (nth a id))
  116.                                 (_mirror b)
  117.                                 (if
  118.                                  (and i (nth 2 id))
  119.                                  (_mirror (* pi 0.5))
  120.                                  )
  121.                                 )
  122.                                )
  123.                             '(1 2 3)
  124.                             (list (* pi 0.5) 0.0 pi)
  125.                             )
  126.                     )
  127.           )
  128.     ) ;eval
  129.     (repeat (setq i (sslength s))
  130.    (setq e (ssname s (setq i (1- i)))
  131.   l (entget e)
  132.   a (cdr (assoc 50 l))
  133.   )
  134.    (if        (assoc 1 l)
  135.      (entmod (subst (cons 50 (MakeReadable a)) (assoc 50 l) l))
  136.      )
  137.    ) ;repeat
  138.      )
  139. (defun c:test (/ p1 p2 p3 )
  140. (terpri)
  141. (while (and (setq p1 (getpoint "\rTheoretical point..       "))
  142.       (setq p2 (getpoint p1 "\rActual point..            "))
  143.       (setq p3 (getpoint p2 "\rPlacing arrow..           "))
  144.       )
  145.    (delta p1 p2 p3)
  146.    )
  147. (princ)
  148. )
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:51:48 | 显示全部楼层
另一个:
  1. (defun c:foo (/ _text d p1 p2 s)
  2. (defun _text (p h s)
  3.    (entmakex (list '(0 . "TEXT")
  4.             '(100 . "AcDbEntity")
  5.             '(67 . 0)
  6.             '(62 . 1)
  7.             '(8 . "text")
  8.             '(100 . "AcDbText")
  9.             (cons 10 p)
  10.             (cons 40
  11.                   (if (> (getvar 'dimscale) 0)
  12.                     (* h (getvar 'dimscale))
  13.                     h
  14.                   )
  15.             )
  16.             (cons 1 (vl-princ-to-string s))
  17.             '(50 . 0.0)
  18.             '(41 . 1.0)
  19.             '(51 . 0.0)
  20.             '(7 . "Standard")
  21.             '(71 . 0)
  22.             '(72 . 1)
  23.             (cons 11 p)
  24.             '(100 . "AcDbText")
  25.             '(73 . 2)
  26.       )
  27.    )
  28. )
  29. (if (setq s (ssget '((0 . "point"))))
  30.    (progn (setq s (mapcar '(lambda (x) (cdr (assoc 10 (entget x))))
  31.                    (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
  32.            )
  33.          s (vl-sort s '(lambda (a b) (< (cadr a) (cadr b))))
  34.    )
  35.    (while (cadr s)
  36.      (setq p1 (car s))
  37.      (setq
  38.        p2 (car (vl-sort (setq s (cdr s)) '(lambda (a b) (< (distance p1 a) (distance p1 b)))))
  39.      )
  40.      (setq d (mapcar 'abs (mapcar '- p1 p2)))
  41.      (entmakex (list '(0 . "LWPOLYLINE")
  42.                      '(100 . "AcDbEntity")
  43.                      '(67 . 0)
  44.                      '(62 .
  45.                      '(8 . "difference")
  46.                      '(100 . "AcDbPolyline")
  47.                      '(90 . 3)
  48.                      (cons 10 p1)
  49.                      (cons 10 (list (car p2) (cadr p1)))
  50.                      (cons 10 p2)
  51.                )
  52.      )
  53.      (_text p1 0.1 (car d))
  54.      (_text p2 0.1 (cadr d))
  55.      (setq s (vl-remove p2 s))
  56.    )
  57.    )
  58. )
  59. (princ)
  60. )
回复

使用道具 举报

5

主题

18

帖子

13

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 16:55:08 | 显示全部楼层
 
你好
 
这是olmosta完成的,但,是否可以这样编辑代码:activ osnap保持不变,数字始终是同一个方向!
 
最好的
马格斯
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 21:18 , Processed in 0.394678 second(s), 57 queries .

© 2020-2025 乐筑天下

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