明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6828|回复: 33

尺寸等分

  [复制链接]
发表于 2013-3-21 09:13 | 显示全部楼层 |阅读模式
请问将上面的尺寸标注改为多个等分显示,谢谢

本帖子中包含更多资源

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

x
发表于 2013-3-25 21:10 | 显示全部楼层
论坛早就有了:
;等分尺寸(dwg001)
(defun c:dfcc(/ ang dist dxf ent i j obj p0 p1 p2 r)
(command "undo" "be")
(setq J (getint "\n请输入等分数:")
obj (entsel "\n请选择需等分的标注:")
ent (car obj)
dxf (entget ent))
(if (and obj (> J 1) (= (cdr (assoc 0 dxf)) "DIMENSION"))
(progn (setq i 0 r 0)
(setq P0 (cdr (assoc 10 dxf))
P2 (cdr (assoc 13 dxf))
P1 (cdr (assoc 14 dxf)))
(setq ang (angle P1 P2))
(setq dist (/ (distance P1 P2) J))
(setq P2 (polar P1 ang dist))
(command "dim1" "ali" P1 P2 P0 "")
(while (< r (- J 1))
(setq P2 (polar P2 ang dist))
(command "dim" "con" P2 "" "e")
(setq r (1+ r)))
(setq i (1+ i))
(entdel ent)))
(command "undo" "e")
(princ))
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-12-27 11:29 | 显示全部楼层
xyp1964 发表于 2013-3-21 20:00
思路:量取两点距离,算出单个长度,再标注n个标注

D:\坐标类\等分标注
 楼主| 发表于 2017-12-27 11:55 | 显示全部楼层
QWQWQWQ 发表于 2017-12-27 11:54
学了多年,自己用VB搞定了


本帖子中包含更多资源

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

x
发表于 2013-3-21 20:00 | 显示全部楼层
思路:量取两点距离,算出单个长度,再标注n个标注
发表于 2013-3-21 20:12 | 显示全部楼层
取出距离的属性和尺寸界线的位置点,循环标注等分的次数,就可以了吧!
发表于 2013-3-21 20:43 | 显示全部楼层
(defun c:dtt ()
(if (setq ss (ssget '((0 . "DIMENSION")(-4 . "<OR")(70 . 32)(70 . 33)(70 . 34)(70 . 37)(-4 . "OR>")))) (progn
  (setvar "DIMZIN" 8)
  (setvar "LUPREC" 1)           ; 此处设定小数精度
  (setq i 0)
  (setq div (getint "\n输入要等分的量: "))
  (repeat (sslength ss)
   (setq ent (entget(ssname ss i))
         txt (cdr(assoc 42 ent))
         dtxt (if(>(cdr(assoc 70 ent))33)(rtos(/(* txt 180) pi div) 2 0)(rtos(/ txt div)))
         ent (subst (cons 1 (strcat (itoa div) "x" dtxt "=<>")) (assoc 1 ent) ent))
   (entmod ent)
   (setq i (1+ i))
  )
))
(princ)
)
 楼主| 发表于 2013-3-22 00:20 | 显示全部楼层
上面的代码是我要的结果
 楼主| 发表于 2013-3-22 00:21 | 显示全部楼层
上面的代码不是我要的结果
发表于 2013-3-22 09:54 | 显示全部楼层
你到底要干嘛
 楼主| 发表于 2013-3-22 11:03 | 显示全部楼层
我要的是如6000尺寸分三段为2000,2000,2000
它写出的是3*200=6000
发表于 2013-3-22 12:37 | 显示全部楼层
试试这个呢

本帖子中包含更多资源

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

x
 楼主| 发表于 2013-3-22 13:21 | 显示全部楼层
请改成直接等分课标标注线就好,谢谢
;;;一键等分标注直线或多线段
;;;暂未加入等分圆弧、圆等功能,待有时间再完善。
;;;编写者:程圣彬
;;;时间:2012-12-08
;;;2012-12-10 改选取对象为指定两点
;;;2013-03-04 修正了撤销操作是系统变量没有恢复的bug

(defun c:bzdfdf ( / *error*_bak *error*_my angle_p0p2 dist_offset div_no ent_object ent_pt i i_dco i_ppn osmode_old point1 point2 pt_coordinate pt_dco pt_end pt_list pt_list_dco pt_list_dco_length pt_name pt_pline_list pt_pline_list_length pt_pline_no pt_start pt1 pt3 repeat_no ss_after_div ss_object)

(setq point1 (getpoint "\n指定第一点"))
(setq point2 (getpoint point1 "\n指定第二点"))
(setq div_No (getint "\n 输入等分数量: "))
(setq dist_offset (getdist "\n 输入标注偏移距离: "))
(command "_.undo" "BE")

(setq *error*_bak *error*)
(setq *error* *error*_my)

(setq osmode_old (getvar "osmode"))
(setvar "CMDECHO" 0)
(setvar "osmode" 0)
(graphscr)

(entmake (list '(0 . "LINE") (cons 10 point1) (cons 11 point2)))

;;;(princ "\n 选择要等分标注的对象: ")
(setq ss_object (ssget "L"))
;;;(setq ss_object (entget (ssname (ssget "L") 0)))
(setq ent_object (entget (ssname ss_object 0)))

(if (= (cdr (assoc 0 ent_object)) "LWPOLYLINE")
  (progn
    (setq Pt_pline_No (length ent_object));获得多义线组码表的长度
    (setq i_PpN 0);设定提取义线组码表中顶点坐标的循环初始值
    (setq Pt_pline_list nil);设定提取义线组码表中顶点坐标列表的初始值
    (repeat Pt_pline_No
      (if (= (car (nth i_PpN ent_object)) 10)
        (setq Pt_pline_list (append Pt_pline_list (list (cdr (nth i_PpN ent_object)))))
        )
      (setq i_PpN (1+ i_PpN))
      )
    (setq Pt_pline_list_length (length Pt_pline_list));获取多义线顶点列表的长度
    (setq pt_start (nth 0 Pt_pline_list));获取多义线的起点
    (setq pt_end (nth (- Pt_pline_list_length 1) Pt_pline_list));获取多义线的终点
    )
  (progn
    (setq pt_start (cdr (assoc 10 ent_object)));获取直线的起点
    (setq pt_end (cdr (assoc 11 ent_object)));获取直线的终点
    )
  )


;;;(setq dist_offset 100)

(command "_.DIVIDE" ss_object div_No)
(setq ss_after_div (ssget "P"));获取等分点

(setq repeat_No (sslength ss_after_div);获取等分点数量
      i 0
)
(setq Pt_list nil)
(repeat repeat_No
  (setq Pt_name (ssname ss_after_div i));获取等分点图元名
  (setq ent_Pt (entget Pt_name));获取等分点组码
  (setq Pt_coordinate (cdr (assoc 10 ent_Pt)));获取等分点坐标
  (setq Pt_list (append Pt_list (list Pt_coordinate)));生成等分点列表
  (setq i (1+ i))
  )
(setq Pt_list_DCO (append (cdr Pt_list) (list pt_end)));获取去除首个等分点的并加入直线或多义线短点的列表
(setq pt1 (car Pt_list);取得等分点的第一个点
      angle_p0p2 (angle pt_start pt1)
      pt3 (polar pt_start (- angle_p0p2 (dtr 90)) dist_offset);取得标注线的位置
      )
(command "_.dimaligned" pt_start pt1 pt3);标注起点及第一个等分点

(setq Pt_list_DCO_length (length Pt_list_DCO))
(setq i_DCO 0)
(repeat Pt_list_DCO_length
  (setq Pt_DCO (car Pt_list_DCO))
  (command "_.DIMCONTINUE" Pt_DCO);连续标注
  (setq Pt_list_DCO (cdr Pt_list_DCO))
  )
(command "_.DIMCONTINUE" "" "");结束连续标注
(command "_.ERASE" ss_object "");删除直线
(command "_.ERASE" ss_after_div "");删除等分点

(command "_.undo" "E")

(setq *error* *error*_bak)
(setvar "CMDECHO" 1)
(setvar "osmode" osmode_old)

(princ "\n -->-->>等分标注<dfbz>完成<<--<--  【By:程圣彬  Date:2012-12-08】 ")
(princ)
)

(princ "\n -->-->>一键等分标注直线或多线段,暂未加入等分圆弧、圆等功能,待有时间再完善<<--<--")
(princ "\n -->-->> 等分标注<dfbz> <<--<--  【By:程圣彬  Date:2012-12-08】")
(princ)


;;;出错系统变量恢复函数
(defun *error*_my (msg)
        (command)
        (setq *error* *error*_bak)
        (setvar "CMDECHO" 1)
        (setvar "osmode" osmode_old)
;        (print msg)
)

;;; ===角度转弧度===
(defun dtr (ang0)
  (* ang0 (/ pi 180.0))
)
(princ)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 17:57 , Processed in 0.883517 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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