明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1546|回复: 16

[提问] 有没有将炸开的尺寸回复的代码

[复制链接]
发表于 2017-11-9 14:35 | 显示全部楼层 |阅读模式
有没有将炸开的尺寸回复成标注尺寸线的代码?或提取数字生成尺寸线的代码?


问题比较难 高手看看回复一下。


发表于 2017-11-11 11:12 来自手机 | 显示全部楼层
;;;功能:桥梁通炸开的标注,复原。 ;;;日期:zml84 于 2010-04-07 (defun c:tt ( / ss i lst_hand en ent pt10 pt11 lst_jg  lst_new)   (if (setq ss (ssget '((0 . "line") (8 . "3"))))     (progn       ;;找出长度满足要求的对象       (setq i 0             lst_hand '()       )       (repeat (sslength ss)         (setq en  (ssname ss i)               ent (entget en)         )         (setq pt10 (cdr (assoc 10 ent))               pt11 (cdr (assoc 11 ent))         )         (if (<= 4.9 (distance pt10 pt11) 7.1)           (setq        lst_hand (cons (cdr (assoc 5 ent)) lst_hand)           )         )         (setq i (1+ i))       )       ;;根据句柄排序       (setq lst_hand              (vl-sort                lst_hand                (function (lambda (e1 e2)                            (or (< (strlen e1) (strlen e2))                                (< e1 e2)                            )                          )                )              )       )       ;;尺寸线成对提取(原则为:句柄相邻)       (setq lst_jg '())       (mapcar '(lambda (e1 e2)                  (if (= (- (test-test e2) (test-test e1)) 1)                    (setq lst_jg (cons (list e1 e2) lst_jg))                  )                )               lst_hand               (cdr lst_hand)       )       ;;进一步找出标注文字(方法1:在尺寸线句柄向后找;方法2:在尺寸线附近找)       ;;先采用方法2       (setq lst_new '())       (foreach n lst_jg         (setq ent1    (entget (handent (car n)))               ent2    (entget (handent (cadr n)))               pt10    (cdr (assoc 10 ent1))               pt11    (cdr (assoc 11 ent2))               pt_tmp1 (polar pt11                              (angle pt10 pt11)                              (* 1.5 (distance pt10 pt11))                       )               pt_tmp2 (polar pt10                              (angle pt11 pt10)                              (* 1.5 (distance pt11 pt10))                       )         ) ;;;        (command "_.line" "non" pt10 "non" pt11 "")         (if           (or             ;;先尝试在尺寸线中间位置找             (setq ss2                    (ssget "c" pt10 pt11 '((0 . "TEXT") (8 . "3")))             )             ;;如果不成功,再扩大范围             (setq ss2                    (ssget "c"                           pt_tmp1                           pt_tmp2                           '((0 . "TEXT") (8 . "3"))                    )             )           )            ;;(if (= (sslength ss2) 1)            (setq en         (ssname ss2 0)                  ent         (entget en)                  hand         (cdr (assoc 5 ent))                  lst_new (cons (list (car n) (cadr n) hand) lst_new)            )            ;;)         )       )       ;;重新标注       (foreach n lst_new         (setq en1  (handent (car n)) ;_尺寸界线LINE               en2  (handent (cadr n)) ;_尺寸界线LINE               en3  (handent (caddr n)) ;_标注文字TEXT               ent1 (entget en1)               ent2 (entget en2)               ent3 (entget en3)         )         (setq pt10    (cdr (assoc 10 ent1))               pt11    (cdr (assoc 11 ent1))               pt20    (cdr (assoc 10 ent2))               str     (cdr (assoc 1 ent3))               pt_tmp1 (polar pt10                              (angle pt10 pt11)                              (* 0.5 (distance pt10 pt11))                       )         )         (command "_.DIMALIGNED"        "non" pt10 "non" pt20 "t" str "non"                  pt_tmp1)       )           )   )   (princ) )  ;;;=========================================== ;;;功能:通用函数 ;;;功能:16进制转换为10进制(字符串转换为数值) (defun test-test (str / LST NUM I STR_I)   (setq str (strcase str t))   (setq        lst '(("0" 0)               ("1" 1)               ("2" 2)               ("3" 3)               ("4" 4)               ("5" 5)               ("6" 6)               ("7" 7)               ("8" 8)               ("9" 9)               ("a" 10)               ("b" 11)               ("c" 12)               ("d" 13)               ("e" 14)               ("f" 15)              )   )   (setq        num 0         i 0   )   (repeat (strlen str)     (setq str_i        (substr str (strlen str))           str        (substr str 1 (1- (strlen str)))     )     (if        (assoc str_i lst)       (setq num (+ num (* (cadr (assoc str_i lst)) (expt 16 i))))     )     (setq i (1+ i))   )   ;;返回   num )
 楼主| 发表于 2017-11-12 08:38 | 显示全部楼层
hao3ren 发表于 2017-11-11 11:12
;;;功能:桥梁通炸开的标注,复原。 ;;;日期:zml84 于 2010-04-07 (defun c:tt ( / ss i lst_hand en ent  ...

好像运行不了呀!怎么解决的。选不上。
 楼主| 发表于 2017-11-11 08:15 | 显示全部楼层
自贡黄明儒 发表于 2017-11-10 16:03
就不要想了,我也问过。

梦想是世界的希望,一切东东都是想象出来的。

看看吧真有。

点评

没有万能的工具  发表于 2017-11-11 15:41
不通用,特定标注是可以的。  发表于 2017-11-11 11:25
发表于 2017-11-10 09:16 | 显示全部楼层
回贴是美德
提问水平需要提高
发表于 2017-11-10 10:52 | 显示全部楼层
同求啊。。有的时候图纸是PDF的。。转出来了图就无用了
发表于 2017-11-10 16:03 | 显示全部楼层
就不要想了,我也问过。
发表于 2017-11-10 16:31 | 显示全部楼层

本帖子中包含更多资源

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

x
发表于 2017-11-10 17:28 | 显示全部楼层
院长太厉害了!!!
 楼主| 发表于 2017-11-11 08:23 | 显示全部楼层

好程序,有没有根据单行数字的高度、角度、位置坐标、生成尺寸线的程序呀。

点评

上dwg文件测试  发表于 2017-11-11 15:40
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-23 22:13 , Processed in 0.550671 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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