革天明
发表于 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的线段。