明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 海贼凌源

[已解答] 如何生成图中除弧线以外的元素?

[复制链接]
发表于 2015-9-7 11:25 | 显示全部楼层
本帖最后由 waterchen 于 2015-9-7 14:31 编辑

    改进一下,支持大角度.
  1. (defun c:tt (/
  2.        ang
  3.        c
  4.        d data dimsty dimoff dimtxh dimp1 dimp2 dimp3
  5.        ent *error*
  6.        flg1 flg2
  7.        olderr
  8.        m1 m2 mt1 mt2
  9.        p1 p2
  10.        r
  11.        )
  12.   (defun *error* (msg)
  13.     (princ (strcat "\nError: " msg))
  14.     (if (= 8 (logand 8 (getvar 'UNDOCTL)))
  15.       (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
  16.       )
  17.     (setq *error* olderr)
  18.     (princ)
  19.     )
  20.   
  21.   (defun make_Dim (p1 p2 p3 ang /)
  22.     (entmakex
  23.       (list
  24.   '(0 . "DIMENSION")
  25.   '(100 . "AcDbEntity")
  26.   '(100 . "AcDbDimension")
  27.   (cons 10 p3)
  28.   '(11 0. 0. 0.)
  29.   '(70 . 32)
  30.   '(100 . "AcDbAlignedDimension")
  31.   (cons 13 p1)
  32.   (cons 14 p2)
  33.   (cons 50 ang)
  34.   '(100 . "AcDbRotatedDimension")
  35.   )
  36.       )
  37.     )
  38.   
  39.   (defun make_line (p1 p2)
  40.     (entmakex (list '(0 . "LINE")
  41.        '(100 . "AcDbEntity")
  42.        '(100 . "AcDbLine")
  43.        (cons 10 p1)
  44.        (cons 11 p2)
  45.        '(210 0. 0. 1.)
  46.        )
  47.        )
  48.     )
  49.   ;;;**************************main program**************************;;;
  50.   (setq olderr *error*)
  51.   (setq  p1 (getpoint    "\nFirst point:"))
  52.   (initget (+ 32 128))
  53.   (setq  p2 (getpoint p1 "\nSecond point:"))
  54.   (if (and
  55.   (= 'LIST (type p1))
  56.   (= 'LIST (type p2))
  57.   (> (distance p1 p2) 250.0)
  58.   (setq ent (car (nentselp p1)))
  59.   )
  60.     (progn
  61.       (setq data (entget ent))
  62.       
  63.       (if (equal (cdr (assoc 0 data)) "ARC")
  64.   (progn
  65.     (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
  66.     (setq
  67.       ang    (angle p1 p2)
  68.       m1     (polar p1 ang (* 0.5 (distance p1 p2)))
  69.       m2     (vlax-curve-getPointAtDist ent
  70.          (* 0.5
  71.       (vlax-curve-getdistatparam
  72.         ent
  73.         (vlax-curve-getendparam ent)
  74.         )
  75.       )
  76.          )
  77.       c      (cdr (assoc 10 data))
  78.       r      (cdr (assoc 40 data))
  79.       mt1    (polar p1 ang 200.0)
  80.       dimsty (tblsearch "Dimstyle" (getvar "dimstyle"))
  81.       dimoff (* (cdr (assoc 40 dimsty)) (cdr (assoc 147 dimsty)))
  82.       dimtxh (* (cdr (assoc 40 dimsty)) (cdr (assoc 140 dimsty)))
  83.       dimtxh (+ dimoff (* 3.0 dimtxh))
  84.       dimp1  (polar m1  ang dimtxh)
  85.       dimp2  (polar mt1 ang dimtxh)
  86.       flg1   (car (trans (mapcar '- m2 p1) 0 (mapcar '- p2 p1)))
  87.       flg2   (car (trans (mapcar '- c  p1) 0 (mapcar '- p2 p1)))
  88.       )
  89.    
  90.     (cond
  91.       ((or
  92.        (and (> flg1 0.0) (> flg2 0.0))
  93.        (and (< flg1 0.0) (< flg2 0.0))
  94.        )
  95.        (setq d (+ (sqrt (- (expt r 2.0) (expt (distance m1 mt1) 2.0))) (distance m1 c)))
  96.        )
  97.       
  98.       ((or
  99.          (and (> flg1 0.0) (<= flg2 0.0))
  100.          (and (< flg1 0.0) (>= flg2 0.0))
  101.          )
  102.        (setq d (- (sqrt (- (expt r 2.0) (expt (distance m1 mt1) 2.0))) (distance m1 c)))
  103.        )
  104.       )
  105.     (setq
  106.       ang   (angle m1 m2)
  107.       mt2   (polar mt1 ang d)
  108.       dimp3 (polar mt2 ang dimtxh)
  109.       )
  110.     (make_line p1  p2)
  111.     (make_line m1  m2)
  112.     (make_line mt1 mt2)
  113.     (make_Dim m1  m2  dimp1 (angle m1  m2))
  114.     (make_Dim mt1 mt2 dimp2 (angle mt1 mt2))
  115.     (make_Dim p1  mt2 dimp3 (angle p1  mt1))
  116.     (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
  117.     )
  118.   (princ "\nEntity is not an ARC!")
  119.   )
  120.       )
  121.     (princ "\nAt first point can not select ARC entity \nor the distance between 2 points is too short!")
  122.     )
  123.   
  124.   (setq *error* olderr)
  125.   (princ)
  126.   )

本帖子中包含更多资源

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

x
 楼主| 发表于 2016-2-20 14:55 | 显示全部楼层
本帖最后由 海贼凌源 于 2016-2-20 14:57 编辑
waterchen 发表于 2015-9-5 12:54
楼主看看,是不是想要这样效果的。

谢谢你的回答,抱歉回复的晚了。不知道为什么代码在我的电脑里使用没有反应,其他的代码也是,但感觉学习到了不少。
发表于 2016-2-22 10:10 | 显示全部楼层
海贼凌源 发表于 2016-2-20 14:55
谢谢你的回答,抱歉回复的晚了。不知道为什么代码在我的电脑里使用没有反应,其他的代码也是,但感 ...

再试试这个吧,加多了一句 (vl-load-com)。
  1. (defun c:tt (/
  2.        ang
  3.        c
  4.        d data dimsty dimoff dimtxh dimp1 dimp2 dimp3
  5.        ent *error*
  6.        flg1 flg2
  7.        olderr
  8.        m1 m2 mt1 mt2
  9.        p1 p2
  10.        r
  11.        )
  12.   (vl-load-com)
  13.   (defun *error* (msg)
  14.     (princ (strcat "\nError: " msg))
  15.     (if (= 8 (logand 8 (getvar 'UNDOCTL)))
  16.       (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
  17.       )
  18.     (setq *error* olderr)
  19.     (princ)
  20.     )
  21.   
  22.   (defun make_Dim (p1 p2 p3 ang /)
  23.     (entmakex
  24.       (list
  25.   '(0 . "DIMENSION")
  26.   '(100 . "AcDbEntity")
  27.   '(100 . "AcDbDimension")
  28.   (cons 10 p3)
  29.   '(11 0. 0. 0.)
  30.   '(70 . 32)
  31.   '(100 . "AcDbAlignedDimension")
  32.   (cons 13 p1)
  33.   (cons 14 p2)
  34.   (cons 50 ang)
  35.   '(100 . "AcDbRotatedDimension")
  36.   )
  37.       )
  38.     )
  39.   
  40.   (defun make_line (p1 p2)
  41.     (entmakex (list '(0 . "LINE")
  42.        '(100 . "AcDbEntity")
  43.        '(100 . "AcDbLine")
  44.        (cons 10 p1)
  45.        (cons 11 p2)
  46.        '(210 0. 0. 1.)
  47.        )
  48.        )
  49.     )
  50.   ;;;**************************main program**************************;;;
  51.   (setq olderr *error*)
  52.   (setq  p1 (getpoint    "\nGet First point on arc:"))
  53.   (initget (+ 32 128))
  54.   (if (listp p1)
  55.     (setq  p2 (getpoint p1 "\nGet Second point on arc:"))
  56.     )
  57.   (if (and
  58.   (listp p1)
  59.   (listp p2)
  60.   (> (distance p1 p2) 250.0)
  61.   (setq ent (car (nentselp p1)))
  62.   )
  63.     (progn
  64.       (setq data (entget ent))
  65.       
  66.       (if (equal (cdr (assoc 0 data)) "ARC")
  67.   (progn
  68.     (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
  69.     (setq
  70.       ang    (angle p1 p2)
  71.       m1     (polar p1 ang (* 0.5 (distance p1 p2)))
  72.       m2     (vlax-curve-getPointAtDist ent
  73.          (* 0.5
  74.       (vlax-curve-getdistatparam
  75.         ent
  76.         (vlax-curve-getendparam ent)
  77.         )
  78.       )
  79.          )
  80.       c      (cdr (assoc 10 data))
  81.       r      (cdr (assoc 40 data))
  82.       mt1    (polar p1 ang 200.0)
  83.       dimsty (tblsearch "Dimstyle" (getvar "dimstyle"))
  84.       dimoff (* (cdr (assoc 40 dimsty)) (cdr (assoc 147 dimsty)))
  85.       dimtxh (* (cdr (assoc 40 dimsty)) (cdr (assoc 140 dimsty)))
  86.       dimtxh (+ dimoff (* 3.0 dimtxh))
  87.       dimp1  (polar m1  ang dimtxh)
  88.       dimp2  (polar mt1 ang dimtxh)
  89.       flg1   (car (trans (mapcar '- m2 p1) 0 (mapcar '- p2 p1)))
  90.       flg2   (car (trans (mapcar '- c  p1) 0 (mapcar '- p2 p1)))
  91.       )
  92.    
  93.     (cond
  94.       ((or
  95.        (and (> flg1 0.0) (> flg2 0.0))
  96.        (and (< flg1 0.0) (< flg2 0.0))
  97.        )
  98.        (setq d (+ (sqrt (- (expt r 2.0) (expt (distance m1 mt1) 2.0))) (distance m1 c)))
  99.        )
  100.       
  101.       ((or
  102.          (and (> flg1 0.0) (<= flg2 0.0))
  103.          (and (< flg1 0.0) (>= flg2 0.0))
  104.          )
  105.        (setq d (- (sqrt (- (expt r 2.0) (expt (distance m1 mt1) 2.0))) (distance m1 c)))
  106.        )
  107.       )
  108.     (setq
  109.       ang   (angle m1 m2)
  110.       mt2   (polar mt1 ang d)
  111.       dimp3 (polar mt2 ang dimtxh)
  112.       )
  113.     (make_line p1  p2)
  114.     (make_line m1  m2)
  115.     (make_line mt1 mt2)
  116.     (make_Dim m1  m2  dimp1 (angle m1  m2))
  117.     (make_Dim mt1 mt2 dimp2 (angle mt1 mt2))
  118.     (make_Dim p1  mt2 dimp3 (angle p1  mt1))
  119.     (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
  120.     )
  121.   (princ "\nEntity is not an ARC!")
  122.   )
  123.       )
  124.     (princ "\nAt first point can not select ARC entity \nor the distance between 2 points is too short!")
  125.     )
  126.   
  127.   (setq *error* olderr)
  128.   (princ)
  129.   )

本帖子中包含更多资源

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

x
 楼主| 发表于 2016-2-22 17:26 | 显示全部楼层
本帖最后由 海贼凌源 于 2016-2-22 17:30 编辑
waterchen 发表于 2016-2-22 10:10
再试试这个吧,加多了一句 (vl-load-com)。

谢谢,这回有效果了,是我要的效果。
请问你用什么制作的动图?
发表于 2016-2-23 09:31 | 显示全部楼层
海贼凌源 发表于 2016-2-22 17:26
谢谢,这回有效果了,是我要的效果。
请问你用什么制作的动图?

制作这个有很多软件,我用的是LICEcap,网上找下就有了。
 楼主| 发表于 2016-2-24 11:14 | 显示全部楼层
waterchen 发表于 2016-2-23 09:31
制作这个有很多软件,我用的是LICEcap,网上找下就有了。

再次感谢
发表于 2016-2-24 17:10 | 显示全部楼层
高手出手那纯属娱乐。只是热心帮忙
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-21 01:22 , Processed in 0.263875 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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