明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
123
返回列表 发新帖
楼主: cj52000

[提问] 如何统计矩形的长度和宽度,请各位来看看!

[复制链接]
发表于 2021-3-2 13:49:00 | 显示全部楼层
刚刚试着做了一个检查入子的小程序,伪码就不发了,思路就是点选一个入子外形,按入子的颜色线型图层过滤选择所有图元,再根据长度面积筛选一遍,相同的图元再指示出来。没有进行排除镜像的图元,如果要将镜像的也去掉,可以逐段长度对比进行
 楼主| 发表于 2021-3-4 10:33:51 | 显示全部楼层
690994 发表于 2021-3-2 13:49
刚刚试着做了一个检查入子的小程序,伪码就不发了,思路就是点选一个入子外形,按入子的颜色线型图层过滤选 ...

兄台能不能发出来试用下,谢啦
发表于 2021-3-4 15:53:08 | 显示全部楼层
cj52000 发表于 2021-3-4 10:33
兄台能不能发出来试用下,谢啦
  1. (defun c:te( / co ent lst ss wus all ram ram2)

  2.   (defun ram( e / a d e)
  3.     (setq d (* 0.05 (distance (car e) (last e)))
  4.           e (mapcar '(lambda (x y )
  5.                         (polar x (dtr y) d)
  6.              )
  7.              e
  8.              '(225 135 315 45)
  9.       )  
  10.           e (list (nth 1 e) (nth 3 e) (nth 2 e) (car e))         
  11.           a (mapcar '(lambda (x y / i l)
  12.                      (setq i 1
  13.                            l '()
  14.                       )
  15.              (repeat(fix (sam_round (/ (distance x y)d) 1))
  16.                  (setq l (append l (list (polar x (angle x y) (* i d))))
  17.                        i (1+ i)
  18.                  )   
  19.              )
  20.              (cons x (Sam_lst_1-n (1- (length l)) l))
  21.         )
  22.         e
  23.         (append (cdr e) (list (car e)))
  24.       )  
  25.     a (apply  'append a)
  26.     a (mapcar 'sam_3d2d a)  
  27.     e (* d 0.5 (tan (dtr 27.5)))
  28.     e (- (/ e d 0.5))
  29.     d (mapcar '(lambda (x )                    
  30.             e
  31.            )
  32.         a        
  33.        )
  34.    )         
  35.    (sam_put (sam_make_pline a d 1 "Defpoints" "DIVIDE" 11)(list (list 48 0.05)))   
  36.   );ram
  37.   
  38.   
  39.    (defun ram2(lst all / base box cen co dat ent la la_ent tem)  
  40.     (while (> (length lst) 1)
  41.      (setq ent(car lst)
  42.          lst (cdr lst)
  43.          dat (mapcar  '(lambda (x)               
  44.                 (list (vla-get-Length (vlax-ename->vla-object (handent x)));长度
  45.                   (vla-get-Area (vlax-ename->vla-object (handent x)))  ;面积
  46.                    x
  47.                  )                    
  48.               )  
  49.              lst
  50.           )
  51.      )
  52.     (setq ent (handent ent)
  53.         co (vla-get-Length (vlax-ename->vla-object ent));长度
  54.         la (vla-get-Area (vlax-ename->vla-object ent))  ;面积
  55.         dat(vl-remove-if-not  '(lambda (x)                     
  56.                      (and                           
  57.                        (equal (nth 0 x) co 1e-6)  ;长度
  58.                        (equal (nth 1 x) la 1e-6)  ;面积
  59.                      )
  60.                     )                    
  61.              dat
  62.           )
  63.      
  64.      
  65.     )
  66.     (and dat
  67.        (setq dat (mapcar  '(lambda (x / n m o)
  68.                 (setq o (vlax-ename->vla-object(handent (nth 2 x)))                    
  69.                     m '()
  70.                     n 0
  71.                  )
  72.                  (repeat (fix(vlax-curve-getEndParam o))
  73.                    (setq m (append m
  74.                             (list (- (vlax-curve-getdistatparam o (1+ n))(vlax-curve-getdistatparam o n)))
  75.                         )
  76.                        n (1+ n)
  77.                    )            
  78.                  );repeat
  79.                  (if (sam_PlineCCW (handent (nth 2 x)))
  80.                    (list (nth 2 x) m)
  81.                    (list (nth 2 x) (reverse m))
  82.                  )   
  83.               )  
  84.                dat
  85.             )      
  86.        )
  87.       (setq tem (vlax-ename->vla-object ent)      
  88.           la '()
  89.           cen 0
  90.        )
  91.        (repeat (fix(vlax-curve-getEndParam tem))
  92.          (setq la (append la
  93.                   (list (- (vlax-curve-getdistatparam tem (1+ cen))(vlax-curve-getdistatparam tem cen)))
  94.               )
  95.              cen (1+ cen)
  96.          )            
  97.        );repeat
  98.       (setq la (if (sam_PlineCCW ent)
  99.               la
  100.               (reverse la)
  101.             )
  102.       )
  103.       (setq dat(vl-remove-if-not  '(lambda (x / n m o)                     
  104.                       (setq o (nth 1 x)
  105.                         m '()
  106.                         n 0   
  107.                       )
  108.                      (repeat (length la)
  109.                        (setq m (append m
  110.                                 (list (equal la o 1e-6)) ;长度list
  111.                             )
  112.                            n (1+ n)
  113.                            o (append (cdr o) (list (car o)))                       
  114.                        )            
  115.                      )
  116.                     (vl-remove nil m)
  117.                     )                    
  118.             dat
  119.           )
  120.       )
  121.     ) ;and
  122.    
  123.     (if dat
  124.       (progn
  125.        (setq base (sam_getbox ent 0.0 t)
  126.            base (sam_midpt_2p (car base)(last base))
  127.            la_ent (entlast)
  128.         )      
  129.       (foreach x dat
  130.          (setq lst (vl-remove (nth 0 x) lst)
  131.              tem (handent (nth 0 x))
  132.              box (sam_getbox tem 0.0 t)
  133.              cen (sam_midpt_2p (car box)(last box))   
  134.           )   
  135.           (and (> (distance base cen) 1e-6);not same
  136.              (progn
  137.                (setq cen (sam_Bu2Arc base cen 0.3));=> (<centre> <start angle> <end angle> <radius>)  
  138.                (vl-cmdf "-layer" "on" "Defpoints" "")
  139.                (vl-cmdf "-layer" "on" "0" "")               
  140.                (sam_put (sam_make_arc (car cen) (last cen) (cadr cen)(caddr cen) "Defpoints" 11 "DIVIDE")
  141.                   (list (list 48 0.05))
  142.                )
  143.                (ram (sam_getbox tem 0.0 t))               
  144.             )
  145.           )         
  146.        )
  147.         (sam_make_txt "c" base  3.0 0 (strcat "(" (itoa(1+(length dat)))")") 0.7 "Defpoints" 11)     
  148.         (princ(strcat  "\n    Find same insert = " (itoa(length dat)) " EA"))  
  149.         (vl-cmdf "-group" "create" "*" "" (last_ent la_ent) "")      
  150.        );pr     
  151.        (princ"\n    No find same intsert.")
  152.     );if
  153.     (setq lst (if all lst nil))
  154.     );while >1
  155.   );ram2
  156.      

  157.     (lt:error-init (list '("cmdecho" 0 "osmode" 0) 1 nil))
  158.     (if (setq wus(zerop(getvar "WORLDUCS")))(vl-cmdf "ucs" "w"))

  159.      (if (setq ss (cadr (ssgetfirst)))
  160.     (setq ent (ssname ss (1- (sslength ss)))
  161.           all nil                             ;;;nil = one sample   t = all same
  162.     )
  163.   )
  164.   (if (not(and ent (wcmatch (sam_dxf ent 0)"*POLYLINE")))
  165.     (setq ent nil
  166.           ent (sam_entsel "\n   Select a sample:"
  167.                '((0 . "LWPOLYLINE")) NIL
  168.          )
  169.         ent (car ent)  
  170.         all t
  171.     )      
  172.   )   
  173.    (setq co (sam_dxf 62 ent)     
  174.          lst (list '(0 . "LWPOLYLINE") (cons 8 (sam_dxf 8 ent)))         
  175.          lst (if co (append lst (list(cons 62 co))) lst)
  176.          ss (ssget "a" lst)
  177.          ent (sam_dxf 5 ent)
  178.          lst (sam_ss2hand ss)         
  179.          co (mapcar  '(lambda (x)            
  180.             (sam_del_repeat_pt (handent x))
  181.                     (sam_del_repeat_line (handent x))            
  182.             
  183.                     )  
  184.                    lst
  185.               )
  186.           lst (vl-remove ent lst)
  187.           lst (append (list ent) lst)  
  188.    )
  189.    (ram2 lst all)
  190.   (if wus(vl-cmdf "ucs" "p"))
  191.    (lt:error-restore)
  192.    (and(= (getvar "osmode") 0)(setvar "osmode" 39))  
  193.   (princ)
  194. )
上不了附件,贴不了。
 楼主| 发表于 2021-3-4 19:27:59 | 显示全部楼层
690994 发表于 2021-3-4 15:53
上不了附件,贴不了。

谢谢,下来看看
发表于 2021-3-5 15:47:06 | 显示全部楼层
cj52000 发表于 2021-3-4 19:27
谢谢,下来看看

子函数上传不了,需要可以邮件给你
 楼主| 发表于 2021-3-6 14:12:30 | 显示全部楼层
690994 发表于 2021-3-5 15:47
子函数上传不了,需要可以邮件给你

谢谢,帮传一份 283191340@qq.com
发表于 2021-3-6 17:42:15 | 显示全部楼层
谢谢,帮传一份yoyo86.ho@msa.hinet.net
发表于 2021-8-13 14:57:04 | 显示全部楼层
yoyoho 发表于 2021-3-6 17:42
谢谢,帮传一份

可以到http://cadplus.ys168.com/下载我的工具箱,子函数懒得一个一个拆出了,
已经做成三个功能:
1、预先选一个多义线,仅仅是执行这个多义线的镶件异同防呆检查,也可以方便查找镶件
2、没有选择,执行下一个样本同色同图层的所有多义线镶件异同防呆检查,适合组立图完成检查后分模
3、选择一个镶件外形或者剪口基准,再选择要复制的图元,自动复制到匹配的镶件上
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 10:42 , Processed in 0.186383 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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