zfsaaa 发表于 2010-6-19 09:59:00

[求助]请问如何使下列程序标注值3米是3.00而不是3000?

请问如何使下列程序标注值3米是3.00而不是3000?

(defun c:bz1( / pt1 pt2 ss sname sinf ent)
(setq pt1 (getpoint "Get the point:"))
(setq ss (ssget pt1))
(if ss
    (progn
      (setq sname (ssname ss 0))
      (setq sinf (entget sname))
      (setq ent (cdr (assoc 0 sinf)))
    )
    (setq ent "Nothing")
)
(cond
    ((= (strcase ent 0) "circle") (command "_dimdiameter" (list sname pt1) pause))
    ((= (strcase ent 0) "arc") (command "_dimdiameter" (list sname pt1) pause))
    (t
   (setq pt2 (getpoint pt1 "Etner the second point:"))
   (if (or (equal (car pt1) (car pt2) 0.01) (equal (cadr pt1) (cadr pt2) 0.01))
       (command "_dimlinear" pt1 pt2 pause)
       (command "_dimaligned" pt1 pt2 pause)
   )
    )
)
)

(defun C:bz2 (/    HOLDOSMODE      HOLDECHO HOLDBLIP P340
    P340ENTGET10   A1      AAA1   A      AAA
    AAL    AAPT   Q%Q      Q%Q1   Q%Q11
   )
(setq HOLDECHO (getvar "cmdecho"))
(setq HOLDBLIP (getvar "blipmode"))
(setq HOLDOSMODE (getvar "osmode"))
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setvar "osmode" 0)
(while (null AAA1)
    (setq AAA1 (nentsel))
)
(setq AAL (length AAA1))
(cond
    ((/= AAL 2)
   (setq AAL (length (last AAA1)))
   (if (/= AAL 1)
       (progn
(setq A1 (car AAA1))
(setq AAPT (cadr AAA1))
(setq AAA (entget A1))
(setq Q%Q (cdr (assoc 0 AAA)))
(setq Q%Q11 (cdr (assoc 0 (entget (car (last AAA1))))))
(if (= Q%Q11 "DIMENSION")
    (setq Q%Q NIL)
)
(setq Q%Q1 (cdr (assoc 0 (entget (car AAA1)))))
(cond
    ((and (/= Q%Q1 "LINE")
   (/= Q%Q1 "CIRCLE")
   (/= Q%Q1 "ARC")
   (/= Q%Q1 "MLINE")
   (/= Q%Q1 "VERTEX")
   )
   (setq Q%Q NIL)
    )
)
       )
       (progn
(setq A1 (car (last AAA1)))
(setq AAPT (cdr AAA1))
(setq AAA (entget A1))
(setq Q%Q (cdr (assoc 0 AAA)))
       )
   )
    )
    ((= AAL 2)
   (setq A1 (car AAA1))
   (setq AAPT (cadr AAA1))
   (setq AAA (entget A1))
   (setq Q%Q (cdr (assoc 0 AAA)))
    )
)
(cond
    ((or (= Q%Q "LINE") (= Q%Q "MLINE"))
   (command "_.DIMLINEAR" "" AAPT)
    )
    ((= Q%Q "CIRCLE") (command "_.DIMDIAMETER" AAPT))
    ((= Q%Q "ARC") (command "_.DIMRADIUS" AAPT))
    ((= Q%Q "DIMENSION") (command "_.DIMTEDIT" A1))
    ((= Q%Q "LEADER")
   (setq P340 (cdr (assoc 340 (entget A1))))
   (setq P340ENTGET10 (cdr (assoc 10 (entget P340))))
   (command "_.move" P340ENTGET10 "")
    )
    ((= Q%Q "MTEXT") (command "_.DDEDIT" AAPT))
    ((= Q%Q "TEXT") (command "_.DDEDIT" AAPT))
    ((= Q%Q "HATCH")
   (initdia 1)
   (command "_.HATCHEDIT" AAPT)
   (initdia 0)
    )
    ((= Q%Q "ATTDEF") (command "_.DDEDIT" AAPT))
    ((= Q%Q "ATTRIB") (command "_.DDATTE" AAPT))
    ((= Q%Q "SPLINE") (command "_.SPLINEDIT" AAPT))
    ;|
    ((= Q%Q "TOLERANCE")
   (if (wcmatch (getvar "acadver") "15*")
       (progn
(if (not DDMODIFYY)
    (load "ddmodifyy")
)
(DDMODIFYY A1)
       )
       (progn
(if (not DDMODIFY)
    (load "ddmodify")
)
(DDMODIFY A1)
       )
   )
    )|;
    ((or (= Q%Q "VERTEX")
(= Q%Q "LWPOLYLINE")
(= Q%Q "POLYLINE")
   )
   (setq AA (entget (car AAA1)))
   (setq AAPT (cadr AAA1))
   (setq AAA (cdr (assoc 42 AA)))
   (if (= AAA 0)
       (command "_.DIMLINEAR" "" AAPT)
       (command "_.DIMRADIUS" AAPT)
   )
    )
    ((= Q%Q "INSERT")
   (setq AA (entget (car AAA1)))
   (setq AAPT (cadr AAA1))
   (setq Q%Q (cdr (assoc 0 AA)))
   (cond
       ((or (= Q%Q "LINE") (= Q%Q "MLINE"))
(command "_.DIMLINEAR" "" AAPT)
       )
       ((= Q%Q "CIRCLE") (command "_.DIMDIAMETER" AAPT))
       ((= Q%Q "ARC") (command "_.DIMRADIUS" AAPT))
       ((or (= Q%Q "VERTEX")
   (= Q%Q "LWPOLYLINE")
   (= Q%Q "POLYLINE")
)
(setq AA (entget (car AAA1)))
(setq AAPT (cadr AAA1))
(setq AAA (cdr (assoc 42 AA)))
(if (= AAA 0)
   (command "_.DIMLINEAR" "" AAPT)
   (command "_.DIMRADIUS" AAPT)
)
       )
       (t
(prompt "\n不能编辑及标注区块中之非线类")
       )
   )
    )
    (t
   (prompt "\n不能编辑及标注区块中之非线类")
    )
)
(setvar "blipmode" HOLDBLIP)
(setvar "osmode" HOLDBLIP)
(setvar "cmdecho" HOLDECHO)
(princ)
)


ZZXXQQ 发表于 2010-6-19 11:30:00

第一个程序改了一下,第二个可自行更改。

(defun c:bz1( / pt1 pt2 ss sname sinf ent)
(setq pt1 (getpoint "\nGet the point:"))
(if (setq ss (ssget pt1)) (progn
(setq sname (ssname ss 0))
(setq sinf (entget sname))
(setq ent (cdr (assoc 0 sinf)))
(setq oldlfac (getvar "DIMLFAC")) ;读入旧参数
(setvar "DIMLFAC" 0.001)         ;设置新参数
(cond
   ((= ent "CIRCLE") (command "_dimdiameter" (list sname pt1) pause))
   ((= ent "ARC") (command "_dimdiameter" (list sname pt1) pause))
   (t
    (setq pt2 (getpoint pt1 "\nEtner the second point:"))
    (if (or (equal (car pt1) (car pt2) 0.01) (equal (cadr pt1) (cadr pt2) 0.01))
   (command "_dimlinear" pt1 pt2 pause)
   (command "_dimaligned" pt1 pt2 pause)
    )
   )
)
(setvar "DIMLFAC" oldlfac)   ;恢复旧参数
)
(setq ent "Nothing")
)
)


xhq1954425 发表于 2010-6-20 07:33:00

<p><font face="Verdana" color="#da2549"><b>路过……看到ZZXXQQ版主诲人不倦!谢谢!</b></font></p>

zfsaaa 发表于 2010-6-20 23:14:00

<strong><font color="#0000ff">ZZXXQQ版主你调的程序还有个问题,输出的标注只有整数,如何调整为有2位小数的标注?谢谢!</font></strong>

ZZXXQQ 发表于 2010-6-21 21:58:00

加上一行(setvar "DIMZIN" 0)试试
页: [1]
查看完整版本: [求助]请问如何使下列程序标注值3米是3.00而不是3000?