乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: 77077

[编程交流] 绘制平分线

[复制链接]

9

主题

61

帖子

47

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
52
发表于 2022-7-5 16:53:46 | 显示全部楼层
我们这里的一位开发人员使用制作了一个平分线工具。网它工作得很好,但你必须按一定的顺序选线。
回复

使用道具 举报

17

主题

1274

帖子

25

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2022-7-5 16:56:56 | 显示全部楼层
代码不错,我换了35行
  1. (setq a (getkword (strcat "\n Bisector Type - Angula /Linear <" ad ">:   ")))

  1. (setq a (getkword (strcat "\n Bisector Type - [color="red"][b][[/b][/color]Angula/Linear[color="red"][b]][/b][/color] <" ad ">:   ")))

这样我就可以用鼠标选择了。
那是守门员,谢谢
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 17:00:32 | 显示全部楼层
 
谢谢
 
我怀疑我会用它,但它很有趣
 
我不知道[]是什么时候被引入鼠标选项的。它在我通常使用的版本中不可用。
 
很高兴你发现它很有用-大卫
回复

使用道具 举报

96

主题

351

帖子

62

银币

中流砥柱

Rank: 25

铜币
692
发表于 2022-7-5 17:03:28 | 显示全部楼层
 
很好的习惯,大卫
 
我测试发现,不能用于Pline,
如果2条线没有交点,也不能画对分线。
 
我有个主意。可以计算交点并绘制对分吗?
李函数
  1. (LM:intersections (vlax-ename->vla-object e1) (vlax-ename->vla-object e2) acextendboth)
  1. (defun LM:intersections ( ob1 ob2 mod / lst rtn )
  2. (setq lst (vlax-invoke ob1 'intersectwith ob2 mod))
  3. (repeat (/ (length lst) 3)
  4.         (setq rtn (cons (list (car lst) (cadr lst) (caddr lst)) rtn)
  5.                 lst (cdddr lst)
  6.         )
  7. )
  8. (reverse rtn)
  9. )
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 17:07:05 | 显示全部楼层
 
谢谢
 
 
它实际上并不适用于多段线。太多的障碍物和错误陷阱。
 
平行线应始终在角度模式下失效
 
对于无交点(角度),(inters)函数可以找到交点,但:
[列表]
  • 如果这两条线形成一个X怎么办
    如何确定四个方向/角度中的哪一个要平分
    [/列表]
     
    我相信如果出现这样的情况,还会有很多其他问题。
     
    -大卫
  • 回复

    使用道具 举报

    17

    主题

    1274

    帖子

    25

    银币

    后起之秀

    Rank: 20Rank: 20Rank: 20Rank: 20

    铜币
    260
    发表于 2022-7-5 17:08:48 | 显示全部楼层
    如果有人想修改David的多段线代码,这可能是一个很好的起点:http://gilecad.azurewebsites.net/LISP/PolySegments.lsp
    几年前,我创建了一个lisp,用于标记直线或多段线线段,该线段复制了多段线,分解了多段线,选择了具有相同点的直线或圆弧段,用于选择多段线并保存其elist,然后删除所有新创建的线段。它也可以是一个起点,与具有用于显示直线和圆弧特征的属性的块一起附着。
    Dim_弧。图纸
    Dim_线。图纸
    Line_标签。lsp
    回复

    使用道具 举报

    26

    主题

    1495

    帖子

    20

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    118
    发表于 2022-7-5 17:10:35 | 显示全部楼层
    Post 10更新了一些错误陷阱
    回复

    使用道具 举报

    96

    主题

    351

    帖子

    62

    银币

    中流砥柱

    Rank: 25

    铜币
    692
    发表于 2022-7-5 17:14:07 | 显示全部楼层
     
    嗨tombu
    此例程可以支持pline。
    1. ;;;;;;;;;;;;;BY YJR111 2011-11-19;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    2. (defun c:bisect(/ fglst please input others youself 3q vla_e1 vla_e2)
    3. (vl-load-com)
    4. (SETQ oldosmode(GETVAR  "OSMODE" ))
    5. (SETQ oldltscale(GETVAR  "ltscale" ))
    6. (SETQ oldceltscale(GETVAR  "celtscale" ))
    7. (setvar "cmdecho" 0)
    8. (setvar "osmode" 0)
    9. (setvar "ltscale" 1)
    10. (setvar "celtscale" 1)
    11. (setvar "cecolor" "1")
    12. (command "linetype" "s" "center" "")
    13. (setq sss(ssadd))
    14. (setq
    15.         myms(vla-get-modelspace (setq mydoc(vla-get-activedocument(vlax-get-acad-object))))
    16.        myss(vla-get-SelectionSets mydoc)
    17.         myutility(vla-get-utility mydoc)
    18.        mylayer(vla-get-layers mydoc)
    19.         mylinetypes(vla-get-linetypes mydoc)
    20. )
    21. (initget 6)
    22. (if (and(=(type *num_fenge*)'int)*num_fenge*)
    23.         (setq num_fenge (getint (strcat "\nNumber Of Bisector Lines<" (rtos *num_fenge* 2 0)">")))
    24.         (progn
    25.                 (setq num_fenge (getint  "\nNumber Of Bisector Lines" ))
    26.                 (if (/=(type num_fenge)'int)
    27.                         (progn
    28.                                 (princ"\nNumber type is wrong, please enter the integer!")
    29.                                 (setq num_fenge (getint  "\nNumber Of Bisector Lines" ))
    30.                         )
    31.                 )
    32.         )
    33. )
    34. (if (not num_fenge)
    35.         (setq num_fenge *num_fenge*)
    36.         (setq *num_fenge* num_fenge )
    37. )
    38. (while
    39.         (and
    40.                 (setq e1 (car(setq nentsel_e1(nentselp"\nChoose first line :"))))
    41.                 (setq e2 (car(setq nentsel_e2(nentselp"\nChoose second line :"))))
    42.         )
    43.         (setq point_e1 (cadr nentsel_e1))
    44.         (setq s1 (entget e1))
    45.         (setq point_e2 (cadr nentsel_e2))
    46.         (setq s2 (entget e2))
    47.         (setq vla_e1(vlax-ename->vla-object e1))
    48.         (setq vla_e2(vlax-ename->vla-object e2))
    49.         (if (<= (length nentsel_e1) 2)
    50.                 (setq point_e1(vlax-curve-getClosestPointTo vla_e1 point_e1 ))
    51.                 ;;OCS<=>WCS
    52.                 (progn
    53.                         (setq
    54.                                 vla_ee1 (vlax-ename->vla-object(caar(reverse nentsel_e1)))
    55.                                 xsca(vla-get-XScaleFactor vla_ee1)
    56.                                 ysca(vla-get-YScaleFactor vla_ee1)
    57.                                 zsca(vla-get-ZScaleFactor vla_ee1)
    58.                                 rto(vla-get-rotation vla_ee1)
    59.                                 insertp(cdr(assoc 10(entget(caar(reverse nentsel_e1)))))
    60.                         )
    61.                         (setq shuzu1 (caddr nentsel_e1))
    62.                         (setq variant_shuzu1 (vlax-make-safearray  vlax-vbDouble '(0 . 3)'(0 . 3) ))
    63.                         (command "undo" "be" )
    64.                         (vlax-safearray-fill variant_shuzu1 shuzu1)
    65.                         (vla-transformby vla_e1 variant_shuzu1)
    66.                         (command "undo" "e" )
    67.                         (setq point_e1(vlax-curve-getClosestPointTo vla_e1 point_e1 ))
    68.                         (command "undo" 1 )
    69.                 )
    70.         )        
    71.         (if (<= (length nentsel_e2) 2)
    72.                 (setq point_e2(vlax-curve-getClosestPointTo vla_e2 point_e2 ))
    73.                 ;;OCS<=>WCS
    74.                 (progn
    75.                         (setq
    76.                                 vla_ee2 (vlax-ename->vla-object(caar(reverse nentsel_e2)))
    77.                                 xsca(vla-get-XScaleFactor vla_ee2)
    78.                                 ysca(vla-get-YScaleFactor vla_ee2)
    79.                                 zsca(vla-get-ZScaleFactor vla_ee2)
    80.                                 rto(vla-get-rotation vla_ee2)
    81.                                 insertp(cdr(assoc 10(entget(caar(reverse nentsel_e2)))))
    82.                         )
    83.                         (setq shuzu2 (caddr nentsel_e2))
    84.                         (setq variant_shuzu2 (vlax-make-safearray  vlax-vbDouble '(0 . 3)'(0 . 3) ))
    85.                         (command "undo" "be" )
    86.                         (vlax-safearray-fill variant_shuzu2 shuzu2)
    87.                         (vla-transformby vla_e2 variant_shuzu2)
    88.                         (command "undo" "e" )
    89.                         (setq point_e2(vlax-curve-getClosestPointTo vla_e2 point_e2 ))
    90.                         (command "undo" 1 )
    91.                 )
    92.         )
    93.         (if (=(vla-get-objectname vla_e1)"AcDbLine" )
    94.                 (progn
    95.                         (changedxf10<->11  s1)
    96.                         (entupd e1)
    97.                         (setq s1 ss ss nil )
    98.                         (setq
    99.                                 dxf10_e1(cdr (assoc 10 s1))
    100.                                 dxf11_e1(cdr (assoc 11 s1))
    101.                         )
    102.                         (setq vla_e1_ang(vla-get-angle vla_e1))
    103.                 )
    104.         )
    105.         (if (=(vla-get-objectname vla_e2)"AcDbLine" )
    106.                 (progn
    107.                         (changedxf10<->11  s2)
    108.                         (entupd e2)
    109.                         (setq s2 ss ss nil)
    110.                         (setq
    111.                                 dxf10_e2(cdr (assoc 10 s2))
    112.                                 dxf11_e2(cdr (assoc 11 s2))
    113.                         )
    114.                         (setq vla_e2_ang(vla-get-angle vla_e2))
    115.                 )
    116.         )
    117.         (if (=(vla-get-objectname vla_e1)"AcDbPolyline" )
    118.                 (progn
    119.                         (setq pline1_dxf10(vla-get-coordinates vla_e1))
    120.                         (setq dxf_e1 (vlax-safearray->list(vlax-variant-value pline1_dxf10)))
    121.                         (setq  fglst nil)
    122.                         (fgb dxf_e1)
    123.                         (setq dxf10_lst fglst n 0)
    124.                         (if (> (length nentsel_e1) 2)
    125.                                 (progn
    126.                                         (setq dxf10_lst(mapcar (function(lambda(x)(trans  x (caar(reverse nentsel_e1)) 0)))dxf10_lst))
    127.                                         (setq dxf10_lst(mapcar (function(lambda(x)(ocs->wcs x shuzu1)))dxf10_lst))
    128.                                 )
    129.                         )
    130.                         (while(< n (length dxf10_lst))
    131.                                 (cond
    132.                                         ((< n (1-(length dxf10_lst)))(setq nthn1 (nth n dxf10_lst))(setq nthn2 (nth (1+ n) dxf10_lst)))
    133.                                         ((= n (1-(length dxf10_lst)))(setq nthn1 (nth n dxf10_lst))(setq nthn2 (nth 0 dxf10_lst)))
    134.                                 )
    135.                                 (setq point_ee1(vlax-curve-getClosestPointTo (setq vla_e1(vla-addline myms (vlax-3d-point nthn1)(vlax-3d-point nthn2)))point_e1 ))
    136.                                 (if
    137.                                         (not
    138.                                                 (and
    139.                                                         (equal (car point_e1)(car point_ee1) 1e-3)
    140.                                                         (equal (cadr point_e1)(cadr point_ee1) 1e-3)
    141.                                                         (equal (caddr point_e1)(caddr point_ee1) 1e-3)
    142.                                                 )
    143.                                         )
    144.                                         (progn
    145.                                                 (vla-delete vla_e1)
    146.                                                 (setq n(1+ n))
    147.                                         )
    148.                                         (progn
    149.                                                 (setq e1(vlax-vla-object->ename vla_e1))
    150.                                                 (setq s1 (entget e1))
    151.                                                 (setq sss (ssadd))
    152.                                                 (setq sss(ssadd e1 sss ))
    153.                                                 (setq n (length dxf10_lst))
    154.                                         )
    155.                                 )
    156.                         )
    157.                         (if (=(vla-get-objectname vla_e1)"AcDbLine" )
    158.                                 (progn
    159.                                         (changedxf10<->11 s1)
    160.                                         (setq s1 ss ss nil)
    161.                                         (entupd e1)
    162.                                         (setq
    163.                                                 dxf10_e1(cdr (assoc 10 s1))
    164.                                                 dxf11_e1(cdr (assoc 11 s1))
    165.                                         )
    166.                                         (setq vla_e1_ang(vla-get-angle vla_e1))
    167.                                 )
    168.                         )                        
    169.                 )
    170.         )
    171.         (if (=(vla-get-objectname vla_e2)"AcDbPolyline" )
    172.                 (progn
    173.                         (setq pline2_dxf10(vla-get-coordinates vla_e2))
    174.                         (setq dxf_e2 (vlax-safearray->list(vlax-variant-value pline2_dxf10)))
    175.                         (setq  fglst nil)
    176.                         (fgb dxf_e2)
    177.                         (setq dxf10_lst fglst n 0)
    178.                         (if (> (length nentsel_e2) 2)
    179.                                 (progn
    180.                                         (setq dxf10_lst(mapcar (function(lambda(x)(trans  x (caar(reverse nentsel_e2)) 0)))dxf10_lst))
    181.                                         (setq dxf10_lst(mapcar (function(lambda(x)(ocs->wcs x shuzu2)))dxf10_lst))
    182.                                 )
    183.                         )
    184.                         (while(< n (length dxf10_lst))
    185.                                 (cond
    186.                                         ((< n (1-(length dxf10_lst)))(setq nthn1 (nth n dxf10_lst))(setq nthn2 (nth (1+ n) dxf10_lst)))
    187.                                         ((= n (1-(length dxf10_lst)))(setq nthn1 (nth n dxf10_lst))(setq nthn2 (nth 0 dxf10_lst)))
    188.                                 )
    189.                                 (setq point_ee2(vlax-curve-getClosestPointTo (setq vla_e2(vla-addline myms (vlax-3d-point nthn1)(vlax-3d-point nthn2)))point_e2 ))
    190.                                 (if
    191.                                         (not
    192.                                                 (and
    193.                                                         (equal (car point_e2)(car point_ee2) 1e-3)
    194.                                                         (equal (cadr point_e2)(cadr point_ee2) 1e-3)
    195.                                                         (equal (caddr point_e2)(caddr point_ee2) 1e-3)
    196.                                                 )
    197.                                         )
    198.                                         (progn
    199.                                                 (vla-delete vla_e2)
    200.                                                 (setq n(1+ n))
    201.                                         )
    202.                                         (progn
    203.                                                 (setq e2(vlax-vla-object->ename vla_e2))
    204.                                                 (setq s2 (entget e2))
    205.                                                 (setq sss(ssadd e2 sss ))
    206.                                                 (setq n (length dxf10_lst))
    207.                                         )
    208.                                 )
    209.                         )
    210.                         (if (=(vla-get-objectname vla_e2)"AcDbLine" )
    211.                                 (progn
    212.                                         (changedxf10<->11  s2)
    213.                                         (entupd e2)
    214.                                         (setq s2 ss ss nil)
    215.                                         (setq
    216.                                                 dxf10_e2(cdr (assoc 10 s2))
    217.                                                 dxf11_e2(cdr (assoc 11 s2))
    218.                                         )
    219.                                         (setq vla_e2_ang(vla-get-angle vla_e2))
    220.                                 )
    221.                         )
    222.                 )   
    223.         )
    224.         (cond
    225.                 (
    226.                         (or
    227.                                 (EQUAL  vla_e1_ang vla_e2_ang 1E-4)
    228.                                 (EQUAL (abs(-  vla_e1_ang vla_e2_ang )) pi 1e-4)
    229.                         )
    230.                        
    231.                         (setq n 1)
    232.                         (repeat (1- *num_fenge*)
    233.                                 (if
    234.                                         (and
    235.                                                 (=(cdr(assoc 0(entget(car nentsel_e1))))"LINE" )
    236.                                                 (=(cdr(assoc 0(entget(car nentsel_e2))))"LINE" )
    237.                                                 (/=(last (cadr shuzu1))0)
    238.                                                 (/=(last (cadr shuzu2))0)
    239.                                                 (> (length nentsel_e1) 2)
    240.                                                 (> (length nentsel_e2) 2)
    241.                                         )
    242.                                         (progn
    243.                                                 (command "undo" "be" )
    244.                                                 (vlax-safearray-fill variant_shuzu1 shuzu1)
    245.                                                 (vla-transformby vla_e1 variant_shuzu1)
    246.                                                 (vlax-safearray-fill variant_shuzu2 shuzu2)
    247.                                                 (vla-transformby vla_e2 variant_shuzu2)
    248.                                                 (command "undo" "e" )
    249.                                                 (setq point_e1_start(3d->2d(vlax-safearray->list(vlax-variant-value(vla-get-startpoint vla_e1  )))))
    250.                                                 (setq point_e1_end(3d->2d(vlax-safearray->list(vlax-variant-value(vla-get-endpoint vla_e1  )))))
    251.                                                 (if (>(cadr point_e1_start)(cadr point_e1_end))
    252.                                                         (progn
    253.                                                                 (setq point_e1_start(list (car point_e1_start)(cadr point_e1_end)0.0))
    254.                                                                 (setq point_e1_end(list (car point_e1_end)(cadr point_e1_start)0.0))
    255.                                                         )
    256.                                                 )
    257.                                                 (setq point_e2_start(3d->2d(vlax-safearray->list(vlax-variant-value(vla-get-startpoint vla_e2  )))))
    258.                                                 (setq point_e2_end(3d->2d(vlax-safearray->list(vlax-variant-value(vla-get-endpoint vla_e2  )))))
    259.                                                 (if (>(cadr point_e2_start)(cadr point_e2_end))
    260.                                                         (progn
    261.                                                                 (setq point_e2_start(list (car point_e2_start)(cadr point_e2_end)0.0))
    262.                                                                 (setq point_e2_end(list (car point_e2_end)(cadr point_e2_start)0.0))
    263.                                                         )
    264.                                                 )
    265.                                                 (command "undo" 1 )
    266.                                                 (setq myline(vla-addline myms (vlax-3d-point point_e1_start)(vlax-3d-point point_e1_end)))
    267.                                                 (setq dist_num(/(distance dxf10_e1 dxf10_e2) *num_fenge* ))
    268.                                                 (vla-move myline  (vlax-3d-point point_e1_start) (vlax-3d-point(polar point_e1_start (angle point_e1_start point_e2_start) (* dist_num n))))
    269.                                         )
    270.                                         (progn
    271.                                                 (setq myline(vla-copy  vla_e1))
    272.                                                 (setq dist_num(/(distance dxf10_e1 dxf10_e2) *num_fenge* ))
    273.                                                 (vla-move myline  (vlax-3d-point dxf10_e1) (vlax-3d-point(polar dxf10_e1 (angle dxf10_e1 dxf10_e2) (* dist_num n))))
    274.                                         )
    275.                                 )
    276.                                 (setq n (1+ n))
    277.                         )
    278.                         (princ (strcat "\nBisect distance is " (rtos dist_num 2 2) ))
    279.                 )
    280.                 (
    281.                         (and
    282.                                 (/= vla_e1_ang vla_e2_ang)
    283.                                 (wcmatch(vla-get-objectname vla_e1)"*Line" )
    284.                         )
    285.                         (if (setq inters_e1_e2 (inters dxf10_e1 dxf11_e1 dxf10_e2 dxf11_e2 ))
    286.                                 (progn
    287.                                         (setq myline1 (vla-addline myms (vlax-3d-point inters_e1_e2) (vlax-3d-point point_e1)))
    288.                                         (setq myline1_ang(vla-get-angle myline1))
    289.                                         (setq myline2 (vla-addline myms (vlax-3d-point inters_e1_e2) (vlax-3d-point point_e2)))
    290.                                         (setq myline2_ang(vla-get-angle myline2))
    291.                                         (if
    292.                                                 (or
    293.                                                         (and(>= myline1_ang pi )(>= myline2_ang pi ))
    294.                                                         (and(<= myline1_ang pi )(<= myline2_ang pi ))
    295.                                                         (and (> myline1_ang (/ pi 2))(< myline1_ang myline2_ang))
    296.                                                         (and(> myline1_ang myline2_ang)(> (* 1.5 pi) myline1_ang pi ))
    297.                                                 )
    298.                                                 (setq  inters_angle (- myline1_ang  myline2_ang))
    299.                                                 (progn
    300.                                                         (if (< myline1_ang myline2_ang)
    301.                                                                 (setq  inters_angle (- myline1_ang  (- myline2_ang (* 2 pi))))
    302.                                                                 (setq  inters_angle (-(- myline1_ang (* 2 pi)) myline2_ang ))
    303.                                                         )
    304.                                                 )
    305.                                         )
    306.                                         (repeat (1- *num_fenge*)
    307.                                                 (setq angle_num (* -1(/ inters_angle *num_fenge*)))
    308.                                                 (vla-rotate myline1 (vlax-3d-point inters_e1_e2)  angle_num)
    309.                                                 (setq myline1(vla-copy myline1))
    310.                                         )
    311.                                         (vla-delete myline2)
    312.                                         (princ (strcat "\nBisect angle is " (rtos (abs(*(/ angle_num pi)180)) 2 2) ))
    313.                                 )
    314.                                 (progn
    315.                                         (if (setq inters_e1_e2 (inters dxf10_e1 dxf11_e1 dxf10_e2 dxf11_e2 nil))
    316.                                                 (progn
    317.                                                         (setq inters_e1_angle (angle inters_e1_e2 dxf10_e1))
    318.                                                         (setq inters_e2_angle (angle inters_e1_e2 dxf10_e2))
    319.                                                         (if (> inters_e1_angle inters_e2_angle)
    320.                                                                 (setq myline(vla-addline myms (vlax-3d-point inters_e1_e2)
    321.                                                                 (vlax-3d-point(polar inters_e1_e2 (setq inters_angle(+(/(- inters_e1_angle inters_e2_angle)2)inters_e2_angle))(vla-get-length vla_e1)))))
    322.                                                                 (setq myline(vla-addline myms (vlax-3d-point inters_e1_e2)
    323.                                                                 (vlax-3d-point(polar inters_e1_e2 (setq inters_angle(+(/(- inters_e2_angle inters_e1_angle)2)inters_e1_angle))(vla-get-length vla_e1)))))
    324.                                                         )
    325.                                                         (vla-move myline (vlax-3d-point inters_e1_e2)
    326.                                                                 (if (>= inters_angle  pi )
    327.                                                                         (vlax-3d-point (polar dxf11_e1 (angle dxf11_e1 dxf11_e2)(/(distance dxf11_e1 dxf11_e2)2)))
    328.                                                                         (vlax-3d-point (polar dxf10_e1 (angle dxf10_e1 dxf10_e2)(/(distance dxf10_e1 dxf10_e2)2)))
    329.                                                                 )
    330.                                                         )
    331.                                                 )
    332.                                         )
    333.                                         (princ (strcat "\nBisect angle is" (rtos (abs(*(/ (if (> inters_angle pi)(setq inters_angle (- inters_angle (* 1.5 pi) ))inters_angle)pi) 180)) 2 2) ))
    334.                                 )
    335.                         )
    336.                 )
    337.         )
    338.         (if (or(=(vla-get-objectname vla_e1)"AcDbCircle" )(=(vla-get-objectname vla_e1)"AcDbArc" ))
    339.                 (progn
    340.                         (setq
    341.                                 center (vla-get-center vla_e1)
    342.                                 radius (vla-get-radius vla_e1)
    343.                         )
    344.                         (cond
    345.                                 ((=(vla-get-objectname vla_e1)"AcDbArc" )
    346.                                         (setq
    347.                                                 myline (vla-addline myms center (vla-get-startpoint vla_e1))
    348.                                                 angle_total  (vla-get-totalangle vla_e1)
    349.                                         )
    350.                                 )
    351.                                 (t
    352.                                         (setq
    353.                                                 myline (vla-addline myms center (vlax-3d-point point_e1))
    354.                                                 angle_total  (* pi 2)
    355.                                         )
    356.                                 )
    357.                         )
    358.                         (setq n 1)
    359.                         (repeat (1- *num_fenge*)
    360.                                 (setq myline(vla-copy  myline))
    361.                                 (setq angle_num (/  angle_total   *num_fenge*))
    362.                                 (vla-rotate myline center angle_num)
    363.                                 (setq n (1+ n))
    364.                         )
    365.                         (princ (strcat "\nBisect angle is" (rtos (abs(*(/ angle_num pi)180)) 2 2) ))
    366.                 )
    367.         )
    368.         (setq n 0)
    369.         (if (>(sslength sss)0)
    370.                 (repeat (sslength sss)
    371.                         (command "erase" (ssname sss n) "")
    372.                         (setq n(1+ n))
    373.                 )
    374.         )
    375. )
    376. (SETvar  "osmode" oldosmode)
    377. (SETvar  "ltscale" oldltscale)
    378. (princ "\n Thanks for use bisect tools, by yjr111")
    379. (princ)
    380. )
    381. ;;;(setq lst '(20882.6 12429.7 35344.0 12429.7 35344.0 8473.39 20882.6 8473.39))
    382. ;;;(fgb lst) ((20882.6 12429.7)(35344.0 12429.7)(35344.0 8473.39)(20882.6 8473.39))
    383. (defun fgb(lst / fglst1 dxf10 n)
    384. (setq n 0 i 0)
    385. (repeat (/(length lst)2)
    386.         (repeat 2
    387.                 (setq  dxf10 (nth n lst))
    388.                 (setq fglst1 (append fglst1 (list dxf10 )))
    389.                 (setq n (1+ n))
    390.         )
    391.         (setq fglst (append  fglst (list fglst1 )))
    392.         (setq fglst1 nil)
    393.         (setq i(1+ i))
    394. )
    395. )
    396. (defun changedxf10<->11(s)
    397. (cond
    398.         ((or
    399.                 (> (cadr (cdr(assoc 10 s))) (cadr (cdr(assoc 11 s))))
    400.                 (and
    401.                         (= (cadr (cdr(assoc 10 s))) (cadr (cdr(assoc 11 s))))
    402.                         (>(car (cdr(assoc 10 s))) (car (cdr(assoc 11 s))))
    403.                 )
    404.         )
    405.         (setq s(subst (cons 12 (cdr(assoc 10 s))) (assoc 10 s) s))
    406.         (setq s(subst (cons 10 (cdr(assoc 11 s))) (assoc 11 s) s))
    407.         (setq s(subst (cons 11 (cdr(assoc 12 s))) (assoc 12 s) s))
    408.         (entmod s)
    409.         )
    410. )
    411. (setq ss s)
    412. )
    413. ;;ocs->wcs
    414. (defun ocs->wcs(p1 shuzu )
    415. (setq shuzu_nth0 (nth 0 shuzu) shuzu_nth1 (nth 1 shuzu) shuzu_nth2 (nth 2 shuzu) shuzu_nth3 (nth 3 shuzu))
    416. (setq trans_point
    417.         (list
    418.                 (+(*(car p1)(car shuzu_nth0))(*(cadr p1)(cadr shuzu_nth0))(*(caddr p1)(caddr shuzu_nth0))(cadddr shuzu_nth0) )
    419.                 (+(*(car p1)(car shuzu_nth1))(*(cadr p1)(cadr shuzu_nth1))(*(caddr p1)(caddr shuzu_nth1))(cadddr shuzu_nth1) )
    420.                 (+(*(car p1)(car shuzu_nth2))(*(cadr p1)(cadr shuzu_nth2))(*(caddr p1)(caddr shuzu_nth2))(cadddr shuzu_nth2) )
    421.         )
    422. )
    423.    (setq point_e trans_point)
    424. )
    425. ;;3Dpoint->2Dpoint
    426. (defun 3d->2d(p)
    427. (setq p (list(car p)(cadr p)0.0))
    428. )

     
    但仍有一些缺陷,例如:无交点(角度)
    回复

    使用道具 举报

    96

    主题

    351

    帖子

    62

    银币

    中流砥柱

    Rank: 25

    铜币
    692
    发表于 2022-7-5 17:19:22 | 显示全部楼层
     
    嗨,大卫,
    在以下两种情况下仍然无法绘制平分线
    172012j21e1e60e0j2h1k6.png
     
    我修改了你的代码。请不要介意。
    1. (defun c:bisect
    2. (
    3.         /
    4.         ent1
    5.         ent2
    6.         int
    7.         e1
    8.         ss
    9.         e2
    10.         d1
    11.         p10
    12.         p11
    13.         d2
    14.         p20
    15.         p21
    16.         p30
    17.         p31
    18.         a
    19.         ad
    20.         q
    21.         a1
    22.         s1
    23.         p1
    24.         a2
    25.         s2
    26.         p2
    27.         vp
    28.         sa
    29.         ea
    30.         ia
    31.         i
    32. )
    33. (if
    34.         (and
    35.                 (setq ent1 (select_e "LINE" "\n>>>Choose first line : "))
    36.                 (setq ent2 (select_e "LINE" "\n>>>Choose second line : "))
    37.         )
    38.         (progn
    39.                 (initget 7)
    40.                 (setq q (getint "\nNumber Of Bisector Lines: "))
    41.                 (setq e1 (car ent1))
    42.                 (setq e2 (car ent2))
    43.                 (redraw e1 3)
    44.                 (redraw e2 3)
    45.                 (setq int(LM:intersections (vlax-ename->vla-object e1) (vlax-ename->vla-object e2) acextendboth))
    46.                 (cond
    47.                         ((= int nil)
    48.                                 (setq
    49.                                         d1 (entget e1)
    50.                                         p10 (cdr (assoc 10 d1))
    51.                                         p11 (cdr (assoc 11 d1))
    52.                                 )
    53.                                 (setq
    54.                                         d2 (entget e2)
    55.                                         p20 (cdr (assoc 10 d2))
    56.                                         p21 (cdr (assoc 11 d2))
    57.                                 )
    58.                                 (if(inters p10 p20 p11 p21)
    59.                                         (setq
    60.                                                 p30 p21
    61.                                                 p31 p20
    62.                                         )
    63.                                         (setq
    64.                                                 p30 p20
    65.                                                 p31 p21
    66.                                         )
    67.                                 )
    68.                                 (setq
    69.                                         a1 (angle p10 p30)
    70.                                         s1 (/ (distance p10 p30) (+ q 1))
    71.                                         p1 (polar p10 a1 s1)
    72.                                 )
    73.                                 (setq
    74.                                         a2 (angle p11 p31)
    75.                                         s2 (/ (distance p11 p31) (+ q 1))
    76.                                         p2 (polar p11 a2 s2)
    77.                                 )
    78.                                 (grdraw p10 p10 2)
    79.                                 (grdraw p11 p11 3)
    80.                                 (repeat q
    81.                                         (entmake
    82.                                                 (list
    83.                                                         (cons 0 "LINE")
    84.                                                         (cons 62 1)
    85.                                                         (cons 10 p1)
    86.                                                         (cons 11 p2)
    87.                                                 )
    88.                                         )
    89.                                         (setq
    90.                                                 p1 (polar p1 a1 s1)
    91.                                                 p2 (polar p2 a2 s2)
    92.                                         )
    93.                                 )
    94.                         )
    95.                         (int
    96.                                 (setq ed1 (entget e1))
    97.                                 (setq ed2 (entget e2))
    98.                                 (SETVAR "FILLETRAD" 0)
    99.                                 (command "_.fillet" ent1 ent2)
    100.                                 (setq
    101.                                         d1 (entget e1)
    102.                                         p10 (cdr (assoc 10 d1))
    103.                                         p11 (cdr (assoc 11 d1))
    104.                                 )
    105.                                 (setq
    106.                                         d2 (entget e2)
    107.                                         p20 (cdr (assoc 10 d2))
    108.                                         p21 (cdr (assoc 11 d2))
    109.                                 )
    110.                                 (cond
    111.                                         ((equal p10 p20 1e- (setq vp p10 p1 p11 p2 p21))
    112.                                         ((equal p10 p21 1e- (setq vp p10 p1 p11 p2 p20))
    113.                                         ((equal p11 p20 1e- (setq vp p11 p1 p10 p2 p21))
    114.                                         ((equal p11 p21 1e- (setq vp p11 p1 p10 p2 p20))
    115.                                 )
    116.                                 (if(gc:clockwise-p p1 vp p2)
    117.                                         (setq
    118.                                                 sa (angle vp p1)
    119.                                                 ea (angle vp p2)
    120.                                         )
    121.                                         (setq
    122.                                                 ea (angle vp p1)
    123.                                                 sa (angle vp p2)
    124.                                         )
    125.                                 )
    126.                                 (setq ia (if (> sa ea)(+ (- (* 2 pi) sa) ea)(- ea sa)))
    127.                                 (setq
    128.                                         a (/ ia (1+ q))
    129.                                         i 1
    130.                                 )
    131.                                 (repeat q
    132.                                         (entmake
    133.                                                 (list
    134.                                                         (cons 0 "LINE")
    135.                                                         (cons 62 1)
    136.                                                         (cons 10 vp)
    137.                                                         (cons 11 (polar vp (+ sa (* a i)) (distance vp p1)))
    138.                                                 )
    139.                                         )
    140.                                         (setq i (1+ i))
    141.                                 )
    142.                                 (entmod ed1)
    143.                                 (entmod ed2)
    144.                         )
    145.                 );end_cond
    146.         );end_progn
    147. );end_if
    148. (princ)
    149. )
    150. (defun gc:clockwise-p ( p1 p2 p3 )
    151. (< (sin (- (angle p1 p3) (angle p1 p2))) -1e-14)
    152. )
    153. (defun select_e ( x msg / e sel)
    154. (while (not e)
    155.         (setq sel (entsel msg))
    156.         (cond
    157.                 ((= nul sel) (princ "\n***No object selected. Please try again! ") )
    158.                 ((/= x (cdr (assoc 0 (entget (car sel))))) (princ "\n***Invalid choice! " ) )        
    159.                 ((= x (cdr (assoc 0 (entget (car sel))))) (setq e sel) )
    160.                 (t nil )
    161.         )
    162. )
    163. )
    164. (defun LM:intersections ( ob1 ob2 mod / lst rtn )
    165. (setq lst (vlax-invoke ob1 'intersectwith ob2 mod))
    166. (repeat (/ (length lst) 3)
    167.         (setq rtn (cons (list (car lst) (cadr lst) (caddr lst)) rtn)
    168.                 lst (cdddr lst)
    169.         )
    170. )
    171. (reverse rtn)
    172. )
    回复

    使用道具 举报

    96

    主题

    351

    帖子

    62

    银币

    中流砥柱

    Rank: 25

    铜币
    692
    发表于 2022-7-5 17:21:02 | 显示全部楼层
    可以添加检查共线功能,如果共线,则退出。
     
    @李·麦克
     
    尊敬的李:
    我使用LM:listcolliner-p函数,发现了一个问题。为什么?
    1. ;; Collinear-p  -  Lee Mac
    2. ;; Returns T if p1,p2,p3 are collinear
    3. (defun LM:Collinear-p ( p1 p2 p3 )
    4. (
    5.         (lambda ( a b c )
    6.                 (or
    7.                         (equal (+ a b) c 1e-
    8.                         (equal (+ b c) a 1e-
    9.                         (equal (+ c a) b 1e-
    10.                 )
    11.         )
    12.         (distance p1 p2) (distance p2 p3) (distance p1 p3)
    13. )
    14. )
    15. ;; Returns T if all point in a list are collinear
    16. (defun LM:ListCollinear-p ( lst )
    17.    (or (null (cddr lst))
    18.        (and (LM:Collinear-p (car lst) (cadr lst) (caddr lst))
    19.                 (LM:ListCollinear-p (cdr lst))
    20.         )
    21. )
    22. )
    1. (setq lst '((4918.51 1699.6 0.0) (4467.33 1357.01 0.0) (4467.33 1357.01 0.0) (5283.96 1253.34 0.0)))
    2. (LM:ListCollinear-p lst)  

    为什么返回“T”?
     
    列表中的四个元素是两条线的顶点。
    必须使用LM:unique删除重复元素?
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

    QQ|关于我们|小黑屋|乐筑天下 繁体中文

    GMT+8, 2025-8-20 21:47 , Processed in 1.069876 second(s), 74 queries .

    © 2020-2025 乐筑天下

    联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表