明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[提问] 框选 求最大外框 的水平垂直 标注

[复制链接]
发表于 2022-7-1 05:08:40 | 显示全部楼层

大佬,如果想把这个标注位置改成左上角,改哪个代码呢

点评

请看15楼代码  发表于 2022-12-4 12:44
回复

使用道具 举报

发表于 2022-7-1 10:43:26 | 显示全部楼层

大师,我问一下  为什么会有这种情况,,,选择对象:
; 错误: 参数太多

点评

可能是代码复制错误,或者是字符编码有误  发表于 2022-12-4 12:45
回复

使用道具 举报

发表于 2022-11-27 18:25:43 | 显示全部楼层

这个插件可 厉害了,请问下作者还在吗,这个能不能做出批量标注。对象为块。

点评

请看15楼代码  发表于 2022-12-4 12:42
回复

使用道具 举报

发表于 2022-12-3 00:12:39 | 显示全部楼层

非常好的程序~但想要转左上角不会~~有点可惜
回复

使用道具 举报

发表于 2022-12-4 12:41:35 | 显示全部楼层
wuwubaibai 发表于 2022-12-3 00:12
非常好的程序~但想要转左上角不会~~有点可惜

源码在那里,改起来比较简单啊

随便改了下,其它的自己按需修改
  1. ;;;ss--选择集或图元
  2. ;;;oi--1左下,2右下,3右上,4左上
  3. (defun dimbox (ss   oi   /    d     h  lst  maxx maxy minx miny n
  4.          obj  pt1   pt2  pt3  pt4  pta  ptb  ptc  sc   x   y
  5.         )
  6.   (setq sc (getvar "dimscale"))
  7.   (setq h (getvar "dimtxt"))
  8.   (setq d (getvar "dimgap"))
  9.   (if (= (type ss) 'PICKSET)
  10.     (progn (repeat (setq n (sslength ss))
  11.        (setq obj (vlax-ename->vla-object (ssname ss (setq n (1- n)))))
  12.        (vla-getboundingbox obj 'x 'y)
  13.        (setq lst (cons (vlax-safearray->list y)
  14.            (cons (vlax-safearray->list x) lst)
  15.            )
  16.        )
  17.      )
  18.      (setq minx (car (vl-sort (mapcar 'car lst) '<))
  19.      miny (car (vl-sort (mapcar 'cadr lst) '<))
  20.      maxx (car (vl-sort (mapcar 'car lst) '>))
  21.      maxy (car (vl-sort (mapcar 'cadr lst) '>))
  22.      )
  23.     )
  24.     (progn (setq obj (vlax-ename->vla-object ss))
  25.      (vla-getboundingbox obj 'x 'y)
  26.      (setq x    (vlax-safearray->list x)
  27.      y    (vlax-safearray->list y)
  28.      minx (car x)
  29.      miny (cadr x)
  30.      maxx (car y)
  31.      maxy (cadr y)
  32.      )
  33.     )
  34.   )
  35.   (setq pt1 (list minx miny))
  36.   (setq pt2 (list maxx miny))
  37.   (setq pt3 (list maxx maxy))
  38.   (setq pt4 (list minx maxy))
  39.   (cond  ((= oi 1)
  40.    (setq pta pt4
  41.          ptb pt1
  42.          ptc pt2
  43.    )
  44.   )
  45.   ((= oi 2)
  46.    (setq pta pt1
  47.          ptb pt2
  48.          ptc pt3
  49.    )
  50.   )
  51.   ((= oi 3)
  52.    (setq pta pt2
  53.          ptb pt3
  54.          ptc pt4
  55.    )
  56.   )
  57.   ((= oi 4)
  58.    (setq pta pt3
  59.          ptb pt4
  60.          ptc pt1
  61.    )
  62.   )
  63.   )
  64.   (command "dimlinear"
  65.      pta
  66.      ptb
  67.      (polar pta (+ (* -0.5 pi) (angle pta ptb)) (* sc (+ d h h)))
  68.   )
  69.   (command "dimlinear"
  70.      ptb
  71.      ptc
  72.      (polar ptb (+ (* -0.5 pi) (angle ptb ptc)) (* sc (+ d h h)))
  73.   )
  74. )
  75. ;;;默认前提,当前标注样式为需要的标注样式
  76. ;;;默认前提,图层列表中有图层6
  77. ;;;外轮廓标注
  78. (defun c:test1 (/ oldla oldos ss)
  79.   (setq oldos (getvar "osmode"))
  80.   (setq oldla (getvar "clayer"))
  81.   (setvar "cmdecho" 0)
  82.   (setvar "osmode" 0)
  83.   (setvar "clayer" "6")
  84.   (prompt "\n选择需标注的门窗:")
  85.   (setq ss (ssget))
  86.   (dimbox ss 4)
  87.   (setvar "osmode" oldos)
  88.   (setvar "clayer" oldla)
  89.   (setvar "cmdecho" 1)
  90.   (princ)
  91. )
  92. ;;;多块外轮廓标注
  93. (defun c:test2 (/ oldla oldos ss n)
  94.   (setq oldos (getvar "osmode"))
  95.   (setq oldla (getvar "clayer"))
  96.   (setvar "cmdecho" 0)
  97.   (setvar "osmode" 0)
  98.   (setvar "clayer" "6")
  99.   (prompt "\n选择需标注的块:")
  100.   (setq ss (ssget '((0 . "insert"))))
  101.   (repeat (setq n (sslength ss))
  102.     (dimbox (ssname ss (setq n (1- n))) 4)
  103.   )
  104.   (setvar "osmode" oldos)
  105.   (setvar "clayer" oldla)
  106.   (setvar "cmdecho" 1)
  107.   (princ)
  108. )


回复

使用道具 举报

发表于 2022-12-4 13:27:30 | 显示全部楼层
x_s_s_1 发表于 2022-12-4 12:41
源码在那里,改起来比较简单啊

随便改了下,其它的自己按需修改

大佬,可否在命令行输入1左下,2右下,3右上,4左上  这样子四个方向都可以随意放置
回复

使用道具 举报

发表于 2022-12-4 13:29:46 | 显示全部楼层
x_s_s_1 发表于 2022-12-4 12:41
源码在那里,改起来比较简单啊

随便改了下,其它的自己按需修改

或者鼠标往哪个方向点就放置哪个位置     或者能否点一边就标一边的尺寸
回复

使用道具 举报

发表于 2022-12-4 15:44:39 | 显示全部楼层
本帖最后由 x_s_s_1 于 2022-12-4 15:45 编辑
甜兮兮 发表于 2022-12-4 13:29
或者鼠标往哪个方向点就放置哪个位置     或者能否点一边就标一边的尺寸

也是改几行代码就行,自己可以试试的,我是正好无聊,否者真懒得改

  1. ;;;ss--选择集
  2. ;;;pt--定位点
  3. (defun dimboxp (ss pt /  d h lst  maxx maxy minx miny n  obj pta ptb
  4.     ptc ptl  sc x y)
  5.   (setq sc (getvar "dimscale"))
  6.   (setq h (getvar "dimtxt"))
  7.   (setq d (getvar "dimgap"))
  8.   (repeat (setq n (sslength ss))
  9.     (setq obj (vlax-ename->vla-object (ssname ss (setq n (1- n)))))
  10.     (vla-getboundingbox obj 'x 'y)
  11.     (setq lst (cons (vlax-safearray->list y)
  12.         (cons (vlax-safearray->list x) lst)
  13.         )
  14.     )
  15.   )
  16.   (setq  minx (car (vl-sort (mapcar 'car lst) '<))
  17.   miny (car (vl-sort (mapcar 'cadr lst) '<))
  18.   maxx (car (vl-sort (mapcar 'car lst) '>))
  19.   maxy (car (vl-sort (mapcar 'cadr lst) '>))
  20.   ptl  (list (list minx miny)
  21.        (list maxx miny)
  22.        (list maxx maxy)
  23.        (list minx maxy)
  24.        )
  25.   pt   (car
  26.          (vl-sort  ptl
  27.       '(lambda (x y) (< (distance pt x) (distance pt y)))
  28.          )
  29.        )
  30.   n    (1+ (vl-position pt ptl))
  31.   ptl  (cons (last ptl) (reverse (cons (car ptl) (reverse ptl))))
  32.   pta  (nth (1- n) ptl)
  33.   ptb  (nth n ptl)
  34.   ptc  (nth (1+ n) ptl)
  35.   )
  36.   (command "dimlinear"
  37.      pta
  38.      ptb
  39.      (polar pta (+ (* -0.5 pi) (angle pta ptb)) (* sc (+ d h h)))
  40.   )
  41.   (command "dimlinear"
  42.      ptb
  43.      ptc
  44.      (polar ptb (+ (* -0.5 pi) (angle ptb ptc)) (* sc (+ d h h)))
  45.   )
  46. )
  47. ;;;默认前提,当前标注样式为需要的标注样式
  48. ;;;默认前提,图层列表中有图层6
  49. ;;;外轮廓标注,位置随点取
  50. (defun c:test1 (/ oldla oldos ss)
  51.   (setq oldos (getvar "osmode"))
  52.   (setq oldla (getvar "clayer"))
  53.   (setvar "cmdecho" 0)
  54.   (setvar "osmode" 0)
  55.   (setvar "clayer" "6")
  56.   (prompt "\n选择需标注的门窗:")
  57.   (setq ss (ssget))
  58.   (dimboxp ss (getpoint"\n拾取方向点:"))
  59.   (setvar "osmode" oldos)
  60.   (setvar "clayer" oldla)
  61.   (setvar "cmdecho" 1)
  62.   (princ)
  63. )

评分

参与人数 1明经币 +1 收起 理由
甜兮兮 + 1 很给力!

查看全部评分

回复

使用道具 举报

发表于 2022-12-4 16:38:18 | 显示全部楼层
x_s_s_1 发表于 2022-12-4 15:44
也是改几行代码就行,自己可以试试的,我是正好无聊,否者真懒得改

作者大哥,你这个插件真的很了不起,节省了很多时间,我爱你啊,好人一生平安,你要是留联系方式,我给你发个红包
回复

使用道具 举报

发表于 2022-12-5 20:20:45 | 显示全部楼层
本帖最后由 wuwubaibai 于 2022-12-5 20:24 编辑
x_s_s_1 发表于 2022-12-4 12:41
源码在那里,改起来比较简单啊

随便改了下,其它的自己按需修改

大大真是太感谢了
~后来我有试出来~用了笨方式被我瞎猫碰上死耗子~笑
~改成这样不知道会不会有啥错
     (setq  minx (car (vl-sort (mapcar 'car lst) '>)); >
     miny (car (vl-sort (mapcar 'cadr lst) '>)); >
     maxx (car (vl-sort (mapcar 'car lst) '<)); >
     maxy (car (vl-sort (mapcar 'cadr lst) '<)); >
~没想到大大又优化了~真是感谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 15:30 , Processed in 0.268799 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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