找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2693|回复: 52

[讨论]:如何找到多义线的对角点

[复制链接]
发表于 2005-4-25 17:58:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
如图所示,我如何用程序选择集(ssget)得到左下点及右上点的坐标位置?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-4-26 00:04:03 | 显示全部楼层
1 先 getcorner 后用 ssget
2 用GetBoundingBox
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-26 12:59:01 | 显示全部楼层
具体要如何写呢,求教班竹~!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-4-26 13:11:29 | 显示全部楼层
你的程序什么作用,那个Pline 线一定是如图放置的矩形?所示Pline 是一根还是分开的多段?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-26 23:44:38 | 显示全部楼层
以上的矩形是由多段Line线段用Pedit生成的聚合线
程序所要做的-->见flash
需将总图里的所有物件分散拆出来,得完成以下多个步骤:
1,选择图框
2,定义第一块模板对角点
3,定义第二块模板对角点
4,定义第三块模板对角点
5,定义第四块模板对角点
6,定义第五块模板对角点
7,输入模板数量
我想只选择图框后即执行第7项,输入模板数量,而2~6项由程序自动找出。
决定条件:
1,所有需拆分的模板仅为选择到图框内的物体
2,所有模板图层皆由代号,而且是一定的
3,所有模板外形不会像上面所说的规规矩矩的方形,有可能会缺角的长方形等
以上能帮我写出这段程序来吗?(最好不要只写思路,因为我不太懂程序,特别是VLISP)谢谢了~!


以下是程序的开头,由于太多了没贴完(约140KB)主用是用来捕捉对角点来找到方框内存在的物件
(defun c:cai (/)
(init_bonus_error (list(list "cmdecho" 0 "expert" 0 "osmode" 39)T))
  (command "ucs" "")
  (setq os(getvar "osmode" ))
  (setvar "osmode" 0)
  (setvar "cmdecho" 0)
  (setq tk(car(entsel "\nPlease pick tu kuang!")))
  (setvar "osmode" 32)
  (setq isk1 0 isk2 0 isk3 0 isk4 0 isk5 0 isk6 0 isk7 0 isk8 0 isk9 0 isk10 0 isk11 0 isk12 0)
  (if d01c1
    (if (getpoint "\nPlease input D01 DOWN_LEFT point:<Enter is last data!>")
      (print "ok!")
    )
    (setq d01c1(getpoint "\nPlease input D01 DOWN_LEFT point:"))
  )
  (if d01c2
    (if (getpoint "\nPlease input D01 UP_RIGHT point:<Enter is last data!>")
      (print "ok!")
    )
    (setq d01c2(getpoint "\nPlease input D01 UP_RIGHT point:"))
  )
  (command "zoom" "w" d01c1 d01c2)
  (command "zoom" "s" "0.9x")
  (if d03c1
    (if (getpoint "\nPlease input D03 DOWN_LEFT point:<Enter is last data!>")
      (print "ok!")
    )
    (setq d03c1(getpoint "\nPlease input D03 DOWN_LEFT point:"))
  )
  (if d03c2
    (if (getpoint "\nPlease input D03 UP_RIGHT point:<Enter is last data!>")
      (print "ok!")
    )
    (setq d03c2(getpoint "\nPlease input D03 UP_RIGHT point:"))
  )
  ;(setq d03c1(getpoint "\nPlease input D03 DOWN_LEFT point:"))
  ;(setq d03c2(getpoint "\nPlease input D03 UP_RIGHT point:"))
  (if d05c1
    (if (getpoint "\nPlease input D05 DOWN_LEFT point:<Enter is last data!>")
      (print "ok!")
    )
    (setq d05c1(getpoint "\nPlease input D05 DOWN_LEFT point:"))
  )
  (if d05c2
    (if (getpoint "\nPlease input D05 UP_RIGHT point:<Enter is last data!>")
      (print "ok!")
    )
    (setq d05c2(getpoint "\nPlease input D05 UP_RIGHT point:"))
  )  
  ;(setq d05c1(getpoint "\nPlease input D05 DOWN_LEFT point:"))
  ;(setq d05c2(getpoint "\nPlease input D05 UP_RIGHT point:"))
  (if(tblsearch "layer" "p01a")
    (if(setq p01c1(getpoint "\nPlease input P01 DOWN_LEFT point:<Enter P01 size = D03 size>"))
       (setq p01c2(getpoint "\nPlease input P01 UP_RIGHT point:"))
       (progn
         (setq p01c1 d03c1)
         (setq p01c2 d03c2)
       )
    )
  )
  (if(setq P03c1(getpoint "\nPlease input P03 DOWN_LEFT point:<Enter P03 size = D03 size>"))
     (setq P03c2(getpoint "\nPlease input P03 UP_RIGHT point:"))
     (progn
       (setq p03c1 d03c1)
       (setq p03c2 d03c2)
     )
  )
  (setvar "osmode" 0)
  (if(not(setq fenban_num(getint"\n输入模板数量<1>:")))
      (setq fenban_num 1)
  )
  (setq space " ")
  (if(not(tblsearch "layer" "1"))
    (command "-layer" "n" "1" "c" "3" "1" "")
  )
  (if(not(tblsearch "layer" "TEXT"))
    (command "-layer" "n" "TEXT" "c" "2" "TEXT" "")
  )
  (if(not(tblsearch "layer" "DIM"))
    (command "-layer" "n" "DIM" "c" "2" "DIM" "")
  )
  (command "-style" "txt01" "china.shx" "" "0.7" "" "" "" "")
  (tukuang)
  (tbanhou)
  (d01cx)
  (d02cx)
  (d03cx)
  (d04cx)
  (d05cx)
  (if(tblsearch "layer" "p01a")(p01cx))
  (if(tblsearch "layer" "p02a")(p02cx))
  (p03cx)
  (p04cx)
  (p05cx)
  (s01cx)
  (s02cx)
  (lingjian)
  (setvar "osmode" os)
  (print "ok")
)

(defun tukuang(/ tkp1 tkp2 tkp3 tk1 tk2 tk3 tk4 tk5 tk6)
  (setq tkp1(cdr(assoc 10 (entget tk))))               ;
  (setq tkk(cdr(assoc 41 (entget tk))))                ;
  (setq tkp2(list(-(car tkp1) 360) (+ (cadr tkp1)(* tkk 200) 380)))
  (setq tkp3(list(+(car tkp1)(* tkk 289) 360) (+ (cadr tkp1)(* tkk 200) 380)))

  (setq tk1(entget(entnext(entnext(entnext(entnext(entnext tk)))))))      
  (setq mo_style(cdr(assoc 1 tk1)))                            ;家ㄣ?Α
  (setq tk2(entget(entnext(entnext(entnext(entnext(entnext(entnext tk))))))))
  (setq mo_t(cdr(assoc 1 tk2)))                                ;≧?痉?
  (setq tk3(entget(entnext(entnext(entnext(entnext(entnext(entnext(entnext tk)))))))))
  (setq mo_h(cdr(assoc 1 tk3)))                                ;超家蔼?
  (setq tk4(entget(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext tk))))))))))
  (setq mo_name(substr (cdr(assoc 1 tk4)) 1 10))                ;家ㄣ絪腹
  (setq tk5(entget(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext tk)))))))))))
  (setq mo_kehu(substr (cdr(assoc 1 tk5)) 1 10))                ;?め
  (setq tk6(entget(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext tk))))))))))))
  (setq mo_pinming(substr (cdr(assoc 1 tk6)) 1 30))             ;珇?
  (setq tk7(entget(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext tk)))))))))))))
  (setq mo_jizhong(substr (cdr(assoc 1 tk7)) 1 10))             ;诀贺
  (setq tk8(entget(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext tk))))))))))))))
  (setq mo_liaohao(substr (cdr(assoc 1 tk8)) 1 15))             ;?腹
  (setq tk9(entget(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext tk)))))))))))))))
  (setq mo_cmatl(substr (cdr(assoc 1 tk9)) 1 15))               ;≧???
  (setq tk10(entget(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext tk))))))))))))))))
  (setq mo_maobian(substr (cdr(assoc 1 tk10)) 1 4))            ;を娩よ?
  (setq tk11(entget(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext tk)))))))))))))))))
  (setq mo_matl(substr (cdr(assoc 1 tk11)) 1 15))               ;??砏?
  (setq tk12(entget(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext tk))))))))))))))))))
  (setq mo_file(substr (cdr(assoc 1 tk12)) 1 30))               ;郎?隔畖(30琌?す砛陪ボ30?计?)
  (setq tk13(entget(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext tk)))))))))))))))))))
  (setq design_name(substr (cdr(assoc 1 tk13)) 1 10))
  (setq tk14(entget(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext(entnext tk))))))))))))))))))))
  (setq design_date(substr (cdr(assoc 1 tk14)) 1 10))
  ;;;;write text
  (command "-layer" "s" "1" "")
  (command "text" "j" "r" tkp2 200 "" mo_name)
  (command "text" tkp3 200 "" (strcat mo_kehu mo_liaohao))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun d01cx(/ s tkp1 isp1 tkcp1 tkcp2 text_point)
  (setq s(ssget "c" d01c1 d01c2))
  (setq tkp1(cdr(assoc 10 (entget tk))))
  ;;;;;
  (if(<= (abs(/ (- (car d01c1)(car d01c2)) (-(cadr d01c1)(cadr d01c2)))) 1.8  )                  (setq isk1 (/ (abs(-(cadr d01c1)(cadr d01c2))) 100))                                         (setq isk1 (/ (abs(- (car d01c1)(car d01c2))) 205))                                      
  )
  (if(> isk1 2.5)                                                                           
    (setq isk1(* isk1 0.85))                                                                 
  )
  ;;;;;
  (setq isp1(list(- (car tkp1) 360 (* 289 isk1))(-(+(cadr tkp1)(* 200 tkk))(* 200 isk1))))
  (setq tkcp1(list(/(+ (car d01c1)(car d01c2)) 2)  (/(+ (cadr d01c1)(cadr d01c2)) 2) ))
  (setq tkcp2(list(+ (car isp1)(* 140 isk1)) (+ (cadr isp1)(* 115 isk1))))                  
  (command "-layer" "lo" "*" "u" "d01a" "")
  (command "copy" s "" tkcp1 tkcp2 "")
  (command "insert" "A3" "s" isk1 isp1 "" "?Λ狾" d01_thick d01_caizi d01_heat mo_style mo_t mo_h mo_name mo_kehu mo_pinming mo_jizhong mo_liaohao mo_cmatl mo_maobian mo_matl mo_file design_name design_date "" "" "X" "X" "" "" "" "")
;  (if(= nil d01_mat)
;    (command "insert" "A3" "s" isk1 isp1 "" "" "" "" name liaohao "BOTTOM SUPPORTING PLATE" mohao
;             (strcat gzhao "-D01A")
;             "A3" space "1" design_name design_date "%%P0.5" "%%P0.1" "%%P0.005" "%%P0.002"""
;             "%%P0.1%%D" "%%P0.02%%D" "" "MM" "" "" "" "")
;    (command "insert" "A3" "s" isk1 isp1 "" "" "" "" name liaohao "BOTTOM SUPPORTING PLATE" mohao
;             (strcat gzhao "-D01A")
;             d01_mat space "1" design_name design_date "%%P0.5" "%%P0.1" "%%P0.005" "%%P0.002"""
;             "%%P0.1%%D" "%%P0.02%%D" "" "MM" "" "" "" "")
;  )
  ;;;;;;;;;write ban hou
  (if(/= nil d01_thick)
    (progn
      (command "-layer" "s" "DIM" "")
      (command "text" (list(+ (car isp1)(* isk1 250)) (+ (cadr isp1)(* isk1 45))) (* isk1 3) "" d01_thick "")
      (command "insert" "gc.dwg"
               (list(+ (car isp1)(* isk1 263)) (+ (cadr isp1)(* isk1 45)(* isk1 1.5)))
               (* isk1 3) "" ""
      )
    )
  )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-4-27 06:57:28 | 显示全部楼层
你说的太专业,有点不明白。看了演示,我的理解,选择图框-〉将图框内的实体依据一定的规则分成多个图,是这样吧。
如果我的理解没错,程序结构可以这样

1 点选图框-〉取出图框的对角点坐标

2 用 ssget 的 “cp”或 wp 选项选择图框内的pline线(前提这个拆分用的线要在特定的层)

3 遍历选择集,对选到的线求出顶点,利用顶点然后 ssget 的 f 选项选择 线框 内的实体
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-27 12:54:56 | 显示全部楼层
我的要求太专业,你的程序太复杂。。。
以下图片,只需求得0层的对角坐标及D06A层的对角坐标,(图内的物体是"LWPOLYLINE")这段程序该怎么写?
(前提我只需点选图框后让程序自动找出这2个图层的坐标。)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-4-27 13:16:43 | 显示全部楼层
最初由 啵浪鼓 发布
[B]我的要求太专业,你的程序太复杂。。。
以下图片,只需求得0层的对角坐标及D06A层的对角坐标,(图内的物体是"LWPOLYLINE")这段程序该怎么写?
(前提我只需点选图框后让程序自动找出这2个图层的坐标。) [/B]

说说你用的CAD版本,2000以上写起来要简单
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-27 13:19:19 | 显示全部楼层
2006版本的,或者2002公司用的版本,提供一个dwg文档。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-4-27 18:06:08 | 显示全部楼层

  1. ;; 一个参考   eachy [[url]www.xdcad.net[/url]] 2005.04.27
  2. ;; 图框属性处理用 ActiveX 将变得非常方便,比如获取图框的属性实体表
  3. ;; (vlax-invoke tk-object 'getattributes) 就可以获取属性实体列表,
  4. ;; 属性的顺序和图块定义的属性顺序是一致的。
  5. ;; vlax-invoke 是早期版本提供的函数,直接获取 Object 而不用转换。尽管 Help 中
  6. ;; 说明未来版本将不在支持,但直到2006版本还是可以使用的(新的函数为 vlax-invoke-method)
  7. ;; 自己定义的块可以知道需要修改属性的位置,这样直接使用 nth 取出属性实体来修改字串。
  8. ;; 写程序要思路清晰,代码简洁高效,尤其是在非常强的针对性应用中。
  9. (vl-load-com)
  10. (defun c:tt (/ e bp up obj oldos s1 s2 e1 e2 bp1 up1 bp2 up2)
  11.   (if (setq e (entsel "\nPick TK: "))
  12.     (progn
  13.       (setq oldos (getvar "osmode"))
  14.       (setvar "osmode" 0)
  15.       (setvar "cmdecho" 0)
  16.       (setq obj (vlax-ename->vla-object (car e)))
  17.       (vla-getboundingbox obj 'bp 'up);_ 求对角点
  18.       (setq bp (safearray-value bp);_ 转换
  19.             up (safearray-value up);_ 转换
  20.       );_注意UCS
  21.       (setq midp (polar bp (angle bp up) (/ (distance bp up) 2))) ;_图框中心
  22.       ;;测试 Box 是否在屏幕内,不在则缩放并记录最后恢复
  23.       (command ".zoom" "o" e "") ;_ 2005以上功能, 缩放实体至适合屏幕
  24.       ;;(command ".zoom" "w" bp up);_ 2002
  25.       (setq s1 (ssget "w" bp up '((0 . "*polyline") (8 . "0")))
  26.             s2 (ssget "w" bp up '((0 . "*polyline") (8 . "D06A")))
  27.       );_ 利用图框选择需要实体,要保证图层实体唯一,否则不好自动处理
  28.       (if s1
  29.         (progn
  30.           (setq        e1 (ssname s1 0)
  31.                 e2 (ssname s2 0)
  32.           ) ;_取出单独的实体
  33.           ;;
  34.           (vla-getboundingbox
  35.             (vlax-ename->vla-object e1)
  36.             'bp1
  37.             'up1
  38.           );_ 实体的对角点
  39.           (vla-getboundingbox
  40.             (vlax-ename->vla-object e2)
  41.             'bp2
  42.             'up2
  43.           );_ 实体的对角点
  44.           ;|
  45.            如果使用Lisp 方法,可以写成子函数,求 pline 的顶点表、求点集的Box,
  46.            这两个函数在论坛都可以找到现成的。
  47.            (setq el (entget e1))
  48.            (while el
  49.                 (if (= (caar el) 10)
  50.                   (setq ptl (cons (list (cdar el)) ptl))
  51.                 )
  52.                 (setq el (cdr el))
  53.            );_ 取出 顶点表 ,适用于 有 10 组码的 pline 实体
  54.            取点集的Box对角点
  55.            (setq bp1 (list (apply 'min (mapcar 'car ptl))
  56.                            (apply 'min (mapcar 'cadr ptl))
  57.                            0.
  58.                            )
  59.                  up1  (list (apply 'max (mapcar 'car ptl))
  60.                             (apply 'max (mapcar 'cadr ptl))
  61.                             0.
  62.                             )
  63.            )
  64.           ;|
  65.           (vla-addline
  66.             (vla-get-modelspace
  67.               (vla-get-activedocument (vlax-get-acad-object))
  68.             )
  69.             bp1
  70.             up1
  71.           )|;
  72.           ;; 进行后面的处理,还是利用对角点和过滤来选择....
  73.         )
  74.       )
  75.     )
  76.   )
  77.   (princ)
  78. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-27 23:29:55 | 显示全部楼层
斑竹,可能我的资历太差,无法依你的程序得到对角点,只能得出图框的对角点

我发现依图框来找出内在物体的对角点,此方法不可行,比如0层里有许多的聚合线在一起,那程序就不能分辨出来哪个才是我要得到的外形。比如一个“回”形,我要怎样得出外“口”的对角点而乎略内“口”,上面的程序好像只是针对于图框内要找的图层内仅单个聚合体所作。。。

eachy斑竹,能不能帮我写一段如何用(ssget)由用户自已选中聚合线再让程序分辨对角点的坐标位置。(我的程序是用getpoint找出对角点,这样太麻烦)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-4-27 23:58:39 | 显示全部楼层
图框的有了,仿照这个再次点选实体就可以求出实体对角点呀
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-28 00:17:11 | 显示全部楼层
VLISP的程序看不懂,略懂LISP。。。
(setq obj (vlax-ename->vla-object (car e)))
      (vla-getboundingbox obj 'bp 'up);_ 求对角点
      (setq bp (safearray-value bp);_ 转换
            up (safearray-value up);_ 转换
      );_
上面这段程序能否用LISP写出来,麻烦eachy斑竹了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-4-28 01:01:09 | 显示全部楼层
图框的对角点可以使用图块名和插入点求得,后面关于Pline线的Box点程序中都说明了呀
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-30 22:55:30 | 显示全部楼层
最初由 eachy 发布
[B]图框的对角点可以使用图块名和插入点求得,后面关于Pline线的Box点程序中都说明了呀
      (if s1
        (progn
          (setq        e1 (ssname s1 0)
                e2 (ssname s2 0)
          ) ;_取出单独的实体
          ;;
          (vla-getboundingbox
            (vlax-ename->vla-object e1)
            'bp1
            'up1
          );_ 实体的对角点
          (vla-getboundingbox
            (vlax-ename->vla-object e2)
            'bp2
            'up2
          );_ 实体的对角点
[/B]


此结果得出nil

我试写了这样的程序,目前无法分辨出来如果是同一图层的2个*pline线在一起,如何让程序放弃里面的小*pline物体只定义外面的*pline物体

(defun c:tt (/ e bp up obj oldos s1 s2 e1 e2 bp1 up1 bp2 up2)
  (if (setq s (ssget '((0 . "*polyline"))))
    (progn
      (setq d1 (ssadd) d2 (ssadd) i 0)
      (while (< i (sslength s))
        (if (= "D01A" (cdr(assoc 8 (entget (ssname s i)))))
          (ssadd (ssname s i) d1)
        )
        (if (= "D02A" (cdr(assoc 8 (entget (ssname s i)))))
          (ssadd (ssname s i) d2)
        )
        (setq i (+ i 1))
      )
      (setq i 0)   
      (while (< i (sslength d1))
        (setq d11 (ssname d1 i))
        (setq d111 (vlax-ename->vla-object d11))
        (vla-getboundingbox d111 'd01c1 'd01c2);_ 求对角点
        (setq d01c1 (safearray-value d01c1);_ 转换
              d01c2 (safearray-value d01c2);_ 转换
        )
        (setq i (+ i 1))
        (setq midp (polar d01c1 (angle d01c1 d01c2) (/ (distance d01c1 d01c2) 2))) ;实物中心
        (setq d01c1-x (nth 0 d01c1))
        (setq d01c1-y (nth 1 d01c1))
        (setq d01c2-x (nth 0 d01c2))
        (setq d01c2-y (nth 1 d01c2))
        (princ (strcat "d01c1: "(rtos d01c1-x)"," (rtos d01c1-y)"  d01c2: "(rtos d01c2-x)"," (rtos d01c2-y)" "))
      )
      (setq i 0)
      (while (< i (sslength d2))
        (setq d22 (ssname d2 i))
        (setq d222 (vlax-ename->vla-object d22))
        (vla-getboundingbox d222 'd02c1 'd02c2);_ 求对角点
        (setq d02c1 (safearray-value d02c1);_ 转换
              d02c2 (safearray-value d02c2);_ 转换
        )
        (setq i (+ i 1))
        (setq midp (polar d02c1 (angle d02c1 d02c2) (/ (distance d02c1 d02c2) 2))) ;实物中心
        (setq d02c1-x (nth 0 d02c1))
        (setq d02c1-y (nth 1 d02c1))
        (setq d02c2-x (nth 0 d02c2))
        (setq d02c2-y (nth 1 d02c2))
        (princ (strcat "d02c1: "(rtos d02c1-x)"," (rtos d02c1-y)"  d02c2: "(rtos d02c2-x)"," (rtos d02c2-y)" "))
      )
    )
  )
(princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-28 04:00 , Processed in 0.214747 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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