革天明 发表于 2012-7-31 16:45:19

邹锋 发表于 2012-7-31 11:28 static/image/common/back.gif
看来你没看懂,,,,
PT1
PT2


;;;******************************************************
;;;一个求多义线各段参数(如果是弧段则有半径弧长)的lisp程序
;;;编号1:凸度,2:弦长或直段长,3:半径,4:弧长,5:圆心--
;;;加载程序,运行bulge,则显示上述参数-------------------
(defun midp (p1 p2)
;;BY 高飞鸟
(polar p1 (angle p1 p2) (* (distance p1 p2) 0.5))
)
(defun C:Bulge (/        sel        ent        lst        obj        vex        ifclose
                i        par        1stPt        EndPt        judge        tu        pt1
                pt2        dis        radius        h        h1        half-angle
                arc-length        pa        cen
             )

(if (setq sel (ssget '((0 . "LWPOLYLINE"))))
    (progn
      (setq ent (ssname sel 0))
      (setq lst (entget ent))
      (setq obj (vlax-ename->vla-object ent))
      (setq vex (cdr (assoc 90 lst)))
      (setq ifclose (cdr (assoc 70 lst)))
      (setq i        0
          par        nil
      )
      (setq 1stPt (vlax-Curve-GetPointAtParam ent 0))
      (setq EndPt (vlax-Curve-GetPointAtParam ent (1- vex)))
      (if (or (equal 1stPt EndPt 1e-8) (= ifclose 0))
        (setq vex (1- vex))
      )
      (repeat vex
        (setq tu (vla-GetBulge obj i))
        (setq pt1 (vlax-Curve-GetPointAtParam ent i))
        (if (and (= i (1- vex)) judge)
          (setq pt2 (vlax-Curve-GetPointAtParam ent 0))
          (setq pt2 (vlax-Curve-GetPointAtParam ent (1+ i)))
        )
        (setq dis (distance pt1 pt2))
        (if (/= tu 0)
          (progn
          (setq radius (/ (* (1+ (* tu tu)) dis 0.25) (abs tu)))
          (setq h(* dis (abs tu) 0.5)
                  h1 (- radius h)
          )
          (setq half-angle (atan (/ dis 2) h1))
          (setq arc-length (* 2 half-angle radius))
          (setq cen (midp pt1 pt2))
          (setq cen (polar cen
                             (+        (angle pt1 pt2)
                                (if (or        nil
                                        (and (> h1 0) (> tu 0))
                                        (and (< h1 0) (< tu 0))
                                  )
                                  (* pi 0.5)
                                  (* pi -0.5)
                                )
                             )
                             (abs h1)
                      )
          )
          (setq pa (list tu dis radius arc-length cen))
          (setq par (cons pa par))
          )
          (progn
          (setq pa (list tu dis))
          (setq par (cons pa par))
          )
        )
        (setq i (1+ i))
      )
      (setq par (reverse par))
      (princ "\n下面为此曲线的各段列表,3,4,5编号为弧段才有:")
      (princ "\n1:凸度 2:弦长(或直线长) 3:半径 4:弧长 5:圆心")
      (foreach n par
        (princ "\n")
        (princ n)
      )
      (princ)
    )
    (alert "你没有选中物体或者选择的不是多义线!")
)
(princ)
)
;;;******************************************************

chshsl 发表于 2012-7-31 19:38:45

用fastcom 很容易的

邹锋 发表于 2012-7-31 23:52:08

革天明 发表于 2012-7-31 16:45 static/image/common/back.gif
;;;******************************************************
;;;一个求多义线各段参数(如果是弧段则有半 ...

pt1 就是起点,PT2就是终点,如果有TU度的,就是圆弧,算出圆心了,想不明白就不要问我了,你用我那个的吧,把你的图上的红线串接好,转下,看看是不是转出G代码了

ZZXXQQ 发表于 2012-8-1 09:13:42

个人感觉所提供的图样无法用一把刀车成。如果只输出图线的坐标点另当别论。

革天明 发表于 2012-8-1 10:35:24

ZZXXQQ 发表于 2012-8-1 09:13 static/image/common/back.gif
个人感觉所提供的图样无法用一把刀车成。如果只输出图线的坐标点另当别论。

因为我不是程序员,不是机加工程序员,只是一个工科男,会一点LISP而已,
从简到难吧,学会生成G代码就有可能造成两把刀的代码
当初一个将图元缩放0.25倍的小程序我用了两星期

wiigorq 发表于 2012-8-1 13:46:06

有没有冲床类的
怎么才能算出是短线路走法
不知道怎么好入手

VBALISPER 发表于 2012-8-4 23:39:08

哇,这下,你们有交流的对象了.

c735023723 发表于 2012-8-22 20:40:06

zwf100 发表于 2015-12-17 15:13:37

为什么经常会:; 错误: 参数类型错误: 二维/三维点: nil

434939575 发表于 2021-4-22 11:47:42

邹锋 发表于 2012-7-30 17:38
这不难啊,都是增量相对坐标,,直线的话,用G1(别人一般都是G01) 圆弧用G3,g2,把Y的数改成Z,,,其他的就 ...

请问下spl 不加点能实现不,加点太密了,要么拟合为arc的线段。
页: 1 [2] 3
查看完整版本: 求CAD生成数控车床的G代码的程序