明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1278|回复: 5

求优化。画焊缝的程序,图形大时执行很慢。谢谢

[复制链接]
发表于 2015-5-21 15:06 | 显示全部楼层 |阅读模式
1明经币
本帖最后由 ly8zx2109 于 2015-5-21 16:20 编辑

求优化。画焊缝的程序,图形大时执行很慢。谢谢



(defun err (s)
        (if (/= s "Function cancelled")
                (princ (strcat "\nError: " s))
        )
        (setq sset nil)
        (setq *error* olderr)
        (princ)
)

(defun c:hf()
  (setvar "cmdecho" 0)
  (setq oldoffsetdist (getvar "offsetdist"))
  (setq oldosmode (getvar "osmode"))
  (setvar "dimzin" 0)
  (setq olderr *error*
               *error* err)
  (command "undo" "group")
  (setq pt1 (getpoint"\n请选择要添加焊缝上的直线上的焊缝起点:"))
  (setq pt2 (getpoint"\n请选择要添加焊缝上的直线上的焊缝终点:"))
  (setq pt3 (getpoint"\n请选择要添加焊缝的一侧:"))

  (setvar "osmode" 0)

  (setq hfjl (distance pt1 pt2))
  (command "line" pt1  pt2 "")
  (setq en1 (entlast))
  (command "offset" "0.466666666666667" en1 pt3 "")
  (setq en2 (entlast))
  (setq en11 (entget en1))
  (setq en22 (entget en2))


  (setq qd11 (cdr (assoc 10 en11)))

  (setq qd22 (cdr (assoc 10 en22)))


  (command "line" qd11 qd22 "")
  (setq en3 (entlast))
  (command "offset" "0.4" en3 pt2 "")
  (setq en4 (entlast))

  (setq n (/ hfjl 0.533333333333333333))
  (setq n (fix n))
  (setq m 1)
  (while (>= n m)
    (setq jl1 (* m 0.5333333333333))
    (command "offset" jl1 en4 pt2 "")
    (setq m (+ 1 m))
  )
  (command "erase" en1 en2 en3 "")
  (command "undo" "end")
  (setvar "osmode" oldosmode)
  (setvar "offsetdist" oldoffsetdist)
  (setvar "cmdecho" 1)
  (setq *error* olderr)
  (princ)
)  
附件: 您需要 登录 才可以下载或查看,没有账号?注册
发表于 2015-5-21 15:06 | 显示全部楼层
  1. (vl-load-com)
  2. (defun c:pp (/ en1 pt pt1 pt2 Deriv ang ang1 ang2 l n i)
  3.   (setvar "cmdecho" 0)
  4.   (command "undo" "group")
  5.   (setq        en1   (entsel "\n选择焊件:")
  6.         pt    (cadr en1)
  7.         en1   (car en1)
  8.         pt1   (vlax-curve-getClosestPointTo en1 pt)
  9.         Deriv (vlax-curve-getSecondDeriv
  10.                 en1
  11.                 (vlax-curve-getParamAtPoint en1 pt1)
  12.               )
  13.         ang1  (angle pt1 pt)
  14.         ang2  (angle pt1 (mapcar '+ pt1 Deriv))
  15.         l     (vlax-curve-getdistatPoint en1 (vlax-curve-getendPoint en1))
  16.         n     (fix(/ (- l 0.4) 0.533333))
  17.         i     0
  18.   )
  19.   (repeat (1+ n)
  20.     (setq pt (vlax-curve-getPointAtDist en1 (+ 0.4 (* 0.53333 i)))
  21.           i  (1+ i)
  22.     )
  23.     (if        (equal Deriv '(0. 0. 0.) 1e-6)
  24.       (entmake (list '(0 . "line")
  25.                      (cons 10 pt)
  26.                      (cons 11 (polar pt ang1 0.46666666666))
  27.                )
  28.       )
  29.       (if (equal ang1 ang2 1e-6)
  30.         (entmake
  31.           (list
  32.             '(0 . "line")
  33.             (cons 10 pt)
  34.             (cons
  35.               11
  36.               (polar pt
  37.                      (angle pt
  38.                             (mapcar '+
  39.                                     pt
  40.                                     (vlax-curve-getSecondDeriv
  41.                                       en1
  42.                                       (vlax-curve-getParamAtPoint en1 pt)
  43.                                     )
  44.                             )
  45.                      )
  46.                      0.46666666666
  47.               )
  48.             )
  49.           )
  50.         )
  51.         (entmake
  52.           (list
  53.             '(0 . "line")
  54.             (cons 10 pt)
  55.             (cons
  56.               11
  57.               (polar
  58.                 pt
  59.                 (+ pi
  60.                    (angle pt
  61.                           (mapcar '+
  62.                                   pt
  63.                                   (vlax-curve-getSecondDeriv
  64.                                     en1
  65.                                     (vlax-curve-getParamAtPoint en1 pt)
  66.                                   )
  67.                           )
  68.                    )
  69.                 )
  70.                 0.46666666666
  71.               )
  72.             )
  73.           )
  74.         )
  75.       )
  76.     )
  77.   )
  78.   (command "undo" "end")
  79.   (princ)
  80. )
回复

使用道具 举报

发表于 2015-5-22 16:45 | 显示全部楼层
不知道是否需要考虑起弧落弧
回复

使用道具 举报

发表于 2015-5-23 10:08 | 显示全部楼层
本帖最后由 夏生生 于 2015-5-23 10:23 编辑

什么专业画焊缝这么画啊?随便写的,比较随意,选择框中心在线的哪一边就画在哪一边,可用于直线与圆弧,代码见楼下

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2015-5-23 17:41 | 显示全部楼层
好的,谢谢。如调整线的长度和间距需调哪些数据。谢谢
回复

使用道具 举报

发表于 2015-5-24 08:59 | 显示全部楼层
里面的0.4,0,466,0.533
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 16:04 , Processed in 0.283629 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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