明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[基础] 求:圈动链带 线、文字动

[复制链接]
发表于 2014-7-1 08:46:49 | 显示全部楼层
langjs 发表于 2014-6-30 20:09
能加个F8沿Y轴移动。至于捕捉和批量,编程太复杂了还是算了吧

回复

使用道具 举报

 楼主| 发表于 2014-7-1 09:19:02 | 显示全部楼层
langjs 发表于 2014-6-30 20:09
能加个F8沿Y轴移动。至于捕捉和批量,编程太复杂了还是算了吧

能加一个是一个,得空麻烦给加一个吧,谢谢了
回复

使用道具 举报

发表于 2014-7-1 10:24:17 | 显示全部楼层
稍微修改一下,带正交的,带批量的程序来了。捕捉就算了,那玩意太复杂



;;; ==================
;;; 移动程序    by:langjs
;;; ==================
(defun c:tt (/ code d d0 data dis0 ent ent1 entc enttx gr i loop lst lst0 n name nameent nent pt pt0 pt1 pt2 pt3 ptlst r ss ss0 ss1 x
               x0 x1 y0 y1 )
  (defun #err001 (s)
    (command ".UNDO" "E") (command ".UNDO" "") (setq *error* $orr))
  (defun reent (ent ptlst / i nent x)
    (setq i -1  nent '())
    (foreach x ent
      (setq nent (append   nent
      (list (if (and (= (car x) 10) (/= (nth (setq i (1+ i))ptlst ) nil)) (cons 10 (nth i ptlst)) x ))))))
  (defun emod (ent i n)
    (subst (cons i n) (assoc i ent) ent ))
  (setvar "cmdecho" 0)
  (command ".UNDO" "BE")
  (setq $orr *error*)
  (setq *error* #err001)
  (prompt "\n选择圆:")
  (setq ss0 (ssget ":S" '((0 . "CIRCLE")))lst0 '())
  (repeat (setq j (sslength ss0))
    (setq ent (entget (setq namec (ssname ss0 (setq j (1- j)))))  pt (cdr (assoc 10 ent))
          r (cdr (assoc 40 ent))  lst '()  i 0  )
    (redraw namec 3)
    (repeat 359
      (setq lst (cons (* (/ i 180.0) pi) lst) i (1+ i)))
    (setq lst (mapcar' (lambda (i) (polar pt i (+ r 1))) lst ))
    (setq entc ent  ss (ssget "F" (list (polar pt 0.0 r) (polar pt pi r)) '((0 . "TEXT")))
          enttx (entget (ssname ss 0))  ss (ssget "CP" lst '((0 . "TEXT,CIRCLE,LWPOLYLINE"))) lst '())
    (repeat (setq i (sslength ss))
      (setq ent (entget (ssname ss (setq i (1- i)))))
      (if (= (cdr (assoc 0 ent)) "LWPOLYLINE")
        (progn
          (if (< (distance pt (setq pt1 (cdr (assoc 10 ent)))) (distance pt (setq pt2 (cdr (assoc 10 (reverse ent))))))
            (setq pt1 pt2))
          (setq d (angle pt pt1)pt2 (polar pt d r)pt3 (polar pt d (* 0.5 (+ (distance pt pt1) (distance pt pt2)))))
          (if (or(< d (* 0.5 pi))(> d (* 1.5 pi)))
            (setq pt3 (polar pt3 (- d (* 0.5 pi)) 200.0)) (setq pt3 (polar pt3 (+ d (* 0.5 pi)) 200.0)))
          (if (setq ss1 (ssget "F" (list (polar pt3 d 300) (polar pt3 (+ pi d) 300)) '((0 . "TEXT"))))
            (setq ent1 (entget (ssname ss1 0))  lst (cons (list pt1 ent ent1) lst))))))
    (setq lst0 (cons (list entc enttx lst) lst0)))
  (if (= (length lst0) 1)  (setq pt0 (cdr (assoc 10 (car (car lst0))))) (setq pt0 (getpoint "\n指定基点:")) )
  (entmake (list '(0 . "LINE") (cons 10 pt0) (cons 11 pt0)))
  (setq name (entlast)        nameent (entget name)        loop t )
  (prompt "\n指定位置:")
  (while loop
    (setq gr (grread t 15 0)  code (car gr)  data (cadr gr))
    (cond  ((= code 2)
        (redraw)
        (if (= data 15)
          (progn (if (= (getvar "ORTHOMODE") 0)
              (progn(prompt "<正交 开>")(setvar "orthomode" 1)) (progn(prompt "<正交 关>")(setvar "orthomode" 0))))))
      ((= code 3)(setq loop nil)        (entdel name)(command ".UNDO" "E"))
      ((= code 5)(if (= (getvar "ORTHOMODE") 1)
          (progn (setq x0 (car pt0) y0 (cadr pt0)  x1 (car data) y1 (cadr data))
            (if (> (abs (- x0 x1)) (abs (- y0 y1))) (setq data (list x1 y0)) (setq data (list x0 y1)))))
        (setq dis0 (distance pt0 data)   d0 (angle pt0 data))
        (entmod (emod nameent 11 (polar pt0 d0 dis0)))
        (foreach j lst0
          (setq entc (car j)enttx (cadr j)lst (caddr j)        pt (polar (cdr (assoc 10 entc)) d0 dis0)
                entc (emod entc 10 pt)        enttx (emod enttx 10 pt)enttx (emod enttx 11 pt))
          (entmod entc)  (entmod enttx)
          (foreach i lst
            (setq pt1 (car i)  ent (cadr i)  ent1 (caddr i)  d (angle pt pt1)
                  pt2 (polar pt d r)  ent (reent ent (list pt1 pt2)))
            (entmod ent)
            (setq pt3 (polar pt d (* 0.5 (+ (distance pt pt1) (distance pt pt2)))))
            (if (or  (< d (* 0.5 pi)) (> d (* 1.5 pi)))
              (setq pt3 (polar pt3 (- d (* 0.5 pi)) 100.0))(setq pt3 (polar pt3 (+ d (* 0.5 pi)) 100.0)  d (+ d pi)))
            (setq ent1 (emod ent1 10 pt3)  ent1 (emod ent1 11 pt3)  ent1 (emod ent1 50 d))
            (entmod ent1))))
      ((or (= code 11) (= code 25) )
        (setq loop nil)        (entdel name)        (command ".UNDO" "E")        (command ".UNDO" ""))
      (t )) t )
  (setq *error* $orr)
  (princ)
)

点评

我如果是个女的非得亲你大口!哈哈  发表于 2014-7-1 13:30

评分

参与人数 2明经币 +1 金钱 +50 收起 理由
freehand8008 + 50 你是最帅的!
新新小兵 + 1

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-7-1 13:26:55 | 显示全部楼层
langjs 发表于 2014-7-1 10:24
稍微修改一下,带正交的,带批量的程序来了。捕捉就算了,那玩意太复杂

GOOD!GOOD!GOOD!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-25 08:05 , Processed in 0.158925 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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