masterlong 发表于 2011-1-7 23:05:24

请帮忙推荐一个标注程序

我的专业很少用到标注
最近一个工程的甲方发神经
居然要求我们专业的图纸要精确定位
因为几乎不用
所以平时也没留意收集
哪位熟悉这类程序的帮忙推荐一个


要求很简单
框选一堆图块
从每个块插入点引出线性标注
操作过程中最好能有动态预览
没有也无所谓
合十感谢

461045462 发表于 2011-1-8 07:14:43

masterlong 发表于 2011-1-7 23:05 static/image/common/back.gif
我的专业很少用到标注
最近一个工程的甲方发神经
居然要求我们专业的图纸要精确定位


楼主的 “要求很简单 框选一堆图块 .....”
采用框选的形式还没有见过,期待着

ZZXXQQ 发表于 2011-1-8 09:59:02


;源自圆心坐标标注 明经huanghao35 2008.4.8
;块插入点坐标标注 明经 ZZXXQQ 2011.1 8
(defun c:edim (/ ds SS pt1 pt2 PC PY PX p1 p2 p3 P4)
(setvar "CMDECHO" 0)
(setq oldos (getvar "OSMODE"))
(setq oldzin (getvar "DIMZIN"))
(setvar "OSMODE" 0)
(setvar "DIMZIN" 0)
(setvar "LUPREC" 3)
(if (and(setq pt1 (getpoint "\n框选第一角点 :"))
         (setq pt2 (getcorner pt1 "\n另一角点 :"))
         (setq ss (ssget "W" pt1 pt2 '((0 . "INSERT")))))(progn
(setq ds (getdist "\n输入文字间隔 <5> :"))
(setq ds (if ds ds 5))
(setq pxmin (min (car pt1) (car pt2))
      pxmax (max (car pt1) (car pt2))
      pymin (min (cadr pt1) (cadr pt2))
      pymax (max (cadr pt1) (cadr pt2)))
(setq p1 (list pxmin pymin);尺寸原点
      p2 (list pxmin pymax)
      p3 (list pxmax pymax)
      p4 (list pxmax pymin))
(command ".UNDO" "BE" ".UCS" "_O" p1)
(setq pxx (trans (list (+ pxmax ds) (cadr p1)) 0 1))
(setq pyy (trans (list (car p1) (+ pymax ds)) 0 1))
(setq pt (trans p1 0 1))
(command "dimordinate" p1 pyy)
(command "dimcrdinate" p1 pxx)
(setq i 0)
(repeat (sslength ss)
   (setq PC (cdr (assoc 10 (entget (ssname ss i)))))
   (setq pyy (list (car pc) (+ pymax ds) 0.0))
   (setq pxx (list (+ pxmax ds) (cadr pc) 0.0))
   (setq px (trans px 0 1)   py (trans py 0 1))
   (setq pyy (trans pyy 0 1) pxx (trans pxx 0 1))
   (command "dimordinate" "ins" py pyy)
   (command "dimordinate" "ins" px pxx)
   (setq i (1+ i))
)
(command ".UCS" "_W" ".UNDO" "E")
))
(setvar "OSMODE" oldos)
(setvar "DIMZIN" oldzin)
(setvar "CMDECHO" 1)
(princ)
)

masterlong 发表于 2011-1-8 21:38:43

本帖最后由 masterlong 于 2011-1-8 21:39 编辑

对尺寸标注的缺乏了解
导致我的表述不清楚
Z斑的程序不是我要的

为了应付当前的需要
编了一个简陋的程序

(defun c:bd()
(setvar "cmdecho" 0)
(command "undo" "g")
;;(c:建筑标准标注)

(princ "\n选择块集合...")
(setq bks (ssget '((0 . "insert"))))
(setq i 0)
(setq inslist '())
(repeat (sslength bks)
(setq bkins (cdr (assoc 10 (entget (ssname bks i)))))
(if (= -1 (last (cdr (assoc 210 (entget (ssname bks i))))))
   (setq bkins (list (* -1 (car bkins)) (cadr bkins)))
)
(setq inslist (cons bkins inslist))
(setq i (1+ i))
)
(initget "H V")
(setq mode (getkword "\n指定标注方向水平(H)/垂直(V):"))
(cond
( (= mode "H")
   (setq inslist (vl-sort inslist '(lambda (p1 p2) (< (car p1) (car p2)))))
)
( (= mode "V")
   (setq inslist (vl-sort inslist '(lambda (p1 p2) (< (cadr p1) (cadr p2)))))
)
)
(command "dimlinear" "non" (nth 0 inslist) "non" (nth 1 inslist) pause)
(foreach x (cdr (cdr inslist))
(command "dimcontinue" "non" x "" "")
)
(command "undo" "e")
(princ)
)

请教Z斑
当图块的210组码的值为( 0 0 -1)时
要获取图块的实际插入点
有什么更好的办法没有

ZZXXQQ 发表于 2011-1-8 22:49:28

好象是X坐标是负值。你再看下组码。

masterlong 发表于 2011-1-9 00:30:29

是负值
除了程序里红字的代码
没有更简单直接的办法了吗

yxl88168 发表于 2011-3-29 21:58:32

看这个标注
是AMTONNY 的,很好的标注程序

yxl88168 发表于 2011-3-29 22:00:13

看这个标注
是AMTONNY 的,很好的标注程序

lisp爱好者 发表于 2011-4-21 19:49:48

支持下,用处不大。这个程序倒是可以改为线相交点实现框选自动标注

masterlong 发表于 2011-4-30 16:24:29

图中红色文字的代码是错误的
如果一个块A嵌套在另一个块内
炸开所有的嵌套得到最底层的块A
这时的块A的dxf10数值
并不仅仅只有“X坐标是负值”这一种可能
获取一个块的实际块心的代码应该是
(transblock_dxf10block_ent1)

所以地板贴里程序里红色的代码部分
应该改为
(setq bkins (trans bkins (ssname bks i) 1))
页: [1]
查看完整版本: 请帮忙推荐一个标注程序