本帖最后由 kele99kele 于 2015-9-15 23:30 编辑
做法有点土,但是实测5000个标注的图面选择速度不超过0.5s,欢迎拍砖- ;|
- 函数名称: N::IsInExLine
- 函数简介: 判断点是否在两点连线的延长线上
- 调用格式: (N::IsInExLine pt1[PointList] pt2[PointList] pt3[PointList])
- 返回值: T or Nil
- 例: (N::IsInExLine '(0 0 0) '(1 2 0) '(3 5 0))判断点'(3 5 0)是否处于'(0 0 0) '(1 2 0)连线的延长线上
- 函数来源: 原创
- 函数作者: 九群
- 适用版本: 不限
- 最后更新时间: 2015.9.15|;
- (defun N::IsOnExLine (p1 p2 px)
- (< (abs (- (abs (- (distance px p1) (distance px p2))) (distance p1 p2))) 0.001)
- )
- ;|
- 函数名称: N::IsOnLine
- 函数简介: 判断点是否在两点连线上
- 调用格式: (N::IsOnLine pt1[PointList] pt2[PointList] pt3[PointList])
- 返回值: T or Nil
- 例: (N::IsOnLine '(0 0 0) '(1 2 0) '(3 5 0))判断点'(3 5 0)是否处于'(0 0 0) '(1 2 0)连线上
- 函数来源: 原创
- 函数作者: 九群
- 适用版本: 不限
- 最后更新时间: 2015.9.15|;
- (defun N::IsOnLine (p1 p2 px)
- (< (abs (- (+ (distance p1 px) (distance p2 px)) (distance p1 p2))) 0.001)
- )
- ;|
- 函数名称: N::IsInLine
- 函数简介: 判断点是否在两点连线上或连线的延长线上
- 调用格式: (N::IsInLine pt1[PointList] pt2[PointList] pt3[PointList])
- 返回值: T or Nil
- 例: (N::IsInLine '(0 0 0) '(1 2 0) '(3 5 0))判断点'(3 5 0)是否处于'(0 0 0) '(1 2 0)连线上或连线的延长线上
- 函数来源: 原创
- 函数作者: 九群
- 适用版本: 不限
- 最后更新时间: 2015.9.15|;
- (defun N::IsInLine (p1 p2 px)
- (or
- (N::IsOnLine p1 p2 px)
- (N::IsOnExLine p1 p2 px)
- )
- )
- ;|
- 函数名称: N::GetDimInLine
- 函数简介: 选择标注位置相同的标注(批量选择一排标注)
- 调用格式: (N::GetDimInLine N_DimEntName[EntName])
- 返回值: 与所给标注名称处于同一线上的所有标注的选择集
- 例: (N::GetDimInLine (car (entsel))选择一处标注,返回与该标注处于同一线上的所有标注的选择集
- 函数来源: 原创
- 函数作者: 九群
- 适用版本: 不限
- 最后更新时间: 2015.9.15|;
- (defun N::GetDimInLine (N_DimEntName / N_AllDim N_DimEntName N_DimStart N_DimStartPoint N_DimDistance N_DimEnd N_DimPick N_DimPickStart N_DimPickStartpoint N_DimPickDistance N_DimPickEnd N_DimMatch)
- (setq
- N_AllDim (ssget "x" '((0 . "DIMENSION")));选择全图dim尺寸对象
- N_DimMatch (ssget "x" '((0 . "DIMENSION")));选择全图dim尺寸对象
- N_DimStart (cdr (assoc 10 (entget N_DimEntName)));取得dim尺寸的起点
- N_DimStartPoint (cdr (assoc 14 (entget N_DimEntName)));取得dim尺寸脚的起点
- N_DimDistance (cdr (assoc 42 (entget N_DimEntName)));取得dim尺寸的测量长度
- N_DimEnd (polar N_DimStart (+ (* 0.5 pi) (angle N_DimStart N_DimStartPoint)) N_DimDistance);取得dim尺寸的终点
- )
- ;(command "color" 1 "line" N_DimStart N_DimEnd "")
- (repeat (setq i (sslength N_AllDim))
- (setq
- N_DimPick (ssname N_AllDim (1- i))
- N_DimPickStart (cdr (assoc 10 (entget (ssname N_AllDim (1- i)))))
- N_DimPickStartpoint (cdr (assoc 14 (entget (ssname N_AllDim (1- i)))))
- N_DimPickDistance (cdr (assoc 42 (entget (ssname N_AllDim (1- i)))))
- N_DimPickEnd (polar N_DimPickStart (+ (* 0.5 pi) (angle N_DimPickStart N_DimPickStartPoint)) N_DimPickDistance)
- )
- ;(command "color" 2 "line" N_DimPickStart N_DimPickEnd "")
- (if (null (and
- (N::IsInLine N_DimStart N_DimEnd N_DimPickStart)
- (N::IsInLine N_DimStart N_DimEnd N_DimPickEnd)
- ))
- (progn
- (ssdel (ssname N_AllDim (1- i)) N_DimMatch)
- (setq i (1- i))
- )
- (setq i (1- i))
- )
- )
- N_DimMatch
- )
|