明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1878|回复: 9

[讨论] 各位高手求助看下这个程序如何修改!!!(如何让标注的界址点号从西北角开始顺时...

[复制链接]
发表于 2018-4-2 16:56:34 | 显示全部楼层 |阅读模式
本帖最后由 lhngxy 于 2018-4-4 08:09 编辑

(defun err(msg)
   (princ msg);"*cancel*")
   (restore)
)
(defun init()
   (command "_.undo" "be")
   (setq dimzin (getvar "dimzin"))
   (setvar "dimzin" 1)
   (setq os (getvar "osmode"))
   (setvar "osmode" 0)
   (setvar "cmdecho" 0)
   (setq errtmp *error*)
   (setq *error* err)
)
(defun restore()
   (setq *error* errtmp)
   (setvar "dimzin" dimzin)
   (setvar "osmode" os)
   (command "_.undo" "e")
)
(defun xl-sort (lst fun / nlst)
   (foreach n lst (setq nlst (xl-isort n nlst fun))))
(defun xl-isort (item lst fun / k nlst)
   (setq k T
         nlst (apply 'append (mapcar '(lambda (x)
                                        (if (and K ((eval fun) item x)) (progn (setq k nil) (list item x)) (list x))
                                        ) lst))
   )
   (if k (append lst (list item)) nlst)
)
(defun setcolor(sname color / sinf)
   (setq sinf (entget sname))
   (if (assoc 62 sinf)
     (setq sinf (subst (cons 62 color) (assoc 62 sinf) sinf))
     (setq sinf (append sinf (list (cons 62 color))))
   )
   (entmod sinf)
)
(defun MakeText(pt Height Ang str / dxf)
   (setq dxf '((0 . "TEXT") (100 . "AcDbEntity") (67 . 0) (410 . "Model")(8 . "JZP")(100 . "AcDbText")))
   (setq dxf (append dxf (list (cons 10 pt) (cons 40 height) (cons 50 Ang) (cons 1 str))))
   (setq dxf (append dxf '((41 . 0.8) (51 . 0.0) (71 . 0) (72 . 0)
                           (210 0.0 0.0 1.0) (100 . "AcDbText") (73 . 0))))
   (entmake dxf)
)
(defun MakeText2(pt Height Ang str / dxf)
   (setq dxf '((0 . "TEXT") (100 . "AcDbEntity") (67 . 0) (410 . "Model")(8 . "JZP")(100 . "AcDbText")(10 0.0 0.0 0.0)))
   (setq dxf (append dxf (list (cons 11 pt) (cons 40 height) (cons 50 Ang) (cons 1 str))))
   (setq dxf (append dxf '((41 . 0.8) (51 . 0.0) (71 . 0) (72 . 1)
                           (210 0.0 0.0 1.0) (100 . "AcDbText") (73 . 2))))
   (entmake dxf)
)
(defun MakeText3(pt Height Ang str / dxf)
   (setq dxf '((0 . "TEXT") (100 . "AcDbEntity") (67 . 0) (410 . "Model")(8 . "JZP")(100 . "AcDbText")(10 0.0 0.0 0.0)))
   (setq dxf (append dxf (list (cons 11 pt) (cons 40 height) (cons 50 Ang) (cons 1 (strcat "J" str)))))
   (setq dxf (append dxf '((41 . 0.8) (51 . 0.0) (71 . 0) (72 . 1)
                           (210 0.0 0.0 1.0) (100 . "AcDbText") (73 . 2))))
   (entmake dxf)
)
(defun OpPts(pts pt h scal / pti ptn ptc ang len params pts2 i)
   (setq pts_tmp nil)
   (if (equal (distance (car pts) (last pts)) 0 0.00000000001) (setq pts (cdr pts)))
   (setq pts2 (xl-sort pts '(lambda(e1 e2) (< (abs (- (angle pt e1) (/ pi 4))) (abs (- (angle pt e2) (/ pi 4)))))))
   
(setq i 1)
  (mapcar '(lambda(e)
              (MakeText3 (polar e (angle pt e) h) h 0.0 (itoa i))
              (setq i (1+ i))
            ) pts)
   (mapcar '(lambda(e)
              (MakeText2 (polar (cadr e) (+ (/ pi 2) (car e)) (* 0.75 h))
                h
                (if (and (> (car e) (/ pi 2.0)) (< (car e) (* pi 1.5)))
                         (- (car e) pi)
                  (car e)
                )
                (rtos (last e) 2 2)))
           params)
)
(defun GetVer(ent / pts ents)
   (while (/= (cdr (assoc 0 (setq ents (entget (setq ent (entnext ent)))))) "SEQEND")
     (setq pts (append pts (list (cdr (assoc 10 ents)))))
   )
   pts
)
(defun GETPL (ED / ENTS PTS)
   (setq ENTS (entget ED))
   (while (setq ENTS (member (assoc 10 ENTS) ENTS))
     (setq PTS (append PTS (list (cdar ENTS))))
     (setq ENTS (CDR ENTS))
   )
   PTS
)
(defun Order(pts / n pt ang angn angi angAll pt pti)
   (setq n (length pts))
   (setq pt (list (/ (apply '+ (mapcar 'car pts)) n)
                  (/ (apply '+ (mapcar 'cadr pts)) n)))
   (setq ang (angle pt (car pts)))
   (setq angAll 0)
   (foreach pti (append (cdr pts) (list(car pts)))
     (setq angn (angle pt pti))
     (setq angi (- angn ang))
     (cond
       ((> angi pi) (setq angi (- angi (* pi 2))))
       ((< angi (- pi)) (setq angi (+ angi (* pi 2))))
     )
     (setq angAll (+ angAll angi))
     (setq ang angn)
   )
   (cond
     ((equal angAll 0 1) (list pt nil))
     ((> angAll 0) (list pt nil))
     ((< angAll 0) (list pt t))   
   )
)
(defun DoubleM(ent / ents pt pts l h x y h2)
   (setq ents (entget ent))
   (if (= (cdr (assoc 0 ents)) "TEXT")
     (progn
       (setq pt (cdr (assoc 10 ents)))
       (setq pts (textbox ents))
       (setq l (caadr pts))
       (setq h (cdr (assoc 40 ents)))
       (setq x (+ l (* h 0.4)))
       (setq y (* h 0.7))
       (setq h2 (* h 0.5))
       (MakeText (list (+ (car pt) x) (+ (cadr pt) y)) h2 0 "2")
     )
   )
)

(defun c:zdt( / pts pt pti ptn ptc ang params)
   (init)
   (setq Scale (getstring "\n请输入比例尺<1:200>:"))
   (if (= Scale "")
     (progn
       (setq blc "1:200")
       (setq nScale 1)(setq h 0.45)
    )
     (progn
       (setq nScale (/ (atof scale) 200))
       (setq blc (strcat "1:" scale))
       (setq h (* 0.60 (/ (atof scale) 200) ))
    )
   )
   (setq ent (car  (entsel "\n请选择图形...")))
   (setq pts (getpl ent))
   (if (cadr (setq pt (Order (reverse pts))))
     (setq pts (reverse pts))
   )
   (setq pt (car pt))
   (setq xc (* 0.0 nscale))
  (command "_.pedit" ent "w" xc "")
   (setcolor ent 1)
   (OpPts pts pt h nscale)  
   (princ "\n\nEnd!")
   (restore)
   (princ)
)



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2018-4-2 20:22:56 | 显示全部楼层
  1. (defun c:zdt (/ pts wnp dil dis)
  2.   (setq        pts
  3.          (mapcar 'cdr
  4.                  (vl-remove-if
  5.                    (function (lambda (x) (/= (car x) 10)))
  6.                    (entget (car (entsel)))
  7.                  )
  8.          )
  9.   )
  10.   (or
  11.     (< (apply
  12.          '+
  13.          (mapcar
  14.            (function
  15.              (lambda (pt1 pt2)
  16.                (- (* (car pt1) (cadr pt2)) (* (cadr pt1) (car pt2)))
  17.              )
  18.            )
  19.            (cons (last pts) pts)
  20.            pts
  21.          )
  22.        )
  23.        0
  24.     )
  25.     (setq pts (reverse pts))
  26.   )
  27.   (setq wnp (list (apply 'min (mapcar 'car pts)) (apply 'max (mapcar 'cadr pts))))
  28.   (setq diL (mapcar (function (lambda (pt) (distance pt wnp))) pts))
  29.   (setq dis (vl-position (apply 'min diL) diL))
  30.   (or (= dis 0)
  31.       (repeat dis
  32.         (setq pts (append (cdr pts) (list (car pts))))
  33.       )
  34.   )
  35.   (setq dis 0)
  36.   (setq dil (append pts (list (car pts))))
  37.   (foreach pt pts
  38.     (entmakex
  39.       (list
  40.         '(0 . "TEXT")
  41.         '(100 . "AcDbEntity")
  42.         '(67 . 0)
  43.         '(8 . "0")
  44.         '(410 . "Model")
  45.         '(100 . "AcDbText")
  46.         '(10 0.0 0.0 0.0)
  47.         (cons 11 (polar pt (+ (angle pt (cadr dil)) (* pi 0.5)) 8))
  48.         (cons 40 5.0)
  49.         (cons 1 (strcat "J" (itoa (setq dis (1+ dis)))))
  50.         '(41 . 0.8)
  51.         '(51 . 0.0)
  52.         '(71 . 0)
  53.         '(72 . 1)
  54.         '(210 0.0 0.0 1.0)
  55.         '(100 . "AcDbText")
  56.         '(73 . 2)
  57.       )
  58.     )
  59.     (setq dil (cdr dil))
  60.   )
  61.   (princ)
  62. )
 楼主| 发表于 2018-4-3 22:26:30 | 显示全部楼层
本帖最后由 lhngxy 于 2018-4-4 08:09 编辑

高手感谢您的帮助,谢谢
发表于 2018-4-4 16:55:05 | 显示全部楼层
看着很不错的样子啊,学习学习。。。
发表于 2018-4-4 16:59:08 | 显示全部楼层
lhngxy 发表于 2018-4-3 22:26
高手感谢您的帮助,谢谢

会有字体编号重复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2018-4-4 17:43:52 | 显示全部楼层
7#  

应该是你的闭合线有重复节点把?
发表于 2018-10-28 08:31:47 | 显示全部楼层

看着很不错的样子啊,学习学习。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-19 02:58 , Processed in 0.152679 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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