明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: qyr_0_0

急寻一个画中心线的好方法或程序

[复制链接]
发表于 2021-3-1 18:31 | 显示全部楼层
  1. ;;--------------=={ Associative Centerlines }==---------------;;

  2. (defun c:cl ( / _line ss e c r l1 l2 )
  3.   (if
  4.     (and
  5.       (setq ss
  6.         (ssget
  7.           (list '(0 . "CIRCLE") '(-4 . "<NOT") (list -3 (list cl:app)) '(-4 . "NOT>"))
  8.         )
  9.       )
  10.       (or (tblsearch "APPID" cl:app) (regapp cl:app))
  11.     )
  12.     (progn
  13.       (defun _line ( p1 p2 h )
  14.         (entmakex
  15.           (list (cons 0 "LINE") (cons 10 p1) (cons 11 p2)
  16.             (list -3
  17.               (list cl:app
  18.                 (cons 1002 "{") (cons 1005 h) (cons 1002 "}")
  19.               )
  20.             )
  21.           )
  22.         )
  23.       )
  24.       (repeat (setq i (sslength ss))
  25.         (setq e  (entget (ssname ss (setq i (1- i))))
  26.               h  (cdr (assoc  5 e))
  27.               c  (cdr (assoc 10 e))
  28.               r  (* cl:ratio (cdr (assoc 40 e)))
  29.               l1 (_line (polar c 0. r) (polar c pi r) h)
  30.               l2 (_line (polar c (/ pi 2.) r) (polar c (/ (* 3. pi) 2.) r) h)
  31.         )
  32.         (entmod
  33.           (list (assoc -1 e)
  34.             (list -3
  35.               (list cl:app
  36.                 (cons 1002 "{")
  37.                 (cons 1005 (cdr (assoc 5 (entget l1))))
  38.                 (cons 1005 (cdr (assoc 5 (entget l2))))
  39.                 (cons 1002 "}")
  40.               )
  41.             )
  42.           )
  43.         )
  44.         (vlr-object-reactor (list (vlax-ename->vla-object (cdr (assoc -1 e)))) (list cl:app h)
  45.           (list
  46.             (cons :vlr-modified 'cl:circle:callback)
  47.           )
  48.         )
  49.         (vlr-object-reactor (mapcar 'vlax-ename->vla-object (list l1 l2)) (list cl:app h)
  50.           (list
  51.             (cons :vlr-modified 'cl:line:callback)
  52.           )
  53.         )
  54.       )
  55.     )
  56.   )
  57.   (princ)
  58. )

  59. ;;------------------------------------------------------------;;

  60. (defun c:clremove ( / _massoc ss fl i e r d h x )

  61.   (defun _massoc ( x l )
  62.     (if (setq a (assoc x l))
  63.       (cons (cdr a) (_massoc x (cdr (member a l))))
  64.     )
  65.   )
  66.   
  67.   (princ "\nSelect Circles to Remove Associativity <All>: ")
  68.   (setq fl (list '(0 . "CIRCLE") (list -3 (list cl:app))) i -1)
  69.   
  70.   (if
  71.     (setq ss
  72.       (cond
  73.         ( (ssget fl) )
  74.         ( (ssget "_X" fl) )
  75.       )
  76.     )
  77.     (while (setq e (ssname ss (setq i (1+ i)))) (setq e (entget e (list cl:app)))
  78.       (foreach r (cdar (vlr-reactors :vlr-object-reactor))
  79.         (if
  80.           (and
  81.             (setq d (vlr-data r))
  82.             (listp d)
  83.             (eq cl:app (car d))
  84.             (or (not (cadr d)) (eq (cdr (assoc 5 e)) (cadr d)))
  85.           )
  86.           (vlr-remove r)
  87.         )
  88.       )
  89.       (foreach h (_massoc 1005 (cdadr (assoc -3 e)))
  90.         (if (setq x (entget (handent h)))
  91.           (entmod (list (assoc -1 x) (list -3 (list cl:app))))
  92.         )
  93.       )
  94.       (entmod (list (assoc -1 e) (list -3 (list cl:app))))
  95.     )
  96.   )
  97.   (princ)
  98. )      

  99. ;;------------------------------------------------------------;;

  100. (defun cl:circle:callback ( owner reactor params / xtyp xval c r )
  101.   (if
  102.     (and
  103.       (vlax-read-enabled-p owner)
  104.       (progn (vla-getxdata owner cl:app 'xtyp 'xval) xval)
  105.       (setq
  106.         c (vlax-get owner 'center)
  107.         r (* cl:ratio (vlax-get owner 'radius))
  108.       )
  109.     )
  110.     (mapcar
  111.       (function
  112.         (lambda ( h a )
  113.           (if (or (entget (setq h (handent h))) (entdel h))
  114.             (entmod
  115.               (list (cons -1 h) (cons 10 (polar c a r)) (cons 11 (polar c (+ a pi) r)))
  116.             )
  117.           )
  118.         )
  119.       )
  120.       (cddr (mapcar 'vlax-variant-value (vlax-safearray->list xval))) (list 0. (/ pi 2.))
  121.     )
  122.   )
  123.   (princ)
  124. )

  125. ;;------------------------------------------------------------;;

  126. (defun cl:line:callback ( owner reactor params )
  127.   (setq *data (list owner reactor))
  128.   (vlr-command-reactor (list cl:app)
  129.     (list
  130.       (cons :vlr-commandended     'cl:line:modify)
  131.       (cons :vlr-commandcancelled 'cl:line:cancelled)
  132.       (cons :vlr-commandfailed    'cl:line:cancelled)
  133.     )
  134.   )
  135.   (vlr-remove reactor)
  136.   (princ)  
  137. )

  138. ;;------------------------------------------------------------;;

  139. (defun cl:line:modify ( reactor params / xtyp xval h ) (vlr-remove reactor)
  140.   (if
  141.     (and *data (not (vlax-erased-p (car *data))) (progn (vla-getxdata (car *data) cl:app 'xtyp 'xval) xval)   
  142.       (or
  143.         (entget
  144.           (setq h
  145.             (handent
  146.               (caddr
  147.                 (mapcar 'vlax-variant-value (vlax-safearray->list xval))
  148.               )
  149.             )
  150.           )
  151.         )
  152.         (entdel h)
  153.       )
  154.     )
  155.     (progn
  156.       (cl:circle:callback (vlax-ename->vla-object h) nil nil)
  157.       (vlr-add (cadr *data))
  158.       (setq *data nil)
  159.     )
  160.   )   
  161.   (princ)
  162. )

  163. ;;------------------------------------------------------------;;

  164. (defun cl:line:cancelled ( reactor params ) (vlr-remove reactor)
  165.   (if *data
  166.     (progn
  167.       (vlr-add (cadr *data))
  168.       (setq *data nil)
  169.     )
  170.   )
  171.   (princ)
  172. )

  173. ;;------------------------------------------------------------;;

  174. (
  175.   (lambda ( / r d s i e o xtyp xval )
  176.     (foreach r (cdar (vlr-reactors :vlr-object-reactor))
  177.       (if (and (setq d (vlr-data r)) (listp d) (eq cl:app (car d)))
  178.         (vlr-remove r)
  179.       )
  180.     )
  181.     (if (setq s (ssget "_X" (list '(0 . "CIRCLE") (list -3 (list cl:app)))))
  182.       (repeat (setq i (sslength s))
  183.         (setq e (ssname s (setq i (1- i))))
  184.         (vlr-object-reactor (list (setq o (vlax-ename->vla-object e))) (list cl:app (cdr (assoc 5 (entget e))))
  185.           (list
  186.             (cons :vlr-modified 'cl:circle:callback)
  187.           )
  188.         )
  189.         (vla-getxdata o cl:app 'xtyp 'xval) (setq xval (mapcar 'vlax-variant-value (vlax-safearray->list xval)))
  190.         (vlr-object-reactor
  191.           (mapcar
  192.             (function
  193.               (lambda ( h )
  194.                 (or (entget (setq h (handent h))) (entdel h)) (vlax-ename->vla-object h)
  195.               )
  196.             )
  197.             (list (caddr xval) (cadddr xval))
  198.           )
  199.           (list cl:app (cdr (assoc 5 (entget e)))) (list (cons :vlr-modified 'cl:line:callback))
  200.         )
  201.       )
  202.     )
  203.   )
  204. )

  205. (vl-load-com) (princ)

  206. ;;------------------------------------------------------------;;
  207. ;;                         End of File                        ;;
  208. ;;------------------------------------------------------------;;
发表于 2022-2-9 19:44 | 显示全部楼层

加载你的程序了,出错:AutoCAD 变量设置被拒绝: "cmdecho" nil
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 21:54 , Processed in 0.264084 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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