乐筑天下

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

[求助]问题多多啊!!!

[复制链接]

2

主题

9

帖子

1

银币

初来乍到

Rank: 1

铜币
17
发表于 2004-2-29 19:55:00 | 显示全部楼层 |阅读模式
我的一个程序,原意是点击一个图框然后图框里的各种比例都相应于图框比例变化(图框的外框用封闭的polyline绘制,然后再作成块,需要时只是scale一下,通过函数可以获得放大比例)。但是我发现用endmake建立dimstyle时,不能建立标注文字样式和箭头样式,总是用standard文字样式代替,不知道怎么解决!!所以写不下去了。 下面是我的code,请帮助!可以试用
;点图框修改图框内的各种比例
;(a3图框按1:1画出,并且内框用闭和pl画出,然后做成块)
;以便取出四个角点
(Defun c:#ss ()
         ;------sub function:列出符号"block"的表.----------------
         (defun block_list (elist)
                         (setq dict_block_name (cdr(assoc 2 elist))
                                                                         dict_block_list (tblsearch "block" dict_block_name)
                 dict_block_xobject(cdr (assoc -2 dict_block_list))
                 block_xlist '()
                 )
                         (while (setq block_xlist (cons (entget dict_block_xobject) block_xlist)
                                                                                                                                 dict_block_xobject (entnext dict_block_xobject)
                 )
                                         )
                         )
         ;-----sub function:修改标注比例--------
         (defun dim_style (c_scale)
                         (setq dim_sj         '((0 . "DIMSTYLE")                 (100 . "AcDbSymbolTableRecord")
                                         (100 . "AcDbDimStyleTableRecord")
                                                                                                                                                         (2 . "$1") (70 . 0)(40 . 1.0) (41 . 1.5)
                                         (42 . 1.0) (43 . 1.0) (44 . 1.0) (73 . 0)
                                         (74 . 0) (77 . 1)(78 . 8) (140 . 2.5) (141 . 0.0)
                                         (147 . 1.0) (176 . 1) (177 . 1) (178 . 2)
                                         (271 . 1) (272 . 1)         (279 . 2) (284 . 8))
        )
                 (entmake dim_sj)
                         (if (>= (- c_scale (fix c_scale)) 0.5)
                                                 (setq c_sc(itoa (1+ (fix c_scale))))         
                                         (setq c_sc (itoa (fix c_scale)))
                                         )
                         (setq dim_sj (subst (cons 2 (strcat "$" c_sc)) (assoc 2 dim_sj) dim_sj))
                         (setq dim_sj (subst (cons 40         (read c_sc)) (assoc 40 dim_sj) dim_sj))
                         (entmake dim_sj)                       
                         (command "-dimstyle" "r" (strcat "$" c_sc))                         ;上边也有问题:建立了新标注        后不                                         能让它成为当前注
                         ;必须要用上面那句话来让它成为当前标注
                         (command "-dimstyle" "a" "wp" p0 p1 p2 p3 "" "")                                                                                                                                         
                         )                                         
         ;----------main function----------------------------------
         (while(not(setq entname(car (entsel ":请选择图框:"))))
                         (princ "\n图框不是块!从新选择.")
                         )
         (setq entlist (entget entname '("*"))
        )
         (setq c_scale (cdr (assoc 41 entlist))                                                                                                         
        c_to_ucs (trans (cdr (assoc 10 entlist) ) 0 1)
        )
         (block_list entlist)
         (setq block_xlist (reverse block_xlist))
         (type (car block_xlist))
         (setq len_th (length block_xlist)
                list1 '()
        )
         (repeat len_th
                                 (if(and
                                                                 (vl-position '(0 . "LWPOLYLINE") (nth 0 block_xlist))
                                                                 (vl-position '(70 . 1) (nth 0 block_xlist))
                                         )
                                                                 (setq list1 (cons (nth 0 block_xlist) list1 )
                                                         block_xlist (vl-remove (nth 0 block_xlist) block_xlist))
         (setq block_xlist (vl-remove (nth 0 block_xlist) block_xlist))
        )
                         )
         (setq list1 (car list1)
                                                         counter 0
        p_list '()
        )
         (while (setq bb (nth counter list1))
                                                                                 (if (= (car bb) 10)
                                                                                                 (setq point (nth counter list1)
                                                                                                                                                 p_list (cons point p_list)
                                                                                                                                                 counter (1+ counter)
                                                         )
                                                                                                         (setq counter (1+ counter))
                                 )
                         )
         ;;;-很奇怪,如果放大插入块,reference-block 的数据结构中符号表中的数据(lwploylien的连接点点位居然不变,
         ;;;只好把ocs的点坐标乘以当前块的比例系数(c_scale)再加上ucs下的插入点坐标(经trans函数处理),以得到图的
         ;;;四个角点.
         (setq dp(cdr(nth 0 p_list))
                                                         p0 (mapcar '+ (mapcar '* (list c_scale c_scale c_scale)
                                                                                         (reverse(cons '0.0 (reverse dp)))) c_to_ucs))
         (setq dp(cdr(nth 1 p_list))
                                                                 p1 (mapcar '+ (mapcar '* (list c_scale c_scale c_scale)
                                         (reverse(cons '0.0 (reverse dp)))) c_to_ucs))
         (setq dp(cdr(nth 2 p_list))
                                                                 p2 (mapcar '+ (mapcar '* (list c_scale c_scale c_scale)
                                         (reverse(cons '0.0 (reverse dp)))) c_to_ucs))
         (setq dp(cdr(nth 3 p_list))
                                                                 p3 (mapcar '+ (mapcar '* (list c_scale c_scale c_scale)
                                         (reverse(cons '0.0 (reverse dp)))) c_to_ucs))
         (setq p_l(list p0 p1 p2 p3))
         (setq ss_get (ssget "wp" p_l))
         (dim_style c_scale)
         )
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2004-3-1 18:51:00 | 显示全部楼层
给个图先!
回复

使用道具 举报

2

主题

9

帖子

1

银币

初来乍到

Rank: 1

铜币
17
发表于 2004-3-1 19:05:00 | 显示全部楼层

到底怎么用endmake建立dimstyle 中的文字样式?请斑竹详细说一下,谢谢!
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2004-3-1 20:19:00 | 显示全部楼层
给个图一供调试,不一定能建一个跟你要求相同的图框,除非把整个程序看明白了,不过这样就太费劲了,有个图调试,再来看问题,就简单很多
回复

使用道具 举报

2

主题

9

帖子

1

银币

初来乍到

Rank: 1

铜币
17
发表于 2004-3-1 23:13:00 | 显示全部楼层

哦,好的。看附件。用了再说问题。本来还再原程序中加了一段显示四个角点点位的listbox,并且在四点连线以确定是否放缩后依然能找到角点,这个时候就出现了我在最开始说的问题(符号block中,pl的四个连接点点位部随缩放更新,必须要乘以块的比例(x.y.z比例一致),后来想想这个数据结构石对的,应该不变,是一个基本值。 然后就出了第二个问题,如何建立dimstyle中的文字样式和箭头样式(分别以330.340为组码),所以请帮忙!
好象不能上传!实在不行,请斑竹简单的用pl画一个框然后作成块,然后缩放图框,并且再图框中放一些标注,再运行命令,就可以了!
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2004-3-2 09:23:00 | 显示全部楼层
1、你说不能用entmake建立dimstyle,可在程序中你已经做到了
2、看看帮助文件的介绍:
(只读)
类型:字符串
保存位置:图形
DIMSTYLE 既是命令又是系统变量。作为系统变量,DIMSTYLE 将显示当前标注样式。要显示 DIMSTYLE 系统变量,请使用
SETVAR 命令。DIMSTYLE 系统变量类型是只读的,不能在命令行修改它的值。要改变当前标注样式,请使用 DIMSTYLE 命令。
3、无论你怎样放大及缩小块,其实改变的是INSERT对象,而并没有对BLOCK对象做任何修改,所以其内部一些东西当然就没有改变了
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-8-14 08:28 , Processed in 0.367032 second(s), 64 queries .

© 2020-2025 乐筑天下

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